mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-26337: subquery with groupby and ROLLUP returns incorrect results on LEFT JOIN on INDEXED values
Disable LATERAL DERIVED optimization for subqueries that have WITH ROLLUP. This bug could affect queries with grouping derived tables / views / CTEs with ROLLUP. The bug could manifest itself if the corresponding materialized derived tables are subject to split optimization. The current implementation of the split optimization produces rows from the derived table in an arbitrary order. So these rows must be accumulated in another temporary table and sorted according to the used GROUP BY clause in order to be able to generate the additional ROLLUP rows. This patch prohibits to use split optimization for grouping derived tables / views / CTEs with ROLLUP.
This commit is contained in:
@ -186,4 +186,40 @@ eval $q;
|
||||
drop table t1,t2,t3;
|
||||
set optimizer_switch='split_materialized=default';
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-26337: subquery with groupby and ROLLUP returns incorrect results
|
||||
--echo # (The testcase is taken from testcase for MDEV-13389 due to it being
|
||||
--echo # much smaller)
|
||||
--echo #
|
||||
|
||||
create table t3 (a int, b int, c char(127), index idx_b(b)) engine=myisam;
|
||||
insert into t3 values
|
||||
(8,11,'aa'), (5,15,'cc'), (1,14,'bb'), (2,12,'aa'), (7,17,'cc'),
|
||||
(7,18,'aa'), (2,11,'aa'), (7,10,'bb'), (3,11,'dd'), (4,12,'ee'),
|
||||
(5,14,'dd'), (9,12,'ee');
|
||||
create table t4 (a int, b int, c char(127), index idx(a,c)) engine=myisam;
|
||||
insert into t4 values
|
||||
(7,10,'cc'), (1,20,'aa'), (2,23,'bb'), (7,18,'cc'), (1,30,'bb'),
|
||||
(4,71,'xx'), (3,15,'aa'), (7,82,'aa'), (8,12,'dd'), (4,15,'aa'),
|
||||
(11,33,'yy'), (10,42,'zz'), (4,53,'xx'), (10,17,'yy'), (7,12,'cc'),
|
||||
(8,20,'dd'), (7,32,'bb'), (1,50,'aa'), (3,40,'bb'), (3,77,'aa');
|
||||
insert into t4 select a+10, b+10, concat(c,'f') from t4;
|
||||
analyze table t3,t4;
|
||||
|
||||
--echo # This should use a plan with LATERAL DERIVED:
|
||||
explain select t3.a,t3.c,t.max,t.min
|
||||
from t3 join
|
||||
(select a, c, max(b) max, min(b) min from t4 group by a,c) t
|
||||
on t3.a=t.a and t3.c=t.c
|
||||
where t3.b > 15;
|
||||
|
||||
--echo # ... and if one adds WITH ROLLUP, then LATERAL DERIVED is no longer used:
|
||||
explain select t3.a,t3.c,t.max,t.min
|
||||
from t3 join
|
||||
(select a, c, max(b) max, min(b) min from t4 group by a,c with rollup) t
|
||||
on t3.a=t.a and t3.c=t.c
|
||||
where t3.b > 15;
|
||||
|
||||
drop table t3, t4;
|
||||
|
||||
--echo # End of 10.3 tests
|
||||
|
Reference in New Issue
Block a user