1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
# name: test/optimizer/limit_pushdown.test
# description: Test Limit Pushdown optimization
# group: [optimizer]
statement ok
CREATE TABLE integers(i INTEGER, j INTEGER)
statement ok
PRAGMA explain_output = OPTIMIZED_ONLY;
statement ok
INSERT INTO integers VALUES (1,1), (2,2), (3, 3), (4,4)
# project + limit becomes limit + project
query II
EXPLAIN SELECT i FROM integers LIMIT 4
----
logical_opt <REGEX>:.*PROJECTION.*LIMIT.*
# verify result for project + limit to limit + project
query I
SELECT i FROM integers LIMIT 4
----
1
2
3
4
# recursive limit pushdown
query II
EXPLAIN SELECT i FROM (SELECT i, i+1 FROM integers) LIMIT 4
----
logical_opt <REGEX>:.*PROJECTION.*PROJECTION.*LIMIT.*
# verify result for recursive limit pushdown and offset
query I
SELECT i FROM (SELECT i, i+1 FROM integers) LIMIT 4 OFFSET 2
----
3
4
# only offset: no pushdown
query II
EXPLAIN SELECT i FROM integers OFFSET 4
----
logical_opt <REGEX>:.*LIMIT.*PROJECTION.*
# limit and offset
query II
EXPLAIN SELECT i FROM integers LIMIT 4 OFFSET 2
----
logical_opt <REGEX>:.*PROJECTION.*LIMIT.*
# verify result for limit and offset
query I
SELECT i FROM integers LIMIT 4 OFFSET 2
----
3
4
# limit value > 8192: no pushdown
query II
EXPLAIN SELECT i FROM integers LIMIT 8192
----
logical_opt <REGEX>:.*LIMIT.*PROJECTION.*
|