Loading mysql-test/r/sp-prelocking.result +18 −0 Original line number Diff line number Diff line Loading @@ -237,3 +237,21 @@ deallocate prepare stmt; drop table t1; drop view v1, v2, v3; drop function bug15683; drop table if exists t1, t2, t3; drop function if exists bug19634; create table t1 (id int, data int); create table t2 (id int); create table t3 (data int); create function bug19634() returns int return (select count(*) from t3); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()"; execute stmt; execute stmt; deallocate prepare stmt; create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id"; execute stmt; execute stmt; deallocate prepare stmt; drop function bug19634; drop table t1, t2, t3; End of 5.0 tests mysql-test/r/sp.result +21 −0 Original line number Diff line number Diff line Loading @@ -4990,4 +4990,25 @@ CALL bug18037_p2()| DROP FUNCTION bug18037_f1| DROP PROCEDURE bug18037_p1| DROP PROCEDURE bug18037_p2| drop table if exists t3| drop procedure if exists bug15217| create table t3 as select 1| create procedure bug15217() begin declare var1 char(255); declare cur1 cursor for select * from t3; open cur1; fetch cur1 into var1; select concat('data was: /', var1, '/'); close cur1; end | call bug15217()| concat('data was: /', var1, '/') data was: /1/ flush tables | call bug15217()| concat('data was: /', var1, '/') data was: /1/ drop table t3| drop procedure bug15217| drop table t1,t2; mysql-test/t/sp-prelocking.test +31 −0 Original line number Diff line number Diff line Loading @@ -272,3 +272,34 @@ drop table t1; drop view v1, v2, v3; drop function bug15683; # # Bug#19634 "Re-execution of multi-delete which involve trigger/stored # function crashes server" # --disable_warnings drop table if exists t1, t2, t3; drop function if exists bug19634; --enable_warnings create table t1 (id int, data int); create table t2 (id int); create table t3 (data int); create function bug19634() returns int return (select count(*) from t3); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()"; # This should not crash server execute stmt; execute stmt; deallocate prepare stmt; create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id"; execute stmt; execute stmt; deallocate prepare stmt; drop function bug19634; drop table t1, t2, t3; --echo End of 5.0 tests mysql-test/t/sp.test +27 −0 Original line number Diff line number Diff line Loading @@ -5888,6 +5888,33 @@ DROP FUNCTION bug18037_f1| DROP PROCEDURE bug18037_p1| DROP PROCEDURE bug18037_p2| # # Bug#15217 "Using a SP cursor on a table created with PREPARE fails with # weird error". Check that the code that is supposed to work at # the first execution of a stored procedure actually works for # sp_instr_copen. --disable_warnings drop table if exists t3| drop procedure if exists bug15217| --enable_warnings create table t3 as select 1| create procedure bug15217() begin declare var1 char(255); declare cur1 cursor for select * from t3; open cur1; fetch cur1 into var1; select concat('data was: /', var1, '/'); close cur1; end | # Returns expected result call bug15217()| flush tables | # Returns error with garbage as column name call bug15217()| drop table t3| drop procedure bug15217| # # BUG#NNNN: New bug synopsis Loading sql/sp_head.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1075,7 +1075,6 @@ sp_head::execute(THD *thd) thd->net.no_send_error= 0; if (i->free_list) cleanup_items(i->free_list); i->state= Query_arena::EXECUTED; /* If we've set thd->user_var_events_alloc to mem_root of this SP Loading Loading @@ -2210,6 +2209,9 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, m_lex->mark_as_requiring_prelocking(NULL); } thd->rollback_item_tree_changes(); /* Update the state of the active arena. */ thd->stmt_arena->state= Query_arena::EXECUTED; /* Unlike for PS we should not call Item's destructors for newly created Loading Loading
mysql-test/r/sp-prelocking.result +18 −0 Original line number Diff line number Diff line Loading @@ -237,3 +237,21 @@ deallocate prepare stmt; drop table t1; drop view v1, v2, v3; drop function bug15683; drop table if exists t1, t2, t3; drop function if exists bug19634; create table t1 (id int, data int); create table t2 (id int); create table t3 (data int); create function bug19634() returns int return (select count(*) from t3); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()"; execute stmt; execute stmt; deallocate prepare stmt; create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id"; execute stmt; execute stmt; deallocate prepare stmt; drop function bug19634; drop table t1, t2, t3; End of 5.0 tests
mysql-test/r/sp.result +21 −0 Original line number Diff line number Diff line Loading @@ -4990,4 +4990,25 @@ CALL bug18037_p2()| DROP FUNCTION bug18037_f1| DROP PROCEDURE bug18037_p1| DROP PROCEDURE bug18037_p2| drop table if exists t3| drop procedure if exists bug15217| create table t3 as select 1| create procedure bug15217() begin declare var1 char(255); declare cur1 cursor for select * from t3; open cur1; fetch cur1 into var1; select concat('data was: /', var1, '/'); close cur1; end | call bug15217()| concat('data was: /', var1, '/') data was: /1/ flush tables | call bug15217()| concat('data was: /', var1, '/') data was: /1/ drop table t3| drop procedure bug15217| drop table t1,t2;
mysql-test/t/sp-prelocking.test +31 −0 Original line number Diff line number Diff line Loading @@ -272,3 +272,34 @@ drop table t1; drop view v1, v2, v3; drop function bug15683; # # Bug#19634 "Re-execution of multi-delete which involve trigger/stored # function crashes server" # --disable_warnings drop table if exists t1, t2, t3; drop function if exists bug19634; --enable_warnings create table t1 (id int, data int); create table t2 (id int); create table t3 (data int); create function bug19634() returns int return (select count(*) from t3); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id and bug19634()"; # This should not crash server execute stmt; execute stmt; deallocate prepare stmt; create trigger t1_bi before delete on t1 for each row insert into t3 values (old.data); prepare stmt from "delete t1 from t1, t2 where t1.id = t2.id"; execute stmt; execute stmt; deallocate prepare stmt; drop function bug19634; drop table t1, t2, t3; --echo End of 5.0 tests
mysql-test/t/sp.test +27 −0 Original line number Diff line number Diff line Loading @@ -5888,6 +5888,33 @@ DROP FUNCTION bug18037_f1| DROP PROCEDURE bug18037_p1| DROP PROCEDURE bug18037_p2| # # Bug#15217 "Using a SP cursor on a table created with PREPARE fails with # weird error". Check that the code that is supposed to work at # the first execution of a stored procedure actually works for # sp_instr_copen. --disable_warnings drop table if exists t3| drop procedure if exists bug15217| --enable_warnings create table t3 as select 1| create procedure bug15217() begin declare var1 char(255); declare cur1 cursor for select * from t3; open cur1; fetch cur1 into var1; select concat('data was: /', var1, '/'); close cur1; end | # Returns expected result call bug15217()| flush tables | # Returns error with garbage as column name call bug15217()| drop table t3| drop procedure bug15217| # # BUG#NNNN: New bug synopsis Loading
sql/sp_head.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1075,7 +1075,6 @@ sp_head::execute(THD *thd) thd->net.no_send_error= 0; if (i->free_list) cleanup_items(i->free_list); i->state= Query_arena::EXECUTED; /* If we've set thd->user_var_events_alloc to mem_root of this SP Loading Loading @@ -2210,6 +2209,9 @@ sp_lex_keeper::reset_lex_and_exec_core(THD *thd, uint *nextp, m_lex->mark_as_requiring_prelocking(NULL); } thd->rollback_item_tree_changes(); /* Update the state of the active arena. */ thd->stmt_arena->state= Query_arena::EXECUTED; /* Unlike for PS we should not call Item's destructors for newly created Loading