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,86 @@
# name: test/sql/limit/parallel_limit_transaction_local.test_slow
# description: Test correct behavior of parallel limit in the presence of transaction-local data
# group: [limit]
statement ok
PRAGMA enable_verification
statement ok
PRAGMA threads=8
statement ok
CREATE TABLE integers AS SELECT * FROM range(5000000) tbl(i);
statement ok
CREATE TABLE other_table AS SELECT 337 i UNION ALL SELECT 948247 UNION ALL SELECT 1779793 UNION ALL SELECT 8779793;
statement ok
BEGIN TRANSACTION
statement ok
INSERT INTO integers SELECT * FROM range(5000000, 10000000) tbl(i);
query I
SELECT * FROM integers LIMIT 5
----
0
1
2
3
4
query I
SELECT * FROM integers WHERE i>5978321 OR i=334 LIMIT 5
----
334
5978322
5978323
5978324
5978325
query I
SELECT * FROM integers WHERE i>5978321 LIMIT 5
----
5978322
5978323
5978324
5978325
5978326
query I
SELECT * FROM integers WHERE i>8978321 LIMIT 5
----
8978322
8978323
8978324
8978325
8978326
# IN-clause (semi join)
query I sort
SELECT * FROM integers WHERE i IN (SELECT * FROM other_table)
----
1779793
337
8779793
948247
query I
(SELECT * FROM integers WHERE i>1978321 LIMIT 5) UNION ALL (SELECT * FROM integers WHERE i>8978321 LIMIT 5)
----
1978322
1978323
1978324
1978325
1978326
8978322
8978323
8978324
8978325
8978326
statement ok
DROP TABLE integers
statement ok
ROLLBACK

View File

@@ -0,0 +1,17 @@
# name: test/sql/limit/test_limit0.test
# description: Test limit 0
# group: [limit]
# not running with verification on purpose, since running this without the optimizer will take forever
query I
SELECT * FROM (SELECT SUM(i) FROM range(100000000000) tbl(i)) LIMIT 0;
----
statement ok
PRAGMA explain_output='OPTIMIZED_ONLY'
query II nosort emptyset
EXPLAIN SELECT * FROM (SELECT SUM(i) FROM range(100000000000) tbl(i)) LIMIT 0;
query II nosort emptyset
EXPLAIN SELECT * FROM (SELECT SUM(i) FROM range(100000000000) tbl(i)) WHERE 1=0;

View File

@@ -0,0 +1,120 @@
# name: test/sql/limit/test_parallel_limit.test_slow
# description: Test parallel limit execution
# group: [limit]
statement ok
PRAGMA enable_verification
statement ok
PRAGMA threads=8
statement ok
CREATE TABLE other_table AS SELECT 337 i UNION ALL SELECT 948247 UNION ALL SELECT 1779793 UNION ALL SELECT 4779793;
foreach table_type TABLE VIEW
statement ok
CREATE ${table_type} integers AS SELECT * FROM range(10000000) tbl(i);
query I
SELECT * FROM integers LIMIT 5
----
0
1
2
3
4
query I
SELECT * FROM integers WHERE i>1978321 OR i=334 LIMIT 5
----
334
1978322
1978323
1978324
1978325
query I
SELECT * FROM integers WHERE i>1978321 LIMIT 5
----
1978322
1978323
1978324
1978325
1978326
query I
SELECT * FROM integers WHERE i>4978321 LIMIT 5
----
4978322
4978323
4978324
4978325
4978326
# large offset
query I
SELECT * FROM integers WHERE i>4978321 LIMIT 5 OFFSET 100000;
----
5078322
5078323
5078324
5078325
5078326
query I
SELECT * FROM integers WHERE i>4978321 LIMIT 5 OFFSET 1000000;
----
5978322
5978323
5978324
5978325
5978326
# insertion order preservation with window functions
query II
SELECT i, lead(i, 1) over () FROM integers LIMIT 5 OFFSET 4978321;
----
4978321 4978322
4978322 4978323
4978323 4978324
4978324 4978325
4978325 4978326
# large lead
query II
SELECT i, lead(i, 100000) over () FROM integers LIMIT 5 OFFSET 4978321;
----
4978321 5078321
4978322 5078322
4978323 5078323
4978324 5078324
4978325 5078325
# IN-clause (semi join)
query I sort
SELECT * FROM integers WHERE i IN (SELECT * FROM other_table)
----
1779793
337
4779793
948247
query I
(SELECT * FROM integers WHERE i>1978321 LIMIT 5) UNION ALL (SELECT * FROM integers WHERE i>4978321 LIMIT 5)
----
1978322
1978323
1978324
1978325
1978326
4978322
4978323
4978324
4978325
4978326
statement ok
DROP ${table_type} integers
endloop

View File

@@ -0,0 +1,95 @@
# name: test/sql/limit/test_parallel_limit_nested.test_slow
# description: Test parallel limit execution with basic nested types
# group: [limit]
statement ok
PRAGMA enable_verification
statement ok
PRAGMA threads=8
statement ok
CREATE TABLE other_table AS SELECT 337 i UNION ALL SELECT 94824 UNION ALL SELECT 177979 UNION ALL SELECT 477979;
foreach table_type TABLE VIEW
statement ok
CREATE ${table_type} integers AS SELECT i, [i, i + 1, i + 2] AS k, {'i': i} AS l FROM range(1000000) tbl(i);
query II
SELECT k, l FROM integers LIMIT 5
----
[0, 1, 2] {'i': 0}
[1, 2, 3] {'i': 1}
[2, 3, 4] {'i': 2}
[3, 4, 5] {'i': 3}
[4, 5, 6] {'i': 4}
query II
SELECT k, l FROM integers WHERE i>197832 OR i=334 LIMIT 5
----
[334, 335, 336] {'i': 334}
[197833, 197834, 197835] {'i': 197833}
[197834, 197835, 197836] {'i': 197834}
[197835, 197836, 197837] {'i': 197835}
[197836, 197837, 197838] {'i': 197836}
query II
SELECT k, l FROM integers WHERE i>197832 LIMIT 5
----
[197833, 197834, 197835] {'i': 197833}
[197834, 197835, 197836] {'i': 197834}
[197835, 197836, 197837] {'i': 197835}
[197836, 197837, 197838] {'i': 197836}
[197837, 197838, 197839] {'i': 197837}
query II
SELECT k, l FROM integers WHERE i>497832 LIMIT 5
----
[497833, 497834, 497835] {'i': 497833}
[497834, 497835, 497836] {'i': 497834}
[497835, 497836, 497837] {'i': 497835}
[497836, 497837, 497838] {'i': 497836}
[497837, 497838, 497839] {'i': 497837}
# large offset
query II
SELECT k, l FROM integers WHERE i>497832 LIMIT 5 OFFSET 100000;
----
[597833, 597834, 597835] {'i': 597833}
[597834, 597835, 597836] {'i': 597834}
[597835, 597836, 597837] {'i': 597835}
[597836, 597837, 597838] {'i': 597836}
[597837, 597838, 597839] {'i': 597837}
query II
SELECT k, l FROM integers WHERE i>497832 LIMIT 5 OFFSET 1000000;
----
# IN-clause (semi join)
query II sort
SELECT k, l FROM integers WHERE i IN (SELECT * FROM other_table)
----
[177979, 177980, 177981] {'i': 177979}
[337, 338, 339] {'i': 337}
[477979, 477980, 477981] {'i': 477979}
[94824, 94825, 94826] {'i': 94824}
query II
(SELECT k, l FROM integers WHERE i>197832 LIMIT 5) UNION ALL (SELECT k, l FROM integers WHERE i>497832 LIMIT 5)
----
[197833, 197834, 197835] {'i': 197833}
[197834, 197835, 197836] {'i': 197834}
[197835, 197836, 197837] {'i': 197835}
[197836, 197837, 197838] {'i': 197836}
[197837, 197838, 197839] {'i': 197837}
[497833, 497834, 497835] {'i': 497833}
[497834, 497835, 497836] {'i': 497834}
[497835, 497836, 497837] {'i': 497835}
[497836, 497837, 497838] {'i': 497836}
[497837, 497838, 497839] {'i': 497837}
statement ok
DROP ${table_type} integers
endloop

View File

@@ -0,0 +1,95 @@
# name: test/sql/limit/test_parallel_limit_nested_null.test_slow
# description: Test parallel limit execution with nested types and nulls
# group: [limit]
statement ok
PRAGMA enable_verification
statement ok
PRAGMA threads=8
statement ok
CREATE TABLE other_table AS SELECT 337 i UNION ALL SELECT 94824 UNION ALL SELECT 177979 UNION ALL SELECT 477979;
foreach table_type TABLE VIEW
statement ok
CREATE ${table_type} integers AS SELECT i, case when i%2=0 then [i, NULL, i + 2] else [NULL, i + 1, NULL] end AS k, {'i': case when i%2=0 then null else i end} AS l FROM range(1000000) tbl(i);
query II
SELECT k, l FROM integers LIMIT 5
----
[0, NULL, 2] {'i': NULL}
[NULL, 2, NULL] {'i': 1}
[2, NULL, 4] {'i': NULL}
[NULL, 4, NULL] {'i': 3}
[4, NULL, 6] {'i': NULL}
query II
SELECT k, l FROM integers WHERE i>197832 OR i=334 LIMIT 5
----
[334, NULL, 336] {'i': NULL}
[NULL, 197834, NULL] {'i': 197833}
[197834, NULL, 197836] {'i': NULL}
[NULL, 197836, NULL] {'i': 197835}
[197836, NULL, 197838] {'i': NULL}
query II
SELECT k, l FROM integers WHERE i>197832 LIMIT 5
----
[NULL, 197834, NULL] {'i': 197833}
[197834, NULL, 197836] {'i': NULL}
[NULL, 197836, NULL] {'i': 197835}
[197836, NULL, 197838] {'i': NULL}
[NULL, 197838, NULL] {'i': 197837}
query II
SELECT k, l FROM integers WHERE i>497832 LIMIT 5
----
[NULL, 497834, NULL] {'i': 497833}
[497834, NULL, 497836] {'i': NULL}
[NULL, 497836, NULL] {'i': 497835}
[497836, NULL, 497838] {'i': NULL}
[NULL, 497838, NULL] {'i': 497837}
# large offset
query II
SELECT k, l FROM integers WHERE i>497832 LIMIT 5 OFFSET 100000;
----
[NULL, 597834, NULL] {'i': 597833}
[597834, NULL, 597836] {'i': NULL}
[NULL, 597836, NULL] {'i': 597835}
[597836, NULL, 597838] {'i': NULL}
[NULL, 597838, NULL] {'i': 597837}
query II
SELECT k, l FROM integers WHERE i>497832 LIMIT 5 OFFSET 1000000;
----
# IN-clause (semi join)
query II sort
SELECT k, l FROM integers WHERE i IN (SELECT * FROM other_table)
----
[94824, NULL, 94826] {'i': NULL}
[NULL, 177980, NULL] {'i': 177979}
[NULL, 338, NULL] {'i': 337}
[NULL, 477980, NULL] {'i': 477979}
query II
(SELECT k, l FROM integers WHERE i>197832 LIMIT 5) UNION ALL (SELECT k, l FROM integers WHERE i>497832 LIMIT 5)
----
[NULL, 197834, NULL] {'i': 197833}
[197834, NULL, 197836] {'i': NULL}
[NULL, 197836, NULL] {'i': 197835}
[197836, NULL, 197838] {'i': NULL}
[NULL, 197838, NULL] {'i': 197837}
[NULL, 497834, NULL] {'i': 497833}
[497834, NULL, 497836] {'i': NULL}
[NULL, 497836, NULL] {'i': 497835}
[497836, NULL, 497838] {'i': NULL}
[NULL, 497838, NULL] {'i': 497837}
statement ok
DROP ${table_type} integers
endloop

View File

@@ -0,0 +1,100 @@
# name: test/sql/limit/test_parallel_limit_nulls.test_slow
# description: Test parallel limit execution with NULLs
# group: [limit]
statement ok
PRAGMA enable_verification
statement ok
PRAGMA threads=8
statement ok
CREATE TABLE other_table AS SELECT 337 i UNION ALL SELECT 948247 UNION ALL SELECT 1779793 UNION ALL SELECT 4779793;
foreach table_type TABLE VIEW
statement ok
CREATE ${table_type} integers AS SELECT i, CASE WHEN i%2=0 THEN NULL ELSE i END AS k FROM range(10000000) tbl(i);
query I
SELECT k FROM integers LIMIT 5
----
NULL
1
NULL
3
NULL
query I
SELECT k FROM integers WHERE i>1978321 OR i=334 LIMIT 5
----
NULL
NULL
1978323
NULL
1978325
query I
SELECT k FROM integers WHERE i>1978321 LIMIT 5
----
NULL
1978323
NULL
1978325
NULL
query I
SELECT k FROM integers WHERE i>4978321 LIMIT 5
----
NULL
4978323
NULL
4978325
NULL
# large offset
query I
SELECT k FROM integers WHERE i>4978321 LIMIT 5 OFFSET 100000;
----
NULL
5078323
NULL
5078325
NULL
query I
SELECT k FROM integers WHERE i>4978321 LIMIT 5 OFFSET 1000000;
----
NULL
5978323
NULL
5978325
NULL
# IN-clause (semi join)
query I sort
SELECT k FROM integers WHERE i IN (SELECT * FROM other_table)
----
1779793
337
4779793
948247
query I
(SELECT k FROM integers WHERE i>1978321 LIMIT 5) UNION ALL (SELECT k FROM integers WHERE i>4978321 LIMIT 5)
----
NULL
1978323
NULL
1978325
NULL
NULL
4978323
NULL
4978325
NULL
statement ok
DROP ${table_type} integers
endloop

View File

@@ -0,0 +1,100 @@
# name: test/sql/limit/test_parallel_limit_strings.test_slow
# description: Test parallel limit execution with strings
# group: [limit]
statement ok
PRAGMA enable_verification
statement ok
PRAGMA threads=8
statement ok
CREATE TABLE other_table AS SELECT 337 i UNION ALL SELECT 948247 UNION ALL SELECT 1779793 UNION ALL SELECT 4779793;
foreach table_type TABLE VIEW
statement ok
CREATE ${table_type} integers AS SELECT i, CONCAT('quackquack', i) AS k FROM range(10000000) tbl(i);
query I
SELECT k FROM integers LIMIT 5
----
quackquack0
quackquack1
quackquack2
quackquack3
quackquack4
query I
SELECT k FROM integers WHERE i>1978321 OR i=334 LIMIT 5
----
quackquack334
quackquack1978322
quackquack1978323
quackquack1978324
quackquack1978325
query I
SELECT k FROM integers WHERE i>1978321 LIMIT 5
----
quackquack1978322
quackquack1978323
quackquack1978324
quackquack1978325
quackquack1978326
query I
SELECT k FROM integers WHERE i>4978321 LIMIT 5
----
quackquack4978322
quackquack4978323
quackquack4978324
quackquack4978325
quackquack4978326
# large offset
query I
SELECT k FROM integers WHERE i>4978321 LIMIT 5 OFFSET 100000;
----
quackquack5078322
quackquack5078323
quackquack5078324
quackquack5078325
quackquack5078326
query I
SELECT k FROM integers WHERE i>4978321 LIMIT 5 OFFSET 1000000;
----
quackquack5978322
quackquack5978323
quackquack5978324
quackquack5978325
quackquack5978326
# IN-clause (semi join)
query I sort
SELECT k FROM integers WHERE i IN (SELECT * FROM other_table)
----
quackquack1779793
quackquack337
quackquack4779793
quackquack948247
query I
(SELECT k FROM integers WHERE i>1978321 LIMIT 5) UNION ALL (SELECT k FROM integers WHERE i>4978321 LIMIT 5)
----
quackquack1978322
quackquack1978323
quackquack1978324
quackquack1978325
quackquack1978326
quackquack4978322
quackquack4978323
quackquack4978324
quackquack4978325
quackquack4978326
statement ok
DROP ${table_type} integers
endloop

View File

@@ -0,0 +1,63 @@
# name: test/sql/limit/test_preserve_insertion_order.test
# description: Test limit with preserve insertion order disabled
# group: [limit]
statement ok
PRAGMA enable_verification
statement ok
SET preserve_insertion_order=false
statement ok
CREATE TABLE integers AS SELECT 1 AS i FROM range(1000000) t(i)
query III
SELECT MIN(i), MAX(i), COUNT(*) FROM integers
----
1 1 1000000
query I
SELECT * FROM integers LIMIT 5
----
1
1
1
1
1
query I
SELECT * FROM integers LIMIT 5 OFFSET 500000
----
1
1
1
1
1
statement ok
CREATE TABLE integers2 AS SELECT * FROM range(1000000) tbl(i)
query III
SELECT MIN(i), MAX(i), COUNT(*) FROM integers2
----
0 999999 1000000
# we need a rowsort here because we don't preserve insertion order
# note that rowsort is a string-based sort
query I rowsort
SELECT * FROM integers2 WHERE i IN (337, 195723, 442578, 994375)
----
195723
337
442578
994375
# when insertion order is disabled, there is no guarantee on which tuples come out of a LIMIT clause
# for the LIMIT test select everything
query I rowsort
SELECT * FROM integers2 WHERE i IN (337, 195723, 442578, 994375) LIMIT 4
----
195723
337
442578
994375