diff options
-rw-r--r-- | config/ac-macros/misc.m4 | 30 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | include/my_atomic.h | 8 | ||||
-rw-r--r-- | mysql-test/r/mysqldump.result | 2 | ||||
-rw-r--r-- | mysql-test/r/sp-error.result | 5 | ||||
-rw-r--r-- | mysql-test/r/sp.result | 14 | ||||
-rw-r--r-- | mysql-test/t/mysqldump.test | 2 | ||||
-rw-r--r-- | mysql-test/t/sp-error.test | 18 | ||||
-rw-r--r-- | mysql-test/t/sp.test | 19 | ||||
-rw-r--r-- | sql/sp.cc | 10 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 11 |
11 files changed, 73 insertions, 48 deletions
diff --git a/config/ac-macros/misc.m4 b/config/ac-macros/misc.m4 index 3ed64b5625b..fdce85aa136 100644 --- a/config/ac-macros/misc.m4 +++ b/config/ac-macros/misc.m4 @@ -1,35 +1,5 @@ # Local macros for automake & autoconf -# A local version of AC_CHECK_SIZEOF that includes sys/types.h -dnl MYSQL_CHECK_SIZEOF(TYPE [, CROSS-SIZE]) -AC_DEFUN([MYSQL_CHECK_SIZEOF], -[changequote(<<, >>)dnl -dnl The name to #define. -define(<<AC_TYPE_NAME>>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl -dnl The cache variable name. -define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl -changequote([, ])dnl -AC_MSG_CHECKING(size of $1) -AC_CACHE_VAL(AC_CV_NAME, -[AC_TRY_RUN([#include <stdio.h> -#include <sys/types.h> -#if STDC_HEADERS -#include <stdlib.h> -#include <stddef.h> -#endif -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof($1)); - exit(0); -}], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=0, ifelse([$2], , , AC_CV_NAME=$2))])dnl -AC_MSG_RESULT($AC_CV_NAME) -AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME, [ ]) -undefine([AC_TYPE_NAME])dnl -undefine([AC_CV_NAME])dnl -]) - #---START: Used in for client configure AC_DEFUN([MYSQL_TYPE_ACCEPT], [ac_save_CXXFLAGS="$CXXFLAGS" diff --git a/configure.in b/configure.in index 26ac723c0bc..e322f20f962 100644 --- a/configure.in +++ b/configure.in @@ -1687,7 +1687,7 @@ then AC_MSG_ERROR("MySQL needs a long long type.") fi # off_t is not a builtin type -MYSQL_CHECK_SIZEOF(off_t, 4) +AC_CHECK_SIZEOF(off_t, 4) if test "$ac_cv_sizeof_off_t" -eq 0 then AC_MSG_ERROR("MySQL needs a off_t type.") diff --git a/include/my_atomic.h b/include/my_atomic.h index c916026c0e0..9a319f84451 100644 --- a/include/my_atomic.h +++ b/include/my_atomic.h @@ -135,7 +135,13 @@ make_atomic_swap(ptr) #undef _atomic_h_cleanup_ #endif -typedef int32 intptr; /* TODO configure check */ +#if SIZEOF_CHARP == SIZEOF_INT +typedef int intptr; +#elif SIZEOF_CHARP == SIZEOF_LONG +typedef long intptr; +#else +#error +#endif #define MY_ATOMIC_OK 0 #define MY_ATOMIC_NOT_1CPU 1 diff --git a/mysql-test/r/mysqldump.result b/mysql-test/r/mysqldump.result index f01d8f6160e..153ddb7ca2b 100644 --- a/mysql-test/r/mysqldump.result +++ b/mysql-test/r/mysqldump.result @@ -2279,7 +2279,7 @@ INSERT INTO t1 VALUES(1), (2), (3), (4), (5); CREATE FUNCTION `bug9056_func1`(a INT, b INT) RETURNS int(11) RETURN a+b // CREATE PROCEDURE `bug9056_proc1`(IN a INT, IN b INT, OUT c INT) BEGIN SELECT a+b INTO c; end // -create function bug9056_func2(f1 char binary) returns char binary +create function bug9056_func2(f1 char binary) returns char begin set f1= concat( 'hello', f1 ); return f1; 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 7b31744cba9..8ff180044df 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/mysqldump.test b/mysql-test/t/mysqldump.test index 8acc29fcc50..c40a21e0ca0 100644 --- a/mysql-test/t/mysqldump.test +++ b/mysql-test/t/mysqldump.test @@ -951,7 +951,7 @@ CREATE FUNCTION `bug9056_func1`(a INT, b INT) RETURNS int(11) RETURN a+b // CREATE PROCEDURE `bug9056_proc1`(IN a INT, IN b INT, OUT c INT) BEGIN SELECT a+b INTO c; end // -create function bug9056_func2(f1 char binary) returns char binary +create function bug9056_func2(f1 char binary) returns char begin set f1= concat( 'hello', f1 ); return f1; 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 @@ -1729,9 +1729,27 @@ begin 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 d96d2419650..f029678a66e 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/sp.cc b/sql/sp.cc index c1bfc4f26cd..f60a167e39a 100644 --- a/sql/sp.cc +++ b/sql/sp.cc @@ -992,6 +992,7 @@ sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp, } DBUG_RETURN(sp->m_first_free_instance); } + level= sp->m_last_cached_sp->m_recursion_level + 1; if (level > depth) { @@ -1161,19 +1162,16 @@ 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)); 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); - DBUG_RETURN(ret); - } - - DBUG_RETURN(SP_KEY_NOT_FOUND); + DBUG_RETURN(ret); } diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index b8d68a91afc..4fd4572e58b 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, |