diff options
author | Galina Shalygina <galina.shalygina@mariadb.org> | 2019-04-22 16:19:55 +0300 |
---|---|---|
committer | Galina Shalygina <galina.shalygina@mariadb.org> | 2019-04-22 16:19:55 +0300 |
commit | a765b19e5ca31a3d866cdbc8bef3a6f4e5e44688 (patch) | |
tree | 426a93041b1409ae5e99b4052ed601fcf38c8315 /mysql-test/main/having_cond_pushdown.test | |
parent | a65d3b2c1633cbb21a9ab4b61d1bcd865e3c3219 (diff) | |
download | mariadb-git-a765b19e5ca31a3d866cdbc8bef3a6f4e5e44688.tar.gz |
MDEV-19245: Impossible WHERE should be noticed earlier after HAVING pushdownbb-10.4-galina
The bug appears because not all conditions are found to be knowingly
true or false in WHERE after HAVING pushdown optimization.
Impossible WHERE can be found much earlier compared with how it is done now.
To fix it and_new_conditions_to_optimized_cond() is changed.
Diffstat (limited to 'mysql-test/main/having_cond_pushdown.test')
-rw-r--r-- | mysql-test/main/having_cond_pushdown.test | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/mysql-test/main/having_cond_pushdown.test b/mysql-test/main/having_cond_pushdown.test index 5088dad734d..f1bf70627f6 100644 --- a/mysql-test/main/having_cond_pushdown.test +++ b/mysql-test/main/having_cond_pushdown.test @@ -1370,3 +1370,34 @@ eval explain extended $q2; eval explain format=json $q2; drop table t1; + +--echo # +--echo # MDEV-19245: Impossible WHERE should be noticed earlier +--echo # after HAVING pushdown +--echo # + +CREATE TABLE t1 (a INT, b INT, c INT); +INSERT INTO t1 VALUES (1,2,1),(3,2,2),(5,6,4),(3,4,1); + +EXPLAIN SELECT t1.a,MAX(t1.b) FROM t1 +WHERE t1.a > 3 GROUP BY t1.a HAVING t1.a = 3; +EXPLAIN SELECT t1.a,MAX(t1.b) FROM t1 +WHERE t1.a = 3 GROUP BY t1.a HAVING t1.a > 3; +EXPLAIN SELECT t1.a,MAX(t1.b) FROM t1 +WHERE t1.a > 3 AND t1.a = 3 GROUP BY t1.a ; + +EXPLAIN SELECT t1.a,MAX(t1.b) FROM t1 +WHERE (t1.a < 2 OR t1.c > 1) GROUP BY t1.a HAVING t1.a = 3; +EXPLAIN SELECT t1.a,MAX(t1.b) FROM t1 +WHERE t1.a = 3 GROUP BY t1.a HAVING (t1.a < 2 OR t1.a > 3); +EXPLAIN SELECT t1.a,MAX(t1.b) FROM t1 +WHERE t1.a = 3 AND (t1.a < 2 OR t1.a > 3) GROUP BY t1.a; + +EXPLAIN SELECT t1.a,MAX(t1.b),t1.c FROM t1 +WHERE (t1.a < 2 AND t1.c > 1) GROUP BY t1.a HAVING t1.a = 3; +EXPLAIN SELECT t1.a,MAX(t1.b),t1.c FROM t1 +WHERE t1.a = 3 GROUP BY t1.a HAVING (t1.a < 2 AND t1.c > 1); +EXPLAIN SELECT t1.a,MAX(t1.b),t1.c FROM t1 +WHERE t1.a = 3 AND (t1.a < 2 AND t1.b > 3) GROUP BY t1.a; + +DROP TABLE t1; |