mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
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.
This commit is contained in:
@ -645,3 +645,12 @@ a LENGTH(a) COUNT(*)
|
|||||||
NULL NULL 2
|
NULL NULL 2
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
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;
|
||||||
|
@ -327,3 +327,18 @@ SELECT * FROM v1;
|
|||||||
|
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
DROP TABLE t1;
|
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;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -7504,7 +7504,7 @@ get_best_group_min_max(PARAM *param, SEL_TREE *tree)
|
|||||||
if ((join->tables != 1) || /* The query must reference one table. */
|
if ((join->tables != 1) || /* The query must reference one table. */
|
||||||
((!join->group_list) && /* Neither GROUP BY nor a DISTINCT query. */
|
((!join->group_list) && /* Neither GROUP BY nor a DISTINCT query. */
|
||||||
(!join->select_distinct)) ||
|
(!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);
|
DBUG_RETURN(NULL);
|
||||||
if (table->s->keys == 0) /* There are no indexes to use. */
|
if (table->s->keys == 0) /* There are no indexes to use. */
|
||||||
DBUG_RETURN(NULL);
|
DBUG_RETURN(NULL);
|
||||||
|
Reference in New Issue
Block a user