mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
temporary tables of subquery in the from clause just skipped during processing QC tables (BUG#11522)
mysql-test/r/query_cache.result: queries with subquery in the FROM clause mysql-test/t/query_cache.test: queries with subquery in the FROM clause sql/sql_cache.cc: temporary tables of subquery in the from clause just skipped during processing QC tables
This commit is contained in:
File diff suppressed because one or more lines are too long
@ -730,4 +730,30 @@ flush query cache;
|
|||||||
|
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
reset query cache;
|
||||||
|
flush status;
|
||||||
|
|
||||||
|
#
|
||||||
|
# queries with subquery in the FROM clause (BUG#11522)
|
||||||
|
#
|
||||||
|
select * from (select * from t1) a;
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_inserts";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
select * from (select * from t1) a;
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_inserts";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
insert into t1 values (2);
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_inserts";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
select * from (select * from t1) a;
|
||||||
|
show status like "Qcache_queries_in_cache";
|
||||||
|
show status like "Qcache_inserts";
|
||||||
|
show status like "Qcache_hits";
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
set GLOBAL query_cache_size=0;
|
set GLOBAL query_cache_size=0;
|
||||||
|
@ -2114,6 +2114,13 @@ my_bool Query_cache::register_all_tables(Query_cache_block *block,
|
|||||||
|
|
||||||
for (n=0; tables_used; tables_used=tables_used->next, n++, block_table++)
|
for (n=0; tables_used; tables_used=tables_used->next, n++, block_table++)
|
||||||
{
|
{
|
||||||
|
if (tables_used->derived)
|
||||||
|
{
|
||||||
|
DBUG_PRINT("qcache", ("derived table skipped"));
|
||||||
|
n--;
|
||||||
|
block_table--;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
DBUG_PRINT("qcache",
|
DBUG_PRINT("qcache",
|
||||||
("table %s, db %s, openinfo at 0x%lx, keylen %u, key at 0x%lx",
|
("table %s, db %s, openinfo at 0x%lx, keylen %u, key at 0x%lx",
|
||||||
tables_used->real_name, tables_used->db,
|
tables_used->real_name, tables_used->db,
|
||||||
@ -2671,7 +2678,8 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len,
|
|||||||
table_alias_charset used here because it depends of
|
table_alias_charset used here because it depends of
|
||||||
lower_case_table_names variable
|
lower_case_table_names variable
|
||||||
*/
|
*/
|
||||||
if (tables_used->table->tmp_table != NO_TMP_TABLE ||
|
if ((tables_used->table->tmp_table != NO_TMP_TABLE &&
|
||||||
|
!tables_used->derived) ||
|
||||||
(*tables_type & HA_CACHE_TBL_NOCACHE) ||
|
(*tables_type & HA_CACHE_TBL_NOCACHE) ||
|
||||||
(tables_used->db_length == 5 &&
|
(tables_used->db_length == 5 &&
|
||||||
my_strnncoll(table_alias_charset, (uchar*)tables_used->db, 6,
|
my_strnncoll(table_alias_charset, (uchar*)tables_used->db, 6,
|
||||||
@ -2682,7 +2690,12 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len,
|
|||||||
other non-cacheable table(s)"));
|
other non-cacheable table(s)"));
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
if (tables_used->table->db_type == DB_TYPE_MRG_MYISAM)
|
if (tables_used->derived)
|
||||||
|
{
|
||||||
|
table_count--;
|
||||||
|
DBUG_PRINT("qcache", ("derived table skipped"));
|
||||||
|
}
|
||||||
|
else if (tables_used->table->db_type == DB_TYPE_MRG_MYISAM)
|
||||||
{
|
{
|
||||||
ha_myisammrg *handler = (ha_myisammrg *)tables_used->table->file;
|
ha_myisammrg *handler = (ha_myisammrg *)tables_used->table->file;
|
||||||
MYRG_INFO *file = handler->myrg_info();
|
MYRG_INFO *file = handler->myrg_info();
|
||||||
|
Reference in New Issue
Block a user