summaryrefslogtreecommitdiff
path: root/mysql-test/main/having_cond_pushdown.test
diff options
context:
space:
mode:
authorGalina Shalygina <galina.shalygina@mariadb.org>2019-04-22 16:19:55 +0300
committerGalina Shalygina <galina.shalygina@mariadb.org>2019-04-22 16:19:55 +0300
commita765b19e5ca31a3d866cdbc8bef3a6f4e5e44688 (patch)
tree426a93041b1409ae5e99b4052ed601fcf38c8315 /mysql-test/main/having_cond_pushdown.test
parenta65d3b2c1633cbb21a9ab4b61d1bcd865e3c3219 (diff)
downloadmariadb-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.test31
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;