mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +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|
 | 
						|
 |