mariadb/mysql-test/t/sp_trans.test
unknown ed5b5420dc Merge mysql.com:/home/bkroot/mysql-5.0 into mysql.com:/home/bk/mysql-5.0
mysql-test/r/sp_trans.result:
  Auto merged
mysql-test/t/sp_trans.test:
  Auto merged
sql/sql_parse.cc:
  Auto merged
2005-06-07 16:48:38 +02:00

186 lines
4.7 KiB
Text

#
# tests that require InnoDB...
#
-- source include/have_innodb.inc
--disable_warnings
drop table if exists t1, t2;
--enable_warnings
delimiter |;
#
# BUG#8850: Truncate table in a stored procedure locks the tables
#
--disable_warnings
drop procedure if exists bug8850|
--enable_warnings
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|
call bug8850()|
set autocommit=1|
select * from t1|
drop table t1|
drop procedure bug8850|
#
# BUG#10015: Crash in InnoDB if stored routines are used
# (crash happens in auto-commit mode)
#
--disable_warnings
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|
--enable_warnings
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|
drop function bug10015_1|
# Test couple of a bit more complex cases
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|
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|
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|
select * from t2|
drop function bug10015_4|
# Now let us test how statement rollback works
# This function will cause the whole stmt to be rolled back,
# there should not be any traces left.
create function bug10015_5(i int) returns int
begin
if (i = 5) then
insert into t2 values (1, 0);
end if;
return i;
end|
--error 1062
insert into t1 values (bug10015_5(4)), (bug10015_5(5))|
select * from t1|
drop function bug10015_5|
# Thanks to error-handler this function should not cause rollback
# of statement calling it. But insert statement in it should be
# rolled back completely and don't leave any traces in t2.
# Unfortunately we can't implement such behavior in 5.0, so it
# is something to be fixed in later 5.* releases (TODO).
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|
select * from t1|
select * from t2|
drop function bug10015_6|
# Let us test that we don't allow any statements causing transaction
# commit in stored functions (we test only most interesting cases here).
# Cases which can be caught at creation time:
--error 1422
create function bug10015_7() returns int
begin
alter table t1 add k int;
return 1;
end|
--error 1422
create function bug10015_7() returns int
begin
start transaction;
return 1;
end|
--error 1422
create function bug10015_7() returns int
begin
drop table t1;
return 1;
end|
# It should be OK to drop temporary table.
create function bug10015_7() returns int
begin
drop temporary table t1;
return 1;
end|
drop function bug10015_7|
--error 1422
create function bug10015_7() returns int
begin
commit;
return 1;
end|
# Now let us test cases which we can catch only at run-time:
create function bug10015_7() returns int
begin
call bug10015_8();
return 1;
end|
create procedure bug10015_8() alter table t1 add k int|
--error 1422
select *, bug10015_7() from t1|
drop procedure bug10015_8|
create procedure bug10015_8() start transaction|
--error 1422
select *, bug10015_7() from t1|
drop procedure bug10015_8|
# Again it is OK to drop temporary table
# We are surpressing warnings since they are not essential
create procedure bug10015_8() drop temporary table if exists t1_temp|
--disable_warnings
select *, bug10015_7() from t1|
--enable_warnings
drop procedure bug10015_8|
create procedure bug10015_8() commit|
--error 1422
select *, bug10015_7() from t1|
drop procedure bug10015_8|
drop function bug10015_7|
drop table t1, t2|
#
# BUG#NNNN: New bug synopsis
#
#--disable_warnings
#drop procedure if exists bugNNNN|
#--enable_warnings
#create procedure bugNNNN...
delimiter ;|