Commit 4d6ad7ac authored by unknown's avatar unknown
Browse files

Fixed bug #26830: a crash for the query with a subselect containing ROLLUP.

Crash happened because the function get_best_group_min_max detected
joins with ROLLUP incorrectly.


mysql-test/r/olap.result:
  Added a test case for bug #26830.
mysql-test/t/olap.test:
  Added a test case for bug #26830.
parent 52fb60da
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -645,3 +645,12 @@ a LENGTH(a) COUNT(*)
NULL	NULL	2
DROP VIEW v1;
DROP TABLE t1;
CREATE TABLE t1 (a int, KEY (a));
INSERT INTO t1 VALUES (3), (1), (4), (1), (3), (1), (1);
SELECT * FROM (SELECT a, SUM(a) FROM t1 GROUP BY a WITH ROLLUP) as t;
a	SUM(a)
1	4
3	6
4	4
NULL	14
DROP TABLE t1;
+15 −0
Original line number Diff line number Diff line
@@ -327,3 +327,18 @@ SELECT * FROM v1;

DROP VIEW v1;
DROP TABLE t1;

#
# Bug #26830: derived table with ROLLUP 
#

CREATE TABLE t1 (a int, KEY (a));
INSERT INTO t1 VALUES (3), (1), (4), (1), (3), (1), (1);

SELECT * FROM (SELECT a, SUM(a) FROM t1 GROUP BY a WITH ROLLUP) as t;

DROP TABLE t1;



+1 −1
Original line number Diff line number Diff line
@@ -7504,7 +7504,7 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree)
  if ((join->tables != 1) ||  /* The query must reference one table. */
      ((!join->group_list) && /* Neither GROUP BY nor a DISTINCT query. */
       (!join->select_distinct)) ||
      (thd->lex->select_lex.olap == ROLLUP_TYPE)) /* Check (B3) for ROLLUP */
      (join->select_lex->olap == ROLLUP_TYPE)) /* Check (B3) for ROLLUP */
    DBUG_RETURN(NULL);
  if (table->s->keys == 0)        /* There are no indexes to use. */
    DBUG_RETURN(NULL);