Commit 011fed60 authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

Fixed bug in query cache after temporary table creation.

parent cf30288d
...@@ -50147,6 +50147,8 @@ each individual 4.0.x release. ...@@ -50147,6 +50147,8 @@ each individual 4.0.x release.
@itemize @bullet @itemize @bullet
@item @item
Fixed bug in query cache after temporary table creation.
@item
Fixed bug in multi-table @code{UPDATE}: when updating a table, Fixed bug in multi-table @code{UPDATE}: when updating a table,
@code{do_select()} became confused about reading records from a cache. @code{do_select()} became confused about reading records from a cache.
@item @item
...@@ -506,3 +506,23 @@ set GLOBAL query_cache_size=1900; ...@@ -506,3 +506,23 @@ set GLOBAL query_cache_size=1900;
show global variables like "query_cache_size"; show global variables like "query_cache_size";
Variable_name Value Variable_name Value
query_cache_size 1024 query_cache_size 1024
set GLOBAL query_cache_size=1048576;
create table t1 (i int not null);
create table t2 (i int not null);
select * from t1;
i
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 1
create temporary table t3 (i int not null);
select * from t2;
i
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
select * from t3;
i
show status like "Qcache_queries_in_cache";
Variable_name Value
Qcache_queries_in_cache 2
drop table t1, t2, t3;
...@@ -352,3 +352,18 @@ set GLOBAL query_cache_size=1700; ...@@ -352,3 +352,18 @@ set GLOBAL query_cache_size=1700;
set GLOBAL query_cache_size=1800; set GLOBAL query_cache_size=1800;
set GLOBAL query_cache_size=1900; set GLOBAL query_cache_size=1900;
show global variables like "query_cache_size"; show global variables like "query_cache_size";
#
# Temporary tables
#
set GLOBAL query_cache_size=1048576;
create table t1 (i int not null);
create table t2 (i int not null);
select * from t1;
show status like "Qcache_queries_in_cache";
create temporary table t3 (i int not null);
select * from t2;
show status like "Qcache_queries_in_cache";
select * from t3;
show status like "Qcache_queries_in_cache";
drop table t1, t2, t3;
...@@ -2395,7 +2395,6 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len, ...@@ -2395,7 +2395,6 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len,
DBUG_ENTER("Query_cache::is_cacheable"); DBUG_ENTER("Query_cache::is_cacheable");
if (lex->sql_command == SQLCOM_SELECT && if (lex->sql_command == SQLCOM_SELECT &&
thd->temporary_tables == 0 &&
(thd->variables.query_cache_type == 1 || (thd->variables.query_cache_type == 1 ||
(thd->variables.query_cache_type == 2 && (lex->select->options & (thd->variables.query_cache_type == 2 && (lex->select->options &
OPTION_TO_QUERY_CACHE))) && OPTION_TO_QUERY_CACHE))) &&
...@@ -2416,9 +2415,11 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len, ...@@ -2416,9 +2415,11 @@ TABLE_COUNTER_TYPE Query_cache::is_cacheable(THD *thd, uint32 query_len,
has_transactions = (has_transactions || has_transactions = (has_transactions ||
tables_used->table->file->has_transactions()); tables_used->table->file->has_transactions());
if (tables_used->table->db_type == DB_TYPE_MRG_ISAM) if (tables_used->table->db_type == DB_TYPE_MRG_ISAM ||
tables_used->table->tmp_table != NO_TMP_TABLE)
{ {
DBUG_PRINT("qcache", ("select not cacheable: used MRG_ISAM table(s)")); DBUG_PRINT("qcache",
("select not cacheable: used MRG_ISAM or temporary table(s)"));
DBUG_RETURN(0); DBUG_RETURN(0);
} }
if (tables_used->table->db_type == DB_TYPE_MRG_MYISAM) if (tables_used->table->db_type == DB_TYPE_MRG_MYISAM)
......
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