86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # | ||
|  | # Bug #11602: SP with very large body not handled well | ||
|  | # | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop procedure if exists test.longprocedure; | ||
|  | drop table if exists t1; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | create table t1 (a int); | ||
|  | insert into t1 values (1),(2),(3); | ||
|  | 
 | ||
|  | let $body=`select repeat('select count(*) into out1 from t1;\n', 3072)`; | ||
|  | 
 | ||
|  | delimiter //; | ||
|  | --disable_query_log | ||
|  | eval select length('$body') as length// | ||
|  | eval create procedure test.longprocedure (out out1 int) deterministic | ||
|  | begin | ||
|  |   $body | ||
|  | end// | ||
|  | --enable_query_log | ||
|  | 
 | ||
|  | delimiter ;// | ||
|  | 
 | ||
|  | # this is larger than the length above, because it includes the 'begin' and | ||
|  | # 'end' bits and some whitespace | ||
|  | select length(routine_definition) from information_schema.routines where routine_schema = 'test' and routine_name = 'longprocedure'; | ||
|  | 
 | ||
|  | call test.longprocedure(@value); select @value; | ||
|  | 
 | ||
|  | drop procedure test.longprocedure; | ||
|  | drop table t1; | ||
|  | # | ||
|  | # Bug #9819 "Cursors: Mysql Server Crash while fetching from table with 5 | ||
|  | # million records.":  | ||
|  | # To really test the bug, increase the number of loop iterations ($1). | ||
|  | # For 4 millions set $1 to 22. | ||
|  | create table t1 (f1 char(100) , f2 mediumint , f3 int , f4 real, f5 numeric); | ||
|  | insert into t1 (f1, f2, f3, f4, f5) values | ||
|  | ("This is a test case for for Bug#9819", 1, 2, 3.0, 4.598); | ||
|  | create table t2 like t1; | ||
|  | let $1=8; | ||
|  | --disable_query_log | ||
|  | --disable_result_log | ||
|  | while ($1) | ||
|  | { | ||
|  |   eval insert into t1 select * from t1; | ||
|  |   dec $1; | ||
|  | } | ||
|  | --enable_result_log | ||
|  | --enable_query_log | ||
|  | select count(*) from t1; | ||
|  | select count(*) from t2; | ||
|  | --disable_warnings | ||
|  | drop procedure if exists p1; | ||
|  | --enable_warnings | ||
|  | delimiter |; | ||
|  | create procedure p1() | ||
|  | begin | ||
|  |   declare done integer default 0; | ||
|  |   declare vf1 char(100) ; | ||
|  |   declare vf2 mediumint; | ||
|  |   declare vf3 int ; | ||
|  |   declare vf4 real ; | ||
|  |   declare vf5 numeric ; | ||
|  |   declare cur1 cursor for select f1,f2,f3,f4,f5 from t1;   | ||
|  |   declare continue handler for sqlstate '02000' set done = 1;  | ||
|  |   open cur1; | ||
|  |   while done <> 1 do | ||
|  |     fetch cur1 into vf1, vf2, vf3, vf4, vf5; | ||
|  |     if not done then | ||
|  |       insert into t2 values (vf1, vf2, vf3, vf4, vf5); | ||
|  |     end if; | ||
|  |   end while; | ||
|  |   close cur1; | ||
|  | end| | ||
|  | delimiter ;| | ||
|  | call p1(); | ||
|  | select count(*) from t1; | ||
|  | select count(*) from t2; | ||
|  | select f1 from t1 limit 1; | ||
|  | select f1 from t2 limit 1; | ||
|  | drop procedure p1; | ||
|  | drop table t1, t2; |