should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,287 @@
# 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 <REGEX>:.*Filters:.*
query II
explain select count(*) from t where b <=3 and b>=0;
----
physical_plan <REGEX>:.*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 <REGEX>:.*Filters:.*b<=3.*
query II
explain select count(*) from t where b = 1 or b = 3 ;
----
physical_plan <REGEX>:.*Filters:.*b<=3.*
# 3) Transitive Filters
query II
explain select count(*) from t where b < 5 and d = 5;
----
physical_plan <REGEX>:.*Filters:.*
query II
explain select count(*) from t where d = 5 and b < d;
----
physical_plan <REGEX>:.*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 <REGEX>:.*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 <REGEX>:.*Filters:.*Filters:.*
query II
explain select count(*) from t1 join t2 using (nationkey) where t2.n_name = 'Nation_1';
----
physical_plan <REGEX>:.*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 <!REGEX>:.*Filters:.*
query II
explain select count(*) from t1 join t2 using (nationkey) where t2.n_name in ( 'Nation_1', 'Nation_2');
----
physical_plan <REGEX>:.*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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* Filters: .*a>=2.*a<=7.*
query II
explain select count(*) from test where (4=a) or (a >5 and a < 6)
----
physical_plan <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* 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 <REGEX>:.* Filters: .*a=1995-12-01.*
query II
explain select count(*) from test_date where a in ( '1995-12-01', '1995-12-02')
----
physical_plan <REGEX>:.* 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