summaryrefslogtreecommitdiff
path: root/mysql-test/t/ps.test
diff options
context:
space:
mode:
authorunknown <dlenev@brandersnatch.localdomain>2005-06-20 16:07:00 +0400
committerunknown <dlenev@brandersnatch.localdomain>2005-06-20 16:07:00 +0400
commit78e6794b63bdacaf260397ee70d098ba7afb85d5 (patch)
tree9663c3b1decfcf7a324d7b1a05ff5a7c1117247a /mysql-test/t/ps.test
parentc7a681ff94d3f39360a53d940398931dd55aad66 (diff)
downloadmariadb-git-78e6794b63bdacaf260397ee70d098ba7afb85d5.tar.gz
Fix for bug #11060 "Server crashes on re-execution of prepared
INSERT ... SELECT with UNION" (reviewed version). Altough bug manifest itself only starting from 5.0 it is better to apply fix to 4.1 to keep some assumptions true and make code more future-proof. mysql-test/r/ps.result: Added test case for bug #11060 "Server crashes on re-execution of prepared INSERT ... SELECT with UNION". mysql-test/t/ps.test: Added test case for bug #11060 "Server crashes on re-execution of prepared INSERT ... SELECT with UNION". sql/sql_insert.cc: select_insert::prepare(): Item::fix_fields() methods operate assuming that LEX::current_select points to the select to which current item belongs. Thus during check_insert_fields() routine execution LEX::current_select should point ot the first select in query since this is the select with which items in insert list is associated. But if we have INSERT SELECT UNION SELECT type of query LEX::current_select will point to the fake_select_lex instead since select_insert::prepare() is called during processing of JOIN which corresponds to this select_lex. So we have set LEX::current_select before calling check_insert_fields() and restore it afterwards.
Diffstat (limited to 'mysql-test/t/ps.test')
-rw-r--r--mysql-test/t/ps.test12
1 files changed, 12 insertions, 0 deletions
diff --git a/mysql-test/t/ps.test b/mysql-test/t/ps.test
index 96b83a09497..bb1052c7337 100644
--- a/mysql-test/t/ps.test
+++ b/mysql-test/t/ps.test
@@ -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;