Skip to content

Commit

Permalink
do not re-populate I_S tables in subqueries
Browse files Browse the repository at this point in the history
  • Loading branch information
vuvova committed Jun 5, 2015
1 parent 980bdc3 commit f07b346
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 1 deletion.
12 changes: 12 additions & 0 deletions mysql-test/r/information_schema2.result
Original file line number Diff line number Diff line change
Expand Up @@ -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;
13 changes: 13 additions & 0 deletions mysql-test/t/information_schema2.test
Original file line number Diff line number Diff line change
Expand Up @@ -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;
7 changes: 6 additions & 1 deletion sql/sql_show.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down

0 comments on commit f07b346

Please sign in to comment.