do not re-populate I_S tables in subqueries
This commit is contained in:
parent
980bdc3d64
commit
f07b3463e7
@ -6,3 +6,15 @@ select variable_name from information_schema.session_variables where variable_na
|
||||
(select variable_name from information_schema.session_variables where variable_name = 'basedir');
|
||||
variable_name
|
||||
BASEDIR
|
||||
create table t1 (a char);
|
||||
insert t1 values ('a'),('t'),('z');
|
||||
flush status;
|
||||
select a, exists (select 1 from information_schema.columns where table_schema=concat('tes',a)) from t1;
|
||||
a exists (select 1 from information_schema.columns where table_schema=concat('tes',a))
|
||||
a 0
|
||||
t 1
|
||||
z 0
|
||||
show status like 'created_tmp_tables';
|
||||
Variable_name Value
|
||||
Created_tmp_tables 38
|
||||
drop table t1;
|
||||
|
@ -7,3 +7,16 @@ select variable_name from information_schema.session_status where variable_name
|
||||
select variable_name from information_schema.session_variables where variable_name =
|
||||
(select variable_name from information_schema.session_variables where variable_name = 'basedir');
|
||||
|
||||
#
|
||||
# information_schema tables inside subqueries, they should not be re-populated
|
||||
# (i_s.columns needs to scan i_s itself, creating a tmp table for every i_s
|
||||
# table. if it's re-populated, it'll do that multiple times)
|
||||
#
|
||||
create table t1 (a char);
|
||||
insert t1 values ('a'),('t'),('z');
|
||||
flush status;
|
||||
select a, exists (select 1 from information_schema.columns where table_schema=concat('tes',a)) from t1;
|
||||
# fix the result in ps-protocol
|
||||
--replace_result 39 38
|
||||
show status like 'created_tmp_tables';
|
||||
drop table t1;
|
||||
|
@ -7720,15 +7720,20 @@ bool get_schema_tables_result(JOIN *join,
|
||||
TABLE_LIST *table_list= tab->table->pos_in_table_list;
|
||||
if (table_list->schema_table && thd->fill_information_schema_tables())
|
||||
{
|
||||
#if MYSQL_VERSION_ID > 100105
|
||||
#error I_S tables only need to be re-populated if make_cond_for_info_schema() will preserve outer fields
|
||||
bool is_subselect= (&lex->unit != lex->current_select->master_unit() &&
|
||||
lex->current_select->master_unit()->item);
|
||||
#else
|
||||
#define is_subselect false
|
||||
#endif
|
||||
|
||||
/* A value of 0 indicates a dummy implementation */
|
||||
if (table_list->schema_table->fill_table == 0)
|
||||
continue;
|
||||
|
||||
/* skip I_S optimizations specific to get_all_tables */
|
||||
if (thd->lex->describe &&
|
||||
if (lex->describe &&
|
||||
(table_list->schema_table->fill_table != get_all_tables))
|
||||
continue;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user