drop table if exists t1, t2; drop procedure if exists bug8850| create table t1 (a int) engine=innodb| create procedure bug8850() begin truncate table t1; insert t1 values (1); rollback; end| set autocommit=0| insert t1 values (2)| call bug8850()| commit| select * from t1| a call bug8850()| set autocommit=1| select * from t1| a drop table t1| drop procedure bug8850| drop function if exists bug10015_1| drop function if exists bug10015_2| drop function if exists bug10015_3| drop function if exists bug10015_4| drop function if exists bug10015_5| drop function if exists bug10015_6| drop function if exists bug10015_7| drop procedure if exists bug10015_8| create table t1 (id int) engine=innodb| create table t2 (id int primary key, j int) engine=innodb| insert into t1 values (1),(2),(3)| create function bug10015_1() returns int return (select count(*) from t1)| select *, bug10015_1() from t1| id bug10015_1() 1 3 2 3 3 3 drop function bug10015_1| create function bug10015_2() returns int begin declare i, s int; set i:= (select min(id) from t1); set s:= (select max(id) from t1); return (s - i); end| select *, bug10015_2() from t1| id bug10015_2() 1 2 2 2 3 2 drop function bug10015_2| create function bug10015_3() returns int return (select max(a.id - b.id) from t1 as a, t1 as b where a.id >= b.id)| select *, bug10015_3() from t1| id bug10015_3() 1 2 2 2 3 2 drop function bug10015_3| create function bug10015_4(i int) returns int begin declare m int; set m:= (select max(id) from t2); insert into t2 values (i, m); return m; end| select *, bug10015_4(id) from t1| id bug10015_4(id) 1 NULL 2 1 3 2 select * from t2| id j 1 NULL 2 1 3 2 drop function bug10015_4| create function bug10015_5(i int) returns int begin if (i = 5) then insert into t2 values (1, 0); end if; return i; end| insert into t1 values (bug10015_5(4)), (bug10015_5(5))| ERROR 23000: Duplicate entry '1' for key 1 select * from t1| id 1 2 3 drop function bug10015_5| create function bug10015_6(i int) returns int begin declare continue handler for sqlexception set @error_in_func:= 1; if (i = 5) then insert into t2 values (4, 0), (1, 0); end if; return i; end| set @error_in_func:= 0| insert into t1 values (bug10015_6(5)), (bug10015_6(6))| select @error_in_func| @error_in_func 1 select * from t1| id 1 2 3 5 6 select * from t2| id j 1 NULL 2 1 3 2 4 0 drop function bug10015_6| create function bug10015_7() returns int begin alter table t1 add k int; return 1; end| ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. create function bug10015_7() returns int begin start transaction; return 1; end| ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. create function bug10015_7() returns int begin drop table t1; return 1; end| ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. create function bug10015_7() returns int begin drop temporary table t1; return 1; end| drop function bug10015_7| create function bug10015_7() returns int begin commit; return 1; end| ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. create function bug10015_7() returns int begin call bug10015_8(); return 1; end| create procedure bug10015_8() alter table t1 add k int| select *, bug10015_7() from t1| ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. drop procedure bug10015_8| create procedure bug10015_8() start transaction| select *, bug10015_7() from t1| ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. drop procedure bug10015_8| create procedure bug10015_8() drop temporary table if exists t1_temp| select *, bug10015_7() from t1| id bug10015_7() 1 1 2 1 3 1 5 1 6 1 drop procedure bug10015_8| create procedure bug10015_8() commit| select *, bug10015_7() from t1| ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger. drop procedure bug10015_8| drop function bug10015_7| drop table t1, t2| drop function if exists bug13825_0| drop function if exists bug13825_1| drop function if exists bug13825_2| drop function if exists bug13825_3| drop function if exists bug13825_4| drop function if exists bug13825_5| drop procedure if exists bug13825_0| drop procedure if exists bug13825_1| drop procedure if exists bug13825_2| drop table if exists t1| create table t1 (i int) engine=innodb| create table t2 (i int) engine=innodb| create function bug13825_0() returns int begin rollback to savepoint x; return 1; end| create function bug13825_1() returns int begin release savepoint x; return 1; end| create function bug13825_2() returns int begin insert into t1 values (2); savepoint x; insert into t1 values (3); rollback to savepoint x; insert into t1 values (4); return 1; end| create procedure bug13825_0() begin rollback to savepoint x; end| create procedure bug13825_1() begin release savepoint x; end| create procedure bug13825_2() begin savepoint x; end| insert into t2 values (1)| create trigger t2_bi before insert on t2 for each row rollback to savepoint x| create trigger t2_bu before update on t2 for each row release savepoint x| create trigger t2_bd before delete on t2 for each row begin insert into t1 values (2); savepoint x; insert into t1 values (3); rollback to savepoint x; insert into t1 values (4); end| create function bug13825_3(rb int) returns int begin insert into t1 values(1); savepoint x; insert into t1 values(2); if rb then rollback to savepoint x; end if; insert into t1 values(3); return rb; end| create function bug13825_4() returns int begin savepoint x; insert into t1 values(2); rollback to savepoint x; return 0; end| create function bug13825_5(p int) returns int begin savepoint x; insert into t2 values(p); rollback to savepoint x; insert into t2 values(p+1); return p; end| set autocommit= 0| begin | insert into t1 values (1)| savepoint x| set @a:= bug13825_0()| ERROR 42000: SAVEPOINT x does not exist insert into t2 values (2)| ERROR 42000: SAVEPOINT x does not exist set @a:= bug13825_1()| ERROR 42000: SAVEPOINT x does not exist update t2 set i = 2| ERROR 42000: SAVEPOINT x does not exist set @a:= bug13825_2()| select * from t1| i 1 2 4 rollback to savepoint x| select * from t1| i 1 delete from t2| select * from t1| i 1 2 4 rollback to savepoint x| select * from t1| i 1 release savepoint x| set @a:= bug13825_2()| select * from t1| i 1 2 4 rollback to savepoint x| ERROR 42000: SAVEPOINT x does not exist delete from t1| commit| begin| insert into t1 values (5)| savepoint x| insert into t1 values (6)| call bug13825_0()| select * from t1| i 5 call bug13825_1()| rollback to savepoint x| ERROR 42000: SAVEPOINT x does not exist savepoint x| insert into t1 values (7)| call bug13825_2()| rollback to savepoint x| select * from t1| i 5 7 delete from t1| commit| set autocommit= 1| select bug13825_3(0)| bug13825_3(0) 0 select * from t1| i 1 2 3 delete from t1| select bug13825_3(1)| bug13825_3(1) 1 select * from t1| i 1 3 delete from t1| set autocommit= 0| begin| insert into t1 values (1)| set @a:= bug13825_4()| select * from t1| i 1 delete from t1| commit| set autocommit= 1| drop table t2| create table t2 (i int) engine=innodb| insert into t1 values (1), (bug13825_5(2)), (3)| select * from t1| i 1 2 3 select * from t2| i 3 drop function bug13825_0| drop function bug13825_1| drop function bug13825_2| drop function bug13825_3| drop function bug13825_4| drop function bug13825_5| drop procedure bug13825_0| drop procedure bug13825_1| drop procedure bug13825_2| drop table t1, t2| drop table if exists t3| drop procedure if exists bug14840_1| drop procedure if exists bug14840_2| create table t3 ( x int, y int, primary key (x) ) engine=InnoDB| create procedure bug14840_1() begin declare err int default 0; declare continue handler for sqlexception set err = err + 1; start transaction; update t3 set x = 1, y = 42 where x = 2; insert into t3 values (3, 4711); if err > 0 then rollback; else commit; end if; select * from t3; end| create procedure bug14840_2() begin declare err int default 0; declare continue handler for sqlexception begin set err = err + 1; select err as 'Ping'; end; update t3 set x = 1, y = 42 where x = 2; update t3 set x = 1, y = 42 where x = 2; insert into t3 values (3, 4711); select * from t3; end| insert into t3 values (1, 3), (2, 5)| call bug14840_1()| x y 1 3 2 5 delete from t3| insert into t3 values (1, 3), (2, 5)| call bug14840_2()| Ping 1 Ping 2 x y 1 3 2 5 3 4711 drop procedure bug14840_1| drop procedure bug14840_2| drop table t3|