diff options
author | unknown <acurtis@xiphis.org> | 2005-08-27 07:28:45 +0100 |
---|---|---|
committer | unknown <acurtis@xiphis.org> | 2005-08-27 07:28:45 +0100 |
commit | ef055c333d22416061d24059e276eb6c6f8ea79e (patch) | |
tree | b67ac4d7da33e83d6672b44a2df0d6508b166bef | |
parent | f0aeadcd3cf0e5fe13cdbe5e9142693568912b90 (diff) | |
parent | bddf61cfb34e9aca2e19ea8bf746ad97ada0f3b8 (diff) | |
download | mariadb-git-ef055c333d22416061d24059e276eb6c6f8ea79e.tar.gz |
Merge acurtis@bk-internal.mysql.com:/home/bk/mysql-5.0
into xiphis.org:/usr/home/antony/work2/p3-bug9048.2
-rw-r--r-- | mysql-test/r/sp.result | 7 | ||||
-rw-r--r-- | mysql-test/t/sp.test | 13 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 28 |
3 files changed, 43 insertions, 5 deletions
diff --git a/mysql-test/r/sp.result b/mysql-test/r/sp.result index 0ae4fc04025..7fcb7978670 100644 --- a/mysql-test/r/sp.result +++ b/mysql-test/r/sp.result @@ -3186,4 +3186,11 @@ end| call bug11333(10)| drop procedure bug11333| drop table t3| +drop function if exists bug9048| +create function bug9048(f1 char binary) returns char binary +begin +set f1= concat( 'hello', f1 ); +return f1; +end| +drop function bug9048| drop table t1,t2; diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test index 0e3cbff8979..f1662a57c1b 100644 --- a/mysql-test/t/sp.test +++ b/mysql-test/t/sp.test @@ -4031,6 +4031,19 @@ drop procedure bug11333| drop table t3| # +# BUG#9048: Creating a function with char binary IN parameter fails +# +--disable_warnings +drop function if exists bug9048| +--enable_warnings +create function bug9048(f1 char binary) returns char binary +begin + set f1= concat( 'hello', f1 ); + return f1; +end| +drop function bug9048| + +# # BUG#NNNN: New bug synopsis # #--disable_warnings diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 53fce787032..ae45df81345 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -2874,10 +2874,10 @@ type: $$=FIELD_TYPE_STRING; } | char opt_binary { Lex->length=(char*) "1"; $$=FIELD_TYPE_STRING; } - | nchar '(' NUM ')' { Lex->length=$3.str; + | nchar '(' NUM ')' opt_bin_mod { Lex->length=$3.str; $$=FIELD_TYPE_STRING; Lex->charset=national_charset_info; } - | nchar { Lex->length=(char*) "1"; + | nchar opt_bin_mod { Lex->length=(char*) "1"; $$=FIELD_TYPE_STRING; Lex->charset=national_charset_info; } | BINARY '(' NUM ')' { Lex->length=$3.str; @@ -2888,7 +2888,7 @@ type: $$=FIELD_TYPE_STRING; } | varchar '(' NUM ')' opt_binary { Lex->length=$3.str; $$= MYSQL_TYPE_VARCHAR; } - | nvarchar '(' NUM ')' { Lex->length=$3.str; + | nvarchar '(' NUM ')' opt_bin_mod { Lex->length=$3.str; $$= MYSQL_TYPE_VARCHAR; Lex->charset=national_charset_info; } | VARBINARY '(' NUM ')' { Lex->length=$3.str; @@ -3077,7 +3077,6 @@ attribute: lex->alter_info.flags|= ALTER_ADD_INDEX; } | COMMENT_SYM TEXT_STRING_sys { Lex->comment= $2; } - | BINARY { Lex->type|= BINCMP_FLAG; } | COLLATE_SYM collation_name { if (Lex->charset && !my_charset_same(Lex->charset,$2)) @@ -3162,8 +3161,27 @@ opt_default: opt_binary: /* empty */ { Lex->charset=NULL; } - | ASCII_SYM { Lex->charset=&my_charset_latin1; } + | ASCII_SYM opt_bin_mod { Lex->charset=&my_charset_latin1; } | BYTE_SYM { Lex->charset=&my_charset_bin; } + | UNICODE_SYM opt_bin_mod + { + if (!(Lex->charset=get_charset_by_csname("ucs2", + MY_CS_PRIMARY,MYF(0)))) + { + my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), "ucs2"); + YYABORT; + } + } + | charset charset_name opt_bin_mod { Lex->charset=$2; } + | BINARY opt_bin_charset { Lex->type|= BINCMP_FLAG; }; + +opt_bin_mod: + /* empty */ { } + | BINARY { Lex->type|= BINCMP_FLAG; }; + +opt_bin_charset: + /* empty */ { } + | ASCII_SYM { Lex->charset=&my_charset_latin1; } | UNICODE_SYM { if (!(Lex->charset=get_charset_by_csname("ucs2", |