List:Commits« Previous MessageNext Message »
From:Alexey Kopytov Date:November 6 2009 4:03pm
Subject:bzr push into mysql-5.1-bugteam branch (Alexey.Kopytov:3197 to 3199)
View as plain text  
 3199 Alexey Kopytov	2009-11-06 [merge]
      Automerge.

 3198 Alexey Kopytov	2009-11-06 [merge]
      Automerge.

    modified:
      mysql-test/r/olap.result
      mysql-test/t/olap.test
      sql/sql_select.cc
 3197 Georgi Kodinov	2009-11-04
      Bug #46175: NULL read_view and consistent read assertion
      
      The SE API requires mysql to notify the storage engine that
      it's going to read certain tables at the beginning of the 
      statement (by calling start_stmt(), store_lock() or
      external_lock()).
      These are typically called by the lock_tables(). 
      However SHOW CREATE TABLE is not pre-locking the tables
      because it's not expected to access the data at all.
      But for some view definitions (that include comparing a
      date/datetime/timestamp column to a string returning
      scalar subquery) the JOIN::prepare may still access data
      when materializing the scalar non-correlated subquery
      in Arg_comparator::can_compare_as_dates().
      Fixed by not materializing the subquery when the function
      is called in a SHOW/EXPLAIN/CREATE VIEW

    modified:
      mysql-test/r/innodb_mysql.result
      mysql-test/t/innodb_mysql.test
      sql/item_cmpfunc.cc
=== modified file 'mysql-test/r/olap.result'
--- a/mysql-test/r/olap.result	2009-10-30 15:59:06 +0000
+++ b/mysql-test/r/olap.result	2009-11-06 14:54:19 +0000
@@ -753,4 +753,16 @@ b
 100
 NULL
 DROP TABLE t1, t2;
+#
+# Bug #48475: DISTINCT is ignored with GROUP BY WITH ROLLUP
+#             and only const tables
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (b INT);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (1);
+SELECT DISTINCT b FROM t1, t2 GROUP BY a, b WITH ROLLUP;
+b
+1
+NULL
+DROP TABLE t1, t2;
 End of 5.0 tests

=== modified file 'mysql-test/t/olap.test'
--- a/mysql-test/t/olap.test	2009-10-30 15:54:53 +0000
+++ b/mysql-test/t/olap.test	2009-11-06 06:44:01 +0000
@@ -390,4 +390,17 @@ SELECT DISTINCT b FROM t1, t2 GROUP BY a
 
 DROP TABLE t1, t2;
 
+--echo #
+--echo # Bug #48475: DISTINCT is ignored with GROUP BY WITH ROLLUP
+--echo #             and only const tables
+
+CREATE TABLE t1 (a INT);
+CREATE TABLE t2 (b INT);
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (1);
+
+SELECT DISTINCT b FROM t1, t2 GROUP BY a, b WITH ROLLUP;
+
+DROP TABLE t1, t2;
+
 --echo End of 5.0 tests

=== modified file 'sql/sql_select.cc'
--- a/sql/sql_select.cc	2009-11-03 17:45:52 +0000
+++ b/sql/sql_select.cc	2009-11-06 14:54:19 +0000
@@ -982,14 +982,20 @@ JOIN::optimize()
     DBUG_RETURN(1);
   }
 
-  if (select_lex->olap == ROLLUP_TYPE && rollup_process_const_fields())
+  if (rollup.state != ROLLUP::STATE_NONE)
   {
-    DBUG_PRINT("error", ("Error: rollup_process_fields() failed"));
-    DBUG_RETURN(1);
+    if (rollup_process_const_fields())
+    {
+      DBUG_PRINT("error", ("Error: rollup_process_fields() failed"));
+      DBUG_RETURN(1);
+    }
+  }
+  else
+  {
+    /* Remove distinct if only const tables */
+    select_distinct= select_distinct && (const_tables != tables);
   }
 
-  /* Remove distinct if only const tables */
-  select_distinct= select_distinct && (const_tables != tables);
   thd_proc_info(thd, "preparing");
   if (result->initialize_tables(this))
   {
@@ -1288,11 +1294,14 @@ JOIN::optimize()
     - We are using an ORDER BY or GROUP BY on fields not in the first table
     - We are using different ORDER BY and GROUP BY orders
     - The user wants us to buffer the result.
+    When the WITH ROLLUP modifier is present, we cannot skip temporary table
+    creation for the DISTINCT clause just because there are only const tables.
   */
-  need_tmp= (const_tables != tables &&
+  need_tmp= ((const_tables != tables &&
 	     ((select_distinct || !simple_order || !simple_group) ||
 	      (group_list && order) ||
-	      test(select_options & OPTION_BUFFER_RESULT)));
+	      test(select_options & OPTION_BUFFER_RESULT))) ||
+             rollup.state != ROLLUP::STATE_NONE && select_distinct);
 
   // No cache for MATCH
   make_join_readinfo(this,


Attachment: [text/bzr-bundle] bzr/alexey.kopytov@sun.com-20091106145801-lk2a5qtodi0ix8zb.bundle
Thread
bzr push into mysql-5.1-bugteam branch (Alexey.Kopytov:3197 to 3199)Alexey Kopytov6 Nov 2009