mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 10:56:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			132 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #
 | |
| # Bug #11602: SP with very large body not handled well
 | |
| #
 | |
| source include/have_sequence.inc;
 | |
| 
 | |
| create table t1 (a int);
 | |
| insert into t1 values (1),(2),(3);
 | |
| 
 | |
| let $body=`select repeat('select count(*) into out1 from t1;\n', 3072)`;
 | |
| 
 | |
| --enable_prepare_warnings
 | |
| 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
 | |
| --disable_prepare_warnings
 | |
| 
 | |
| 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
 | |
| begin;
 | |
| while ($1)
 | |
| {
 | |
|   eval insert into t1 select * from t1;
 | |
|   dec $1;
 | |
| }
 | |
| commit;
 | |
| --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;
 | |
| 
 | |
| #
 | |
| # Loops with many iterations
 | |
| # (Item_equal must be created in the execution arena)
 | |
| #
 | |
| create table t1 (
 | |
|   `id1` int unsigned not null default '0',
 | |
|   `id2` int unsigned not null default '0',
 | |
|   `link_type` int unsigned not null default '0',
 | |
|   `visibility` tinyint not null default '0',
 | |
|   `data` varchar(255) not null default '',
 | |
|   `time` int unsigned not null default '0',
 | |
|   `version` int unsigned not null default '0',
 | |
|   primary key (id1, link_type, visibility, id2)
 | |
| ) default collate=latin1_bin;
 | |
| 
 | |
| delimiter //;
 | |
| --enable_prepare_warnings
 | |
| create procedure select_test()
 | |
| begin
 | |
|  declare id1_cond int;
 | |
|  set id1_cond = 1;
 | |
|  while id1_cond <= 10000 do
 | |
|    select count(*) as cnt from (select id1 from t1 force index (primary) where id1 = id1_cond and link_type = 1 and visibility = 1 order by id2 desc) as t into @cnt;
 | |
|    set id1_cond = id1_cond + 1;
 | |
|  end while;
 | |
| end//
 | |
| --disable_prepare_warnings
 | |
| delimiter ;//
 | |
| 
 | |
| insert t1 select seq, seq, 1, 1, seq, seq, seq from seq_1_to_2000;
 | |
| set @before=unix_timestamp();
 | |
| call select_test();
 | |
| 
 | |
| --let $time=60
 | |
| if ($VALGRIND_TEST)
 | |
| {
 | |
|   --let $time=600
 | |
| }
 | |
| 
 | |
| --disable_query_log
 | |
| --eval set @time=$time;
 | |
| --enable_query_log
 | |
| 
 | |
| select unix_timestamp() - @before < @time;
 | |
| drop procedure select_test;
 | |
| drop table t1;
 |