summaryrefslogtreecommitdiff
path: root/sql/sql_show.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_show.cc')
-rw-r--r--sql/sql_show.cc96
1 files changed, 65 insertions, 31 deletions
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 2320c148b3a..af4d4409115 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -1263,11 +1263,11 @@ mysqld_show_create_get_fields(THD *thd, TABLE_LIST *table_list,
mem_root);
field_list->push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
- MY_CS_NAME_SIZE),
+ MY_CS_CHARACTER_SET_NAME_SIZE),
mem_root);
field_list->push_back(new (mem_root)
Item_empty_string(thd, "collation_connection",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
}
else
@@ -6355,16 +6355,39 @@ int fill_schema_collation(THD *thd, TABLE_LIST *tables, COND *cond)
if (!(wild && wild[0] &&
wild_case_compare(scs, tmp_cl->coll_name.str, wild)))
{
- const char *tmp_buff;
+ LEX_CSTRING context_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_CONTEXT);
+ LEX_CSTRING full_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_FULL);
+ bool is_context= cmp(context_collation_name, full_collation_name);
+ /*
+ Some collations are applicable to multiple character sets.
+ Display them only once, with the short name (without the
+ character set prefix).
+ */
+ if (is_context &&
+ cmp(tmp_cl->cs_name, Lex_cstring(STRING_WITH_LEN("utf8mb4"))))
+ continue;
restore_record(table, s->default_values);
- table->field[0]->store(tmp_cl->coll_name.str, tmp_cl->coll_name.length,
- scs);
- table->field[1]->store(&tmp_cl->cs_name, scs);
- table->field[2]->store((longlong) tmp_cl->number, TRUE);
- tmp_buff= (tmp_cl->state & MY_CS_PRIMARY) ? "Yes" : "";
- table->field[3]->store(tmp_buff, strlen(tmp_buff), scs);
- tmp_buff= (tmp_cl->state & MY_CS_COMPILED)? "Yes" : "";
- table->field[4]->store(tmp_buff, strlen(tmp_buff), scs);
+ table->field[0]->store(context_collation_name, scs);
+ if (is_context)
+ {
+ table->field[1]->set_null(); // CHARACTER_SET_NAME
+ table->field[2]->set_null(); // ID
+ table->field[3]->set_null(); // IS_DEFAULT
+ }
+ else
+ {
+ table->field[1]->set_notnull(); // CHARACTER_SET_NAME
+ table->field[1]->store(tmp_cl->cs_name, scs);
+ table->field[2]->set_notnull(); // ID
+ table->field[2]->store((longlong) tmp_cl->number, TRUE);
+ table->field[3]->set_notnull(); // IS_DEFAULT
+ table->field[3]->store(
+ Show::Yes_or_empty::value(tmp_cl->default_flag()), scs);
+ }
+ table->field[4]->store(
+ Show::Yes_or_empty::value(tmp_cl->compiled_flag()), scs);
table->field[5]->store((longlong) tmp_cl->strxfrm_multiply, TRUE);
if (schema_table_store_record(thd, table))
return 1;
@@ -6399,8 +6422,16 @@ int fill_schema_coll_charset_app(THD *thd, TABLE_LIST *tables, COND *cond)
!my_charset_same(tmp_cs,tmp_cl))
continue;
restore_record(table, s->default_values);
- table->field[0]->store(&tmp_cl->coll_name, scs);
+ LEX_CSTRING context_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_CONTEXT);
+ LEX_CSTRING full_collation_name=
+ tmp_cl->get_collation_name(MY_COLLATION_NAME_MODE_FULL);
+ table->field[0]->store(context_collation_name, scs);
table->field[1]->store(&tmp_cl->cs_name, scs);
+ table->field[2]->store(full_collation_name, scs);
+ table->field[3]->store(tmp_cl->number);
+ table->field[4]->store(
+ Show::Yes_or_empty::value(tmp_cl->default_flag()), scs);
if (schema_table_store_record(thd, table))
return 1;
}
@@ -9075,7 +9106,7 @@ ST_FIELD_INFO schema_fields_info[]=
Column("CATALOG_NAME", Catalog(), NOT_NULL),
Column("SCHEMA_NAME", Name(), NOT_NULL, "Database"),
Column("DEFAULT_CHARACTER_SET_NAME", CSName(), NOT_NULL),
- Column("DEFAULT_COLLATION_NAME", CSName(), NOT_NULL),
+ Column("DEFAULT_COLLATION_NAME", CLName(), NOT_NULL),
Column("SQL_PATH", Varchar(FN_REFLEN), NULLABLE),
Column("SCHEMA_COMMENT", Varchar(DATABASE_COMMENT_MAXLEN), NOT_NULL),
CEnd()
@@ -9104,7 +9135,7 @@ ST_FIELD_INFO tables_fields_info[]=
Column("CREATE_TIME", Datetime(0), NULLABLE, "Create_time",OPEN_FULL_TABLE),
Column("UPDATE_TIME", Datetime(0), NULLABLE, "Update_time",OPEN_FULL_TABLE),
Column("CHECK_TIME", Datetime(0), NULLABLE, "Check_time", OPEN_FULL_TABLE),
- Column("TABLE_COLLATION", CSName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
+ Column("TABLE_COLLATION", CLName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
Column("CHECKSUM", ULonglong(), NULLABLE, "Checksum", OPEN_FULL_TABLE),
Column("CREATE_OPTIONS", Varchar(2048),NULLABLE, "Create_options",
OPEN_FULL_TABLE),
@@ -9134,7 +9165,7 @@ ST_FIELD_INFO columns_fields_info[]=
Column("NUMERIC_SCALE", ULonglong(), NULLABLE, OPEN_FRM_ONLY),
Column("DATETIME_PRECISION", ULonglong(), NULLABLE, OPEN_FRM_ONLY),
Column("CHARACTER_SET_NAME", CSName(), NULLABLE, OPEN_FRM_ONLY),
- Column("COLLATION_NAME", CSName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
+ Column("COLLATION_NAME", CLName(), NULLABLE, "Collation", OPEN_FRM_ONLY),
Column("COLUMN_TYPE", Longtext(65535), NOT_NULL, "Type", OPEN_FRM_ONLY),
Column("COLUMN_KEY", Varchar(3), NOT_NULL, "Key", OPEN_FRM_ONLY),
Column("EXTRA", Varchar(80), NOT_NULL, "Extra", OPEN_FRM_ONLY),
@@ -9151,7 +9182,7 @@ ST_FIELD_INFO columns_fields_info[]=
ST_FIELD_INFO charsets_fields_info[]=
{
Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"),
- Column("DEFAULT_COLLATE_NAME", CSName(), NOT_NULL, "Default collation"),
+ Column("DEFAULT_COLLATE_NAME", CLName(), NOT_NULL, "Default collation"),
Column("DESCRIPTION", Varchar(60), NOT_NULL, "Description"),
Column("MAXLEN", SLonglong(3), NOT_NULL, "Maxlen"),
CEnd()
@@ -9160,10 +9191,10 @@ ST_FIELD_INFO charsets_fields_info[]=
ST_FIELD_INFO collation_fields_info[]=
{
- Column("COLLATION_NAME", CSName(), NOT_NULL, "Collation"),
- Column("CHARACTER_SET_NAME", CSName(), NOT_NULL, "Charset"),
- Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL, "Id"),
- Column("IS_DEFAULT", Yes_or_empty(), NOT_NULL, "Default"),
+ Column("COLLATION_NAME", CLName(), NOT_NULL, "Collation"),
+ Column("CHARACTER_SET_NAME", CSName(), NULLABLE, "Charset"),
+ Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NULLABLE, "Id"),
+ Column("IS_DEFAULT", Yes_or_empty(), NULLABLE, "Default"),
Column("IS_COMPILED", Yes_or_empty(), NOT_NULL, "Compiled"),
Column("SORTLEN", SLonglong(3), NOT_NULL, "Sortlen"),
CEnd()
@@ -9236,8 +9267,8 @@ ST_FIELD_INFO events_fields_info[]=
Column("EVENT_COMMENT", Name(), NOT_NULL),
Column("ORIGINATOR", SLonglong(10),NOT_NULL,"Originator"),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, "character_set_client"),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, "collation_connection"),
- Column("DATABASE_COLLATION", CSName(), NOT_NULL, "Database Collation"),
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, "collation_connection"),
+ Column("DATABASE_COLLATION", CLName(), NOT_NULL, "Database Collation"),
CEnd()
};
@@ -9245,8 +9276,11 @@ ST_FIELD_INFO events_fields_info[]=
ST_FIELD_INFO coll_charset_app_fields_info[]=
{
- Column("COLLATION_NAME", CSName(), NOT_NULL),
+ Column("COLLATION_NAME", CLName(), NOT_NULL),
Column("CHARACTER_SET_NAME", CSName(), NOT_NULL),
+ Column("FULL_COLLATION_NAME",CLName(), NOT_NULL),
+ Column("ID", SLonglong(MY_INT32_NUM_DECIMAL_DIGITS), NOT_NULL),
+ Column("IS_DEFAULT", Yes_or_empty(), NOT_NULL),
CEnd()
};
@@ -9282,8 +9316,8 @@ ST_FIELD_INFO proc_fields_info[]=
Column("ROUTINE_COMMENT", Longtext(65535), NOT_NULL, "Comment"),
Column("DEFINER", Definer(), NOT_NULL, "Definer"),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, "character_set_client"),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, "collation_connection"),
- Column("DATABASE_COLLATION", CSName(), NOT_NULL, "Database Collation"),
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, "collation_connection"),
+ Column("DATABASE_COLLATION", CLName(), NOT_NULL, "Database Collation"),
CEnd()
};
@@ -9323,7 +9357,7 @@ ST_FIELD_INFO view_fields_info[]=
Column("DEFINER", Definer(), NOT_NULL, OPEN_FRM_ONLY),
Column("SECURITY_TYPE", Varchar(7), NOT_NULL, OPEN_FRM_ONLY),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, OPEN_FRM_ONLY),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, OPEN_FRM_ONLY),
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, OPEN_FRM_ONLY),
Column("ALGORITHM", Varchar(10),NOT_NULL, OPEN_FRM_ONLY),
CEnd()
};
@@ -9450,9 +9484,9 @@ ST_FIELD_INFO triggers_fields_info[]=
Column("DEFINER", Definer(), NOT_NULL, "Definer", OPEN_FRM_ONLY),
Column("CHARACTER_SET_CLIENT", CSName(), NOT_NULL, "character_set_client",
OPEN_FRM_ONLY),
- Column("COLLATION_CONNECTION", CSName(), NOT_NULL, "collation_connection",
+ Column("COLLATION_CONNECTION", CLName(), NOT_NULL, "collation_connection",
OPEN_FRM_ONLY),
- Column("DATABASE_COLLATION", CSName(), NOT_NULL, "Database Collation",
+ Column("DATABASE_COLLATION", CLName(), NOT_NULL, "Database Collation",
OPEN_FRM_ONLY),
CEnd()
};
@@ -10018,17 +10052,17 @@ static bool show_create_trigger_impl(THD *thd, Trigger *trigger)
fields.push_back(new (mem_root)
Item_empty_string(thd, "character_set_client",
- MY_CS_NAME_SIZE),
+ MY_CS_CHARACTER_SET_NAME_SIZE),
mem_root);
fields.push_back(new (mem_root)
Item_empty_string(thd, "collation_connection",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
fields.push_back(new (mem_root)
Item_empty_string(thd, "Database Collation",
- MY_CS_NAME_SIZE),
+ MY_CS_COLLATION_NAME_SIZE),
mem_root);
static const Datetime zero_datetime(Datetime::zero());