summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorbar@bar.intranet.mysql.r18.ru <>2004-03-30 21:33:45 +0500
committerbar@bar.intranet.mysql.r18.ru <>2004-03-30 21:33:45 +0500
commitdba73e1c869b8e11205895c742d4095dba2ea9dd (patch)
tree26ded7fd609fea6994f5c380fe5b25aa341c5fcf /sql
parent3bfbe6e0dd88d190c0f97720f6ee3ad80d113410 (diff)
downloadmariadb-git-dba73e1c869b8e11205895c742d4095dba2ea9dd.tar.gz
More different syntaxes for (1) modifying the default charaset/collation
and for (2) converting the columns: 1. ALTER TABLE t1 [DEFAULT] CHARACTER SET xxx [COLLATE yyy] 2. ALTER TABLE t1 CONVERT TO CHARACTER SET xxx [COLLATE yyy]
Diffstat (limited to 'sql')
-rw-r--r--sql/lex.h2
-rw-r--r--sql/sql_yacc.yy33
2 files changed, 21 insertions, 14 deletions
diff --git a/sql/lex.h b/sql/lex.h
index 3b32d2bcd3b..ceef140b5f7 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -115,6 +115,7 @@ static SYMBOL symbols[] = {
{ "COMPRESSED", SYM(COMPRESSED_SYM)},
{ "CONCURRENT", SYM(CONCURRENT)},
{ "CONSTRAINT", SYM(CONSTRAINT)},
+ { "CONVERT", SYM(CONVERT_SYM)},
{ "CREATE", SYM(CREATE)},
{ "CROSS", SYM(CROSS)},
{ "CUBE", SYM(CUBE_SYM)},
@@ -493,7 +494,6 @@ static SYMBOL sql_functions[] = {
{ "CONNECTION_ID", F_SYM(FUNC_ARG0),0,CREATE_FUNC(create_func_connection_id)},
{ "CONTAINS", F_SYM(FUNC_ARG2),0,CREATE_FUNC_GEOM(create_func_contains)},
{ "CONV", F_SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_conv)},
- { "CONVERT", SYM(CONVERT_SYM)},
{ "COUNT", SYM(COUNT_SYM)},
{ "COS", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cos)},
{ "COT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_cot)},
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 90dc209f0bc..ea2c7efb607 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -1108,26 +1108,16 @@ create_table_option:
table_list->next=0;
lex->create_info.used_fields|= HA_CREATE_USED_UNION;
}
- | DEFAULT charset opt_equal charset_name_or_default
+ | opt_default charset opt_equal charset_name_or_default
{
Lex->create_info.default_table_charset= $4;
Lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET;
}
- | charset opt_equal charset_name_or_default
+ | opt_default COLLATE_SYM opt_equal collation_name_or_default
{
- Lex->create_info.table_charset= $3;
- Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
- }
- | DEFAULT COLLATE_SYM opt_equal collation_name_or_default
- {
- Lex->create_info.table_charset= $4;
+ Lex->create_info.default_table_charset= $4;
Lex->create_info.used_fields|= HA_CREATE_USED_DEFAULT_CHARSET;
}
- | COLLATE_SYM opt_equal collation_name_or_default
- {
- Lex->create_info.table_charset= $3;
- Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
- }
| INSERT_METHOD opt_equal merge_insert_types { Lex->create_info.merge_insert_method= $3; Lex->create_info.used_fields|= HA_CREATE_USED_INSERT_METHOD;}
| DATA_SYM DIRECTORY_SYM opt_equal TEXT_STRING_sys
{ Lex->create_info.data_file_name= $4.str; }
@@ -1793,6 +1783,23 @@ alter_list_item:
lex->select_lex.db=$3->db.str;
lex->name= $3->table.str;
}
+ | CONVERT_SYM TO_SYM charset charset_name_or_default opt_collate
+ {
+ if (!$4)
+ {
+ THD *thd= YYTHD;
+ $4= thd->variables.collation_database;
+ }
+ $5= $5 ? $5 : $4;
+ if (!my_charset_same($4,$5))
+ {
+ net_printf(YYTHD,ER_COLLATION_CHARSET_MISMATCH,
+ $5->name,$4->csname);
+ YYABORT;
+ }
+ Lex->create_info.table_charset= $5;
+ Lex->create_info.used_fields|= HA_CREATE_USED_CHARSET;
+ }
| create_table_options_space_separated { Lex->simple_alter=0; }
| order_clause { Lex->simple_alter=0; };