List:Commits« Previous MessageNext Message »
From:Davi Arnaut Date:January 22 2009 11:23am
Subject:bzr commit into mysql-5.1-bugteam branch (davi:2750) Bug#40264
View as plain text  
# At a local mysql-5.1-bugteam repository of davi

 2750 Davi Arnaut	2009-01-22 [merge]
      Merge test case of Bug#40264 to mysql-5.1-bugteam
modified:
  mysql-test/r/query_cache_notembedded.result
  mysql-test/t/query_cache_notembedded.test
  sql/sql_cache.cc

per-file messages:
  sql/sql_cache.cc
    Assert that results are always complete.
=== modified file 'mysql-test/r/query_cache_notembedded.result'
--- a/mysql-test/r/query_cache_notembedded.result	2007-10-16 12:42:42 +0000
+++ b/mysql-test/r/query_cache_notembedded.result	2009-01-22 11:22:26 +0000
@@ -346,6 +346,22 @@ id
 drop table t1;
 drop function f1;
 set GLOBAL query_cache_size=0;
+DROP TABLE IF EXISTS t1;
+FLUSH STATUS;
+SET GLOBAL query_cache_size=1048576;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
+SHOW STATUS LIKE 'Qcache_queries_in_cache';
+Variable_name	Value
+Qcache_queries_in_cache	0
+LOCK TABLES t1 WRITE;
+SELECT * FROM t1;
+UNLOCK TABLES;
+SHOW STATUS LIKE 'Qcache_queries_in_cache';
+Variable_name	Value
+Qcache_queries_in_cache	0
+DROP TABLE t1;
+SET GLOBAL query_cache_size= default;
 SET GLOBAL log_bin_trust_function_creators = 0;
 DROP DATABASE IF EXISTS bug30269;
 FLUSH STATUS;

=== modified file 'mysql-test/t/query_cache_notembedded.test'
--- a/mysql-test/t/query_cache_notembedded.test	2007-10-16 12:42:42 +0000
+++ b/mysql-test/t/query_cache_notembedded.test	2009-01-22 11:22:26 +0000
@@ -224,6 +224,38 @@ disconnect con2;
 connection default;
 
 set GLOBAL query_cache_size=0;
+
+#
+# Bug#40264: Aborted cached query causes query to hang indefinitely on next cache hit
+#
+
+--disable_warnings
+DROP TABLE IF EXISTS t1;
+--enable_warnings
+
+FLUSH STATUS;
+SET GLOBAL query_cache_size=1048576;
+CREATE TABLE t1 (a INT);
+INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
+SHOW STATUS LIKE 'Qcache_queries_in_cache';
+LOCK TABLES t1 WRITE;
+connect(con1,localhost,root,,);
+--send SELECT * FROM t1
+connection default;
+let $show_type= open tables where `table`='t1' and in_use=2;
+let $show_pattern= '%t1%2%';
+--source include/wait_show_pattern.inc
+dirty_close con1;
+UNLOCK TABLES;
+let $show_type= open tables where `table`='t1' and in_use=0;
+let $show_pattern= '%t1%0%';
+--source include/wait_show_pattern.inc
+SHOW STATUS LIKE 'Qcache_queries_in_cache';
+DROP TABLE t1;
+SET GLOBAL query_cache_size= default;
+
+# End of 5.0 tests
+
 SET GLOBAL log_bin_trust_function_creators = 0;
 
 #

=== modified file 'sql/sql_cache.cc'
--- a/sql/sql_cache.cc	2009-01-15 10:28:10 +0000
+++ b/sql/sql_cache.cc	2009-01-22 11:22:26 +0000
@@ -781,6 +781,9 @@ void query_cache_end_of_result(THD *thd)
   if (thd->net.query_cache_query == 0)
     DBUG_VOID_RETURN;
 
+  /* Ensure that only complete results are cached. */
+  DBUG_ASSERT(thd->main_da.is_eof());
+
   if (thd->killed)
   {
     query_cache_abort(&thd->net);

Thread
bzr commit into mysql-5.1-bugteam branch (davi:2750) Bug#40264Davi Arnaut22 Jan