Commit 9519fe84 authored by unknown's avatar unknown

We should not skip temptable view along with other derived

tables during query tables registration. (BUG#15119)


mysql-test/r/view_query_cache.result:
  Tests for temptable views in the query cache.
mysql-test/t/view_query_cache.test:
  Tests for temptable views in the query cache.
sql/sql_cache.cc:
  We should not skip temptable view along with other derived
  tables during query tables registration.
parent fa5df050
...@@ -132,4 +132,65 @@ unlock tables; ...@@ -132,4 +132,65 @@ unlock tables;
set query_cache_wlock_invalidate=default; set query_cache_wlock_invalidate=default;
drop view v1; drop view v1;
drop table t1; drop table t1;
flush status;
create table t1 (a int, b int);
create algorithm=temptable view v1 as select * from t1;
select * from v1;
a b
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 0
select * from v1;
a b
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
insert into t1 values (1,1);
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 1
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 1
select * from v1;
a b
1 1
select * from v1;
a b
1 1
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 2
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 2
drop view v1;
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 0
show status like "Qcache_inserts";
Variable_name Value
Qcache_inserts 2
show status like "Qcache_hits";
Variable_name Value
Qcache_hits 2
drop table t1;
set GLOBAL query_cache_size=default; set GLOBAL query_cache_size=default;
...@@ -96,4 +96,35 @@ unlock tables; ...@@ -96,4 +96,35 @@ unlock tables;
set query_cache_wlock_invalidate=default; set query_cache_wlock_invalidate=default;
drop view v1; drop view v1;
drop table t1; drop table t1;
#
# BUG#15119: returning temptable view from the query cache.
#
flush status;
create table t1 (a int, b int);
create algorithm=temptable view v1 as select * from t1;
select * from v1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
select * from v1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
insert into t1 values (1,1);
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
select * from v1;
select * from v1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
drop view v1;
show status like "Qcache_queries_in_cache";
show status like "Qcache_inserts";
show status like "Qcache_hits";
drop table t1;
# Reset default environment.
set GLOBAL query_cache_size=default; set GLOBAL query_cache_size=default;
...@@ -2184,7 +2184,7 @@ Query_cache::register_tables_from_list(TABLE_LIST *tables_used, ...@@ -2184,7 +2184,7 @@ Query_cache::register_tables_from_list(TABLE_LIST *tables_used,
tables_used; tables_used;
tables_used= tables_used->next_global, n++, block_table++) tables_used= tables_used->next_global, n++, block_table++)
{ {
if (tables_used->derived) if (tables_used->derived && !tables_used->view)
{ {
DBUG_PRINT("qcache", ("derived table skipped")); DBUG_PRINT("qcache", ("derived table skipped"));
n--; n--;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment