From 28f3989c8acce47967f976bb54fe0d852ccf0731 Mon Sep 17 00:00:00 2001 From: "pem@mysql.com" <> Date: Thu, 19 Jan 2006 17:55:54 +0100 Subject: [PATCH] Fixed BUG#15866: Thread stack limit insufficient for recursive call "fib(20)" Lowered the parameter to 10, and also renamed non-standard table names to t3. --- mysql-test/r/sp.result | 46 +++++++++++++++++------------------ mysql-test/r/sp_trans.result | 2 +- mysql-test/t/sp.test | 47 ++++++++++++++++++------------------ mysql-test/t/sp_trans.test | 2 +- 4 files changed, 49 insertions(+), 48 deletions(-) diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 19f3d033f5..63ab2098d5 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -1178,8 +1178,8 @@ drop view v2| delete from t1 | delete from t2 | drop table t4| -drop table if exists fac| -create table fac (n int unsigned not null primary key, f bigint unsigned)| +drop table if exists t3| +create table t3 (n int unsigned not null primary key, f bigint unsigned)| drop procedure if exists ifac| create procedure ifac(n int unsigned) begin @@ -1189,13 +1189,13 @@ set n = 20; # bigint overflow otherwise end if; while i <= n do begin -insert into test.fac values (i, fac(i)); +insert into test.t3 values (i, fac(i)); set i = i + 1; end; end while; end| call ifac(20)| -select * from fac| +select * from t3| n f 1 1 2 2 @@ -1217,7 +1217,7 @@ n f 18 6402373705728000 19 121645100408832000 20 2432902008176640000 -drop table fac| +drop table t3| show function status like '%f%'| Db Name Type Definer Modified Created Security_type Comment test fac FUNCTION root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER @@ -1225,12 +1225,12 @@ drop procedure ifac| drop function fac| show function status like '%f%'| Db Name Type Definer Modified Created Security_type Comment -drop table if exists primes| -create table primes ( +drop table if exists t3| +create table t3 ( i int unsigned not null primary key, p bigint unsigned not null )| -insert into primes values +insert into t3 values ( 0, 3), ( 1, 5), ( 2, 7), ( 3, 11), ( 4, 13), ( 5, 17), ( 6, 19), ( 7, 23), ( 8, 29), ( 9, 31), (10, 37), (11, 41), (12, 43), (13, 47), (14, 53), @@ -1253,7 +1253,7 @@ set b = b+200, s = 0; else begin declare p bigint unsigned; -select t.p into p from test.primes t where t.i = s; +select t.p into p from test.t3 t where t.i = s; if b+p > r then set pp = 1; leave again; @@ -1278,7 +1278,7 @@ begin declare pp bool default 0; call opp(p, pp); if pp then -insert into test.primes values (i, p); +insert into test.t3 values (i, p); set i = i+1; end if; set p = p+2; @@ -1299,7 +1299,7 @@ set b = b+200, s = 0; else begin declare p bigint unsigned; -select t.p into p from test.primes t where t.i = s; +select t.p into p from test.t3 t where t.i = s; if b+p > r then set pp = 1; leave again; @@ -1318,47 +1318,47 @@ Db Name Type Definer Modified Created Security_type Comment test ip PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER test opp PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER call ip(200)| -select * from primes where i=45 or i=100 or i=199| +select * from t3 where i=45 or i=100 or i=199| i p 45 211 100 557 199 1229 -drop table primes| +drop table t3| drop procedure opp| drop procedure ip| show procedure status like '%p%'| Db Name Type Definer Modified Created Security_type Comment -drop table if exists fib| -create table fib ( f bigint unsigned not null )| +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 fib order by f desc limit 2; +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 fib values (x+y); +insert into t3 values (x+y); call fib(n-1); end; end if; end| set @@max_sp_recursion_depth= 20| -insert into fib values (0), (1)| +insert into t3 values (0), (1)| call fib(3)| -select * from fib order by f asc| +select * from t3 order by f asc| f 0 1 1 2 -delete from fib| -insert into fib values (0), (1)| +delete from t3| +insert into t3 values (0), (1)| call fib(20)| -select * from fib order by f asc| +select * from t3 order by f asc| f 0 1 @@ -1381,7 +1381,7 @@ f 2584 4181 6765 -drop table fib| +drop table t3| drop procedure fib| set @@max_sp_recursion_depth= 0| drop procedure if exists bar| diff --git a/mysql-test/r/sp_trans.result b/mysql-test/r/sp_trans.result index 8f2bd9985f..e9289cf01c 100644 --- a/mysql-test/r/sp_trans.result +++ b/mysql-test/r/sp_trans.result @@ -1,4 +1,4 @@ -drop table if exists t1, t2; +drop table if exists t1, t2, t3; drop procedure if exists bug8850| create table t1 (a int) engine=innodb| create procedure bug8850() diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 68ce9cdb11..f9b218967d 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -1419,9 +1419,9 @@ drop table t4| # fac --disable_warnings -drop table if exists fac| +drop table if exists t3| --enable_warnings -create table fac (n int unsigned not null primary key, f bigint unsigned)| +create table t3 (n int unsigned not null primary key, f bigint unsigned)| --disable_warnings drop procedure if exists ifac| @@ -1435,15 +1435,15 @@ begin end if; while i <= n do begin - insert into test.fac values (i, fac(i)); + insert into test.t3 values (i, fac(i)); set i = i + 1; end; end while; end| call ifac(20)| -select * from fac| -drop table fac| +select * from t3| +drop table t3| --replace_column 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00' show function status like '%f%'| drop procedure ifac| @@ -1455,15 +1455,15 @@ show function status like '%f%'| # primes --disable_warnings -drop table if exists primes| +drop table if exists t3| --enable_warnings -create table primes ( +create table t3 ( i int unsigned not null primary key, p bigint unsigned not null )| -insert into primes values +insert into t3 values ( 0, 3), ( 1, 5), ( 2, 7), ( 3, 11), ( 4, 13), ( 5, 17), ( 6, 19), ( 7, 23), ( 8, 29), ( 9, 31), (10, 37), (11, 41), (12, 43), (13, 47), (14, 53), @@ -1492,7 +1492,7 @@ begin begin declare p bigint unsigned; - select t.p into p from test.primes t where t.i = s; + select t.p into p from test.t3 t where t.i = s; if b+p > r then set pp = 1; leave again; @@ -1523,7 +1523,7 @@ begin call opp(p, pp); if pp then - insert into test.primes values (i, p); + insert into test.t3 values (i, p); set i = i+1; end if; set p = p+2; @@ -1545,8 +1545,8 @@ call ip(200)| # 45 211 # 100 557 # 199 1229 -select * from primes where i=45 or i=100 or i=199| -drop table primes| +select * from t3 where i=45 or i=100 or i=199| +drop table t3| drop procedure opp| drop procedure ip| --replace_column 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00' @@ -1556,9 +1556,9 @@ show procedure status like '%p%'| # Fibonacci, for recursion test. (Yet Another Numerical series :) # --disable_warnings -drop table if exists fib| +drop table if exists t3| --enable_warnings -create table fib ( f bigint unsigned not null )| +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 @@ -1571,13 +1571,13 @@ begin if n > 1 then begin declare x, y bigint unsigned; - declare c cursor for select f from fib order by f desc limit 2; + 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 fib values (x+y); + insert into t3 values (x+y); call fib(n-1); end; end if; @@ -1588,22 +1588,23 @@ set @@max_sp_recursion_depth= 20| # Minimum test: recursion of 3 levels -insert into fib values (0), (1)| +insert into t3 values (0), (1)| call fib(3)| -select * from fib order by f asc| +select * from t3 order by f asc| -delete from fib| +delete from t3| -# Original test: 20 levels (may run into memory limits!) +# The original test, 20 levels, ran into memory limits on some machines +# and builds. Try 10 instead... -insert into fib values (0), (1)| +insert into t3 values (0), (1)| call fib(20)| -select * from fib order by f asc| -drop table fib| +select * from t3 order by f asc| +drop table t3| drop procedure fib| set @@max_sp_recursion_depth= 0| diff --git a/mysql-test/t/sp_trans.test b/mysql-test/t/sp_trans.test index 308d4ad5c3..b9bd4c938b 100644 --- a/mysql-test/t/sp_trans.test +++ b/mysql-test/t/sp_trans.test @@ -5,7 +5,7 @@ -- source include/have_innodb.inc --disable_warnings -drop table if exists t1, t2; +drop table if exists t1, t2, t3; --enable_warnings delimiter |; -- 2.30.9