mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Bug#17661 information_schema.SCHEMATA returns uppercase with lower_case_table_names = 1
fix: return db name for I_S.TABLES(and others) in original letter case. if mysql starts with lower_case_table_names=1 | 2 then original db name is converted to lower case(for I_S tables). It happens when we perform add_table_to_list. to avoid this we make a copy of original db name and use the copy hereafter.
This commit is contained in:
@@ -165,3 +165,12 @@ create table t1Aa (col1 int);
|
|||||||
select t1Aa.col1 from t1aA,t2Aa where t1Aa.col1 = t2aA.col1;
|
select t1Aa.col1 from t1aA,t2Aa where t1Aa.col1 = t2aA.col1;
|
||||||
col1
|
col1
|
||||||
drop table t2aA, t1Aa;
|
drop table t2aA, t1Aa;
|
||||||
|
create database mysqltest_LC2;
|
||||||
|
use mysqltest_LC2;
|
||||||
|
create table myUC (i int);
|
||||||
|
select TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES
|
||||||
|
where TABLE_SCHEMA ='mysqltest_LC2';
|
||||||
|
TABLE_SCHEMA TABLE_NAME
|
||||||
|
mysqltest_LC2 myUC
|
||||||
|
use test;
|
||||||
|
drop database mysqltest_LC2;
|
||||||
|
@@ -139,3 +139,14 @@ select t1Aa.col1 from t1aA,t2Aa where t1Aa.col1 = t2aA.col1;
|
|||||||
drop table t2aA, t1Aa;
|
drop table t2aA, t1Aa;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#17661 information_schema.SCHEMATA returns uppercase with lower_case_table_names = 1
|
||||||
|
#
|
||||||
|
create database mysqltest_LC2;
|
||||||
|
use mysqltest_LC2;
|
||||||
|
create table myUC (i int);
|
||||||
|
select TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES
|
||||||
|
where TABLE_SCHEMA ='mysqltest_LC2';
|
||||||
|
use test;
|
||||||
|
drop database mysqltest_LC2;
|
||||||
|
@@ -2070,7 +2070,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
ST_SCHEMA_TABLE *schema_table= tables->schema_table;
|
ST_SCHEMA_TABLE *schema_table= tables->schema_table;
|
||||||
SELECT_LEX sel;
|
SELECT_LEX sel;
|
||||||
INDEX_FIELD_VALUES idx_field_vals;
|
INDEX_FIELD_VALUES idx_field_vals;
|
||||||
char path[FN_REFLEN], *end, *base_name, *file_name;
|
char path[FN_REFLEN], *end, *base_name, *orig_base_name, *file_name;
|
||||||
uint len;
|
uint len;
|
||||||
bool with_i_schema;
|
bool with_i_schema;
|
||||||
enum enum_schema_tables schema_table_idx;
|
enum enum_schema_tables schema_table_idx;
|
||||||
@@ -2150,7 +2150,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
|
|
||||||
partial_cond= make_cond_for_info_schema(cond, tables);
|
partial_cond= make_cond_for_info_schema(cond, tables);
|
||||||
it.rewind(); /* To get access to new elements in basis list */
|
it.rewind(); /* To get access to new elements in basis list */
|
||||||
while ((base_name= it++) ||
|
while ((orig_base_name= base_name= it++) ||
|
||||||
/*
|
/*
|
||||||
generate error for non existing database.
|
generate error for non existing database.
|
||||||
(to save old behaviour for SHOW TABLES FROM db)
|
(to save old behaviour for SHOW TABLES FROM db)
|
||||||
@@ -2181,6 +2181,8 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
if (mysql_find_files(thd, &files, base_name,
|
if (mysql_find_files(thd, &files, base_name,
|
||||||
path, idx_field_vals.table_value, 0))
|
path, idx_field_vals.table_value, 0))
|
||||||
goto err;
|
goto err;
|
||||||
|
if (lower_case_table_names)
|
||||||
|
orig_base_name= thd->strdup(base_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
List_iterator_fast<char> it_files(files);
|
List_iterator_fast<char> it_files(files);
|
||||||
@@ -2249,7 +2251,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond)
|
|||||||
in this case.
|
in this case.
|
||||||
*/
|
*/
|
||||||
res= schema_table->process_table(thd, show_table_list, table,
|
res= schema_table->process_table(thd, show_table_list, table,
|
||||||
res, base_name,
|
res, orig_base_name,
|
||||||
show_table_list->alias);
|
show_table_list->alias);
|
||||||
close_tables_for_reopen(thd, &show_table_list);
|
close_tables_for_reopen(thd, &show_table_list);
|
||||||
DBUG_ASSERT(!lex->query_tables_own_last);
|
DBUG_ASSERT(!lex->query_tables_own_last);
|
||||||
|
Reference in New Issue
Block a user