mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 13:32:33 +01:00
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/dlenev/src/mysql-4.1-bg11060
This commit is contained in:
commit
b5b3b32d0a
3 changed files with 30 additions and 1 deletions
|
@ -557,3 +557,9 @@ id
|
||||||
3
|
3
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1, t2;
|
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;
|
||||||
|
|
|
@ -569,3 +569,15 @@ select t2.id from t2, t1 where (t1.id=1 and t2.t1_id=t1.id);
|
||||||
|
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1, t2;
|
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;
|
||||||
|
|
|
@ -1578,10 +1578,21 @@ bool delayed_insert::handle_inserts(void)
|
||||||
int
|
int
|
||||||
select_insert::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
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");
|
DBUG_ENTER("select_insert::prepare");
|
||||||
|
|
||||||
unit= u;
|
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);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
restore_record(table,default_values); // Get empty record
|
restore_record(table,default_values); // Get empty record
|
||||||
|
|
Loading…
Reference in a new issue