diff options
author | Michael Widenius <monty@mariadb.org> | 2016-06-24 23:42:35 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2016-06-30 11:43:02 +0200 |
commit | fb67cde2370f7427b3279309daac712c369f1cf8 (patch) | |
tree | 94eecb3c669fdf00957f49741b75ee6eec057826 /sql/sql_show.cc | |
parent | 8f226121e52cbaa332964b24bd27e8babf9f2b06 (diff) | |
download | mariadb-git-fb67cde2370f7427b3279309daac712c369f1cf8.tar.gz |
Use default character set for expressions
- Force usage of () around complex DEFAULT expressions
- Give error if DEFAULT expression contains invalid characters
- Don't use const_charset_conversion for stored Item_func_sysconf expressions
as the result is not constaint over different executions
- Fixed Item_func_user() to not store calculated value in str_value
Diffstat (limited to 'sql/sql_show.cc')
-rw-r--r-- | sql/sql_show.cc | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/sql/sql_show.cc b/sql/sql_show.cc index 2cc57f0ea8c..5176bcbbc00 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -1636,9 +1636,18 @@ static bool get_field_default_value(THD *thd, Field *field, String *def_value, { if (field->default_value) { - def_value->set(field->default_value->expr_str.str, - field->default_value->expr_str.length, - system_charset_info); + if (field->default_value->expr_item->need_parentheses_in_default()) + { + def_value->set_charset(&my_charset_utf8mb4_general_ci); + def_value->append('('); + def_value->append(field->default_value->expr_str.str, + field->default_value->expr_str.length); + def_value->append(')'); + } + else + def_value->set(field->default_value->expr_str.str, + field->default_value->expr_str.length, + &my_charset_utf8mb4_general_ci); } else if (has_now_default) { @@ -1892,7 +1901,7 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet, packet->append(STRING_WITH_LEN(" AS (")); packet->append(field->vcol_info->expr_str.str, field->vcol_info->expr_str.length, - system_charset_info); + &my_charset_utf8mb4_general_ci); packet->append(STRING_WITH_LEN(")")); if (field->vcol_info->stored_in_db) packet->append(STRING_WITH_LEN(" PERSISTENT")); @@ -1933,7 +1942,8 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet, { packet->append(STRING_WITH_LEN(" CHECK (")); packet->append(field->check_constraint->expr_str.str, - field->check_constraint->expr_str.length); + field->check_constraint->expr_str.length, + &my_charset_utf8mb4_general_ci); packet->append(STRING_WITH_LEN(")")); } @@ -2041,7 +2051,8 @@ int show_create_table(THD *thd, TABLE_LIST *table_list, String *packet, } packet->append(STRING_WITH_LEN(" CHECK (")); packet->append(check->expr_str.str, - check->expr_str.length); + check->expr_str.length, + &my_charset_utf8mb4_general_ci); packet->append(STRING_WITH_LEN(")")); } } |