Loading mysql-test/r/ps.result +6 −0 Original line number Diff line number Diff line Loading @@ -557,3 +557,9 @@ id 3 deallocate prepare stmt; drop table t1, t2; create table t1 (id int); prepare stmt from "insert into t1 (id) select id from t1 union select id from t1"; execute stmt; execute stmt; deallocate prepare stmt; drop table t1; mysql-test/t/ps.test +12 −0 Original line number Diff line number Diff line Loading @@ -569,3 +569,15 @@ select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id); deallocate prepare stmt; drop table t1, t2; # # Bug#11060 "Server crashes on calling stored procedure with INSERT SELECT # UNION SELECT" aka "Server crashes on re-execution of prepared INSERT ... # SELECT with UNION". # create table t1 (id int); prepare stmt from "insert into t1 (id) select id from t1 union select id from t1"; execute stmt; execute stmt; deallocate prepare stmt; drop table t1; sql/sql_insert.cc +12 −1 Original line number Diff line number Diff line Loading @@ -1578,10 +1578,21 @@ bool delayed_insert::handle_inserts(void) int select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u) { int res; LEX *lex= thd->lex; SELECT_LEX *lex_current_select_save= lex->current_select; DBUG_ENTER("select_insert::prepare"); unit= u; if (check_insert_fields(thd, table, *fields, values)) /* Since table in which we are going to insert is added to the first select, LEX::current_select should point to the first select while we are fixing fields from insert list. */ lex->current_select= &lex->select_lex; res= check_insert_fields(thd, table, *fields, values); lex->current_select= lex_current_select_save; if (res) DBUG_RETURN(1); restore_record(table,default_values); // Get empty record Loading Loading
mysql-test/r/ps.result +6 −0 Original line number Diff line number Diff line Loading @@ -557,3 +557,9 @@ id 3 deallocate prepare stmt; drop table t1, t2; create table t1 (id int); prepare stmt from "insert into t1 (id) select id from t1 union select id from t1"; execute stmt; execute stmt; deallocate prepare stmt; drop table t1;
mysql-test/t/ps.test +12 −0 Original line number Diff line number Diff line Loading @@ -569,3 +569,15 @@ select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id); deallocate prepare stmt; drop table t1, t2; # # Bug#11060 "Server crashes on calling stored procedure with INSERT SELECT # UNION SELECT" aka "Server crashes on re-execution of prepared INSERT ... # SELECT with UNION". # create table t1 (id int); prepare stmt from "insert into t1 (id) select id from t1 union select id from t1"; execute stmt; execute stmt; deallocate prepare stmt; drop table t1;
sql/sql_insert.cc +12 −1 Original line number Diff line number Diff line Loading @@ -1578,10 +1578,21 @@ bool delayed_insert::handle_inserts(void) int select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u) { int res; LEX *lex= thd->lex; SELECT_LEX *lex_current_select_save= lex->current_select; DBUG_ENTER("select_insert::prepare"); unit= u; if (check_insert_fields(thd, table, *fields, values)) /* Since table in which we are going to insert is added to the first select, LEX::current_select should point to the first select while we are fixing fields from insert list. */ lex->current_select= &lex->select_lex; res= check_insert_fields(thd, table, *fields, values); lex->current_select= lex_current_select_save; if (res) DBUG_RETURN(1); restore_record(table,default_values); // Get empty record Loading