1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-15579 Crash in Item_field::used_tables() called by

Item::derived_field_transformer_for_having

The crash occurred due to an inappropriate handling of multiple equalities
when pushing conditions into materialized views/derived tables. If equalities
extracted from a multiple equality can be pushed into a materialized
view/derived table they should be plainly conjuncted with other pushed
predicates rather than form a separate AND sub-formula.
This commit is contained in:
Galina Shalygina
2018-03-25 22:12:38 +02:00
parent 27c24808f7
commit 6223f1dd98
3 changed files with 211 additions and 0 deletions

View File

@ -1590,3 +1590,46 @@ eval EXPLAIN FORMAT=JSON $q;
DROP TABLE t1,t2;
SET sql_mode = DEFAULT;
--echo #
--echo # MDEV-15579: incorrect removal of sub-formulas to be pushed
--echo # into WHERE of materialized derived with GROUP BY
--echo #
CREATE TABLE t1 (a INT, b INT, c INT, d INT);
CREATE TABLE t2 (x INT, y INT, z INT);
INSERT INTO t1 VALUES (1,1,66,1), (1,1,56,2), (3,2,42,3);
INSERT INTO t2 VALUES (1,1,66), (1,12,32);
LET $query=
SELECT *
FROM t2,
(
SELECT a, b, max(c) AS max_c
FROM t1
GROUP BY a
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND
(v1.a=t2.x) AND (v1.max_c>30);
EVAL $query;
EVAL EXPLAIN $query;
EVAL EXPLAIN FORMAT=JSON $query;
LET $query=
SELECT *
FROM t2,
(
SELECT a, b, d, max(c) AS max_c
FROM t1
GROUP BY a,d
HAVING max_c > 37
) AS v1
WHERE (v1.a=1) AND (v1.b=v1.a) AND (v1.b=v1.d) AND
(v1.a=t2.x) AND (v1.max_c>30);
EVAL $query;
EVAL EXPLAIN $query;
EVAL EXPLAIN FORMAT=JSON $query;
DROP TABLE t1,t2;