summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <acurtis@xiphis.org>2005-08-27 07:28:45 +0100
committerunknown <acurtis@xiphis.org>2005-08-27 07:28:45 +0100
commitef055c333d22416061d24059e276eb6c6f8ea79e (patch)
treeb67ac4d7da33e83d6672b44a2df0d6508b166bef
parentf0aeadcd3cf0e5fe13cdbe5e9142693568912b90 (diff)
parentbddf61cfb34e9aca2e19ea8bf746ad97ada0f3b8 (diff)
downloadmariadb-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.result7
-rw-r--r--mysql-test/t/sp.test13
-rw-r--r--sql/sql_yacc.yy28
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",