diff options
author | bar@bar.intranet.mysql.r18.ru <> | 2004-03-30 21:33:45 +0500 |
---|---|---|
committer | bar@bar.intranet.mysql.r18.ru <> | 2004-03-30 21:33:45 +0500 |
commit | dba73e1c869b8e11205895c742d4095dba2ea9dd (patch) | |
tree | 26ded7fd609fea6994f5c380fe5b25aa341c5fcf /sql | |
parent | 3bfbe6e0dd88d190c0f97720f6ee3ad80d113410 (diff) | |
download | mariadb-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.h | 2 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 33 |
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; }; |