Commit 8e24e607 authored by unknown's avatar unknown
Browse files

Flush entries from the query cache for tables used in

administrative statements that may alter the table, such
as REPAIR TABLE. (Bug #8480)


mysql-test/r/query_cache.result:
  Add new results
mysql-test/t/query_cache.test:
  Add regression test
sql/sql_table.cc:
  Make sure entries are flushed from the query cache for
  any administrative command run on a table that acquires
  a write lock on it (and thus might change it), like 
  REPAIR TABLE.
parent a93b0b59
Loading
Loading
Loading
Loading
+20 −0
Original line number Diff line number Diff line
@@ -717,4 +717,24 @@ select * from t1;
a
drop table t1;
drop table t1;
set global query_cache_size=1024*1024;
flush query cache;
create table t1 ( a int );
insert into t1 values (1);
select a from t1;
a
1
select a from t1;
a
1
show status like 'qcache_queries_in_cache';
Variable_name	Value
Qcache_queries_in_cache	1
repair table t1;
Table	Op	Msg_type	Msg_text
test.t1	repair	status	OK
show status like 'qcache_queries_in_cache';
Variable_name	Value
Qcache_queries_in_cache	0
drop table t1;
set GLOBAL query_cache_size=0;
+12 −0
Original line number Diff line number Diff line
@@ -533,4 +533,16 @@ select * from t1;
drop table t1;
drop table t1;

# Bug #8480: REPAIR TABLE needs to flush the table from the query cache
set global query_cache_size=1024*1024;
flush query cache;
create table t1 ( a int );
insert into t1 values (1);
select a from t1;
select a from t1;
show status like 'qcache_queries_in_cache';
repair table t1;
show status like 'qcache_queries_in_cache';
drop table t1;

set GLOBAL query_cache_size=0;
+3 −1
Original line number Diff line number Diff line
@@ -1318,6 +1318,8 @@ static int mysql_admin_table(THD* thd, TABLE_LIST* tables,
      thd->exit_cond(old_message);
      if (thd->killed)
	goto err;
      /* Flush entries in the query cache involving this table. */
      query_cache_invalidate3(thd, table->table, 0);
      open_for_modify= 0;
    }