mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug#15866 main.sp-fib split from main.sp
This commit is contained in:
46
mysql-test/r/sp-fib.result
Normal file
46
mysql-test/r/sp-fib.result
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
drop table if exists t3;
|
||||||
|
create table t3 ( f bigint unsigned not null );
|
||||||
|
drop procedure if exists fib;
|
||||||
|
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|
|
||||||
|
set @@max_sp_recursion_depth= 20|
|
||||||
|
insert into t3 values (0), (1)|
|
||||||
|
call fib(3)|
|
||||||
|
select * from t3 order by f asc|
|
||||||
|
f
|
||||||
|
0
|
||||||
|
1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
delete from t3|
|
||||||
|
insert into t3 values (0), (1)|
|
||||||
|
call fib(10)|
|
||||||
|
select * from t3 order by f asc|
|
||||||
|
f
|
||||||
|
0
|
||||||
|
1
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
5
|
||||||
|
8
|
||||||
|
13
|
||||||
|
21
|
||||||
|
34
|
||||||
|
55
|
||||||
|
drop table t3|
|
||||||
|
drop procedure fib|
|
||||||
|
set @@max_sp_recursion_depth= 0|
|
@ -1337,52 +1337,6 @@ drop procedure opp|
|
|||||||
drop procedure ip|
|
drop procedure ip|
|
||||||
show procedure status like '%p%'|
|
show procedure status like '%p%'|
|
||||||
Db Name Type Definer Modified Created Security_type Comment
|
Db Name Type Definer Modified Created Security_type Comment
|
||||||
drop table if exists t3|
|
|
||||||
create table t3 ( f bigint unsigned not null )|
|
|
||||||
drop procedure if exists fib|
|
|
||||||
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|
|
|
||||||
set @@max_sp_recursion_depth= 20|
|
|
||||||
insert into t3 values (0), (1)|
|
|
||||||
call fib(3)|
|
|
||||||
select * from t3 order by f asc|
|
|
||||||
f
|
|
||||||
0
|
|
||||||
1
|
|
||||||
1
|
|
||||||
2
|
|
||||||
delete from t3|
|
|
||||||
insert into t3 values (0), (1)|
|
|
||||||
call fib(10)|
|
|
||||||
select * from t3 order by f asc|
|
|
||||||
f
|
|
||||||
0
|
|
||||||
1
|
|
||||||
1
|
|
||||||
2
|
|
||||||
3
|
|
||||||
5
|
|
||||||
8
|
|
||||||
13
|
|
||||||
21
|
|
||||||
34
|
|
||||||
55
|
|
||||||
drop table t3|
|
|
||||||
drop procedure fib|
|
|
||||||
set @@max_sp_recursion_depth= 0|
|
|
||||||
drop procedure if exists bar|
|
drop procedure if exists bar|
|
||||||
create procedure bar(x char(16), y int)
|
create procedure bar(x char(16), y int)
|
||||||
comment "111111111111" sql security invoker
|
comment "111111111111" sql security invoker
|
||||||
|
60
mysql-test/t/sp-fib.test
Normal file
60
mysql-test/t/sp-fib.test
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
# 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|
|
||||||
|
|
||||||
|
delete from 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|
|
||||||
|
|
@ -1560,61 +1560,6 @@ drop procedure ip|
|
|||||||
show procedure status like '%p%'|
|
show procedure status like '%p%'|
|
||||||
|
|
||||||
|
|
||||||
# Fibonacci, for recursion test. (Yet Another Numerical series :)
|
|
||||||
#
|
|
||||||
--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
|
|
||||||
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|
|
|
||||||
|
|
||||||
delete from 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|
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Comment & suid
|
# Comment & suid
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user