Commit cb57e856 authored by Mattias Jonsson's avatar Mattias Jonsson

merge

parents 0000c941 f42fab1b
...@@ -2277,7 +2277,8 @@ enum enum_explain_filename_mode ...@@ -2277,7 +2277,8 @@ enum enum_explain_filename_mode
{ {
EXPLAIN_ALL_VERBOSE= 0, EXPLAIN_ALL_VERBOSE= 0,
EXPLAIN_PARTITIONS_VERBOSE, EXPLAIN_PARTITIONS_VERBOSE,
EXPLAIN_PARTITIONS_AS_COMMENT EXPLAIN_PARTITIONS_AS_COMMENT,
EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING
}; };
uint explain_filename(const char *from, char *to, uint to_length, uint explain_filename(const char *from, char *to, uint to_length,
enum_explain_filename_mode explain_mode); enum_explain_filename_mode explain_mode);
......
...@@ -6184,17 +6184,17 @@ ER_FUNC_INEXISTENT_NAME_COLLISION 42000 ...@@ -6184,17 +6184,17 @@ ER_FUNC_INEXISTENT_NAME_COLLISION 42000
# When updating these, please update EXPLAIN_FILENAME_MAX_EXTRA_LENGTH in # When updating these, please update EXPLAIN_FILENAME_MAX_EXTRA_LENGTH in
# mysql_priv.h with the new maximal additional length for explain_filename. # mysql_priv.h with the new maximal additional length for explain_filename.
ER_DATABASE_NAME ER_DATABASE_NAME
eng "Database `%s`" eng "Database"
swe "Databas `%s`" swe "Databas"
ER_TABLE_NAME ER_TABLE_NAME
eng "Table `%s`" eng "Table"
swe "Tabell `%s`" swe "Tabell"
ER_PARTITION_NAME ER_PARTITION_NAME
eng "Partition `%s`" eng "Partition"
swe "Partition `%s`" swe "Partition"
ER_SUBPARTITION_NAME ER_SUBPARTITION_NAME
eng "Subpartition `%s`" eng "Subpartition"
swe "Subpartition `%s`" swe "Subpartition"
ER_TEMPORARY_NAME ER_TEMPORARY_NAME
eng "Temporary" eng "Temporary"
swe "Temporr" swe "Temporr"
......
...@@ -72,7 +72,7 @@ static void wait_for_kill_signal(THD *thd) ...@@ -72,7 +72,7 @@ static void wait_for_kill_signal(THD *thd)
@brief Helper function for explain_filename @brief Helper function for explain_filename
*/ */
static char* add_identifier(char *to_p, const char * end_p, static char* add_identifier(char *to_p, const char * end_p,
const char* name, uint name_len, int errcode) const char* name, uint name_len, bool add_quotes)
{ {
uint res; uint res;
uint errors; uint errors;
...@@ -92,18 +92,44 @@ static char* add_identifier(char *to_p, const char * end_p, ...@@ -92,18 +92,44 @@ static char* add_identifier(char *to_p, const char * end_p,
res= strconvert(&my_charset_filename, conv_name, system_charset_info, res= strconvert(&my_charset_filename, conv_name, system_charset_info,
conv_string, FN_REFLEN, &errors); conv_string, FN_REFLEN, &errors);
if (!res || errors) if (!res || errors)
{
DBUG_PRINT("error", ("strconvert of '%s' failed with %u (errors: %u)", conv_name, res, errors));
conv_name= name; conv_name= name;
}
else else
{ {
DBUG_PRINT("info", ("conv '%s' -> '%s'", conv_name, conv_string)); DBUG_PRINT("info", ("conv '%s' -> '%s'", conv_name, conv_string));
conv_name= conv_string; conv_name= conv_string;
} }
if (errcode) if (add_quotes && (end_p - to_p > 2))
to_p+= my_snprintf(to_p, end_p - to_p, ER(errcode), conv_name); {
*(to_p++)= '`';
while (*conv_name && (end_p - to_p - 1) > 0)
{
uint length= my_mbcharlen(system_charset_info, *conv_name);
if (!length)
length= 1;
if (length == 1 && *conv_name == '`')
{
if ((end_p - to_p) < 3)
break;
*(to_p++)= '`';
*(to_p++)= *(conv_name++);
}
else if (length < (end_p - to_p))
{
to_p= strnmov(to_p, conv_name, length);
conv_name+= length;
}
else
break; /* string already filled */
}
to_p= strnmov(to_p, "`", end_p - to_p);
}
else else
to_p+= my_snprintf(to_p, end_p - to_p, "`%s`", conv_name); to_p= strnmov(to_p, conv_name, end_p - to_p);
return to_p; DBUG_RETURN(to_p);
} }
...@@ -135,6 +161,8 @@ static char* add_identifier(char *to_p, const char * end_p, ...@@ -135,6 +161,8 @@ static char* add_identifier(char *to_p, const char * end_p,
[,[ Temporary| Renamed] Partition `p` [,[ Temporary| Renamed] Partition `p`
[, Subpartition `sp`]] *| [, Subpartition `sp`]] *|
(| is really a /, and it is all in one line) (| is really a /, and it is all in one line)
EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING ->
same as above but no quotes are added.
@retval Length of returned string @retval Length of returned string
*/ */
...@@ -245,28 +273,39 @@ uint explain_filename(const char *from, ...@@ -245,28 +273,39 @@ uint explain_filename(const char *from,
part_name_len-= 5; part_name_len-= 5;
} }
} }
else
table_name_len= strlen(table_name);
if (db_name) if (db_name)
{ {
if (explain_mode == EXPLAIN_ALL_VERBOSE) if (explain_mode == EXPLAIN_ALL_VERBOSE)
{ {
to_p= add_identifier(to_p, end_p, db_name, db_name_len, to_p= strnmov(to_p, ER(ER_DATABASE_NAME), end_p - to_p);
ER_DATABASE_NAME); *(to_p++)= ' ';
to_p= add_identifier(to_p, end_p, db_name, db_name_len, 1);
to_p= strnmov(to_p, ", ", end_p - to_p); to_p= strnmov(to_p, ", ", end_p - to_p);
} }
else else
{ {
to_p= add_identifier(to_p, end_p, db_name, db_name_len, 0); to_p= add_identifier(to_p, end_p, db_name, db_name_len,
(explain_mode !=
EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING));
to_p= strnmov(to_p, ".", end_p - to_p); to_p= strnmov(to_p, ".", end_p - to_p);
} }
} }
if (explain_mode == EXPLAIN_ALL_VERBOSE) if (explain_mode == EXPLAIN_ALL_VERBOSE)
to_p= add_identifier(to_p, end_p, table_name, table_name_len, {
ER_TABLE_NAME); to_p= strnmov(to_p, ER(ER_TABLE_NAME), end_p - to_p);
*(to_p++)= ' ';
to_p= add_identifier(to_p, end_p, table_name, table_name_len, 1);
}
else else
to_p= add_identifier(to_p, end_p, table_name, table_name_len, 0); to_p= add_identifier(to_p, end_p, table_name, table_name_len,
(explain_mode !=
EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING));
if (part_name) if (part_name)
{ {
if (explain_mode == EXPLAIN_PARTITIONS_AS_COMMENT) if (explain_mode == EXPLAIN_PARTITIONS_AS_COMMENT ||
explain_mode == EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING)
to_p= strnmov(to_p, " /* ", end_p - to_p); to_p= strnmov(to_p, " /* ", end_p - to_p);
else if (explain_mode == EXPLAIN_PARTITIONS_VERBOSE) else if (explain_mode == EXPLAIN_PARTITIONS_VERBOSE)
to_p= strnmov(to_p, " ", end_p - to_p); to_p= strnmov(to_p, " ", end_p - to_p);
...@@ -280,15 +319,22 @@ uint explain_filename(const char *from, ...@@ -280,15 +319,22 @@ uint explain_filename(const char *from,
to_p= strnmov(to_p, ER(ER_RENAMED_NAME), end_p - to_p); to_p= strnmov(to_p, ER(ER_RENAMED_NAME), end_p - to_p);
to_p= strnmov(to_p, " ", end_p - to_p); to_p= strnmov(to_p, " ", end_p - to_p);
} }
to_p= strnmov(to_p, ER(ER_PARTITION_NAME), end_p - to_p);
*(to_p++)= ' ';
to_p= add_identifier(to_p, end_p, part_name, part_name_len, to_p= add_identifier(to_p, end_p, part_name, part_name_len,
ER_PARTITION_NAME); (explain_mode !=
EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING));
if (subpart_name) if (subpart_name)
{ {
to_p= strnmov(to_p, ", ", end_p - to_p); to_p= strnmov(to_p, ", ", end_p - to_p);
to_p= strnmov(to_p, ER(ER_SUBPARTITION_NAME), end_p - to_p);
*(to_p++)= ' ';
to_p= add_identifier(to_p, end_p, subpart_name, subpart_name_len, to_p= add_identifier(to_p, end_p, subpart_name, subpart_name_len,
ER_SUBPARTITION_NAME); (explain_mode !=
EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING));
} }
if (explain_mode == EXPLAIN_PARTITIONS_AS_COMMENT) if (explain_mode == EXPLAIN_PARTITIONS_AS_COMMENT ||
explain_mode == EXPLAIN_PARTITIONS_AS_COMMENT_NO_QUOTING)
to_p= strnmov(to_p, " */", end_p - to_p); to_p= strnmov(to_p, " */", end_p - to_p);
} }
DBUG_PRINT("exit", ("to '%s'", to)); DBUG_PRINT("exit", ("to '%s'", to));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment