summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Botchkov <holyfoot@mysql.com>2008-09-30 10:41:30 +0500
committerAlexey Botchkov <holyfoot@mysql.com>2008-09-30 10:41:30 +0500
commitb8734a1ce2d835729ffaf0058aaf75275c88aaca (patch)
tree8a16772a4457293b0a451ce254d10697da8c8b7d
parent1e26e74c2a7192e4b8c94210b1e9829f7e53b2f1 (diff)
parentce64a16b75746848c8d5a89cfb726a38691c9d6f (diff)
downloadmariadb-git-b8734a1ce2d835729ffaf0058aaf75275c88aaca.tar.gz
merging
-rw-r--r--mysql-test/r/sp-error.result7
-rw-r--r--mysql-test/t/sp-error.test8
-rw-r--r--sql/sp_head.cc6
3 files changed, 20 insertions, 1 deletions
diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result
index cc383d003e9..2f8f71077a6 100644
--- a/mysql-test/r/sp-error.result
+++ b/mysql-test/r/sp-error.result
@@ -1628,6 +1628,13 @@ end loop label1;
end loop;
end|
ERROR 42000: End-label label1 without match
+CREATE TABLE t1 (a INT)|
+INSERT INTO t1 VALUES (1),(2)|
+CREATE PROCEDURE p1(a INT) BEGIN END|
+CALL p1((SELECT * FROM t1))|
+ERROR 21000: Subquery returns more than 1 row
+DROP PROCEDURE IF EXISTS p1|
+DROP TABLE t1|
drop procedure if exists p1;
create procedure p1()
begin
diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test
index 1e329f7fe79..5437f3a156f 100644
--- a/mysql-test/t/sp-error.test
+++ b/mysql-test/t/sp-error.test
@@ -2362,6 +2362,14 @@ begin
end loop;
end|
+CREATE TABLE t1 (a INT)|
+INSERT INTO t1 VALUES (1),(2)|
+CREATE PROCEDURE p1(a INT) BEGIN END|
+--error ER_SUBQUERY_NO_1_ROW
+CALL p1((SELECT * FROM t1))|
+DROP PROCEDURE IF EXISTS p1|
+DROP TABLE t1|
+
delimiter ;|
#
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index d1f920fd3a5..cf6610dfa11 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -1940,7 +1940,11 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
we'll leave it here.
*/
if (!thd->in_sub_stmt)
- close_thread_tables(thd);
+ {
+ thd->lex->unit.cleanup();
+ close_thread_tables(thd);
+ thd->rollback_item_tree_changes();
+ }
DBUG_PRINT("info",(" %.*s: eval args done",
(int) m_name.length, m_name.str));