Skip to content

Commit

Permalink
MDEV-15318 CREATE .. SELECT VALUES produces invalid table structure
Browse files Browse the repository at this point in the history
When Item_insert_value needs a dummy field,
use zero-length Field_string, not Field_null.
The latter isn't compatible with CREATE ... SELECT.
  • Loading branch information
vuvova committed May 17, 2018
1 parent aa2e1ad commit 1b2078b
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 4 deletions.
9 changes: 9 additions & 0 deletions mysql-test/r/insert_select.result
Original file line number Diff line number Diff line change
Expand Up @@ -853,3 +853,12 @@ INSERT IGNORE INTO t1 SELECT t1.a FROM t1,t1 t2,t1 t3,t1 t4,t1 t5,t1 t6,t1 t7;
SET GLOBAL myisam_data_pointer_size = @old_myisam_data_pointer_size;
DROP TABLE t1;
End of 5.1 tests
create table t1 (i int);
create table t2 as select values(i) as a from t1;
show create table t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` binary(0) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1, t2;
End of 5.5 tests
10 changes: 10 additions & 0 deletions mysql-test/t/insert_select.test
Original file line number Diff line number Diff line change
Expand Up @@ -423,3 +423,13 @@ SET GLOBAL myisam_data_pointer_size = @old_myisam_data_pointer_size;
DROP TABLE t1;

--echo End of 5.1 tests

#
# MDEV-15318 CREATE .. SELECT VALUES produces invalid table structure
#
create table t1 (i int);
create table t2 as select values(i) as a from t1;
show create table t2;
drop table t1, t2;

--echo End of 5.5 tests
8 changes: 4 additions & 4 deletions sql/item.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8541,10 +8541,10 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items)
}
else
{
Field *tmp_field= field_arg->field;
/* charset doesn't matter here, it's to avoid sigsegv only */
tmp_field= new Field_null(0, 0, Field::NONE, field_arg->field->field_name,
&my_charset_bin);
static uchar null_bit=1;
/* charset doesn't matter here */
Field *tmp_field= new Field_string(0, 0, &null_bit, 1, Field::NONE,
field_arg->field->field_name, &my_charset_bin);
if (tmp_field)
{
tmp_field->init(field_arg->field->table);
Expand Down

0 comments on commit 1b2078b

Please sign in to comment.