mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +01:00
Bug#25081 SHOW FULL TABLES on table with latin chars in name fails
Problem: The Table_type column of "SHOW FULL TABLES" displayed "ERROR" instead of "BASE TABLE" for tables having non-ascii characters in their names. Reason: tablename to filename encoding was missing, so mysql_frm_type() tried to open a wrong file name. Fix: adding tablename to filename encoding
This commit is contained in:
parent
6712c0963d
commit
f3156a1840
3 changed files with 24 additions and 4 deletions
|
@ -730,4 +730,12 @@ show keys from `mysqlttest\1`.`a\b`;
|
|||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
drop table `mysqlttest\1`.`a\b`;
|
||||
drop database `mysqlttest\1`;
|
||||
set names utf8;
|
||||
drop table if exists `été`;
|
||||
create table `été` (field1 int);
|
||||
show full tables;
|
||||
Tables_in_test Table_type
|
||||
été BASE TABLE
|
||||
drop table `été`;
|
||||
set names latin1;
|
||||
End of 5.1 tests
|
||||
|
|
|
@ -563,4 +563,16 @@ show keys from `mysqlttest\1`.`a\b`;
|
|||
drop table `mysqlttest\1`.`a\b`;
|
||||
drop database `mysqlttest\1`;
|
||||
|
||||
#
|
||||
# Bug#25081 SHOW FULL TABLES on table with latin chars in name fails
|
||||
#
|
||||
set names utf8;
|
||||
--disable_warnings
|
||||
drop table if exists `été`;
|
||||
--enable_warnings
|
||||
create table `été` (field1 int);
|
||||
show full tables;
|
||||
drop table `été`;
|
||||
set names latin1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
|
|
@ -2490,7 +2490,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||
ST_SCHEMA_TABLE *schema_table= tables->schema_table;
|
||||
SELECT_LEX sel;
|
||||
INDEX_FIELD_VALUES idx_field_vals;
|
||||
char path[FN_REFLEN], *end, *base_name, *orig_base_name, *file_name;
|
||||
char path[FN_REFLEN], *base_name, *orig_base_name, *file_name;
|
||||
uint len;
|
||||
bool with_i_schema;
|
||||
enum enum_schema_tables schema_table_idx;
|
||||
|
@ -2507,7 +2507,6 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||
lex->view_prepare_mode= TRUE;
|
||||
DBUG_ENTER("get_all_tables");
|
||||
|
||||
LINT_INIT(end);
|
||||
LINT_INIT(len);
|
||||
|
||||
lex->reset_n_backup_query_tables_list(&query_tables_list_backup);
|
||||
|
@ -2598,7 +2597,6 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||
else
|
||||
{
|
||||
len= build_table_filename(path, sizeof(path), base_name, "", "", 0);
|
||||
end= path + len;
|
||||
len= FN_LEN - len;
|
||||
find_files_result res= find_files(thd, &files, base_name,
|
||||
path, idx_field_vals.table_value, 0);
|
||||
|
@ -2648,7 +2646,9 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||
}
|
||||
else
|
||||
{
|
||||
my_snprintf(end, len, "/%s%s", file_name, reg_ext);
|
||||
build_table_filename(path, sizeof(path),
|
||||
base_name, file_name, reg_ext, 0);
|
||||
|
||||
switch (mysql_frm_type(thd, path, ¬_used)) {
|
||||
case FRMTYPE_ERROR:
|
||||
table->field[3]->store(STRING_WITH_LEN("ERROR"),
|
||||
|
|
Loading…
Reference in a new issue