# 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; close c; insert into t3 values (x+y); call fib(n-1); end; end if; end| # Enable recursion set @@max_sp_recursion_depth= 20| # Minimum test: recursion of 3 levels insert into t3 values (0), (1)| call fib(3)| select * from t3 order by f asc| truncate table t3| # The original test, 20 levels, ran into memory limits on some machines # and builds. Try 10 instead... insert into t3 values (0), (1)| call fib(10)| select * from t3 order by f asc| drop table t3| drop procedure fib| set @@max_sp_recursion_depth= 0|