Loading mysql-test/r/sp-error.result +5 −0 Original line number Diff line number Diff line Loading @@ -1181,3 +1181,8 @@ show authors; return 42; end| ERROR 0A000: Not allowed to return a result set from a function drop function if exists bug20701| create function bug20701() returns varchar(25) binary return "test"| ERROR 42000: This version of MySQL doesn't yet support 'return value collation' create function bug20701() returns varchar(25) return "test"| drop function bug20701| mysql-test/r/sp.result +3 −4 Original line number Diff line number Diff line Loading @@ -3625,7 +3625,6 @@ begin set f1= concat( 'hello', f1 ); return f1; end| drop function bug9048| drop procedure if exists bug12849_1| create procedure bug12849_1(inout x char) select x into x| set @var='a'| Loading Loading @@ -4074,7 +4073,7 @@ select res; end| create table t3 (a int)| insert into t3 values (0)| create view v1 as select a from t3; create view v1 as select a from t3| create procedure bug10100pt(level int, lim int) begin if level < lim then Loading @@ -4095,7 +4094,7 @@ else select * from v1; end if; end| prepare stmt2 from "select * from t3;"; prepare stmt2 from "select * from t3;"| create procedure bug10100pd(level int, lim int) begin if level < lim then Loading Loading @@ -4465,7 +4464,7 @@ Error 1347 'test.v1' is not BASE TABLE Error 1347 'test.v1' is not BASE TABLE Error 1347 'test.v1' is not BASE TABLE drop procedure bug13012| drop view v1; drop view v1| select * from t1 order by data| id data aa 0 Loading mysql-test/t/sp-error.test +18 −0 Original line number Diff line number Diff line Loading @@ -1728,10 +1728,28 @@ begin return 42; end| # # BUG#20701: BINARY keyword should be forbidden in stored routines # --disable_warnings drop function if exists bug20701| --enable_warnings # # This was disabled in 5.1.12. See bug #20701 # When collation support in SP is implemented, then this test should # be removed. # --error ER_NOT_SUPPORTED_YET create function bug20701() returns varchar(25) binary return "test"| create function bug20701() returns varchar(25) return "test"| drop function bug20701| # # BUG#NNNN: New bug synopsis # #--disable_warnings #drop procedure if exists bugNNNN| #drop function if exists bugNNNN| #--enable_warnings #create procedure bugNNNN... #create function bugNNNN... mysql-test/t/sp.test +15 −4 Original line number Diff line number Diff line Loading @@ -4381,12 +4381,23 @@ drop table t3| --disable_warnings drop function if exists bug9048| --enable_warnings create function bug9048(f1 char binary) returns char binary create function bug9048(f1 char binary) returns char begin set f1= concat( 'hello', f1 ); return f1; end| drop function bug9048| # # This was disabled in 5.1.12. See bug #20701 # When collation support in SP is implemented, then this test should # be removed. # --error ER_NOT_SUPPORTED_YET create function bug9048(f1 char binary) returns char binary begin set f1= concat( 'hello', f1 ); return f1; end| # Bug #12849 Stored Procedure: Crash on procedure call with CHAR type # 'INOUT' parameter Loading Loading @@ -4940,7 +4951,7 @@ end| # a procedure which use tables and recursion create table t3 (a int)| insert into t3 values (0)| create view v1 as select a from t3; create view v1 as select a from t3| create procedure bug10100pt(level int, lim int) begin if level < lim then Loading @@ -4963,7 +4974,7 @@ begin end if; end| # dynamic sql & recursion prepare stmt2 from "select * from t3;"; prepare stmt2 from "select * from t3;"| create procedure bug10100pd(level int, lim int) begin if level < lim then Loading Loading @@ -5258,7 +5269,7 @@ call bug13012()| call bug13012()| call bug13012()| drop procedure bug13012| drop view v1; drop view v1| select * from t1 order by data| # Loading sql/sp.cc +15 −6 Original line number Diff line number Diff line Loading @@ -992,6 +992,12 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp, } DBUG_RETURN(sp->m_first_free_instance); } /* Actually depth could be +1 than the actual value in case a SP calls SHOW CREATE PROCEDURE. Hence, the linked list could hold up to one more instance. */ level= sp->m_last_cached_sp->m_recursion_level + 1; if (level > depth) { Loading Loading @@ -1161,21 +1167,24 @@ sp_update_procedure(THD *thd, sp_name *name, st_sp_chistics *chistics) int sp_show_create_procedure(THD *thd, sp_name *name) { int ret= SP_KEY_NOT_FOUND; sp_head *sp; DBUG_ENTER("sp_show_create_procedure"); DBUG_PRINT("enter", ("name: %.*s", name->m_name.length, name->m_name.str)); /* Increase the recursion limit for this statement. SHOW CREATE PROCEDURE does not do actual recursion. */ thd->variables.max_sp_recursion_depth++; if ((sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, name, &thd->sp_proc_cache, FALSE))) { int ret= sp->show_create_procedure(thd); ret= sp->show_create_procedure(thd); thd->variables.max_sp_recursion_depth--; DBUG_RETURN(ret); } DBUG_RETURN(SP_KEY_NOT_FOUND); } int sp_show_status_procedure(THD *thd, const char *wild) Loading Loading
mysql-test/r/sp-error.result +5 −0 Original line number Diff line number Diff line Loading @@ -1181,3 +1181,8 @@ show authors; return 42; end| ERROR 0A000: Not allowed to return a result set from a function drop function if exists bug20701| create function bug20701() returns varchar(25) binary return "test"| ERROR 42000: This version of MySQL doesn't yet support 'return value collation' create function bug20701() returns varchar(25) return "test"| drop function bug20701|
mysql-test/r/sp.result +3 −4 Original line number Diff line number Diff line Loading @@ -3625,7 +3625,6 @@ begin set f1= concat( 'hello', f1 ); return f1; end| drop function bug9048| drop procedure if exists bug12849_1| create procedure bug12849_1(inout x char) select x into x| set @var='a'| Loading Loading @@ -4074,7 +4073,7 @@ select res; end| create table t3 (a int)| insert into t3 values (0)| create view v1 as select a from t3; create view v1 as select a from t3| create procedure bug10100pt(level int, lim int) begin if level < lim then Loading @@ -4095,7 +4094,7 @@ else select * from v1; end if; end| prepare stmt2 from "select * from t3;"; prepare stmt2 from "select * from t3;"| create procedure bug10100pd(level int, lim int) begin if level < lim then Loading Loading @@ -4465,7 +4464,7 @@ Error 1347 'test.v1' is not BASE TABLE Error 1347 'test.v1' is not BASE TABLE Error 1347 'test.v1' is not BASE TABLE drop procedure bug13012| drop view v1; drop view v1| select * from t1 order by data| id data aa 0 Loading
mysql-test/t/sp-error.test +18 −0 Original line number Diff line number Diff line Loading @@ -1728,10 +1728,28 @@ begin return 42; end| # # BUG#20701: BINARY keyword should be forbidden in stored routines # --disable_warnings drop function if exists bug20701| --enable_warnings # # This was disabled in 5.1.12. See bug #20701 # When collation support in SP is implemented, then this test should # be removed. # --error ER_NOT_SUPPORTED_YET create function bug20701() returns varchar(25) binary return "test"| create function bug20701() returns varchar(25) return "test"| drop function bug20701| # # BUG#NNNN: New bug synopsis # #--disable_warnings #drop procedure if exists bugNNNN| #drop function if exists bugNNNN| #--enable_warnings #create procedure bugNNNN... #create function bugNNNN...
mysql-test/t/sp.test +15 −4 Original line number Diff line number Diff line Loading @@ -4381,12 +4381,23 @@ drop table t3| --disable_warnings drop function if exists bug9048| --enable_warnings create function bug9048(f1 char binary) returns char binary create function bug9048(f1 char binary) returns char begin set f1= concat( 'hello', f1 ); return f1; end| drop function bug9048| # # This was disabled in 5.1.12. See bug #20701 # When collation support in SP is implemented, then this test should # be removed. # --error ER_NOT_SUPPORTED_YET create function bug9048(f1 char binary) returns char binary begin set f1= concat( 'hello', f1 ); return f1; end| # Bug #12849 Stored Procedure: Crash on procedure call with CHAR type # 'INOUT' parameter Loading Loading @@ -4940,7 +4951,7 @@ end| # a procedure which use tables and recursion create table t3 (a int)| insert into t3 values (0)| create view v1 as select a from t3; create view v1 as select a from t3| create procedure bug10100pt(level int, lim int) begin if level < lim then Loading @@ -4963,7 +4974,7 @@ begin end if; end| # dynamic sql & recursion prepare stmt2 from "select * from t3;"; prepare stmt2 from "select * from t3;"| create procedure bug10100pd(level int, lim int) begin if level < lim then Loading Loading @@ -5258,7 +5269,7 @@ call bug13012()| call bug13012()| call bug13012()| drop procedure bug13012| drop view v1; drop view v1| select * from t1 order by data| # Loading
sql/sp.cc +15 −6 Original line number Diff line number Diff line Loading @@ -992,6 +992,12 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp, } DBUG_RETURN(sp->m_first_free_instance); } /* Actually depth could be +1 than the actual value in case a SP calls SHOW CREATE PROCEDURE. Hence, the linked list could hold up to one more instance. */ level= sp->m_last_cached_sp->m_recursion_level + 1; if (level > depth) { Loading Loading @@ -1161,21 +1167,24 @@ sp_update_procedure(THD *thd, sp_name *name, st_sp_chistics *chistics) int sp_show_create_procedure(THD *thd, sp_name *name) { int ret= SP_KEY_NOT_FOUND; sp_head *sp; DBUG_ENTER("sp_show_create_procedure"); DBUG_PRINT("enter", ("name: %.*s", name->m_name.length, name->m_name.str)); /* Increase the recursion limit for this statement. SHOW CREATE PROCEDURE does not do actual recursion. */ thd->variables.max_sp_recursion_depth++; if ((sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, name, &thd->sp_proc_cache, FALSE))) { int ret= sp->show_create_procedure(thd); ret= sp->show_create_procedure(thd); thd->variables.max_sp_recursion_depth--; DBUG_RETURN(ret); } DBUG_RETURN(SP_KEY_NOT_FOUND); } int sp_show_status_procedure(THD *thd, const char *wild) Loading