55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # Fibonacci, for recursion test. (Yet Another Numerical series :) | ||
|  | # Split from main.sp due to problems reported in Bug#15866 | ||
|  | 
 | ||
|  | --disable_warnings | ||
|  | drop table if exists t3; | ||
|  | --enable_warnings | ||
|  | create table t3 ( f bigint unsigned not null ); | ||
|  | 
 | ||
|  | # We deliberately do it the awkward way, fetching the last two | ||
|  | # values from the table, in order to exercise various statements | ||
|  | # and table accesses at each turn. | ||
|  | --disable_warnings | ||
|  | drop procedure if exists fib; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | # Now for multiple statements... | ||
|  | delimiter |; | ||
|  | 
 | ||
|  | create procedure fib(n int unsigned) | ||
|  | begin | ||
|  |   if n > 1 then | ||
|  |     begin | ||
|  |       declare x, y bigint unsigned; | ||
|  |       declare c cursor for select f from t3 order by f desc limit 2; | ||
|  |       open c; | ||
|  |       fetch c into y; | ||
|  |       fetch c into x; | ||
|  |       insert into t3 values (x+y); | ||
|  |       call fib(n-1); | ||
|  |       ## Close the cursor AFTER the recursion to ensure that the stack | ||
|  |       ## frame is somewhat intact. | ||
|  |       close c; | ||
|  |     end; | ||
|  |   end if; | ||
|  | end| | ||
|  | 
 | ||
|  | # Enable recursion | ||
|  | set @@max_sp_recursion_depth= 20| | ||
|  | 
 | ||
|  | insert into t3 values (0), (1)| | ||
|  | 
 | ||
|  | # The small number of recursion levels is intentional. | ||
|  | # We need to avoid | ||
|  | # Bug#15866 main.sp fails (thread stack limit | ||
|  | #           insufficient for recursive call "fib(20)") | ||
|  | # which affects some platforms. | ||
|  | call fib(4)| | ||
|  | 
 | ||
|  | select * from t3 order by f asc| | ||
|  | 
 | ||
|  | drop table t3| | ||
|  | drop procedure fib| | ||
|  | set @@max_sp_recursion_depth= 0| | ||
|  | 
 |