List:Commits« Previous MessageNext Message »
From:Alexander Nozdrin Date:January 15 2009 11:10am
Subject:bzr commit into mysql-5.0-bugteam branch (alik:2730)
View as plain text  
#At file:///mnt/raid/alik/MySQL/bzr/5.0-bugteam/ based on revid:alik@stripped

 2730 Alexander Nozdrin	2009-01-15 [merge]
      Pull from 5.0-bugteam
modified:
  mysql-test/r/innodb_cache.result
  mysql-test/r/query_cache.result
  mysql-test/t/query_cache.test
  sql/mysql_priv.h
  sql/sql_cache.cc
  tests/mysql_client_test.c

=== modified file 'mysql-test/r/innodb_cache.result'
--- a/mysql-test/r/innodb_cache.result	2005-05-27 02:17:33 +0000
+++ b/mysql-test/r/innodb_cache.result	2009-01-13 22:07:06 +0000
@@ -66,10 +66,10 @@ a
 2
 show status like "Qcache_queries_in_cache";
 Variable_name	Value
-Qcache_queries_in_cache	3
+Qcache_queries_in_cache	6
 show status like "Qcache_hits";
 Variable_name	Value
-Qcache_hits	3
+Qcache_hits	0
 insert into t1 values (3);
 insert into t2 values (3);
 insert into t1 values (4);
@@ -90,14 +90,14 @@ a
 2
 show status like "Qcache_queries_in_cache";
 Variable_name	Value
-Qcache_queries_in_cache	1
+Qcache_queries_in_cache	2
 show status like "Qcache_hits";
 Variable_name	Value
-Qcache_hits	4
+Qcache_hits	1
 commit;
 show status like "Qcache_queries_in_cache";
 Variable_name	Value
-Qcache_queries_in_cache	1
+Qcache_queries_in_cache	2
 drop table t3,t2,t1;
 CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY  (id)) ENGINE=InnoDB;
 select count(*) from t1;

=== modified file 'mysql-test/r/query_cache.result'
--- a/mysql-test/r/query_cache.result	2008-07-16 22:29:22 +0000
+++ b/mysql-test/r/query_cache.result	2009-01-13 22:07:06 +0000
@@ -1681,3 +1681,54 @@ Qcache_hits	1
 DROP TABLE t1;
 SET GLOBAL concurrent_insert= @save_concurrent_insert;
 SET GLOBAL query_cache_size= default;
+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
+SELECT * FROM t1;
+a
+1
+2
+3
+4
+5
+BEGIN;
+SELECT * FROM t1;
+a
+1
+2
+3
+4
+5
+COMMIT;
+SHOW STATUS LIKE 'Qcache_queries_in_cache';
+Variable_name	Value
+Qcache_queries_in_cache	2
+SHOW STATUS LIKE "Qcache_hits";
+Variable_name	Value
+Qcache_hits	0
+SELECT * FROM t1;
+a
+1
+2
+3
+4
+5
+BEGIN;
+SELECT * FROM t1;
+a
+1
+2
+3
+4
+5
+COMMIT;
+SHOW STATUS LIKE "Qcache_hits";
+Variable_name	Value
+Qcache_hits	2
+DROP TABLE t1;
+SET GLOBAL query_cache_size= default;

=== modified file 'mysql-test/t/query_cache.test'
--- a/mysql-test/t/query_cache.test	2008-03-13 15:39:27 +0000
+++ b/mysql-test/t/query_cache.test	2009-01-13 22:07:06 +0000
@@ -1276,4 +1276,31 @@ DROP TABLE t1;
 SET GLOBAL concurrent_insert= @save_concurrent_insert;
 SET GLOBAL query_cache_size= default;
 
+#
+# Bug#36326: nested transaction and select
+#
+
+--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';
+SELECT * FROM t1;
+BEGIN;
+SELECT * FROM t1;
+COMMIT;
+SHOW STATUS LIKE 'Qcache_queries_in_cache';
+SHOW STATUS LIKE "Qcache_hits";
+SELECT * FROM t1;
+BEGIN;
+SELECT * FROM t1;
+COMMIT;
+SHOW STATUS LIKE "Qcache_hits";
+DROP TABLE t1;
+SET GLOBAL query_cache_size= default;
+
 # End of 5.0 tests

=== modified file 'sql/mysql_priv.h'
--- a/sql/mysql_priv.h	2008-12-23 14:56:08 +0000
+++ b/sql/mysql_priv.h	2009-01-13 22:07:06 +0000
@@ -651,6 +651,8 @@ struct Query_cache_query_flags
   unsigned int client_long_flag:1;
   unsigned int client_protocol_41:1;
   unsigned int more_results_exists:1;
+  unsigned int in_trans:1;
+  unsigned int autocommit:1;
   unsigned int pkt_nr;
   uint character_set_client_num;
   uint character_set_results_num;

=== modified file 'sql/sql_cache.cc'
--- a/sql/sql_cache.cc	2008-07-24 14:14:34 +0000
+++ b/sql/sql_cache.cc	2009-01-13 22:07:06 +0000
@@ -859,6 +859,8 @@ void Query_cache::store_query(THD *thd, 
                                    CLIENT_PROTOCOL_41);
     flags.more_results_exists= test(thd->server_status &
                                     SERVER_MORE_RESULTS_EXISTS);
+    flags.in_trans= test(thd->server_status & SERVER_STATUS_IN_TRANS);
+    flags.autocommit= test(thd->server_status & SERVER_STATUS_AUTOCOMMIT);
     flags.pkt_nr= net->pkt_nr;
     flags.character_set_client_num=
       thd->variables.character_set_client->number;
@@ -879,7 +881,7 @@ void Query_cache::store_query(THD *thd, 
     DBUG_PRINT("qcache", ("long %d, 4.1: %d, more results %d, pkt_nr: %d, \
 CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
 sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \
-def_week_frmt: %lu",                          
+def_week_frmt: %lu, in_trans: %d, autocommit: %d",
                           (int)flags.client_long_flag,
                           (int)flags.client_protocol_41,
                           (int)flags.more_results_exists,
@@ -893,7 +895,10 @@ def_week_frmt: %lu",                    
                           flags.max_sort_length,
                           flags.group_concat_max_len,
                           flags.div_precision_increment,
-                          flags.default_week_format));
+                          flags.default_week_format,
+                          (int)flags.in_trans,
+                          (int)flags.autocommit));
+
     /*
      Make InnoDB to release the adaptive hash index latch before
      acquiring the query cache mutex.
@@ -1144,6 +1149,8 @@ Query_cache::send_result_to_client(THD *
                                  CLIENT_PROTOCOL_41);
   flags.more_results_exists= test(thd->server_status &
                                   SERVER_MORE_RESULTS_EXISTS);
+  flags.in_trans= test(thd->server_status & SERVER_STATUS_IN_TRANS);
+  flags.autocommit= test(thd->server_status & SERVER_STATUS_AUTOCOMMIT);
   flags.pkt_nr= thd->net.pkt_nr;
   flags.character_set_client_num= thd->variables.character_set_client->number;
   flags.character_set_results_num=
@@ -1162,7 +1169,7 @@ Query_cache::send_result_to_client(THD *
   DBUG_PRINT("qcache", ("long %d, 4.1: %d, more results %d, pkt_nr: %d, \
 CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
 sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \
-def_week_frmt: %lu",                          
+def_week_frmt: %lu, in_trans: %d, autocommit: %d",
                           (int)flags.client_long_flag,
                           (int)flags.client_protocol_41,
                           (int)flags.more_results_exists,
@@ -1176,7 +1183,9 @@ def_week_frmt: %lu",                    
                           flags.max_sort_length,
                           flags.group_concat_max_len,
                           flags.div_precision_increment,
-                          flags.default_week_format));
+                          flags.default_week_format,
+                          (int)flags.in_trans,
+                          (int)flags.autocommit));
   memcpy((void *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)),
 	 &flags, QUERY_CACHE_FLAGS_SIZE);
   query_block = (Query_cache_block *)  hash_search(&queries, (byte*) sql,

=== modified file 'tests/mysql_client_test.c'
--- a/tests/mysql_client_test.c	2008-12-11 10:37:18 +0000
+++ b/tests/mysql_client_test.c	2009-01-13 22:07:06 +0000
@@ -16354,6 +16354,63 @@ static void test_bug40365(void)
 
   DBUG_VOID_RETURN;
 }
+
+
+/**
+  Bug#36326: nested transaction and select
+*/
+
+#ifdef HAVE_QUERY_CACHE
+
+static void test_bug36326()
+{
+  int rc;
+
+  DBUG_ENTER("test_bug36326");
+  myheader("test_bug36326");
+
+  rc= mysql_autocommit(mysql, TRUE);
+  myquery(rc);
+  rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
+  myquery(rc);
+  rc= mysql_query(mysql, "CREATE  TABLE t1 (a INTEGER)");
+  myquery(rc);
+  rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
+  myquery(rc);
+  rc= mysql_query(mysql, "SET GLOBAL query_cache_type = 1");
+  myquery(rc);
+  rc= mysql_query(mysql, "SET GLOBAL query_cache_size = 1048576");
+  myquery(rc);
+  DIE_UNLESS(!(mysql->server_status & SERVER_STATUS_IN_TRANS));
+  DIE_UNLESS(mysql->server_status & SERVER_STATUS_AUTOCOMMIT);
+  rc= mysql_query(mysql, "BEGIN");
+  myquery(rc);
+  DIE_UNLESS(mysql->server_status & SERVER_STATUS_IN_TRANS);
+  rc= mysql_query(mysql, "SELECT * FROM t1");
+  myquery(rc);
+  rc= my_process_result(mysql);
+  DIE_UNLESS(rc == 1);
+  rc= mysql_rollback(mysql);
+  myquery(rc);
+  rc= mysql_query(mysql, "ROLLBACK");
+  myquery(rc);
+  DIE_UNLESS(!(mysql->server_status & SERVER_STATUS_IN_TRANS));
+  rc= mysql_query(mysql, "SELECT * FROM t1");
+  myquery(rc);
+  DIE_UNLESS(!(mysql->server_status & SERVER_STATUS_IN_TRANS));
+  rc= my_process_result(mysql);
+  DIE_UNLESS(rc == 1);
+  rc= mysql_query(mysql, "DROP TABLE t1");
+  myquery(rc);
+  rc= mysql_query(mysql, "SET GLOBAL query_cache_size = 0");
+  myquery(rc);
+
+  DBUG_VOID_RETURN;
+}
+
+#endif
+
+
 /*
   Read and parse arguments and MySQL options from my.cnf
 */
@@ -16653,6 +16710,9 @@ static struct my_tests_st my_tests[]= {
 #ifdef HAVE_SPATIAL
   { "test_bug37956", test_bug37956 },
 #endif
+#ifdef HAVE_QUERY_CACHE
+  { "test_bug36326", test_bug36326 },
+#endif
   { 0, 0 }
 };
 

Thread
bzr commit into mysql-5.0-bugteam branch (alik:2730)Alexander Nozdrin15 Jan