638 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			638 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # | ||
|  | # tests that require InnoDB... | ||
|  | # | ||
|  | 
 | ||
|  | -- source include/have_log_bin.inc | ||
|  | -- source include/have_innodb.inc | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t1, t2, t3; | ||
|  | --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 ER_DUP_ENTRY | ||
|  | 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#13825 "Triggers: crash if release savepoint". | ||
|  | # Also general test for handling of savepoints in stored routines. | ||
|  | # | ||
|  | # According to SQL standard we should establish new savepoint | ||
|  | # level before executing stored function/trigger and destroy  | ||
|  | # this savepoint level after execution. Stored procedures by | ||
|  | # default should be executed using the same savepoint level | ||
|  | # as their caller (to execute stored procedure using new  | ||
|  | # savepoint level one should explicitly specify NEW SAVEPOINT | ||
|  | # LEVEL clause in procedure creation statement which MySQL | ||
|  | # does not support yet). | ||
|  | --disable_warnings | ||
|  | 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| | ||
|  | --enable_warnings | ||
|  | 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| | ||
|  | # Test of savepoint level handling for stored functions and triggers | ||
|  | begin | | ||
|  | insert into t1 values (1)| | ||
|  | savepoint x| | ||
|  | --error ER_SP_DOES_NOT_EXIST | ||
|  | set @a:= bug13825_0()| | ||
|  | --error ER_SP_DOES_NOT_EXIST | ||
|  | insert into t2 values (2)| | ||
|  | --error ER_SP_DOES_NOT_EXIST | ||
|  | set @a:= bug13825_1()| | ||
|  | --error ER_SP_DOES_NOT_EXIST | ||
|  | update t2 set i = 2| | ||
|  | set @a:= bug13825_2()| | ||
|  | select * from t1| | ||
|  | rollback to savepoint x| | ||
|  | select * from t1| | ||
|  | delete from t2| | ||
|  | select * from t1| | ||
|  | rollback to savepoint x| | ||
|  | select * from t1| | ||
|  | # Of course savepoints set in function should not be visible from its caller | ||
|  | release savepoint x| | ||
|  | set @a:= bug13825_2()| | ||
|  | select * from t1| | ||
|  | --error ER_SP_DOES_NOT_EXIST | ||
|  | rollback to savepoint x| | ||
|  | delete from t1| | ||
|  | commit| | ||
|  | # Test of savepoint level handling for stored procedures | ||
|  | begin| | ||
|  | insert into t1 values (5)| | ||
|  | savepoint x| | ||
|  | insert into t1 values (6)| | ||
|  | call bug13825_0()| | ||
|  | select * from t1| | ||
|  | call bug13825_1()| | ||
|  | --error ER_SP_DOES_NOT_EXIST | ||
|  | rollback to savepoint x| | ||
|  | savepoint x| | ||
|  | insert into t1 values (7)| | ||
|  | call bug13825_2()| | ||
|  | rollback to savepoint x| | ||
|  | select * from t1| | ||
|  | delete from t1| | ||
|  | commit| | ||
|  | set autocommit= 1| | ||
|  | # Let us test that savepoints work inside of functions | ||
|  | # even in auto-commit mode | ||
|  | select bug13825_3(0)| | ||
|  | select * from t1| | ||
|  | delete from t1| | ||
|  | select bug13825_3(1)| | ||
|  | select * from t1| | ||
|  | delete from t1| | ||
|  | # Curious case: rolling back to savepoint which is set by first | ||
|  | # statement in function should not rollback whole transaction. | ||
|  | set autocommit= 0| | ||
|  | begin| | ||
|  | insert into t1 values (1)| | ||
|  | set @a:= bug13825_4()| | ||
|  | select * from t1| | ||
|  | delete from t1| | ||
|  | commit| | ||
|  | set autocommit= 1| | ||
|  | # Other curious case: savepoint in the middle of statement | ||
|  | drop table t2| | ||
|  | create table t2 (i int) engine=innodb| | ||
|  | insert into t1 values (1), (bug13825_5(2)), (3)| | ||
|  | select * from t1| | ||
|  | select * from t2| | ||
|  | # Cleanup | ||
|  | 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| | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#14840: CONTINUE handler problem | ||
|  | # | ||
|  | --disable_warnings | ||
|  | drop table if exists t3| | ||
|  | drop procedure if exists bug14840_1| | ||
|  | drop procedure if exists bug14840_2| | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | create table t3 | ||
|  | ( | ||
|  |   x int, | ||
|  |   y int, | ||
|  |   primary key (x) | ||
|  | ) engine=InnoDB| | ||
|  | 
 | ||
|  | # This used to hang the client since the insert returned with an | ||
|  | # error status (left over from the update) even though it succeeded, | ||
|  | # which caused the execution to end at that point. | ||
|  | 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| | ||
|  | 
 | ||
|  | # A simpler (non-transactional) case: insert at select should be done | ||
|  | 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()| | ||
|  | 
 | ||
|  | delete from t3| | ||
|  | insert into t3 values (1, 3), (2, 5)| | ||
|  | call bug14840_2()| | ||
|  | 
 | ||
|  | drop procedure bug14840_1| | ||
|  | drop procedure bug14840_2| | ||
|  | drop table t3| | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#10656: Stored Procedure - Create index and Truncate table command error | ||
|  | # | ||
|  | --disable_warnings | ||
|  | drop procedure if exists bug10656_create_index| | ||
|  | drop procedure if exists bug10656_myjoin| | ||
|  | drop procedure if exists bug10656_truncate_table| | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | CREATE TABLE t3 ( | ||
|  |   `ID` int(11) default NULL, | ||
|  |   `txt` char(5) default NULL | ||
|  | ) ENGINE=InnoDB DEFAULT CHARSET=latin1| | ||
|  | 
 | ||
|  | INSERT INTO t3 (`ID`,`txt`) VALUES | ||
|  |  (1,'a'), (2,'b'), (3,'c'), (4,'d')| | ||
|  | 
 | ||
|  | CREATE TABLE t4 ( | ||
|  |   `ID` int(11) default NULL, | ||
|  |   `txt` char(5) default NULL | ||
|  | ) ENGINE=InnoDB DEFAULT CHARSET=latin1| | ||
|  | 
 | ||
|  | INSERT INTO t4 (`ID`,`txt`) VALUES | ||
|  |  (1,'a'), (2,'b'), (3,'c'), (4,'d')| | ||
|  | 
 | ||
|  | create procedure bug10656_create_index() | ||
|  | begin | ||
|  |   create index bug10656_my_index on t3 (ID); | ||
|  | end| | ||
|  | call bug10656_create_index()| | ||
|  | 
 | ||
|  | create procedure bug10656_myjoin() | ||
|  | begin | ||
|  |   update t3, t4 set t3.txt = t4.txt where t3.id = t4.id; | ||
|  | end| | ||
|  | call bug10656_myjoin()| | ||
|  | 
 | ||
|  | create procedure bug10656_truncate_table() | ||
|  | begin | ||
|  |   truncate table t3; | ||
|  | end| | ||
|  | call bug10656_truncate_table()| | ||
|  | 
 | ||
|  | 
 | ||
|  | drop procedure bug10656_create_index| | ||
|  | drop procedure bug10656_myjoin| | ||
|  | drop procedure bug10656_truncate_table| | ||
|  | drop table t3, t4| | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#3448 | ||
|  | # | ||
|  | --disable_warnings | ||
|  | create table t3 ( | ||
|  |   a int primary key, | ||
|  |   ach char(1) | ||
|  | ) engine = innodb| | ||
|  | 
 | ||
|  | create table t4 ( | ||
|  |   b int  primary key, | ||
|  |   bch char(1) | ||
|  | ) engine = innodb| | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | insert into t3 values (1 , 'aCh1' ) , ('2' , 'aCh2')| | ||
|  | insert into t4 values (1 , 'bCh1' )| | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop procedure if exists bug3448| | ||
|  | --enable_warnings | ||
|  | create procedure bug3448() | ||
|  |   select * from t3 inner join t4 on t3.a = t4.b| | ||
|  | 
 | ||
|  | select * from t3 inner join t4 on t3.a = t4.b| | ||
|  | call bug3448()| | ||
|  | call bug3448()| | ||
|  | 
 | ||
|  | drop procedure bug3448| | ||
|  | drop table t3, t4| | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#14210: "Simple query with > operator on large table gives server | ||
|  | # crash" | ||
|  | # Check that cursors work in case when HEAP tables are converted to | ||
|  | # MyISAM | ||
|  | # | ||
|  | --disable_warnings | ||
|  | drop procedure if exists bug14210| | ||
|  | --enable_warnings | ||
|  | set @@session.max_heap_table_size=16384| | ||
|  | select @@session.max_heap_table_size| | ||
|  | # To trigger the memory corruption the original table must be InnoDB. | ||
|  | # No harm if it's not, so don't warn if the suite is run with --skip-innodb | ||
|  | --disable_warnings | ||
|  | create table t3 (a char(255)) engine=InnoDB| | ||
|  | --enable_warnings | ||
|  | create procedure bug14210_fill_table() | ||
|  | begin | ||
|  |   declare table_size, max_table_size int default 0; | ||
|  |   select @@session.max_heap_table_size into max_table_size; | ||
|  |   delete from t3; | ||
|  |   insert into t3 (a) values (repeat('a', 255)); | ||
|  |   repeat | ||
|  |     insert into t3 select a from t3; | ||
|  |     select count(*)*255 from t3 into table_size; | ||
|  |   until table_size > max_table_size*2 end repeat; | ||
|  | end| | ||
|  | call bug14210_fill_table()| | ||
|  | drop procedure bug14210_fill_table| | ||
|  | create table t4 like t3| | ||
|  | 
 | ||
|  | create procedure bug14210() | ||
|  | begin | ||
|  |   declare a char(255); | ||
|  |   declare done int default 0; | ||
|  |   declare c cursor for select * from t3; | ||
|  |   declare continue handler for sqlstate '02000' set done = 1; | ||
|  |   open c; | ||
|  |   repeat | ||
|  |     fetch c into a; | ||
|  |     if not done then | ||
|  |        insert into t4 values (upper(a)); | ||
|  |     end if; | ||
|  |   until done end repeat; | ||
|  |   close c; | ||
|  | end| | ||
|  | call bug14210()| | ||
|  | select count(*) from t4| | ||
|  | 
 | ||
|  | drop table t3, t4| | ||
|  | drop procedure bug14210| | ||
|  | set @@session.max_heap_table_size=default| | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#7787: Stored procedures: improper warning for "grant execute" statement | ||
|  | # | ||
|  | 
 | ||
|  | # Prepare. | ||
|  | 
 | ||
|  | CREATE DATABASE db_bug7787| | ||
|  | use db_bug7787| | ||
|  | 
 | ||
|  | # Test. | ||
|  | 
 | ||
|  | CREATE PROCEDURE p1() | ||
|  |   SHOW INNODB STATUS; | | ||
|  | 
 | ||
|  | GRANT EXECUTE ON PROCEDURE p1 TO user_bug7787@localhost| | ||
|  | 
 | ||
|  | # Cleanup. | ||
|  | 
 | ||
|  | DROP DATABASE db_bug7787| | ||
|  | drop user user_bug7787@localhost| | ||
|  | use test| | ||
|  | 
 | ||
|  | # | ||
|  | # Bug#13575 SP funcs in select with distinct/group and order by can | ||
|  | #           produce bad data | ||
|  | # | ||
|  | create table t3 (f1 int, f2 varchar(3), primary key(f1)) engine=innodb| | ||
|  | insert into t3 values (1,'aaa'),(2,'bbb'),(3,'ccc')| | ||
|  | CREATE FUNCTION bug13575 ( p1 integer )  | ||
|  | returns varchar(3)  | ||
|  | BEGIN  | ||
|  | DECLARE v1 VARCHAR(10) DEFAULT null; | ||
|  | SELECT f2 INTO v1 FROM t3 WHERE f1 = p1;  | ||
|  | RETURN v1; | ||
|  | END| | ||
|  | select distinct f1, bug13575(f1) from t3 order by f1| | ||
|  | drop function bug13575| | ||
|  | drop table t3| | ||
|  | 
 | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#11758414: Default storage_engine not honored when set | ||
|  | #               from within a stored procedure | ||
|  | # | ||
|  | SELECT @@GLOBAL.storage_engine INTO @old_engine| | ||
|  | SET @@GLOBAL.storage_engine=InnoDB| | ||
|  | SET @@SESSION.storage_engine=InnoDB| | ||
|  | # show defaults at define-time | ||
|  | SHOW GLOBAL VARIABLES LIKE 'storage_engine'| | ||
|  | SHOW SESSION VARIABLES LIKE 'storage_engine'| | ||
|  | CREATE PROCEDURE bug11758414() | ||
|  | BEGIN | ||
|  |  SET @@GLOBAL.storage_engine="MyISAM"; | ||
|  |  SET @@SESSION.storage_engine="MyISAM";  | ||
|  |  # show defaults at execution time / that setting them worked | ||
|  |  SHOW GLOBAL VARIABLES LIKE 'storage_engine'; | ||
|  |  SHOW SESSION VARIABLES LIKE 'storage_engine'; | ||
|  |  CREATE TABLE t1 (id int); | ||
|  |  CREATE TABLE t2 (id int) ENGINE=InnoDB; | ||
|  |  # show we're heeding the default (at run-time, not parse-time!) | ||
|  |  SHOW CREATE TABLE t1; | ||
|  |  # show that we didn't break explicit override with ENGINE=... | ||
|  |  SHOW CREATE TABLE t2; | ||
|  | END; | ||
|  | | | ||
|  | CALL bug11758414| | ||
|  | # show that changing defaults within SP stuck | ||
|  | SHOW GLOBAL VARIABLES LIKE 'storage_engine'| | ||
|  | SHOW SESSION VARIABLES LIKE 'storage_engine'| | ||
|  | DROP PROCEDURE bug11758414| | ||
|  | DROP TABLE t1, t2| | ||
|  | SET @@GLOBAL.storage_engine=@old_engine| | ||
|  | 
 | ||
|  | # | ||
|  | # BUG#NNNN: New bug synopsis | ||
|  | # | ||
|  | #--disable_warnings | ||
|  | #drop procedure if exists bugNNNN| | ||
|  | #--enable_warnings | ||
|  | #create procedure bugNNNN... | ||
|  | 
 | ||
|  | delimiter ;| |