110 lines
2.3 KiB
SQL
110 lines
2.3 KiB
SQL
# name: test/sql/join/iejoin/predicate_expressions.test
|
|
# description: Predicate expressions should work with multiple chunks
|
|
# group: [iejoin]
|
|
|
|
statement ok
|
|
PRAGMA enable_verification
|
|
|
|
statement ok
|
|
SET merge_join_threshold=0
|
|
|
|
statement ok
|
|
PRAGMA explain_output = PHYSICAL_ONLY;
|
|
|
|
# Create a range of dates
|
|
statement ok
|
|
create table calendar as SELECT *
|
|
FROM range(DATE '2022-01-01', DATE '2024-02-01', INTERVAL '1' MONTH);
|
|
|
|
# Create an SCD2 dummy table with nullable end dates
|
|
statement ok
|
|
create table scd2 as
|
|
select
|
|
range as range_start,
|
|
case when date_part('year', range) < 2023 then range + interval 4 month - interval 1 day end as range_end,
|
|
n
|
|
from calendar
|
|
cross join generate_series(1, 85) as n
|
|
|
|
# Create an SCD2 dummy table with non-nullable end dates
|
|
statement ok
|
|
create table scd2_non_null as
|
|
select
|
|
range as range_start,
|
|
case when date_part('year', range) < 2023 then range + interval 4 month - interval 1 day else '2099-01-01' end as range_end,
|
|
n
|
|
from calendar
|
|
cross join generate_series(1, 85) as n
|
|
|
|
# Aggregate each table by using a range join
|
|
query II
|
|
explain
|
|
select
|
|
range,
|
|
count(*) as n
|
|
from scd2_non_null
|
|
inner join calendar
|
|
on range between range_start and ifnull(range_end,'2099-01-01')
|
|
group by range
|
|
order by range
|
|
----
|
|
physical_plan <REGEX>:.*IE_JOIN.*
|
|
|
|
query II nosort expected
|
|
select
|
|
range,
|
|
count(*) as n
|
|
from scd2_non_null
|
|
inner join calendar
|
|
on range between range_start and ifnull(range_end,'2099-01-01')
|
|
group by range
|
|
order by range
|
|
|
|
# First key should work
|
|
query II
|
|
explain
|
|
select
|
|
range,
|
|
count(*) as n
|
|
from scd2
|
|
inner join calendar
|
|
on range <= ifnull(range_end,'2099-01-01') and range_start <= range
|
|
group by range
|
|
order by range
|
|
----
|
|
physical_plan <REGEX>:.*IE_JOIN.*
|
|
|
|
query II nosort expected
|
|
select
|
|
range,
|
|
count(*) as n
|
|
from scd2
|
|
inner join calendar
|
|
on range <= ifnull(range_end,'2099-01-01') and range_start <= range
|
|
group by range
|
|
order by range
|
|
|
|
# Second key should work
|
|
query II
|
|
explain
|
|
select
|
|
range,
|
|
count(*) as n
|
|
from scd2
|
|
inner join calendar
|
|
on range between range_start and ifnull(range_end,'2099-01-01')
|
|
group by range
|
|
order by range
|
|
----
|
|
physical_plan <REGEX>:.*IE_JOIN.*
|
|
|
|
query II nosort expected
|
|
select
|
|
range,
|
|
count(*) as n
|
|
from scd2
|
|
inner join calendar
|
|
on range between range_start and ifnull(range_end,'2099-01-01')
|
|
group by range
|
|
order by range
|