should be it
This commit is contained in:
28
external/duckdb/test/sql/index/art/scan/test_art_adaptive_scan.test
vendored
Normal file
28
external/duckdb/test/sql/index/art/scan/test_art_adaptive_scan.test
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
# name: test/sql/index/art/scan/test_art_adaptive_scan.test
|
||||
# description: Test scanning more than standard vector size rows with an index scan.
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers AS SELECT 42 AS i FROM range(2050);
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers SELECT 42 + 1 + range FROM range(5000);
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i_index ON integers USING ART(i);
|
||||
|
||||
statement ok
|
||||
SET index_scan_percentage = 1.0;
|
||||
|
||||
statement ok
|
||||
SET index_scan_max_count = 0;
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT COUNT(i) FROM integers WHERE i = 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT COUNT(i) FROM integers WHERE i = 42;
|
||||
----
|
||||
2050
|
||||
95
external/duckdb/test/sql/index/art/scan/test_art_many_matches.test
vendored
Normal file
95
external/duckdb/test/sql/index/art/scan/test_art_many_matches.test
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
# name: test/sql/index/art/scan/test_art_many_matches.test
|
||||
# description: Test ART index with many matches
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
BEGIN TRANSACTION
|
||||
|
||||
# create a table with the values [0, 1, 0, 1, ..., 0, 1]
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers SELECT i FROM RANGE(0, 1024, 1) t2(j), (VALUES (0), (1)) t1(i) ORDER BY j, i;
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i_index ON integers using art(i)
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i<1
|
||||
----
|
||||
1024
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i<=1
|
||||
----
|
||||
2048
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i=0
|
||||
----
|
||||
1024
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i=1
|
||||
----
|
||||
1024
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i>0
|
||||
----
|
||||
1024
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i>=0
|
||||
----
|
||||
2048
|
||||
|
||||
statement ok
|
||||
ROLLBACK
|
||||
|
||||
statement ok
|
||||
BEGIN TRANSACTION
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER)
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers SELECT i FROM RANGE(0, 2048, 1) t2(j), (VALUES (0), (1)) t1(i) ORDER BY j, i;
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i_index ON integers using art(i)
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i<1
|
||||
----
|
||||
2048
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i<=1
|
||||
----
|
||||
4096
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i=0
|
||||
----
|
||||
2048
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i=1
|
||||
----
|
||||
2048
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i>0
|
||||
----
|
||||
2048
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM integers WHERE i>=0
|
||||
----
|
||||
4096
|
||||
|
||||
statement ok
|
||||
ROLLBACK
|
||||
|
||||
33
external/duckdb/test/sql/index/art/scan/test_art_negative_range_scan.test
vendored
Normal file
33
external/duckdb/test/sql/index/art/scan/test_art_negative_range_scan.test
vendored
Normal file
@@ -0,0 +1,33 @@
|
||||
# name: test/sql/index/art/scan/test_art_negative_range_scan.test
|
||||
# description: Test negative range scans on an ART
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i integer)
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers SELECT * FROM range(-500, 500, 1)
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i_index ON integers(i)
|
||||
|
||||
query R
|
||||
SELECT sum(i) FROM integers WHERE i >= -500 AND i <= -498
|
||||
----
|
||||
-1497.000000
|
||||
|
||||
query R
|
||||
SELECT sum(i) FROM integers WHERE i >= -10 AND i <= 5
|
||||
----
|
||||
-40.000000
|
||||
|
||||
query R
|
||||
SELECT sum(i) FROM integers WHERE i >= 10 AND i <= 15
|
||||
----
|
||||
75.000000
|
||||
|
||||
statement ok
|
||||
DROP INDEX i_index
|
||||
|
||||
statement ok
|
||||
DROP TABLE integers
|
||||
83
external/duckdb/test/sql/index/art/scan/test_art_null_bytes.test
vendored
Normal file
83
external/duckdb/test/sql/index/art/scan/test_art_null_bytes.test
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
# name: test/sql/index/art/scan/test_art_null_bytes.test
|
||||
# description: Test ART keys containing NULL bytes.
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE varchars(v VARCHAR PRIMARY KEY);
|
||||
|
||||
statement ok
|
||||
INSERT INTO varchars VALUES ('hello'), ('hello' || chr(0)), ('hello' || chr(0) || chr(0)), ('hello' || chr(0) || chr(0) || chr(0));
|
||||
|
||||
statement error
|
||||
INSERT INTO varchars VALUES ('hello' || chr(0) || chr(0) || chr(0));
|
||||
----
|
||||
Duplicate key
|
||||
|
||||
query I
|
||||
SELECT * FROM varchars WHERE v = 'hello'
|
||||
----
|
||||
hello
|
||||
|
||||
query I
|
||||
SELECT * FROM varchars WHERE v = 'hello' || chr(0)
|
||||
----
|
||||
hello\0
|
||||
|
||||
query I
|
||||
SELECT * FROM varchars WHERE v = 'hello' || chr(0) || chr(0)
|
||||
----
|
||||
hello\0\0
|
||||
|
||||
query I
|
||||
SELECT * FROM varchars WHERE v = 'hello' || chr(0) || chr(0) || chr(0)
|
||||
----
|
||||
hello\0\0\0
|
||||
|
||||
statement ok
|
||||
CREATE TABLE blobs(b BLOB PRIMARY KEY);
|
||||
|
||||
statement ok
|
||||
INSERT INTO blobs VALUES (''), ('\x00'), ('\x01'), ('\x00\x01'), ('\x01\x00'), ('\x01\x01'), ('\x00\x00');
|
||||
|
||||
statement error
|
||||
INSERT INTO blobs VALUES ('\x00\x01');
|
||||
----
|
||||
Duplicate key
|
||||
|
||||
query I
|
||||
SELECT * FROM blobs WHERE b = ''
|
||||
----
|
||||
(empty)
|
||||
|
||||
query I
|
||||
SELECT * FROM blobs WHERE b = '\x00'
|
||||
----
|
||||
\x00
|
||||
|
||||
query I
|
||||
SELECT * FROM blobs WHERE b = '\x00\x01'
|
||||
----
|
||||
\x00\x01
|
||||
|
||||
query I
|
||||
SELECT * FROM blobs WHERE b >= '\x00' ORDER BY b::VARCHAR
|
||||
----
|
||||
\x00
|
||||
\x00\x00
|
||||
\x00\x01
|
||||
\x01
|
||||
\x01\x00
|
||||
\x01\x01
|
||||
|
||||
query I
|
||||
SELECT * FROM blobs WHERE b >= '\x01' ORDER BY b::VARCHAR
|
||||
----
|
||||
\x01
|
||||
\x01\x00
|
||||
\x01\x01
|
||||
|
||||
query I
|
||||
SELECT * FROM blobs WHERE b >= '\x01\x00' ORDER BY b::VARCHAR
|
||||
----
|
||||
\x01\x00
|
||||
\x01\x01
|
||||
35
external/duckdb/test/sql/index/art/scan/test_art_prepared_scan.test
vendored
Normal file
35
external/duckdb/test/sql/index/art/scan/test_art_prepared_scan.test
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# name: test/sql/index/art/scan/test_art_prepared_scan.test
|
||||
# description: Test the usage of prepared statements for ART index scans
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers VALUES (1), (2), (4);
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i_index ON integers(i);
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM integers WHERE i = 2;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT i FROM integers WHERE i = 2;
|
||||
----
|
||||
2
|
||||
|
||||
statement ok
|
||||
PREPARE v1 AS SELECT * FROM integers WHERE i = $1;
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE EXECUTE v1(2);
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
EXECUTE v1(2);
|
||||
----
|
||||
2
|
||||
86
external/duckdb/test/sql/index/art/scan/test_art_range_scan.test
vendored
Normal file
86
external/duckdb/test/sql/index/art/scan/test_art_range_scan.test
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
# name: test/sql/index/art/scan/test_art_range_scan.test
|
||||
# description: Test ART range scan
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test (x VARCHAR PRIMARY KEY);
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES ('abc');
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES ('def');
|
||||
|
||||
query I
|
||||
SELECT * FROM test WHERE x > 'z';
|
||||
----
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES ('abcd');
|
||||
|
||||
query I
|
||||
SELECT x FROM test WHERE x > 'abce';
|
||||
----
|
||||
def
|
||||
|
||||
statement ok
|
||||
DROP TABLE test;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test (x VARCHAR PRIMARY KEY);
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES ('abcd'), ('abde');
|
||||
|
||||
query I
|
||||
SELECT x FROM test WHERE x > 'abce';
|
||||
----
|
||||
abde
|
||||
|
||||
statement ok
|
||||
DROP TABLE test;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test (x USMALLINT PRIMARY KEY);
|
||||
|
||||
# node 48
|
||||
statement ok
|
||||
INSERT INTO test SELECT i FROM range(1, 20) tbl(i);
|
||||
|
||||
query I
|
||||
SELECT x FROM test WHERE x > 20;
|
||||
----
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (256);
|
||||
|
||||
query I
|
||||
SELECT x FROM test WHERE x > 20;
|
||||
----
|
||||
256
|
||||
|
||||
statement ok
|
||||
DROP TABLE test;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE test (x USMALLINT PRIMARY KEY);
|
||||
|
||||
# node 256
|
||||
statement ok
|
||||
INSERT INTO test SELECT i FROM range(1, 135) tbl(i);
|
||||
|
||||
query I
|
||||
SELECT x FROM test WHERE x > 135;
|
||||
----
|
||||
|
||||
statement ok
|
||||
INSERT INTO test VALUES (256), (257);
|
||||
|
||||
query I
|
||||
SELECT x FROM test WHERE x > 135;
|
||||
----
|
||||
256
|
||||
257
|
||||
|
||||
statement ok
|
||||
DROP TABLE test;
|
||||
124
external/duckdb/test/sql/index/art/scan/test_art_scan_coverage.test
vendored
Normal file
124
external/duckdb/test/sql/index/art/scan/test_art_scan_coverage.test
vendored
Normal file
@@ -0,0 +1,124 @@
|
||||
# name: test/sql/index/art/scan/test_art_scan_coverage.test
|
||||
# description: Test edge cases during index scans
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE tab0(pk INTEGER PRIMARY KEY, col0 INTEGER, col1 FLOAT, col2 TEXT, col3 INTEGER, col4 FLOAT, col5 TEXT)
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(0,25,74.4,'vvcgn',47,57.68,'ymlye')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(1,72,81.64,'zsnbm',42,74.55,'tzagd')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(2,45,38.39,'dmsso',87,29.20,'ywydk')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(3,81,97.79,'tdbjm',48,89.67,'hvaol')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(4,17,18.5,'ddcya',66,87.1,'ndulx')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(5,46,83.75,'khqpe',31,31.98,'hzpio')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(6,85,8.45,'ugwie',30,22.61,'klsxt')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(7,36,54.34,'pflrv',18,61.89,'vrltg')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(8,47,41.84,'plpkl',76,65.31,'yzivj')
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab0 VALUES(9,76,63.21,'uakya',80,80.58,'ocfgj')
|
||||
|
||||
statement ok
|
||||
CREATE TABLE tab1(pk INTEGER PRIMARY KEY, col0 INTEGER, col1 FLOAT, col2 TEXT, col3 INTEGER, col4 FLOAT, col5 TEXT)
|
||||
|
||||
statement ok
|
||||
CREATE INDEX idx_tab1_0 on tab1 (col0)
|
||||
|
||||
statement ok
|
||||
CREATE INDEX idx_tab1_1 on tab1 (col1)
|
||||
|
||||
statement ok
|
||||
CREATE INDEX idx_tab1_3 on tab1 (col3)
|
||||
|
||||
statement ok
|
||||
CREATE INDEX idx_tab1_4 on tab1 (col4)
|
||||
|
||||
statement ok
|
||||
INSERT INTO tab1 SELECT * FROM tab0
|
||||
|
||||
statement ok
|
||||
DELETE FROM tab1 WHERE col3 = 54 AND col1 <= 76.83
|
||||
|
||||
query I rowsort label-empty
|
||||
SELECT pk FROM tab1 WHERE col3 = 54 AND col1 <= 76.83
|
||||
----
|
||||
|
||||
query I rowsort label-225
|
||||
SELECT pk FROM tab1 WHERE NOT (col3 = 54 AND col1 <= 76.83)
|
||||
----
|
||||
10 values hashing to e20b902b49a98b1a05ed62804c757f94
|
||||
|
||||
statement ok
|
||||
DELETE FROM tab1 WHERE (col4 > 71.47) OR col0 IN (98,26,25,60)
|
||||
|
||||
query I rowsort label-empty
|
||||
SELECT pk FROM tab1 WHERE (col4 > 71.47) OR col0 IN (98,26,25,60)
|
||||
----
|
||||
|
||||
query I rowsort label-240
|
||||
SELECT pk FROM tab1 WHERE NOT ((col4 > 71.47) OR col0 IN (98,26,25,60))
|
||||
----
|
||||
2
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
|
||||
statement ok
|
||||
DELETE FROM tab1 WHERE ((col0 > 32) AND col0 < 87)
|
||||
|
||||
query I rowsort label-empty
|
||||
SELECT pk FROM tab1 WHERE ((col0 > 32) AND col0 < 87)
|
||||
----
|
||||
|
||||
# Issue #13785
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t0_varchar(c0 VARCHAR);
|
||||
|
||||
statement ok
|
||||
INSERT INTO t0_varchar(c0) VALUES ('a'), ('a');
|
||||
|
||||
statement ok
|
||||
CREATE INDEX t0i0_idx ON t0_varchar(c0 );
|
||||
|
||||
query I
|
||||
SELECT c0 FROM t0_varchar WHERE t0_varchar.c0 <= 'a';
|
||||
----
|
||||
a
|
||||
a
|
||||
|
||||
# Issue #13842
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t0_scan(c0 DATE);
|
||||
|
||||
statement ok
|
||||
INSERT INTO t0_scan(c0) VALUES ('1970-01-02'), ('1970-01-02'), ('1970-01-03');
|
||||
|
||||
statement ok
|
||||
CREATE INDEX t0i0 ON t0_scan(c0 DESC);
|
||||
|
||||
query I
|
||||
SELECT c0 FROM t0_scan WHERE '1970-01-03' >= t0_scan.c0 ORDER BY c0;
|
||||
----
|
||||
1970-01-02
|
||||
1970-01-02
|
||||
1970-01-03
|
||||
58
external/duckdb/test/sql/index/art/scan/test_art_scan_duplicate_filters.test
vendored
Normal file
58
external/duckdb/test/sql/index/art/scan/test_art_scan_duplicate_filters.test
vendored
Normal file
@@ -0,0 +1,58 @@
|
||||
# name: test/sql/index/art/scan/test_art_scan_duplicate_filters.test
|
||||
# description: Test index scans with duplicate filters.
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t_1 (fIdx VARCHAR, sIdx UUID,);
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t_3 (fIdx VARCHAR, sIdx UUID);
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t_4 (sIdx UUID);
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t_5 (sIdx UUID);
|
||||
|
||||
statement ok
|
||||
CREATE UNIQUE INDEX _pk_idx_t_5 ON t_5 (sIdx);
|
||||
|
||||
statement ok
|
||||
INSERT INTO t_4 (sIdx) VALUES
|
||||
('1381e0ce-6b3e-43f5-9536-5e7af3a512a5'::UUID),
|
||||
('6880cdba-09f5-3c4f-8eb8-391aefdd8052'::UUID),
|
||||
('a3e876dd-5e50-3af7-9649-689fd938daeb'::UUID),
|
||||
('e0abc0d3-63be-41d8-99ca-b1269ed153a8'::UUID);
|
||||
|
||||
statement ok
|
||||
INSERT INTO t_5 (sIdx) VALUES
|
||||
('a3e876dd-5e50-3af7-9649-689fd938daeb'::UUID),
|
||||
('e0abc0d3-63be-41d8-99ca-b1269ed153a8'::UUID),
|
||||
('91c79790-5828-45f2-ad88-50e9b541cc05'::UUID),
|
||||
('1381e0ce-6b3e-43f5-9536-5e7af3a512a5'::UUID),
|
||||
('d9f29fa5-2051-3ea4-9d9e-15c3698b4bb8'::UUID),
|
||||
('6880cdba-09f5-3c4f-8eb8-391aefdd8052'::UUID),
|
||||
('3239280c-2204-3e60-b3a1-3ad3acc8fd59'::UUID),
|
||||
('2fced822-342d-344a-aa34-2707e593be52'::UUID);
|
||||
|
||||
query I
|
||||
WITH
|
||||
cte_5 AS (
|
||||
SELECT sIdx FROM t_4 ANTI JOIN t_3 USING (sIdx)
|
||||
),
|
||||
cte_6 AS MATERIALIZED (
|
||||
SELECT
|
||||
COALESCE(cte_5.sIdx, t_1.sIdx) AS sIdx,
|
||||
COALESCE(t_1.fIdx, cte_5.sIdx::VARCHAR) AS fIdx,
|
||||
FROM cte_5 FULL JOIN t_1 USING (sIdx)
|
||||
),
|
||||
cte_7 AS (
|
||||
SELECT t_5.sIdx, FROM t_5
|
||||
WHERE sIdx IN (SELECT sIdx FROM cte_6)
|
||||
)
|
||||
SELECT fIdx, FROM cte_6 JOIN cte_7 USING (sIdx) ORDER BY fIdx;
|
||||
----
|
||||
1381e0ce-6b3e-43f5-9536-5e7af3a512a5
|
||||
6880cdba-09f5-3c4f-8eb8-391aefdd8052
|
||||
a3e876dd-5e50-3af7-9649-689fd938daeb
|
||||
e0abc0d3-63be-41d8-99ca-b1269ed153a8
|
||||
35
external/duckdb/test/sql/index/art/scan/test_art_scan_normal_to_nested.test
vendored
Normal file
35
external/duckdb/test/sql/index/art/scan/test_art_scan_normal_to_nested.test
vendored
Normal file
@@ -0,0 +1,35 @@
|
||||
# name: test/sql/index/art/scan/test_art_scan_normal_to_nested.test
|
||||
# description: Test range scanning with an iterator moving from a normal leaf to a nested leaf.
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers (i BIGINT);
|
||||
|
||||
statement ok
|
||||
CREATE INDEX idx_integers ON integers (i);
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers (i) VALUES ('1'), ('-1'), ('1');
|
||||
|
||||
# The border is exactly when moving from a non-nested leaf to a nested leaf.
|
||||
|
||||
query I
|
||||
SELECT i FROM integers WHERE i <= 0;
|
||||
----
|
||||
-1
|
||||
|
||||
# Issue 16074.
|
||||
|
||||
statement ok
|
||||
CREATE TABLE t0(c1 TIMESTAMP);
|
||||
|
||||
statement ok
|
||||
INSERT INTO t0(c1) VALUES ('2020-02-29 12:00:00'), ('1969-12-09 09:26:38'), ('2020-02-29 12:00:00');
|
||||
|
||||
statement ok
|
||||
CREATE INDEX i0 ON t0(c1);
|
||||
|
||||
query I
|
||||
SELECT c1 FROM t0 WHERE c1 <= '2007-07-07 07:07:07';
|
||||
----
|
||||
1969-12-09 09:26:38
|
||||
51
external/duckdb/test/sql/index/art/scan/test_art_scan_thresholds.test
vendored
Normal file
51
external/duckdb/test/sql/index/art/scan/test_art_scan_thresholds.test
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
# name: test/sql/index/art/scan/test_art_scan_thresholds.test
|
||||
# description: Test setting different index scan thresholds.
|
||||
# group: [scan]
|
||||
|
||||
# Take the maximum of the absolute count and the percentage, which is 100%.
|
||||
|
||||
statement ok
|
||||
SET index_scan_max_count = 1;
|
||||
|
||||
statement ok
|
||||
SET index_scan_percentage = 1.0;
|
||||
|
||||
statement ok
|
||||
CREATE TABLE integers(i INTEGER);
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers SELECT 42 FROM range(1000);
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers SELECT 43 FROM range(10000);
|
||||
|
||||
statement ok
|
||||
CREATE INDEX idx ON integers(i);
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM integers WHERE i = 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
statement ok
|
||||
SET index_scan_percentage = 0.000001;
|
||||
|
||||
# Use one as the maximum count, with the matching keys exceeding that maximum.
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM integers WHERE i = 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Sequential Scan.*
|
||||
|
||||
# Let's also test more than STANDARD_VECTOR_SIZE values.
|
||||
|
||||
statement ok
|
||||
SET index_scan_max_count = 4000;
|
||||
|
||||
statement ok
|
||||
INSERT INTO integers SELECT 4242 FROM range(4000);
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM integers WHERE i = 4242;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
44
external/duckdb/test/sql/index/art/scan/test_hash_join_in_filter_index_scan.test
vendored
Normal file
44
external/duckdb/test/sql/index/art/scan/test_hash_join_in_filter_index_scan.test
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
# name: test/sql/index/art/scan/test_hash_join_in_filter_index_scan.test
|
||||
# description: Test using an index scan for IN filter pushdown via hash joins.
|
||||
# group: [scan]
|
||||
|
||||
require tpch
|
||||
|
||||
statement ok
|
||||
CALL dbgen(sf=0.01);
|
||||
|
||||
statement ok
|
||||
CREATE TABLE random_orders AS (
|
||||
(SELECT o_orderkey FROM orders
|
||||
OFFSET 100
|
||||
LIMIT 3)
|
||||
UNION
|
||||
(SELECT o_orderkey FROM orders
|
||||
OFFSET (SELECT COUNT(*) FROM orders) / 2
|
||||
LIMIT 3)
|
||||
UNION
|
||||
(SELECT o_orderkey FROM orders
|
||||
OFFSET (SELECT COUNT(*) FROM orders) / 2 + 100000
|
||||
LIMIT 3));
|
||||
|
||||
statement ok
|
||||
CREATE TABLE orders_shuffled AS FROM orders ORDER BY random();
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE
|
||||
SELECT o_orderkey FROM orders_shuffled WHERE o_orderkey IN (
|
||||
SELECT UNNEST(LIST(o_orderkey)) FROM random_orders
|
||||
) ORDER BY ALL;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Sequential Scan.*
|
||||
|
||||
statement ok
|
||||
ALTER TABLE orders_shuffled ADD PRIMARY KEY (o_orderkey);
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE
|
||||
SELECT o_orderkey FROM orders_shuffled WHERE o_orderkey IN (
|
||||
SELECT UNNEST(LIST(o_orderkey)) FROM random_orders
|
||||
) ORDER BY ALL;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
91
external/duckdb/test/sql/index/art/scan/test_in_filter_index_scan.test
vendored
Normal file
91
external/duckdb/test/sql/index/art/scan/test_in_filter_index_scan.test
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
# name: test/sql/index/art/scan/test_in_filter_index_scan.test
|
||||
# description: Test using an index scan for IN filter pushdown.
|
||||
# group: [scan]
|
||||
|
||||
statement ok
|
||||
CREATE TABLE tbl AS SELECT range AS i FROM range(500000);
|
||||
|
||||
statement ok
|
||||
ALTER TABLE tbl ADD PRIMARY KEY(i);
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE DELETE FROM tbl WHERE i IN (3, 50, 299, 123);
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT COUNT(*) FROM tbl;
|
||||
----
|
||||
499996
|
||||
|
||||
# Test with duplicate values.
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101);
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) ORDER BY i;
|
||||
----
|
||||
2
|
||||
42
|
||||
100
|
||||
101
|
||||
|
||||
# Test with different CONJUNCTION_AND removing values from the IN.
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i != 42 AND i <= 100;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i != 42 AND i <= 100 ORDER BY i;
|
||||
----
|
||||
2
|
||||
100
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i = 42 AND i <= 100;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i = 42 AND i <= 100 ORDER BY i;
|
||||
----
|
||||
42
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i < 101 AND i >= 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i < 101 AND i >= 42 ORDER BY i;
|
||||
----
|
||||
42
|
||||
100
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i > 42 AND i >= 42;
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i > 42 AND i >= 42 ORDER BY i;
|
||||
----
|
||||
100
|
||||
101
|
||||
|
||||
# Test with multiple IN filters.
|
||||
|
||||
query II
|
||||
EXPLAIN ANALYZE SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i > 42 AND i IN (56, 200, 2, 100);
|
||||
----
|
||||
analyzed_plan <REGEX>:.*Type: Index Scan.*
|
||||
|
||||
query I
|
||||
SELECT i FROM tbl WHERE i IN (2, 42, 100, 42, 101) AND i > 42 AND i IN (56, 200, 2, 100) ORDER BY i;
|
||||
----
|
||||
100
|
||||
Reference in New Issue
Block a user