diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result index bf36b4796b9..63401845f23 100644 --- a/mysql-test/r/sp-error.result +++ b/mysql-test/r/sp-error.result @@ -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| diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 3ef1066ecda..e51ebaa4e94 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -3620,12 +3620,18 @@ call bug11333(10)| drop procedure bug11333| drop table t3| drop function if exists bug9048| -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| +create function bug9048(f1 char binary) returns char binary +begin +set f1= concat( 'hello', f1 ); +return f1; +end| +ERROR 42000: This version of MySQL doesn't yet support 'return value collation' drop procedure if exists bug12849_1| create procedure bug12849_1(inout x char) select x into x| set @var='a'| @@ -4074,7 +4080,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 @@ -4095,7 +4101,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 @@ -4465,7 +4471,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 diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test index d370cb3037c..73a64b6feeb 100644 --- a/mysql-test/t/sp-error.test +++ b/mysql-test/t/sp-error.test @@ -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... diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index fcf179d3e8f..6ae7319e433 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -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 @@ -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 @@ -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 @@ -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| # diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index ff422c4418c..d94281ed9cc 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1672,6 +1672,17 @@ create_function_tail: { LEX *lex= Lex; 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, (enum enum_field_types) $8,