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,570 @@
# name: test/sql/join/iejoin/iejoin_issue_6314.test_slow
# description: Issue #6314: Segmentation fault when joining on timestamp with BETWEEN
# group: [iejoin]
statement ok
SET merge_join_threshold=0
statement ok
create table ota as select timestamp '2019-04-25 14:10:00' + concat(15 * i, ' minutes')::interval as ts, (i * 5 % 100)::REAL AS val from generate_series(0,167136,1) t(i);
statement ok
CREATE TABLE flags("start" TIMESTAMP, "end" TIMESTAMP, source VARCHAR, "desc" VARCHAR);
statement ok
INSERT INTO flags VALUES('2019-04-27 06:57:07.210882','2019-05-03 11:47:17.59408','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-05-04 18:31:02.98257','2019-05-04 18:31:03.779477','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-05-06 05:39:26.004945','2019-05-06 05:39:26.239315','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-05-06 20:59:33.37157','2019-05-06 20:59:33.402848','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-05-06 21:14:39.389213','2019-05-06 21:14:39.389213','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-05-06 21:29:41.849197','2019-05-06 21:29:41.880455','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-05-06 23:15:11.014935','2019-05-08 07:04:17.679436','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-05-08 12:11:59.757938','2019-05-08 12:11:59.757938','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-05-10 18:10:50.543442','2019-05-17 03:24:07.564913','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-05-17 10:41:08.933154','2019-05-17 13:11:49.965971','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-05-18 09:40:48.393364','2019-05-22 06:23:59.900634','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-05-28 22:13:49.48383','2019-05-28 22:59:02.257043','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-05-28 23:29:10.768931','2019-05-30 16:09:22.471287','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-06-01 22:16:21.233545','2019-06-01 22:16:21.233545','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-06-03 15:34:27.135046','2019-06-09 04:45:09.435281','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-06-12 16:38:47.439035','2019-06-12 16:38:47.439035','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-06-17 02:38:42.389044','2019-06-18 20:50:36.829324','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-06-18 22:21:02.559667','2019-06-18 22:21:02.559667','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-06-19 18:43:23.96448','2019-07-09 19:57:32.802906','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-07-13 21:55:11.56286','2019-07-13 21:55:11.56286','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-07-16 00:54:34.577846','2019-07-27 11:54:57.069538','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-07-28 09:44:50.873531','2019-07-28 09:44:50.873531','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-07-29 04:30:55.210772','2019-07-29 04:30:55.210772','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-08-01 13:11:12.007762','2019-08-01 13:11:12.007762','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-08-01 20:53:00.104555','2019-08-10 12:22:04.507877','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-08-11 13:34:13.847871','2019-08-11 13:34:13.847871','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-08-12 03:11:45.616815','2019-08-16 12:04:04.771614','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-08-17 03:30:05.751071','2019-08-17 03:30:09.912299','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-08-17 10:18:52','2019-08-18 07:01:58.625201','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-08-18 07:09:41.725062','2019-08-18 07:09:41.725062','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-08-18 12:51:51.684778','2019-08-18 17:23:38.404315','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-08-18 17:27:33.87348','2019-08-19 12:48:02.813164','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-08-19 12:48:03.856232','2019-08-19 12:48:05.153111','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-08-19 13:03:05.546246','2019-08-19 13:03:07.014976','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-08-21 18:48:16.020933','2019-08-21 18:48:17.22906','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-08-21 22:04:12.155626','2019-08-24 20:54:10.580362','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-08-27 01:39:03.415172','2019-09-02 04:50:36.592331','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-02 08:09:54.450194','2019-09-02 08:09:54.450194','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-03 21:32:04.727393','2019-09-04 21:39:40.521211','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-05 01:09:51.078083','2019-09-05 15:59:02.204584','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-05 19:31:12.229758','2019-09-06 00:21:01.320128','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-07 06:39:57.02327','2019-09-07 11:46:21.22316','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-10 17:18:19.409298','2019-09-10 17:18:19.409298','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-11 22:11:24.748004','2019-09-11 22:11:24.748004','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-12 18:02:00.344891','2019-09-12 22:33:17.289047','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-16 08:26:23.586698','2019-09-16 15:13:18.378834','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-16 16:13:35.662604','2019-09-16 16:28:42.196364','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-16 16:43:44.276961','2019-09-16 20:29:47.941955','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-17 08:43:01.263386','2019-09-24 10:06:02.384592','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-24 13:06:51.610235','2019-09-24 13:06:51.610235','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-26 22:53:06.279389','2019-09-26 22:53:06.279389','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-27 23:45:10.455638','2019-09-28 01:45:41.915928','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-09-28 02:13:58.055097','2019-09-28 02:13:58.055097','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-09-28 05:31:47.220773','2019-09-28 05:31:47.220773','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-10-03 01:14:37.537529','2019-10-03 15:23:32','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-10-03 22:40:32','2019-10-03 22:40:32','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-10-09 15:03:43.289075','2019-10-14 17:43:43.628362','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-10-15 06:13:34.636141','2019-10-15 06:13:34.636141','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-10-16 08:37:10.770546','2019-10-17 18:40:28.77581','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-10-18 08:44:15.480474','2019-10-18 08:44:15.480474','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-10-19 02:04:31.517173','2019-10-28 01:24:39.438477','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-10-28 23:56:25.107861','2019-10-28 23:56:25.107861','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-10-30 21:21:25.340815','2019-11-28 14:04:27.737957','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2019-11-30 16:26:26.326418','2019-11-30 16:26:26.326418','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2019-12-02 03:24:55.442545','2020-01-01 05:06:22.828287','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-01 07:27:16.91793','2020-01-01 07:27:16.91793','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-01 08:21:57.443013','2020-01-02 09:26:22.480784','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-02 15:43:47.533201','2020-01-02 15:43:47.533201','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-03 00:59:06.971364','2020-01-04 16:05:59.965927','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-04 16:36:05.182976','2020-01-04 16:36:05.182976','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-04 22:22:05.185172','2020-01-05 07:08:38.487131','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-05 22:41:22.246919','2020-01-06 05:27:33.573642','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-06 06:12:41.794005','2020-01-06 12:13:45.006863','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-06 15:14:32','2020-01-06 15:44:22.120394','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-06 18:46:28.041729','2020-01-10 03:59:10.738719','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-10 13:10:34.79698','2020-01-10 13:10:34.79698','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-10 22:17:24.164384','2020-01-12 12:13:57.267754','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-13 03:33:05.485806','2020-01-13 03:33:05.485806','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-15 11:16:36.753327','2020-01-16 10:54:45.773417','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-16 11:35:55.106627','2020-01-16 11:35:55.106627','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-19 11:19:37.643996','2020-01-19 11:19:37.643996','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-20 12:24:24.969721','2020-01-20 12:24:24.969721','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-20 21:32:44.037711','2020-01-22 20:42:56.2408','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-01-23 10:32:58.520895','2020-01-24 03:16:26.692278','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-01-25 00:51:00.831728','2020-02-08 12:12:52.627855','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-02-08 14:48:40.089071','2020-02-08 16:03:54.498861','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-02-08 19:19:32.357072','2020-02-10 09:56:01.144206','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-02-10 11:26:18.500557','2020-02-10 11:26:18.500557','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-02-11 20:13:07.502813','2020-02-15 03:22:04.688344','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-02-15 21:35:30.422594','2020-02-15 21:35:30.422594','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-02-17 10:25:38','2020-03-09 03:09:52','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-03-09 18:25:52','2020-03-09 21:41:12','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-03-12 15:22:52','2020-03-15 04:48:32','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-03-16 06:59:56.26681','2020-03-16 06:59:56.26681','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-03-17 15:13:19.677282','2020-03-18 23:06:58.733077','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-03-21 00:03:09','2020-03-21 00:18:32','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-03-22 05:09:32','2020-04-30 14:47:32','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-04-30 21:38:25.38098','2020-04-30 21:38:25.38098','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-05-01 07:12:52','2020-05-01 22:57:02.230289','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-05-02 17:07:32','2020-05-02 17:07:32','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-05-05 16:25:30.373568','2020-06-07 21:39:38.313439','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-06-08 18:58:10.377347','2020-06-08 18:58:10.377347','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-06-09 15:37:00.810016','2020-07-10 12:34:10.196829','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-07-11 02:11:51.973322','2020-07-11 02:11:51.973322','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-07-23 20:11:20.543131','2020-07-27 01:05:09.67894','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-07-28 21:53:26.927383','2020-07-28 21:53:26.927383','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-07-29 08:52:32.951849','2020-07-31 07:44:09.401172','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-07-31 23:19:12.810416','2020-07-31 23:49:15.699364','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-08-01 01:14:16.073637','2020-09-12 02:34:29.675746','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-09-24 08:26:03.75682','2020-09-24 08:26:03.75682','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-09-25 23:33:02.184214','2020-11-08 21:19:55.639463','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-11-11 00:32:27.659817','2020-11-11 00:32:27.659817','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-11-11 11:53:28.539259','2020-11-12 12:52:03.847271','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-11-12 18:21:13.479285','2020-11-12 18:21:13.479285','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-11-15 07:59:17.818534','2020-12-20 20:04:42.477029','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2020-12-21 12:06:47.735826','2020-12-21 17:13:08.615317','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2020-12-25 01:43:20.82301','2021-01-14 12:38:40.256447','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-01-15 05:57:25.559778','2021-01-15 05:57:25.559778','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-01-15 17:08:49.239829','2021-03-04 18:05:06.5202','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-03-14 08:30:11.882031','2021-03-14 08:30:11.882031','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-03-14 19:34:35.48081','2021-03-14 19:34:35.48081','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-03-14 22:23:01.795492','2021-03-14 22:23:01.795492','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-03-19 05:18:59.392721','2021-04-17 17:00:28.56746','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-04-17 23:53:35.259154','2021-04-17 23:53:35.259154','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-04-19 11:43:30.867002','2021-04-19 11:43:30.867002','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-04-20 01:03:49.924386','2021-04-20 01:03:49.924386','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-04-21 20:38:53.726282','2021-05-27 03:12:22.242029','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-05-28 17:17:19.470759','2021-05-28 17:17:19.470759','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-05-29 03:51:39.812153','2021-07-03 17:56:45.710948','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-07-17 23:26:55.653867','2021-07-18 00:27:13.16734','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-07-20 19:46:11.260963','2021-08-14 23:02:07.889515','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-08-16 05:25:42.109359','2021-08-16 05:25:42.109359','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-08-17 13:55:39.394138','2021-12-08 09:37:20.089189','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2021-12-16 18:34:33.00649','2021-12-30 00:19:14.148858','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2021-12-31 13:43:59.460722','2022-01-01 15:02:51.580829','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-01-04 23:18:25.547204','2022-01-04 23:18:25.547204','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-01-11 17:02:04.353917','2022-01-11 17:02:04.353917','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-01-13 21:51:56.523581','2022-01-13 21:51:56.523581','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-02-03 08:43:22.323726','2022-02-12 00:49:09.124772','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-02-18 17:16:30.997815','2022-02-25 22:09:21.674881','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-03-05 09:08:58.713571','2022-03-05 09:08:58.713571','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-03-07 03:52:55.376109','2022-03-07 04:53:12.341127','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-03-27 07:54:31.78461','2022-04-10 20:02:46.477166','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-04-11 18:58:48.622832','2022-04-11 18:58:48.622832','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-04-23 00:44:15.138901','2022-05-04 22:45:57.516436','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-06-09 23:49:56.08389','2022-06-28 03:20:11.764959','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-07-05 12:24:17.554126','2022-07-24 12:10:50.921302','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-07-26 17:32:55.715266','2022-07-26 17:32:55.715266','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-09-12 01:05:19.825468','2022-09-15 09:12:55.833652','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-09-29 20:35:53.243062','2022-09-29 21:06:01.84773','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-11-01 23:59:37.478388','2022-12-04 15:01:19.792983','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-12-05 17:47:12.476835','2022-12-07 17:05:19.118935','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-12-09 14:25:41.405352','2022-12-09 14:25:41.405352','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2022-12-15 20:02:19.636018','2022-12-15 21:02:36.652083','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2022-12-27 12:59:35.191679','2022-12-29 01:19:07.640399','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2023-01-06 16:31:49.633328','2023-01-06 16:32:10.734747','legacy','2/11');
statement ok
INSERT INTO flags VALUES('2023-01-10 21:49:02.442825','2023-01-26 21:10:04.737504','legacy','2/0');
statement ok
INSERT INTO flags VALUES('2023-02-10 20:18:13.432147','2023-02-13 15:22:40.650655','legacy','2/11');
# INNER join
query II
EXPLAIN
SELECT ota.*, flags.desc as flag
FROM ota
INNER JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
----
physical_plan <REGEX>:.*IE_JOIN.*
statement ok
CREATE TABLE inner_join AS SELECT ota.*, flags.desc as flag
FROM ota
INNER JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
query III
SELECT COUNT(*), COUNT(ts), COUNT(flag) FROM inner_join
----
87775 87775 87775
# LEFT join
query II
EXPLAIN
SELECT ota.*, flags.desc as flag
FROM ota
LEFT JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
----
physical_plan <REGEX>:.*IE_JOIN.*
statement ok
CREATE TABLE left_join AS SELECT ota.*, flags.desc as flag
FROM ota
LEFT JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
query III
SELECT COUNT(*), COUNT(ts), COUNT(flag) FROM left_join
----
167137 167137 87775
# RIGHT join
query II
EXPLAIN
SELECT ota.*, flags.desc as flag
FROM ota
RIGHT JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
----
physical_plan <REGEX>:.*IE_JOIN.*
statement ok
CREATE TABLE right_join AS SELECT ota.*, flags.desc as flag
FROM ota
RIGHT JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
query III
SELECT COUNT(*), COUNT(ts), COUNT(flag) FROM right_join
----
87842 87775 87842
# FULL OUTER join
query II
EXPLAIN
SELECT ota.*, flags.desc as flag
FROM ota
FULL OUTER JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
----
physical_plan <REGEX>:.*IE_JOIN.*
statement ok
CREATE TABLE full_outer_join AS SELECT ota.*, flags.desc as flag
FROM ota
FULL OUTER JOIN flags ON ota.ts BETWEEN flags.start AND flags.end
ORDER BY ts;
query III
SELECT COUNT(*), COUNT(ts), COUNT(flag) FROM full_outer_join
----
167204 167137 87842

View File

@@ -0,0 +1,72 @@
# name: test/sql/join/iejoin/iejoin_issue_6861.test
# description: Issue #6861: Index out of bound for all-NULL case.
# group: [iejoin]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE test(x INT);
statement ok
SET merge_join_threshold=0
statement ok
SET nested_loop_join_threshold=0;
query II
SELECT *
FROM test AS a, test AS b
WHERE (a.x BETWEEN b.x AND b.x);
----
statement ok
INSERT INTO test(x) VALUES (1), (2), (3), (NULL), (NULL), (NULL);
statement ok
CREATE TABLE all_null AS SELECT * FROM test;
statement ok
UPDATE all_null SET x=(NULL);
query II
EXPLAIN
SELECT *
FROM all_null AS a, all_null AS b
WHERE (a.x BETWEEN b.x AND b.x);
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT *
FROM all_null AS a, all_null AS b
WHERE (a.x BETWEEN b.x AND b.x);
----
query II
EXPLAIN
SELECT *
FROM test AS a, all_null AS b
WHERE (a.x BETWEEN b.x AND b.x);
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT *
FROM test AS a, all_null AS b
WHERE (a.x BETWEEN b.x AND b.x);
----
query II
EXPLAIN
SELECT *
FROM all_null AS a, test AS b
WHERE (a.x BETWEEN b.x AND b.x);
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT *
FROM all_null AS a, test AS b
WHERE (a.x BETWEEN b.x AND b.x);
----

View File

@@ -0,0 +1,156 @@
# name: test/sql/join/iejoin/iejoin_issue_7278.test
# description: Issue #7278: Incorrect results (child pipeline / finish event scheduling
# group: [iejoin]
statement ok
pragma enable_verification
statement ok
SET merge_join_threshold=0
statement ok
create table calendar as
SELECT
start_ts,
start_ts + interval '12 hours' as end_ts,
date_part('year',start_ts)::bigint * 100 + date_part('week',start_ts)::bigint as yyyyww
FROM generate_series(TIMESTAMP '2023-01-01 06:00:00', TIMESTAMP '2023-06-01 00:00:00', INTERVAL '12 hours') tbl(start_ts)
;
statement ok
create table snapshot_data as
select
TIMESTAMP '2023-03-01 08:00:00' as snapshot_ts,
1 as snapshot_value
from generate_series(1,1000) t(i)
;
# IEJoin is disabled for CTEs for some reason
statement ok
create table cal_last_13 as(
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
);
query II
explain
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
----
physical_plan <REGEX>:.*IE_JOIN.*
query I
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
----
1000
statement ok
create or replace table cal_last_13 as (
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
union all
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
);
query II
explain
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
----
physical_plan <REGEX>:.*IE_JOIN.*
query I
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
----
2000
statement ok
create or replace table cal_last_13 as (
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
union all
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
union all
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
);
query II
explain
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
----
physical_plan <REGEX>:.*IE_JOIN.*
query I
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
----
3000
statement ok
create or replace table cal_last_13 as (
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
union all
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
union all
select * from calendar where yyyyww in (SELECT yyyyww
FROM calendar)
);
query II
explain
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
join cal_last_13 cal2
on data.snapshot_ts >= cal2.start_ts
and data.snapshot_ts <= cal2.end_ts
----
physical_plan <REGEX>:.*IE_JOIN.*
query I
select
count(*)
from snapshot_data data
join cal_last_13 cal
on data.snapshot_ts >= cal.start_ts
and data.snapshot_ts <= cal.end_ts
join cal_last_13 cal2
on data.snapshot_ts >= cal2.start_ts
and data.snapshot_ts <= cal2.end_ts
----
9000

View File

@@ -0,0 +1,58 @@
# name: test/sql/join/iejoin/iejoin_projection_maps.test
# description: Test IEJoin projection mapping
# group: [iejoin]
statement ok
PRAGMA threads=1
set seed 0.8765309
statement ok
CREATE TABLE df (id INTEGER, id2 INTEGER, id3 INTEGER, value_double DOUBLE, value as (value_double::DECIMAL(4,3)), one_min_value as ((1.0 - value_double)::DECIMAL(4,3)))
statement ok
INSERT INTO df
SELECT
(random() * 100)::INTEGER + 1 as id,
(random() * 10)::INTEGER + 1 as id2,
(random() * 5)::INTEGER + 1 as id3,
(ROUND(random(), 4)) as value_double,
FROM range(5000);
# Verify table contents
query IIIIII
SELECT SUM(id) AS id, SUM(id2) AS id2, SUM(id3) AS id3, SUM(value) AS sum_value, SUM(one_min_value) AS sum_one_min_value, sum_value + sum_one_min_value AS sum
FROM df
----
252652 29774 17657 2498.192 2502.191 5000.383
statement ok
PRAGMA enable_verification
# Test right_projection_map
foreach prefer False True
statement ok
PRAGMA prefer_range_joins=${prefer};
# mode output_hash
query I
SELECT id2, id3, id3_right, sum(value * value_right) as value
FROM (
SELECT df.*, df2.id3 as id3_right, df2.value as value_right
FROM df JOIN df as df2
ON (df.id = df2.id
AND df.id2 = df2.id2
AND df.id3 > df2.id3
AND df.id3 < df2.id3 + 30)
) tbl
GROUP BY ALL
ORDER BY ALL
----
660 values hashing to fe2237dbeb18fe3400d5323bcab26dd2
endloop
# Test left_projection_map
# (Once it can acutally happen...)

View File

@@ -0,0 +1,51 @@
# name: test/sql/join/iejoin/merge_join_switch.test
# description: Test switching between merge joins/IE joins/nested loop joins based on settings
# group: [iejoin]
statement ok
CREATE TABLE bigtbl AS FROM range(1000) t(i);
statement ok
CREATE TABLE smalltbl AS SELECT i AS low, i + 1 AS high FROM range(100) t(i);
statement ok
PRAGMA explain_output = 'PHYSICAL_ONLY';
statement ok
SET merge_join_threshold=0
query II
EXPLAIN SELECT COUNT(*) FROM bigtbl JOIN smalltbl ON (bigtbl.i BETWEEN low AND high)
----
physical_plan <REGEX>:.*IE_JOIN.*
statement ok
SET merge_join_threshold=1000
query II
EXPLAIN SELECT COUNT(*) FROM bigtbl JOIN smalltbl ON (bigtbl.i BETWEEN low AND high)
----
physical_plan <REGEX>:.*MERGE_JOIN.*
statement ok
SET nested_loop_join_threshold=1000
query II
EXPLAIN SELECT COUNT(*) FROM bigtbl JOIN smalltbl ON (bigtbl.i BETWEEN low AND high)
----
physical_plan <REGEX>:.*NESTED_LOOP_JOIN.*
statement ok
SET prefer_range_joins=true
query II
EXPLAIN
SELECT COUNT(*) FROM bigtbl JOIN smalltbl ON (bigtbl.i BETWEEN low AND high AND bigtbl.i IS NOT DISTINCT FROM high - low)
----
physical_plan <REGEX>:.*NESTED_LOOP_JOIN.*
# Execute to trigger the switch case
query I
SELECT COUNT(*) FROM bigtbl JOIN smalltbl ON (bigtbl.i BETWEEN low AND high AND bigtbl.i IS NOT DISTINCT FROM high - low)
----
2

View File

@@ -0,0 +1,5 @@
x,y
1,10
2,11
3,12
4,13
1 x y
2 1 10
3 2 11
4 3 12
5 4 13

View File

@@ -0,0 +1,5 @@
x,y
1,101
2,102
3,103
4,104
1 x y
2 1 101
3 2 102
4 3 103
5 4 104

View File

@@ -0,0 +1,109 @@
# 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

View 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)

View File

@@ -0,0 +1,118 @@
# name: test/sql/join/iejoin/test_iejoin_east_west.test
# description: Test IEJoin
# group: [iejoin]
statement ok
PRAGMA enable_verification
statement ok
PRAGMA explain_output = PHYSICAL_ONLY;
statement ok
SET merge_join_threshold=0
statement ok
SET nested_loop_join_threshold=0;
# create tables
statement ok
CREATE TABLE east AS SELECT * FROM (VALUES
('r1', 100, 140, 12, 2),
('r2', 101, 100, 12, 8),
('r3', 103, 90, 5, 4)
) east(rid, id, dur, rev, cores)
statement ok
CREATE TABLE west AS SELECT * FROM (VALUES
('s1', 404, 100, 6, 4),
('s2', 498, 140, 11, 2),
('s3', 676, 80, 10, 1),
('s4', 742, 90, 5, 4)
) west(rid, t_id, time, cost, cores)
# Qs
query II
EXPLAIN
SELECT s1.rid, s2.rid
FROM west s1, west s2
WHERE s1.time > s2.time
ORDER BY 1, 2
----
physical_plan <REGEX>:.*PIECEWISE_MERGE_JOIN.*
query II
SELECT s1.rid, s2.rid
FROM west s1, west s2
WHERE s1.time > s2.time
ORDER BY 1, 2
----
s1 s3
s1 s4
s2 s1
s2 s3
s2 s4
s4 s3
# Qp
query II
EXPLAIN
SELECT s1.rid, s2.rid
FROM west s1, west s2
WHERE s1.time > s2.time AND s1.cost < s2.cost
ORDER BY 1, 2
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT s1.rid, s2.rid
FROM west s1, west s2
WHERE s1.time > s2.time AND s1.cost < s2.cost
ORDER BY 1, 2
----
s1 s3
s4 s3
# Qt
query II
EXPLAIN
SELECT east.rid, west.rid
FROM east, west
WHERE east.dur < west.time AND east.rev > west.cost
ORDER BY 1, 2
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT east.rid, west.rid
FROM east, west
WHERE east.dur < west.time AND east.rev > west.cost
ORDER BY 1, 2
----
r2 s2
# Test string comparisons
statement ok
CREATE TABLE weststr AS (
SELECT rid, time::VARCHAR AS time, cost::VARCHAR as cost
FROM west
);
query II
EXPLAIN
SELECT s1.rid, s2.rid
FROM weststr s1, weststr s2
WHERE s1.time > s2.time AND s1.cost < s2.cost
ORDER BY 1, 2
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT s1.rid, s2.rid
FROM weststr s1, weststr s2
WHERE s1.time > s2.time AND s1.cost < s2.cost
ORDER BY 1, 2
----
s2 s1
s3 s1
s3 s2
s4 s1

View File

@@ -0,0 +1,56 @@
# name: test/sql/join/iejoin/test_iejoin_events.test
# description: Test IEJoin
# group: [iejoin]
require skip_reload
# RNG order depends on vector size
require vector_size 1024
statement ok
PRAGMA enable_verification
statement ok
SET merge_join_threshold=0
# Use small 1K table to test Q2 because it melts down the other operators at larger scales
set seed 0.8675309
statement ok
CREATE TABLE events AS (
SELECT *,
"start" + INTERVAL (CASE WHEN random() < 0.1 THEN 120 ELSE (5 + round(random() * 50, 0)::BIGINT) END) MINUTE
AS "end"
FROM (
SELECT id,
'Event ' || id::VARCHAR as "name",
(5 + round(random() * 5000, 0)::BIGINT) AS audience,
'1992-01-01'::TIMESTAMP
+ INTERVAL (round(random() * 40 * 365, 0)::BIGINT) DAY
+ INTERVAL (round(random() * 23, 0)::BIGINT) HOUR
AS "start",
'Sponsor ' || (1 + round(random() * 10, 0)::BIGINT) AS sponsor
FROM range(1, 1000) tbl(id)
) q
);
query II
EXPLAIN
SELECT COUNT(*) FROM (
SELECT r.id, s.id
FROM events r, events s
WHERE r.start <= s.end AND r.end >= s.start
AND r.id <> s.id
) q2;
----
physical_plan <REGEX>:.*IE_JOIN.*
query I
SELECT COUNT(*) FROM (
SELECT r.id, s.id
FROM events r, events s
WHERE r.start <= s.end AND r.end >= s.start
AND r.id <> s.id
) q2;
----
2

View File

@@ -0,0 +1,89 @@
# name: test/sql/join/iejoin/test_iejoin_null_keys.test
# description: Issue #10122: wrong result in IEJoin
# group: [iejoin]
statement ok
pragma enable_verification
statement ok
PRAGMA explain_output = PHYSICAL_ONLY;
statement ok
SET merge_join_threshold=0
statement ok
SET nested_loop_join_threshold=0
statement ok
create table tt (x int, y int, z int);
statement ok
insert into tt select nullif(r % 3, 0), nullif (r % 5, 0), r from range(10) tbl(r);
query II
EXPLAIN
select *
from tt t1 left join tt t2
on t1.x < t2.x and t1.y < t2.y
order by t1.x nulls first, t1.y nulls first, t1.z, t2.x, t2.y, t2.z;
----
physical_plan <REGEX>:.*IE_JOIN.*
query IIIIII
select *
from tt t1 left join tt t2
on t1.x < t2.x and t1.y < t2.y
order by t1.x nulls first, t1.y nulls first, t1.z, t2.x, t2.y, t2.z;
----
NULL NULL 0 NULL NULL NULL
NULL 1 6 NULL NULL NULL
NULL 3 3 NULL NULL NULL
NULL 4 9 NULL NULL NULL
1 1 1 2 2 2
1 1 1 2 3 8
1 2 7 2 3 8
1 4 4 NULL NULL NULL
2 NULL 5 NULL NULL NULL
2 2 2 NULL NULL NULL
2 3 8 NULL NULL NULL
statement ok
pragma disable_optimizer;
statement ok
create table tt2 (x int);
statement ok
insert into tt2 select * from range(10);
query II
explain
select t1.x, t1.y
from (
select (case when x < 100 then null else 99 end) x, (case when x < 100 then 99 else 99 end) y
from tt2
) t1 left join tt2 t2
on t1.x < t2.x and t1.y < t2.x
order by t1.x nulls first, t1.y nulls first;
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
select t1.x, t1.y
from (
select (case when x < 100 then null else 99 end) x, (case when x < 100 then 99 else 99 end) y
from tt2
) t1 left join tt2 t2
on t1.x < t2.x and t1.y < t2.x
order by t1.x nulls first, t1.y nulls first;
----
NULL 99
NULL 99
NULL 99
NULL 99
NULL 99
NULL 99
NULL 99
NULL 99
NULL 99
NULL 99

View File

@@ -0,0 +1,46 @@
# name: test/sql/join/iejoin/test_iejoin_overlaps.test
# description: IEJoin block short circuiting
# group: [iejoin]
statement ok
PRAGMA enable_verification
statement ok
SET merge_join_threshold=0
statement ok
SET nested_loop_join_threshold=0;
statement ok
PRAGMA explain_output = PHYSICAL_ONLY;
# We read from CSVs to prevent the optimiser from
# using statistics to decide the join is a NOP
query II
EXPLAIN
SELECT t1.x, t2.x
FROM 'test/sql/join/iejoin/overlap.left.csv' t1, 'test/sql/join/iejoin/overlap.right.csv' t2
WHERE t1.x < t2.x AND t1.y > t2.y;
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT t1.x, t2.x
FROM 'test/sql/join/iejoin/overlap.left.csv' t1, 'test/sql/join/iejoin/overlap.right.csv' t2
WHERE t1.x < t2.x AND t1.y > t2.y;
----
# Reverse order to test op2 short circuit
query II
SELECT t1.x, t2.x
FROM 'test/sql/join/iejoin/overlap.left.csv' t1, 'test/sql/join/iejoin/overlap.right.csv' t2
WHERE t1.y > t2.y AND t1.x < t2.x;
----
query II
EXPLAIN
SELECT t1.x, t2.x
FROM 'test/sql/join/iejoin/overlap.left.csv' t1, 'test/sql/join/iejoin/overlap.right.csv' t2
WHERE t1.y > t2.y AND t1.x < t2.x;
----
physical_plan <REGEX>:.*IE_JOIN.*

View File

@@ -0,0 +1,50 @@
# name: test/sql/join/iejoin/test_iejoin_sort_tasks.test_slow
# description: Test IEJoin
# group: [iejoin]
# No verification - it doesn't scale
# Otherwise we run out of memory
require 64bit
statement ok
PRAGMA verify_parallelism
statement ok
SET merge_join_threshold=0
# Stream tables with minimal overlap that require merge tasks on both sides.
query II
EXPLAIN
SELECT lhs.begin, rhs.begin
FROM (
SELECT
i AS id,
i AS begin,
i + 1 AS end
FROM range(1, 10000002) tbl(i)) lhs,
(SELECT
i - 100000000 AS id,
i AS begin,
i + 1 AS end
FROM range(10000001, 20000002) tbl(i)) rhs
WHERE lhs.begin < rhs.end AND rhs.begin < lhs.end
----
physical_plan <REGEX>:.*IE_JOIN.*
query II
SELECT lhs.begin, rhs.begin
FROM (
SELECT
i AS id,
i AS begin,
i + 1 AS end
FROM range(1, 10000002) tbl(i)) lhs,
(SELECT
i - 100000000 AS id,
i AS begin,
i + 1 AS end
FROM range(10000001, 20000002) tbl(i)) rhs
WHERE lhs.begin < rhs.end AND rhs.begin < lhs.end
----
10000001 10000001