Loading mysql-test/r/insert_select.result +8 −0 Original line number Diff line number Diff line Loading @@ -678,3 +678,11 @@ f1 2001 2002 drop table t1; create table t1(x int, y int); create table t2(x int, z int); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z); ERROR 42S22: Unknown column 'z' in 'field list' insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x); ERROR 42S02: Unknown table 't2' in field list drop table t1,t2; mysql-test/t/insert_select.test +12 −0 Original line number Diff line number Diff line Loading @@ -214,4 +214,16 @@ insert into t1(f1) select if(max(f1) is null, '2000',max(f1)+1) from t1; select * from t1; drop table t1; # # Bug #13392 values() fails with 'ambiguous' or returns NULL # with ON DUPLICATE and SELECT create table t1(x int, y int); create table t2(x int, z int); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x); --error 1054 insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z); --error 1109 insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x); drop table t1,t2; # End of 4.1 tests sql/item.cc +7 −0 Original line number Diff line number Diff line Loading @@ -2796,8 +2796,14 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items) { DBUG_ASSERT(fixed == 0); st_table_list *orig_next_table= table_list->next; table_list->next= 0; if (!arg->fixed && arg->fix_fields(thd, table_list, &arg)) { table_list->next= orig_next_table; return 1; } table_list->next= orig_next_table; if (arg->type() == REF_ITEM) { Loading @@ -2809,6 +2815,7 @@ bool Item_insert_value::fix_fields(THD *thd, arg= ref->ref[0]; } Item_field *field_arg= (Item_field *)arg; if (field_arg->field->table->insert_values) { Field *def_field= (Field*) sql_alloc(field_arg->field->size_of()); Loading Loading
mysql-test/r/insert_select.result +8 −0 Original line number Diff line number Diff line Loading @@ -678,3 +678,11 @@ f1 2001 2002 drop table t1; create table t1(x int, y int); create table t2(x int, z int); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z); ERROR 42S22: Unknown column 'z' in 'field list' insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x); ERROR 42S02: Unknown table 't2' in field list drop table t1,t2;
mysql-test/t/insert_select.test +12 −0 Original line number Diff line number Diff line Loading @@ -214,4 +214,16 @@ insert into t1(f1) select if(max(f1) is null, '2000',max(f1)+1) from t1; select * from t1; drop table t1; # # Bug #13392 values() fails with 'ambiguous' or returns NULL # with ON DUPLICATE and SELECT create table t1(x int, y int); create table t2(x int, z int); insert into t1(x,y) select x,z from t2 on duplicate key update x=values(x); --error 1054 insert into t1(x,y) select x,z from t2 on duplicate key update x=values(z); --error 1109 insert into t1(x,y) select x,z from t2 on duplicate key update x=values(t2.x); drop table t1,t2; # End of 4.1 tests
sql/item.cc +7 −0 Original line number Diff line number Diff line Loading @@ -2796,8 +2796,14 @@ bool Item_insert_value::fix_fields(THD *thd, Item **items) { DBUG_ASSERT(fixed == 0); st_table_list *orig_next_table= table_list->next; table_list->next= 0; if (!arg->fixed && arg->fix_fields(thd, table_list, &arg)) { table_list->next= orig_next_table; return 1; } table_list->next= orig_next_table; if (arg->type() == REF_ITEM) { Loading @@ -2809,6 +2815,7 @@ bool Item_insert_value::fix_fields(THD *thd, arg= ref->ref[0]; } Item_field *field_arg= (Item_field *)arg; if (field_arg->field->table->insert_values) { Field *def_field= (Field*) sql_alloc(field_arg->field->size_of()); Loading