summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
authorunknown <bell@sanja.is.com.ua>2003-04-05 21:51:03 +0300
committerunknown <bell@sanja.is.com.ua>2003-04-05 21:51:03 +0300
commit9a4258b4d45cc7f1e966b18317de78d87c63e285 (patch)
tree28ffad83d798a5e488517b63c0f3e9d18ae4a18f /sql/sql_yacc.yy
parentc801eb9703599bb35120dc1bdbbac3f4248f3674 (diff)
parent0ee981674c3c8a1533b72ae0b893352144c788bb (diff)
downloadmariadb-git-9a4258b4d45cc7f1e966b18317de78d87c63e285.tar.gz
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1
into sanja.is.com.ua:/home/bell/mysql/bk/work-in-4.1 sql/sql_yacc.yy: Auto merged
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy73
1 files changed, 26 insertions, 47 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 05ebaf89e09..07325d9a1b0 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -646,6 +646,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
opt_collate
charset_name
charset_name_or_default
+ old_or_new_charset_name
+ old_or_new_charset_name_or_default
collation_name
collation_name_or_default
@@ -1354,6 +1356,24 @@ charset_name_or_default:
charset_name { $$=$1; }
| DEFAULT { $$=NULL; } ;
+
+old_or_new_charset_name:
+ ident_or_text
+ {
+ if (!($$=get_charset_by_csname($1.str,MY_CS_PRIMARY,MYF(0))) &&
+ !($$=get_old_charset_by_name($1.str)))
+ {
+ net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,$1.str);
+ YYABORT;
+ }
+ }
+ | BINARY { $$= &my_charset_bin; }
+ ;
+
+old_or_new_charset_name_or_default:
+ old_or_new_charset_name { $$=$1; }
+ | DEFAULT { $$=NULL; } ;
+
collation_name:
ident_or_text
{
@@ -1366,7 +1386,7 @@ collation_name:
opt_collate:
/* empty */ { $$=NULL; }
- | COLLATE_SYM collation_name { $$=$2; }
+ | COLLATE_SYM collation_name_or_default { $$=$2; }
;
collation_name_or_default:
@@ -4383,56 +4403,15 @@ option_value:
find_sys_var("tx_isolation"),
new Item_int((int32) $4)));
}
- | charset set_expr_or_default
+ | charset old_or_new_charset_name_or_default
{
- THD *thd= YYTHD;
- LEX *lex= &thd->lex;
- if (!$2)
- {
- CHARSET_INFO *cl= thd->db_charset;
- $2= new Item_string(cl->name, strlen(cl->name), &my_charset_latin1);
- }
- lex->var_list.push_back(new set_var(lex->option_type,
- find_sys_var("client_collation"),
- $2));
+ LEX *lex= Lex;
+ lex->var_list.push_back(new set_var_client_collation($2,NULL,1));
}
| NAMES_SYM charset_name_or_default opt_collate
{
- THD* thd= YYTHD;
- LEX *lex= &thd->lex;
- CHARSET_INFO *cs= $2 ? $2 : thd->db_charset;
- CHARSET_INFO *cl= $3 ? $3 : cs;
-
- if (!my_charset_same(cs,cl))
- {
- net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH,
- cl->name,cs->csname);
- YYABORT;
- }
- lex->var_list.push_back(new set_var_client_collation(cl,1));
- }
- | COLLATION_SYM collation_name_or_default
- {
- THD* thd= YYTHD;
- LEX *lex= &thd->lex;
- CHARSET_INFO *cs= thd->variables.thd_charset;
- CHARSET_INFO *cl= $2;
-
- if (!cl)
- {
- if (!(cl=get_charset_by_csname(cs->csname,MY_CS_PRIMARY,MYF(0))))
- {
- net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,"DEFAULT");
- YYABORT;
- }
- }
- else if (!my_charset_same(cs,cl))
- {
- net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH,
- cl->name,cs->csname);
- YYABORT;
- }
- lex->var_list.push_back(new set_var_client_collation(cl,1));
+ LEX *lex= Lex;
+ lex->var_list.push_back(new set_var_client_collation($2,$3,1));
}
| PASSWORD equal text_or_password
{