# name: test/optimizer/zonemaps.test # description: Test if zonemaps are correctly used # group: [optimizer] statement ok PRAGMA explain_output = PHYSICAL_ONLY; statement ok create temporary table t as select range a, length(range::varchar) b, mod(range,10000) c, 5 d, 10000 e from range(100000); # 1) In-clause based on in-clause range/boundary zonemap check query II explain select count(*) from t where b in (1,2,3) ; ---- physical_plan :.*Filters:.* query II explain select count(*) from t where b <=3 and b>=0; ---- physical_plan :.*Filters:.* mode skip # FIXME # 2) In-clause based on in-clause range/boundary zonemap check query II explain select count(*) from t where b in (1, 3) ; ---- physical_plan :.*Filters:.*b<=3.* query II explain select count(*) from t where b = 1 or b = 3 ; ---- physical_plan :.*Filters:.*b<=3.* # 3) Transitive Filters query II explain select count(*) from t where b < 5 and d = 5; ---- physical_plan :.*Filters:.* query II explain select count(*) from t where d = 5 and b < d; ---- physical_plan :.*Filters:.* # 4) Check zonemap before joins statement ok create temporary table t1 as select range a, length(range) nationkey from range(100000); statement ok create table t2 as select range nationkey, concat('Nation_',range) n_name from range(25); query II explain select count(*) from t1 join t2 using (nationkey) where t2.n_name = 'Nation_1' and t1.nationkey =1; ---- physical_plan :.*Filters:.*Filters:.* query II explain select count(*) from t1 join t2 using (nationkey) where t2.n_name = 'Nation_1' and t2.nationkey =1; ---- physical_plan :.*Filters:.*Filters:.* query II explain select count(*) from t1 join t2 using (nationkey) where t2.n_name = 'Nation_1'; ---- physical_plan :.*Filters:.*n_name=Nation_1.* query II explain select count(*) from t1 join t2 using (nationkey) where t2.nationkey =2 or n_name= 'Nation_2'; ---- physical_plan :.*Filters:.* query II explain select count(*) from t1 join t2 using (nationkey) where t2.n_name in ( 'Nation_1', 'Nation_2'); ---- physical_plan :.*Filters:.* # 5) More General Tests statement ok CREATE TABLE test(a tinyint, b smallint, c integer, d bigint, e double, f real, g varchar); statement ok INSERT INTO test values (1,1,1,1,1,1,'1') statement ok INSERT INTO test values (10,10,10,10,10,10,'10') # 5.1) Flipping filters query II explain select count(*) from test where (2 < a and 7 > a) or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=2.*a<=7.* query II explain select count(*) from test where (2 < a and a < 7) or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=2.*a<=7.* query II explain select count(*) from test where (a >=2 and 7 > a) or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=2.*a<=7.* query II explain select count(*) from test where (4=a) or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=4.*a<=6.* # 5.2) Different Data Types query II explain select count(*) from test where (a >=2 and a < 7) or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=2.*a<=7.* query II explain select count(*) from test where a >2 and a < 7 or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=2.*a<=7.* query II explain select count(*) from test where a >2 and a <= 7 or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=2.*a<=7.* query II explain select count(*) from test where a >=2 and a <= 7 or (a >5 and a < 6) ---- physical_plan :.* Filters: .*a>=2.*a<=7.* query II explain select count(*) from test where (b >=2 and b < 7) or (b >5 and b < 6) ---- physical_plan :.* Filters: .*b>=2.*b<=7.* query II explain select count(*) from test where b >2 and b < 7 or (b >5 and b < 6) ---- physical_plan :.* Filters: .*b>=2.*b<=7.* query II explain select count(*) from test where b >2 and b <= 7 or (b >5 and b < 6) ---- physical_plan :.* Filters: .*b>=2.*b<=7.* query II explain select count(*) from test where b >=2 and b <= 7 or (b >5 and b < 6) ---- physical_plan :.* Filters: .*b>=2.*b<=7.* query II explain select count(*) from test where (c >=2 and c < 7) or (c >5 and c < 6) ---- physical_plan :.* Filters: .*c>=2.*c<=7.* query II explain select count(*) from test where c >2 and c < 7 or (c >5 and c < 6) ---- physical_plan :.* Filters: .*c>=2.*c<=7.* query II explain select count(*) from test where c >2 and c <= 7 or (c >5 and c < 6) ---- physical_plan :.* Filters: .*c>=2.*c<=7.* query II explain select count(*) from test where c >=2 and c <= 7 or (c >5 and c < 6) ---- physical_plan :.* Filters: .*c>=2.*c<=7.* query II explain select count(*) from test where (d >=2 and d < 7) or (d >5 and d < 6) ---- physical_plan :.* Filters: .*d>=2.*d<=7.* query II explain select count(*) from test where d >2 and d < 7 or (d >5 and d < 6) ---- physical_plan :.* Filters: .*d>=2.*d<=7.* query II explain select count(*) from test where d >2 and d <= 7 or (d >5 and d < 6) ---- physical_plan :.* Filters: .*d>=2.*d<=7.* query II explain select count(*) from test where d >=2 and d <= 7 or (d >5 and d < 6) ---- physical_plan :.* Filters: .*d>=2.*d<=7.* query II explain select count(*) from test where (e >=2 and e < 7) or (e >5 and e < 6) ---- physical_plan :.* Filters: .*e>=2.*e<=7.* query II explain select count(*) from test where e >2 and e < 7 or (e >5 and e < 6) ---- physical_plan :.* Filters: .*e>=2.*e<=7.* query II explain select count(*) from test where e >2 and e <= 7 or (e >5 and e < 6) ---- physical_plan :.* Filters: .*e>=2.*e<=7.* query II explain select count(*) from test where e >=2 and e <= 7 or (e >5 and e < 6) ---- physical_plan :.* Filters: .*e>=2.*e<=7.* query II explain select count(*) from test where (f >=2 and f < 7) or (f >5 and f < 6) ---- physical_plan :.* Filters: .*f>=2.*f<=7.* query II explain select count(*) from test where f >2 and f < 7 or (f >5 and f < 6) ---- physical_plan :.* Filters: .*f>=2.*f<=7.* query II explain select count(*) from test where f >2 and f <= 7 or (f >5 and f < 6) ---- physical_plan :.* Filters: .*f>=2.*f<=7.* query II explain select count(*) from test where f >=2 and f <= 7 or (f >5 and f < 6) ---- physical_plan :.* Filters: .*f>=2.*f<=7.* query II explain select count(*) from test where (g >='2' and g < '7') or (g >'5' and g < '6') ---- physical_plan :.* Filters: .*g>=2.*g<=7.* query II explain select count(*) from test where g >'2' and g < '7' or (g >'5' and g < '6') ---- physical_plan :.* Filters: .*g>=2.*g<=7.* query II explain select count(*) from test where g >'2' and g <= '7' or (g >'5' and g < '6') ---- physical_plan :.* Filters: .*g>=2.*g<=7.* query II explain select count(*) from test where g >='2' and g <= '7' or (g >'5' and g < '6') ---- physical_plan :.* Filters: .*g>=2.*g<=7.* # 5.3) Casting statement ok CREATE TABLE test_date(a date); statement ok insert into test_date values ('1995-12-01') statement ok insert into test_date values ('1995-12-10') query II explain select count(*) from test_date where a = '1995-12-01' ---- physical_plan :.* Filters: .*a=1995-12-01.* query II explain select count(*) from test_date where a in ( '1995-12-01', '1995-12-02') ---- physical_plan :.* Filters: .*a<=1995-12-02.* # 5.4) Test with Nulls statement ok CREATE TABLE t0(c0 boolean); statement ok INSERT INTO t0 VALUES (false), (NULL); query T SELECT t0.c0 FROM t0 WHERE t0.c0 IN (false, NULL); ---- 0