summaryrefslogtreecommitdiff
path: root/mysql-test/main/prepare.test
diff options
context:
space:
mode:
authorMichael Widenius <monty@mariadb.org>2018-04-05 13:50:12 +0300
committerMichael Widenius <monty@mariadb.org>2018-04-05 13:55:28 +0300
commit1d7b4c268941ec1facef1b82adbff329c08c464d (patch)
tree3a266523f29a932bba389d3130405f4672c08201 /mysql-test/main/prepare.test
parent30f692f0165ada010a70f96f49f491f5215c1ca5 (diff)
downloadmariadb-git-1d7b4c268941ec1facef1b82adbff329c08c464d.tar.gz
MDEV-15738 Server crashes in my_strcasecmp_utf8 on query from I_S with UNION executed as PS
Problem was the Item_field::Item_field(THD*, Field*) had old code that put a null pointer in orig_field_names. Now, when we have proper re-prepare if table definition changes, this is not needed anymore.
Diffstat (limited to 'mysql-test/main/prepare.test')
-rw-r--r--mysql-test/main/prepare.test42
1 files changed, 42 insertions, 0 deletions
diff --git a/mysql-test/main/prepare.test b/mysql-test/main/prepare.test
new file mode 100644
index 00000000000..eaab376a5a2
--- /dev/null
+++ b/mysql-test/main/prepare.test
@@ -0,0 +1,42 @@
+#
+# MDEV-15738 Server crashes in my_strcasecmp_utf8 on query from I_S with UNION
+# executed as PS
+#
+
+PREPARE stmt1 FROM "
+SELECT table_name FROM information_schema.tables
+WHERE table_name = 't1_first'
+UNION ALL
+SELECT table_name FROM information_schema.tables
+WHERE table_name = 't1_second'";
+execute stmt1;
+execute stmt1;
+
+create or replace table t1 (a int primary key, table_name char(40));
+insert into t1 values(1,"t1_first");
+insert into t1 values(2,"t1_second");
+
+PREPARE stmt2 FROM "
+SELECT table_name FROM t1
+WHERE table_name = 't1_first'
+UNION ALL
+SELECT table_name FROM t1
+WHERE table_name = 't1_second'";
+
+execute stmt2;
+execute stmt2;
+flush tables;
+execute stmt2;
+alter table t1 add column b int;
+execute stmt2;
+execute stmt2;
+drop table t1;
+--error ER_NO_SUCH_TABLE
+execute stmt2;
+create or replace table t1 (a int primary key, table_name char(40));
+insert into t1 values(1,"t1_first");
+execute stmt2;
+
+deallocate prepare stmt1;
+deallocate prepare stmt2;
+drop table t1;