Commit b60873b1 authored by unknown's avatar unknown

Merge ahristov@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime

into  lmy004.:/work/mysql-5.1-runtime


sql/sp.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
mysql-test/r/sp.result:
  manual merge
mysql-test/t/sp.test:
  manual merge
parents 29701579 0231ca09
...@@ -1181,3 +1181,8 @@ show authors; ...@@ -1181,3 +1181,8 @@ show authors;
return 42; return 42;
end| end|
ERROR 0A000: Not allowed to return a result set from a function 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|
...@@ -3625,7 +3625,6 @@ begin ...@@ -3625,7 +3625,6 @@ begin
set f1= concat( 'hello', f1 ); set f1= concat( 'hello', f1 );
return f1; return f1;
end| end|
drop function bug9048|
drop procedure if exists bug12849_1| drop procedure if exists bug12849_1|
create procedure bug12849_1(inout x char) select x into x| create procedure bug12849_1(inout x char) select x into x|
set @var='a'| set @var='a'|
...@@ -4074,7 +4073,7 @@ select res; ...@@ -4074,7 +4073,7 @@ select res;
end| end|
create table t3 (a int)| create table t3 (a int)|
insert into t3 values (0)| 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) create procedure bug10100pt(level int, lim int)
begin begin
if level < lim then if level < lim then
...@@ -4095,7 +4094,7 @@ else ...@@ -4095,7 +4094,7 @@ else
select * from v1; select * from v1;
end if; end if;
end| end|
prepare stmt2 from "select * from t3;"; prepare stmt2 from "select * from t3;"|
create procedure bug10100pd(level int, lim int) create procedure bug10100pd(level int, lim int)
begin begin
if level < lim then if level < lim then
...@@ -4465,7 +4464,7 @@ Error 1347 'test.v1' is not BASE TABLE ...@@ -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
Error 1347 'test.v1' is not BASE TABLE Error 1347 'test.v1' is not BASE TABLE
drop procedure bug13012| drop procedure bug13012|
drop view v1; drop view v1|
select * from t1 order by data| select * from t1 order by data|
id data id data
aa 0 aa 0
......
...@@ -1728,10 +1728,28 @@ begin ...@@ -1728,10 +1728,28 @@ begin
return 42; return 42;
end| 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 # BUG#NNNN: New bug synopsis
# #
#--disable_warnings #--disable_warnings
#drop procedure if exists bugNNNN| #drop procedure if exists bugNNNN|
#drop function if exists bugNNNN|
#--enable_warnings #--enable_warnings
#create procedure bugNNNN... #create procedure bugNNNN...
#create function bugNNNN...
...@@ -4381,12 +4381,23 @@ drop table t3| ...@@ -4381,12 +4381,23 @@ drop table t3|
--disable_warnings --disable_warnings
drop function if exists bug9048| drop function if exists bug9048|
--enable_warnings --enable_warnings
create function bug9048(f1 char binary) returns char binary create function bug9048(f1 char binary) returns char
begin begin
set f1= concat( 'hello', f1 ); set f1= concat( 'hello', f1 );
return f1; return f1;
end| end|
drop function bug9048| 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 # Bug #12849 Stored Procedure: Crash on procedure call with CHAR type
# 'INOUT' parameter # 'INOUT' parameter
...@@ -4940,7 +4951,7 @@ end| ...@@ -4940,7 +4951,7 @@ end|
# a procedure which use tables and recursion # a procedure which use tables and recursion
create table t3 (a int)| create table t3 (a int)|
insert into t3 values (0)| 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) create procedure bug10100pt(level int, lim int)
begin begin
if level < lim then if level < lim then
...@@ -4963,7 +4974,7 @@ begin ...@@ -4963,7 +4974,7 @@ begin
end if; end if;
end| end|
# dynamic sql & recursion # dynamic sql & recursion
prepare stmt2 from "select * from t3;"; prepare stmt2 from "select * from t3;"|
create procedure bug10100pd(level int, lim int) create procedure bug10100pd(level int, lim int)
begin begin
if level < lim then if level < lim then
...@@ -5258,7 +5269,7 @@ call bug13012()| ...@@ -5258,7 +5269,7 @@ call bug13012()|
call bug13012()| call bug13012()|
call bug13012()| call bug13012()|
drop procedure bug13012| drop procedure bug13012|
drop view v1; drop view v1|
select * from t1 order by data| select * from t1 order by data|
# #
......
...@@ -992,6 +992,12 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp, ...@@ -992,6 +992,12 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp,
} }
DBUG_RETURN(sp->m_first_free_instance); 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; level= sp->m_last_cached_sp->m_recursion_level + 1;
if (level > depth) if (level > depth)
{ {
...@@ -1161,19 +1167,22 @@ sp_update_procedure(THD *thd, sp_name *name, st_sp_chistics *chistics) ...@@ -1161,19 +1167,22 @@ sp_update_procedure(THD *thd, sp_name *name, st_sp_chistics *chistics)
int int
sp_show_create_procedure(THD *thd, sp_name *name) sp_show_create_procedure(THD *thd, sp_name *name)
{ {
int ret= SP_KEY_NOT_FOUND;
sp_head *sp; sp_head *sp;
DBUG_ENTER("sp_show_create_procedure"); DBUG_ENTER("sp_show_create_procedure");
DBUG_PRINT("enter", ("name: %.*s", name->m_name.length, name->m_name.str)); 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, if ((sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, name,
&thd->sp_proc_cache, FALSE))) &thd->sp_proc_cache, FALSE)))
{ ret= sp->show_create_procedure(thd);
int ret= sp->show_create_procedure(thd);
DBUG_RETURN(ret); thd->variables.max_sp_recursion_depth--;
} DBUG_RETURN(ret);
DBUG_RETURN(SP_KEY_NOT_FOUND);
} }
......
...@@ -1672,6 +1672,17 @@ create_function_tail: ...@@ -1672,6 +1672,17 @@ create_function_tail:
{ {
LEX *lex= Lex; LEX *lex= Lex;
sp_head *sp= lex->sphead; sp_head *sp= lex->sphead;
/*
This was disabled in 5.1.12. See bug #20701
When collation support in SP is implemented, then this test
should be removed.
*/
if (($8 == FIELD_TYPE_STRING || $8 == MYSQL_TYPE_VARCHAR)
&& (lex->type & BINCMP_FLAG))
{
my_error(ER_NOT_SUPPORTED_YET, MYF(0), "return value collation");
YYABORT;
}
if (sp->fill_field_definition(YYTHD, lex, if (sp->fill_field_definition(YYTHD, lex,
(enum enum_field_types) $8, (enum enum_field_types) $8,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment