diff --git a/mysql-test/r/sp-bugs2.result b/mysql-test/r/sp-bugs2.result new file mode 100644 index 00000000000..3e48f0fb5d2 --- /dev/null +++ b/mysql-test/r/sp-bugs2.result @@ -0,0 +1,23 @@ +CREATE TABLE t1 (i INT); +SET @a = 2; +CREATE TABLE IF NOT EXISTS t2 (i INT) ENGINE = MyISAM +AS SELECT * FROM t1; +CREATE TABLE IF NOT EXISTS t2 (i INT) ENGINE = MyISAM +AS SELECT * FROM t1; +Warnings: +Note 1050 Table 't2' already exists +DROP TABLE t2; +CREATE PROCEDURE sp() +BEGIN +REPEAT +CREATE TABLE IF NOT EXISTS t2 (i INT) ENGINE = MyISAM +AS SELECT * FROM t1; +SET @a = @a - 1; +UNTIL @a = 0 +END REPEAT ; +END | +CALL sp(); +Warnings: +Note 1050 Table 't2' already exists +DROP PROCEDURE sp; +DROP TABLE t1, t2; diff --git a/mysql-test/t/sp-bugs2.test b/mysql-test/t/sp-bugs2.test new file mode 100644 index 00000000000..2579e3485c6 --- /dev/null +++ b/mysql-test/t/sp-bugs2.test @@ -0,0 +1,29 @@ +# +# MDEV-6610 Assertion `thd->is_error() || thd->killed' failed in mysql_execute_command on executing an SP with repeated CREATE TABLE .. SELECT +# +CREATE TABLE t1 (i INT); +SET @a = 2; + +CREATE TABLE IF NOT EXISTS t2 (i INT) ENGINE = MyISAM + AS SELECT * FROM t1; +CREATE TABLE IF NOT EXISTS t2 (i INT) ENGINE = MyISAM + AS SELECT * FROM t1; +DROP TABLE t2; + +--delimiter | +CREATE PROCEDURE sp() +BEGIN +REPEAT + CREATE TABLE IF NOT EXISTS t2 (i INT) ENGINE = MyISAM + AS SELECT * FROM t1; + SET @a = @a - 1; +UNTIL @a = 0 +END REPEAT ; +END | +--delimiter ; + +CALL sp(); + +DROP PROCEDURE sp; +DROP TABLE t1, t2; + diff --git a/sql/sp_head.cc b/sql/sp_head.cc index 366679a2fb0..11dccfe9ffe 100644 --- a/sql/sp_head.cc +++ b/sql/sp_head.cc @@ -3144,7 +3144,10 @@ sp_instr_stmt::execute(THD *thd, uint *nextp) thd->query_name_consts= 0; if (!thd->is_error()) + { + res= 0; thd->get_stmt_da()->reset_diagnostics_area(); + } } DBUG_RETURN(res || thd->is_error()); }