mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-25 18:38:00 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			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|
 | |
| 
 |