should be it
This commit is contained in:
201
external/duckdb/test/sql/join/iejoin/test_iejoin.test
vendored
Normal file
201
external/duckdb/test/sql/join/iejoin/test_iejoin.test
vendored
Normal file
@@ -0,0 +1,201 @@
|
||||
# name: test/sql/join/iejoin/test_iejoin.test
|
||||
# description: Test IEJoin
|
||||
# group: [iejoin]
|
||||
|
||||
statement ok
|
||||
PRAGMA enable_verification
|
||||
|
||||
statement ok
|
||||
SET merge_join_threshold=0
|
||||
|
||||
# Restrictive tail predicates
|
||||
# Use inequalities to prevent future range choice optimisation
|
||||
query II
|
||||
WITH test AS (
|
||||
SELECT
|
||||
i AS id,
|
||||
i AS begin,
|
||||
i + 10 AS end,
|
||||
i % 2 AS p1,
|
||||
i % 3 AS p2
|
||||
FROM range(0, 10) tbl(i)
|
||||
)
|
||||
SELECT lhs.id, rhs.id
|
||||
FROM test lhs, test rhs
|
||||
WHERE lhs.begin < rhs.end
|
||||
AND rhs.begin < lhs.end
|
||||
AND lhs.p1 <> rhs.p1
|
||||
AND lhs.p2 <> rhs.p2
|
||||
ORDER BY ALL
|
||||
----
|
||||
0 1
|
||||
0 5
|
||||
0 7
|
||||
1 0
|
||||
1 2
|
||||
1 6
|
||||
1 8
|
||||
2 1
|
||||
2 3
|
||||
2 7
|
||||
2 9
|
||||
3 2
|
||||
3 4
|
||||
3 8
|
||||
4 3
|
||||
4 5
|
||||
4 9
|
||||
5 0
|
||||
5 4
|
||||
5 6
|
||||
6 1
|
||||
6 5
|
||||
6 7
|
||||
7 0
|
||||
7 2
|
||||
7 6
|
||||
7 8
|
||||
8 1
|
||||
8 3
|
||||
8 7
|
||||
8 9
|
||||
9 2
|
||||
9 4
|
||||
9 8
|
||||
|
||||
# Subquery/CTE
|
||||
query II
|
||||
WITH test AS (
|
||||
SELECT
|
||||
i AS id,
|
||||
i AS begin,
|
||||
i + 10 AS end,
|
||||
i % 2 AS p1,
|
||||
i % 3 AS p2
|
||||
FROM range(0, 10) tbl(i)
|
||||
),
|
||||
sub AS (
|
||||
SELECT lhs.id AS lid, rhs.id AS rid
|
||||
FROM test lhs, test rhs
|
||||
WHERE lhs.begin < rhs.end
|
||||
AND rhs.begin < lhs.end
|
||||
AND lhs.p1 <> rhs.p1
|
||||
AND lhs.p2 <> rhs.p2
|
||||
ORDER BY ALL
|
||||
)
|
||||
SELECT MIN(lid), MAX(rid)
|
||||
FROM sub
|
||||
----
|
||||
0 9
|
||||
|
||||
# RTEs are not (yet) supported
|
||||
# so this should work, but not trigger IEJoin in the physical plan.
|
||||
query I
|
||||
WITH RECURSIVE t AS
|
||||
(
|
||||
SELECT 1 AS x, 0 AS begin, 4 AS end
|
||||
UNION ALL
|
||||
SELECT lhs.x + 1 AS x,
|
||||
GREATEST(lhs.begin, rhs.begin) as begin,
|
||||
LEAST(lhs.end, rhs.end) AS end
|
||||
FROM t lhs, t rhs
|
||||
WHERE lhs.begin + 1 < rhs.end - 1
|
||||
AND rhs.begin + 1 < lhs.end - 1
|
||||
AND lhs.x < 3
|
||||
)
|
||||
SELECT COUNT(*) FROM t
|
||||
----
|
||||
3
|
||||
|
||||
# Fix missing continue statement in right join handler
|
||||
statement ok
|
||||
CREATE TABLE issue3486 AS
|
||||
SELECT generate_series as ts from generate_series(timestamp '2020-01-01', timestamp '2021-01-01', interval 1 day);
|
||||
|
||||
query IIII
|
||||
WITH data_table AS (
|
||||
SELECT epoch(ts) as ts
|
||||
FROM issue3486
|
||||
WHERE ts IS NOT NULL
|
||||
),
|
||||
S AS (
|
||||
SELECT
|
||||
min(ts) as minVal,
|
||||
max(ts) as maxVal,
|
||||
(max(ts) - min(ts)) as range
|
||||
FROM data_table
|
||||
),
|
||||
buckets AS (
|
||||
SELECT
|
||||
range as bucket,
|
||||
(range) * (select range FROM S) / 40 + (select minVal from S) as low,
|
||||
(range + 1) * (select range FROM S) / 40 + (select minVal from S) as high
|
||||
FROM range(0, 40, 1)
|
||||
)
|
||||
SELECT
|
||||
bucket,
|
||||
low,
|
||||
high,
|
||||
count(data_table.ts) as count
|
||||
FROM buckets
|
||||
LEFT JOIN data_table ON (data_table.ts >= low AND data_table.ts < high)
|
||||
GROUP BY bucket, low, high
|
||||
ORDER BY bucket;
|
||||
----
|
||||
0 1577836800 1578627360 10
|
||||
1 1578627360 1579417920 9
|
||||
2 1579417920 1580208480 9
|
||||
3 1580208480 1580999040 9
|
||||
4 1580999040 1581789600 9
|
||||
5 1581789600 1582580160 9
|
||||
6 1582580160 1583370720 10
|
||||
7 1583370720 1584161280 9
|
||||
8 1584161280 1584951840 9
|
||||
9 1584951840 1585742400 9
|
||||
10 1585742400 1586532960 9
|
||||
11 1586532960 1587323520 9
|
||||
12 1587323520 1588114080 9
|
||||
13 1588114080 1588904640 10
|
||||
14 1588904640 1589695200 9
|
||||
15 1589695200 1590485760 9
|
||||
16 1590485760 1591276320 9
|
||||
17 1591276320 1592066880 9
|
||||
18 1592066880 1592857440 9
|
||||
19 1592857440 1593648000 9
|
||||
20 1593648000 1594438560 10
|
||||
21 1594438560 1595229120 9
|
||||
22 1595229120 1596019680 9
|
||||
23 1596019680 1596810240 9
|
||||
24 1596810240 1597600800 9
|
||||
25 1597600800 1598391360 9
|
||||
26 1598391360 1599181920 10
|
||||
27 1599181920 1599972480 9
|
||||
28 1599972480 1600763040 9
|
||||
29 1600763040 1601553600 9
|
||||
30 1601553600 1602344160 9
|
||||
31 1602344160 1603134720 9
|
||||
32 1603134720 1603925280 9
|
||||
33 1603925280 1604715840 10
|
||||
34 1604715840 1605506400 9
|
||||
35 1605506400 1606296960 9
|
||||
36 1606296960 1607087520 9
|
||||
37 1607087520 1607878080 9
|
||||
38 1607878080 1608668640 9
|
||||
39 1608668640 1609459200 9
|
||||
|
||||
# internal issue 5197
|
||||
statement ok
|
||||
create table test_big as select range i, range + 100_000 j, 'hello' k from range (20_000)
|
||||
|
||||
statement ok
|
||||
create table test_small as select range i, range + 100_000 j, 'hello' k from range (0,20_000,10)
|
||||
|
||||
statement ok
|
||||
select *
|
||||
from test_small t1
|
||||
join test_small t2
|
||||
on (t1.i = t2.j)
|
||||
join test_small t3
|
||||
on (true)
|
||||
join test_big t4
|
||||
on (t3.i < t4.i and t3.j > t4.j)
|
||||
Reference in New Issue
Block a user