List:Commits« Previous MessageNext Message »
From:Alexey Kopytov Date:August 30 2009 7:03am
Subject:bzr commit into mysql-5.1-bugteam branch (Alexey.Kopytov:3062)
Bug#46607
View as plain text  
#At file:///data/src/bzr/bugteam/bug46607/my51-bug46607/ based on revid:davi.arnaut@stripped

 3062 Alexey Kopytov	2009-08-30
      Bug #46607: Assertion failed: (cond_type == Item::FUNC_ITEM) 
                  results in server crash 
       
      check_group_min_max_predicates() assumed the input condition 
      item to be one of COND_ITEM, SUBSELECT_ITEM, or FUNC_ITEM. 
      Since a condition of the form "field" is also a valid condition 
      equivalent to "field <> 0", using such a condition in a query 
      where the loose index scan was chosen resulted in a debug 
      assertion failure. 
       
      Fixed by handling conditions of the FIELD_ITEM type in 
      check_group_min_max_predicates(). 
     @ mysql-test/r/group_min_max.result
        Added a test case for bug #46607.
     @ mysql-test/t/group_min_max.test
        Added a test case for bug #46607.
     @ sql/opt_range.cc
        Handle conditions of the FUNC_ITEM type in 
        check_group_mix_max_predicates().

    modified:
      mysql-test/r/group_min_max.result
      mysql-test/t/group_min_max.test
      sql/opt_range.cc
=== modified file 'mysql-test/r/group_min_max.result'
--- a/mysql-test/r/group_min_max.result	2009-07-13 17:36:54 +0000
+++ b/mysql-test/r/group_min_max.result	2009-08-30 07:03:37 +0000
@@ -2502,3 +2502,15 @@ a	MAX(b)
 2	1
 DROP TABLE t;
 End of 5.0 tests
+#
+# Bug #46607: Assertion failed: (cond_type == Item::FUNC_ITEM) results in
+#              server crash
+#
+CREATE TABLE t (a INT, b INT, INDEX (a,b));
+INSERT INTO t VALUES (2,0), (2,0), (2,1), (2,1);
+INSERT INTO t SELECT * FROM t;
+SELECT a, MAX(b) FROM t WHERE b GROUP BY a;
+a	MAX(b)
+2	1
+DROP TABLE t;
+End of 5.1 tests

=== modified file 'mysql-test/t/group_min_max.test'
--- a/mysql-test/t/group_min_max.test	2009-07-13 17:36:54 +0000
+++ b/mysql-test/t/group_min_max.test	2009-08-30 07:03:37 +0000
@@ -1018,3 +1018,18 @@ DROP TABLE t;
 
 
 --echo End of 5.0 tests
+
+--echo #
+--echo # Bug #46607: Assertion failed: (cond_type == Item::FUNC_ITEM) results in
+--echo #              server crash
+--echo #
+
+CREATE TABLE t (a INT, b INT, INDEX (a,b));
+INSERT INTO t VALUES (2,0), (2,0), (2,1), (2,1);
+INSERT INTO t SELECT * FROM t;
+
+SELECT a, MAX(b) FROM t WHERE b GROUP BY a;
+
+DROP TABLE t;
+
+--echo End of 5.1 tests

=== modified file 'sql/opt_range.cc'
--- a/sql/opt_range.cc	2009-07-16 12:43:17 +0000
+++ b/sql/opt_range.cc	2009-08-30 07:03:37 +0000
@@ -9628,7 +9628,17 @@ check_group_min_max_predicates(COND *con
   */
   if (cond_type == Item::SUBSELECT_ITEM)
     DBUG_RETURN(FALSE);
-  
+
+  /*
+    Condition of the form 'field' is equivalent to 'field <> 0' and thus
+    satisfies the SA3 condition.
+  */
+  if (cond_type == Item::FIELD_ITEM)
+  {
+    DBUG_PRINT("info", ("Analyzing: %s", cond->full_name()));
+    DBUG_RETURN(TRUE);
+  }
+
   /* We presume that at this point there are no other Items than functions. */
   DBUG_ASSERT(cond_type == Item::FUNC_ITEM);
 


Attachment: [text/bzr-bundle] bzr/alexey.kopytov@sun.com-20090830070337-opfxothd0msbbhk6.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (Alexey.Kopytov:3062)Bug#46607Alexey Kopytov30 Aug