summaryrefslogtreecommitdiff
path: root/sql/sql_show.cc
diff options
context:
space:
mode:
authorMichael Widenius <monty@mariadb.org>2016-06-24 23:42:35 +0200
committerSergei Golubchik <serg@mariadb.org>2016-06-30 11:43:02 +0200
commitfb67cde2370f7427b3279309daac712c369f1cf8 (patch)
tree94eecb3c669fdf00957f49741b75ee6eec057826 /sql/sql_show.cc
parent8f226121e52cbaa332964b24bd27e8babf9f2b06 (diff)
downloadmariadb-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.cc23
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(")"));
}
}