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,30 @@
# name: test/sql/index/art/nodes/test_art_cyclic_duplicates.test_slow
# description: Test cycling inserts into the ART.
# group: [nodes]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers (i INTEGER);
statement ok
CREATE INDEX i_index ON integers USING art(i);
# Insert duplicates and test the count.
loop i 0 10
statement ok
INSERT INTO integers SELECT range FROM range(100);
loop j 0 40
query I
SELECT COUNT(*) = ${i} + 1 FROM integers WHERE i = ${j};
----
1
endloop
endloop

View File

@@ -0,0 +1,274 @@
# name: test/sql/index/art/nodes/test_art_leaf.test_slow
# description: Test ART leaf containing duplicates on multi column table
# group: [nodes]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers AS SELECT range a, 1 AS b, 1 AS c FROM range(1024)
statement ok
CREATE INDEX b_index ON integers(b)
# verify counts
query I
SELECT sum(b) FROM integers
----
1024
query I
SELECT sum(b) FROM integers WHERE b = 1
----
1024
query I
SELECT sum(b) FROM integers
----
1024
# now delete some elements
statement ok
DELETE FROM integers WHERE a < 100
# verify counts
query I
SELECT COUNT(b) FROM integers
----
924
query I
SELECT COUNT(b) FROM integers WHERE b = 1
----
924
query I
SELECT sum(b) FROM integers
----
924
# now delete more elements
statement ok
DELETE FROM integers WHERE a < 600
# verify counts
query I
SELECT COUNT(b) FROM integers
----
424
query I
SELECT COUNT(b) FROM integers WHERE b = 1
----
424
query I
SELECT sum(b) FROM integers
----
424
# now delete all elements
statement ok
DELETE FROM integers WHERE a < 1024
# verify counts
query I
SELECT COUNT(*) FROM integers
----
0
query I
SELECT COUNT(*) FROM integers WHERE b = 1
----
0
query I
SELECT COUNT(*) FROM integers
----
0
statement ok
DROP INDEX b_index
statement ok
DROP TABLE integers
# test insertion after matching prefixes
load __TEST_DIR__/test_index.db
statement ok
CREATE TABLE tbl_leaf_cov (id INTEGER);
statement ok
CREATE INDEX idx_leaf_cov ON tbl_leaf_cov(id);
statement ok
INSERT INTO tbl_leaf_cov VALUES (1), (1);
# testing growing/shrinking leaves
statement ok
CREATE TABLE tbl_grow_shrink (id_var VARCHAR, id_int INTEGER, id_point BIGINT);
statement ok
CREATE INDEX idx_var ON tbl_grow_shrink(id_var);
statement ok
CREATE INDEX idx_int ON tbl_grow_shrink(id_int);
statement ok
CREATE INDEX idx_both ON tbl_grow_shrink(id_var, id_int, id_point);
statement ok
CREATE INDEX idx_point ON tbl_grow_shrink(id_point);
# growing
loop i 0 29
statement ok
INSERT INTO tbl_grow_shrink VALUES ('hello there stranger! :sunshine:', 2, ${i});
query I
SELECT id_var FROM tbl_grow_shrink WHERE rowid = (SELECT min(rowid) FROM tbl_grow_shrink);
----
hello there stranger! :sunshine:
query I
SELECT id_int FROM tbl_grow_shrink WHERE rowid = (SELECT min(rowid) FROM tbl_grow_shrink);
----
2
query I
SELECT count(id_var) FROM tbl_grow_shrink WHERE id_point = ${i};
----
1
restart
query I
SELECT id_var FROM tbl_grow_shrink WHERE rowid = (SELECT min(rowid) FROM tbl_grow_shrink);
----
hello there stranger! :sunshine:
query I
SELECT id_int FROM tbl_grow_shrink WHERE rowid = (SELECT min(rowid) FROM tbl_grow_shrink);
----
2
query I
SELECT count(id_var) FROM tbl_grow_shrink WHERE id_point = ${i};
----
1
endloop
# some more queries
query I
SELECT count(id_var) FROM tbl_grow_shrink;
----
29
query I
SELECT sum(id_int) FROM tbl_grow_shrink;
----
58
restart
query I
SELECT count(id_var) FROM tbl_grow_shrink;
----
29
query I
SELECT sum(id_int) FROM tbl_grow_shrink;
----
58
# shrinking
loop i 0 29
query I
SELECT id_var FROM tbl_grow_shrink WHERE rowid = (SELECT min(rowid) FROM tbl_grow_shrink);
----
hello there stranger! :sunshine:
query I
SELECT id_int FROM tbl_grow_shrink WHERE rowid = (SELECT min(rowid) FROM tbl_grow_shrink);
----
2
query I
SELECT count(id_var) FROM tbl_grow_shrink WHERE id_point = ${i};
----
1
statement ok
DELETE FROM tbl_grow_shrink WHERE rowid = (SELECT min(rowid) FROM tbl_grow_shrink);
restart
endloop
# some final checking
query I
SELECT count(id_var) FROM tbl_grow_shrink;
----
0
query I
SELECT sum(id_int) FROM tbl_grow_shrink;
----
NULL
# merging leaves
statement ok
CREATE TABLE merge_leaf_tbl (id int);
statement ok
INSERT INTO merge_leaf_tbl SELECT range FROM range(2048);
statement ok
INSERT INTO merge_leaf_tbl VALUES (2047);
statement ok
CREATE INDEX idx_merge_leaf_tbl ON merge_leaf_tbl(id);
statement ok
DROP INDEX idx_merge_leaf_tbl;
statement ok
INSERT INTO merge_leaf_tbl VALUES (2047);
statement ok
INSERT INTO merge_leaf_tbl SELECT range + 10000 FROM range(2048);
statement ok
INSERT INTO merge_leaf_tbl SELECT range + 10000 FROM range(2048);
statement ok
CREATE INDEX idx_merge_leaf_tbl ON merge_leaf_tbl(id);
# code coverage of ART consisting of a single leaf
statement ok
CREATE TABLE tbl (i TINYINT);
statement ok
CREATE INDEX idx ON tbl(i);
statement ok
INSERT INTO tbl VALUES (1), (1), (1);

View File

@@ -0,0 +1,88 @@
# name: test/sql/index/art/nodes/test_art_leaf_coverage.test
# description: ART coverage tests for leaves.
# group: [nodes]
# Test the deserialization of leaves.
load __TEST_DIR__/art_vacuum.db
statement ok
CREATE TABLE duplicates (id UBIGINT);
statement ok
INSERT INTO duplicates SELECT range + 500 FROM range(500);
loop i 0 16
statement ok
INSERT INTO duplicates SELECT range FROM range(500);
endloop
statement ok
INSERT INTO duplicates SELECT range + 1000 FROM range(500);
statement ok
CREATE INDEX idx_duplicates ON duplicates(id);
restart
query I
SELECT id FROM duplicates WHERE id = 255;
----
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
255
# test different paths in the Leaf::Merge functionality
statement ok
CREATE TABLE leaf_merge_1 (id UINT32, id2 INT64);
statement ok
INSERT INTO leaf_merge_1 SELECT range, range FROM range (0, 2048, 1);
statement ok
INSERT INTO leaf_merge_1 SELECT 2047, 2047 FROM range (10);
statement ok
CREATE INDEX idx_merge_1 ON leaf_merge_1(id, id2);
statement ok
CREATE TABLE leaf_merge_2 (id UINT32, id2 INT64);
statement ok
INSERT INTO leaf_merge_2 SELECT range, range FROM range (0, 2048, 1);
statement ok
INSERT INTO leaf_merge_2 VALUES (2047, 2047)
statement ok
CREATE INDEX idx_merge_2 ON leaf_merge_2(id, id2);
# test merging leaves with same key
statement ok
CREATE TABLE tbl_dup_ser (id INTEGER);
statement ok
INSERT INTO tbl_dup_ser SELECT range FROM range(2043);
statement ok
INSERT INTO tbl_dup_ser SELECT 12345 FROM range(11);
statement ok
CREATE INDEX idx_dup_ser ON tbl_dup_ser(id);

View File

@@ -0,0 +1,154 @@
# name: test/sql/index/art/nodes/test_art_leaf_with_duplicates.test_slow
# description: Test ART leaf containing duplicates
# group: [nodes]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers(i integer)
statement ok
CREATE INDEX i_index ON integers(i)
# insert 4 elements
statement ok
INSERT INTO integers SELECT 1 FROM range(4)
# verify counts
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
4
# verify sums
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
4
# now delete all elements
statement ok
DELETE FROM integers WHERE i = 1
# verify counts
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
0
query I
SELECT COUNT(*) FROM integers
----
0
# insert 1024 elements
statement ok
INSERT INTO integers SELECT 1 FROM range(1024);
# verify counts
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1024
# verify sums
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
1024
# now delete all elements
statement ok
DELETE FROM integers WHERE i = 1
# verify counts
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
0
query I
SELECT COUNT(*) FROM integers
----
0
# insert 3000 elements: 1
statement ok
INSERT INTO integers SELECT 1 FROM range(3000);
# insert 1024 elements: 2
statement ok
INSERT INTO integers SELECT 2 FROM range(1024);
# verify counts
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
3000
query I
SELECT COUNT(*) FROM integers WHERE i = 2
----
1024
query I
SELECT COUNT(*) FROM integers WHERE i <= 2
----
4024
# verify sums
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
5048
# now delete all elements: 2
statement ok
DELETE FROM integers WHERE i = 2
# verify counts
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
3000
query I
SELECT COUNT(*) FROM integers
----
3000
# now delete all elements: 1
statement ok
DELETE FROM integers WHERE i = 1
# verify counts
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
0
query I
SELECT COUNT(*) FROM integers
----
0
statement ok
DROP INDEX i_index
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,63 @@
# name: test/sql/index/art/nodes/test_art_node_16.test
# description: Test ART Node 16
# group: [nodes]
load __TEST_DIR__/test_index.db
statement ok
CREATE TABLE integers(i integer)
statement ok
CREATE INDEX i_index ON integers(i)
# insert elements
loop i 0 6
statement ok
INSERT INTO integers VALUES (${i} + 1);
endloop
restart
# verify counts
loop i 0 6
query I
SELECT COUNT(*) FROM integers WHERE i = ${i} + 1
----
1
endloop
# verify sums
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
3
query I
SELECT sum(i) FROM integers WHERE i > 4
----
11
# now delete all elements
loop i 0 6
statement ok
DELETE FROM integers WHERE i = ${i} + 1
endloop
statement ok
DELETE FROM integers WHERE i = 0
statement ok
DROP INDEX i_index
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,81 @@
# name: test/sql/index/art/nodes/test_art_node_256.test
# description: Test ART Node 256
# group: [nodes]
load __TEST_DIR__/test_index.db
statement ok
CREATE TABLE integers(i integer)
statement ok
CREATE INDEX i_index ON integers(i)
# insert elements
loop i 0 60
statement ok
INSERT INTO integers VALUES (${i} + 1);
endloop
restart
# verify counts
loop i 0 20
query I
SELECT COUNT(*) FROM integers WHERE i = ${i} + 1
----
1
endloop
# verify sums
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
3
query I
SELECT sum(i) FROM integers WHERE i > 15
----
1710
# delete an element and reinsert it
statement ok
DELETE FROM integers WHERE i=16;
statement ok
INSERT INTO integers VALUES (16);
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
3
query I
SELECT sum(i) FROM integers WHERE i > 15
----
1710
# now delete all elements
loop i 0 60
statement ok
DELETE FROM integers WHERE i = ${i} + 1
endloop
statement ok
DELETE FROM integers WHERE i = 0
statement ok
DROP INDEX i_index
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,63 @@
# name: test/sql/index/art/nodes/test_art_node_4.test
# description: Test ART Node 4
# group: [nodes]
load __TEST_DIR__/test_index.db
statement ok
CREATE TABLE integers(i integer)
statement ok
CREATE INDEX i_index ON integers(i)
# insert elements
loop i 0 4
statement ok
INSERT INTO integers VALUES (${i} + 1);
endloop
restart
# verify counts
loop i 0 4
query I
SELECT COUNT(*) FROM integers WHERE i = ${i} + 1
----
1
endloop
# verify sums
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
3
query I
SELECT sum(i) FROM integers WHERE i > 1
----
9
# now delete all elements
loop i 0 4
statement ok
DELETE FROM integers WHERE i = ${i} + 1
endloop
statement ok
DELETE FROM integers WHERE i = 0
statement ok
DROP INDEX i_index
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,114 @@
# name: test/sql/index/art/nodes/test_art_node_48.test
# description: Test ART Node 48
# group: [nodes]
load __TEST_DIR__/test_index.db
statement ok
CREATE TABLE integers(i integer)
statement ok
CREATE INDEX i_index ON integers(i)
# insert elements
loop i 0 20
statement ok
INSERT INTO integers VALUES (${i} + 1);
endloop
restart
# verify counts
loop i 0 20
query I
SELECT COUNT(*) FROM integers WHERE i = ${i} + 1
----
1
endloop
# verify sums
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
3
query I
SELECT sum(i) FROM integers WHERE i > 15
----
90
# delete an element and reinsert it
statement ok
DELETE FROM integers WHERE i=16;
statement ok
INSERT INTO integers VALUES (16);
query I
SELECT sum(i) FROM integers WHERE i <= 2
----
3
query I
SELECT sum(i) FROM integers WHERE i > 15
----
90
# now delete all elements
loop i 0 20
statement ok
DELETE FROM integers WHERE i = ${i} + 1
endloop
statement ok
DELETE FROM integers WHERE i = 0
statement ok
DROP INDEX i_index
statement ok
DROP TABLE integers
statement ok
CREATE TABLE n48_tbl(i varchar, k integer)
statement ok
INSERT INTO n48_tbl SELECT 'a', range FROM range(10000);
statement ok
INSERT INTO n48_tbl SELECT 'b', range FROM range(25);
statement ok
INSERT INTO n48_tbl SELECT 'c', range FROM range(25);
statement ok
CREATE INDEX n48_tbl_idx ON n48_tbl(i, k);
# test freeing all the children of a Node48
statement ok
CREATE TABLE n48_free (id INTEGER);
statement ok
INSERT INTO n48_free SELECT range % 100 FROM range(2048);
loop i 0 20
statement ok
INSERT INTO n48_free VALUES (${i} + 107);
endloop
statement ok
CREATE INDEX idx_n48_free ON n48_free(id);

View File

@@ -0,0 +1,959 @@
# name: test/sql/index/art/nodes/test_art_prefix_edge_cases.test_slow
# description: Test ART prefix edge cases
# group: [nodes]
statement ok
PRAGMA enable_verification
statement ok
CREATE TABLE integers(i BIGINT)
statement ok
CREATE INDEX i_index ON integers using art(i)
# a bunch of values with different prefixes
statement ok
INSERT INTO integers VALUES (9312908412824241)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers
----
1
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
1
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
0
statement ok
INSERT INTO integers VALUES (-2092042498432234)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers
----
2
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
2
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
1
statement ok
INSERT INTO integers VALUES (1)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers
----
3
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
3
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
2
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
1
statement ok
INSERT INTO integers VALUES (-100)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers
----
4
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
4
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
2
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
2
statement ok
INSERT INTO integers VALUES (0)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers
----
5
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
5
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
3
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
2
statement ok
INSERT INTO integers VALUES (-598538523852390852)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers
----
6
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
6
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
3
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
3
statement ok
INSERT INTO integers VALUES (4298421)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers
----
7
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
7
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
4
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
3
statement ok
INSERT INTO integers VALUES (-498249)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers
----
8
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
8
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
4
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
4
statement ok
INSERT INTO integers VALUES (9312908412824240)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824240
----
1
query I
SELECT COUNT(*) FROM integers
----
9
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
9
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
5
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
4
statement ok
INSERT INTO integers VALUES (-2092042498432235)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824240
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432235
----
1
query I
SELECT COUNT(*) FROM integers
----
10
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
10
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
5
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
5
statement ok
INSERT INTO integers VALUES (2)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824240
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432235
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 2
----
1
query I
SELECT COUNT(*) FROM integers
----
11
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
11
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
6
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
5
statement ok
INSERT INTO integers VALUES (-101)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824240
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432235
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 2
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -101
----
1
query I
SELECT COUNT(*) FROM integers
----
12
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
12
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
6
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
6
statement ok
INSERT INTO integers VALUES (-598538523852390853)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824240
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432235
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 2
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -101
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390853
----
1
query I
SELECT COUNT(*) FROM integers
----
13
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
13
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
6
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
7
statement ok
INSERT INTO integers VALUES (4298422)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824240
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432235
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 2
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -101
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390853
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298422
----
1
query I
SELECT COUNT(*) FROM integers
----
14
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
14
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
7
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
7
statement ok
INSERT INTO integers VALUES (-498261)
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824241
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432234
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 1
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -100
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 0
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390852
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298421
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498249
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 9312908412824240
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -2092042498432235
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 2
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -101
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -598538523852390853
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = 4298422
----
1
query I
SELECT COUNT(*) FROM integers WHERE i = -498261
----
1
query I
SELECT COUNT(*) FROM integers
----
15
query I
SELECT COUNT(*) FROM integers WHERE i < 9223372036854775808
----
15
query I
SELECT COUNT(*) FROM integers WHERE i >= 0
----
7
query I
SELECT COUNT(*) FROM integers WHERE i < 0
----
8

View File

@@ -0,0 +1,124 @@
# name: test/sql/index/art/nodes/test_art_prefixes.test_slow
# description: Test different ART prefixes
# group: [nodes]
statement ok
PRAGMA enable_verification
# very mixed-length prefixes
statement ok
CREATE TABLE different_prefixes(str VARCHAR);
statement ok
INSERT INTO different_prefixes SELECT 'my first very long prefix that is really very long' || range FROM range(2048);
statement ok
INSERT INTO different_prefixes SELECT (range / 100)::VARCHAR || range::VARCHAR FROM range(2048);
statement ok
INSERT INTO different_prefixes SELECT 'my first very long prefix, the other not quite as long prefix that is still very long' || range FROM range(2048);
statement ok
INSERT INTO different_prefixes SELECT 'my first very long prefix, the other not quite as long prefix that is still very long and even longer omg!' || range FROM range(2048);
statement ok
INSERT INTO different_prefixes SELECT range::VARCHAR || (range + 1)::VARCHAR FROM range(2048);
statement ok
CREATE INDEX idx_different_prefixes ON different_prefixes(str);
statement ok
DELETE FROM different_prefixes
WHERE rowid IN (SELECT rowid FROM different_prefixes LIMIT 1000);
statement ok
DELETE FROM different_prefixes
WHERE rowid IN (SELECT rowid FROM different_prefixes LIMIT 3000);
statement ok
DROP INDEX idx_different_prefixes;
# this time all prefixes are long
statement ok
CREATE TABLE longer_prefixes(str VARCHAR);
statement ok
INSERT INTO longer_prefixes
SELECT 'my first very long prefix that is really very long' || range FROM range(2048);
statement ok
INSERT INTO longer_prefixes
SELECT 'my first very long prefix, the other not quite as long prefix that is still very long' || range FROM range(2048);
statement ok
CREATE INDEX idx_longer_prefixes ON longer_prefixes(str);
query I
SELECT str FROM longer_prefixes
WHERE str = 'my first very long prefix that is really very long77';
----
my first very long prefix that is really very long77
statement ok
DROP INDEX idx_longer_prefixes;
# more distinct prefixes
statement ok
CREATE TABLE distinct_prefixes (str VARCHAR);
statement ok
INSERT INTO distinct_prefixes SELECT
'2022-01-01'::DATE + range::INTEGER * 1000 ||
'1004-02-01'::DATE + range::INTEGER * 100 ||
'.' || '6004-02-01'::DATE + range::INTEGER * 2000
FROM range(100000);
statement ok
CREATE INDEX idx_distinct_prefixes ON distinct_prefixes(str);
statement ok
DROP INDEX idx_distinct_prefixes;
# more mixed-length distinct prefixes
statement ok
CREATE TABLE mixed_distinct_prefixes (str VARCHAR);
statement ok
INSERT INTO mixed_distinct_prefixes SELECT
'2022-01-01'::DATE + range::INTEGER * 1000
FROM range(100000);
statement ok
INSERT INTO mixed_distinct_prefixes SELECT
'2022-01-01'::DATE + range::INTEGER * 1000 ||
'1004-02-01'::DATE + range::INTEGER * 100
FROM range(100000);
statement ok
INSERT INTO mixed_distinct_prefixes SELECT
'2022-01-01'::DATE + range::INTEGER * 1000 ||
'1004-02-01'::DATE + range::INTEGER * 100 ||
'.' || '6004-02-01'::DATE + range::INTEGER * 2000
FROM range(100000);
statement ok
CREATE INDEX idx_mixed_distinct_prefixes ON mixed_distinct_prefixes(str);
statement ok
DELETE FROM mixed_distinct_prefixes
WHERE rowid IN (SELECT rowid FROM mixed_distinct_prefixes LIMIT 1000);
statement ok
DELETE FROM mixed_distinct_prefixes
WHERE rowid IN (SELECT rowid FROM mixed_distinct_prefixes LIMIT 1000);
statement ok
DELETE FROM mixed_distinct_prefixes
WHERE rowid IN (SELECT rowid FROM mixed_distinct_prefixes LIMIT 1000);
statement ok
DROP INDEX idx_mixed_distinct_prefixes;

View File

@@ -0,0 +1,65 @@
# name: test/sql/index/art/nodes/test_art_prefixes_restart.test
# description: Test the (de)serialization of different ART prefixes
# group: [nodes]
load __TEST_DIR__/test_art_prefixes.db
statement ok
CREATE TABLE tbl (id INTEGER);
statement ok
CREATE INDEX idx ON tbl(id);
# insert two children into a Node4
statement ok
INSERT INTO tbl VALUES (1), (2);
restart
# delete one child, the other child will still be serialized
statement ok
DELETE FROM tbl WHERE id = 1;
# now do the same, but with a very long shared prefix
statement ok
CREATE TABLE tbl_varchar (id VARCHAR);
statement ok
CREATE INDEX idx_varchar ON tbl_varchar(id);
# insert two children into a Node4
statement ok
INSERT INTO tbl_varchar VALUES
('hello I am a prefix, and it is a beautiful sommer evening, and the plants are blossoming - 1'),
('hello I am a prefix, and it is a beautiful sommer evening, and the plants are blossoming - 2');
restart
# delete one child, the other child will still be serialized
statement ok
DELETE FROM tbl_varchar
WHERE id = 'hello I am a prefix, and it is a beautiful sommer evening, and the plants are blossoming - 1';
# now we test splitting prefixes
statement ok
DELETE FROM tbl_varchar;
statement ok
INSERT INTO tbl_varchar VALUES ('012345678901234'), ('012345678901235');
# now with serialized prefixes
statement ok
DELETE FROM tbl_varchar;
statement ok
INSERT INTO tbl_varchar VALUES
('0123456789-0123456789-0123456789-0123456789');
restart
statement ok
INSERT INTO tbl_varchar VALUES
('0123456779-0123456789-0123456789-0123456789');

View File

@@ -0,0 +1,25 @@
# name: test/sql/index/art/nodes/test_art_sparse_merge.test
# description: Test sparse row IDs for duplicate keys when merging.
# group: [nodes]
statement ok
CREATE TABLE tbl1 (i INT);
loop i 0 8
statement ok
INSERT INTO tbl1 SELECT range FROM range(50000);
statement ok
DELETE FROM tbl1 WHERE i > 4;
endloop
# Parallel index construction.
statement ok
CREATE INDEX idx ON tbl1(i);
query I
SELECT COUNT(i) FROM tbl1 WHERE i = 1;
----
8

View File

@@ -0,0 +1,64 @@
# name: test/sql/index/art/nodes/test_art_sparse_row_ids.test_slow
# description: Test sparse row IDs for duplicate keys.
# group: [nodes]
statement ok
PRAGMA enable_verification
# We try to create sparse row IDs up to their 4'th byte.
# The maximum value of 3 bytes is 16,777,215.
statement ok
CREATE TABLE tbl1 (i INT);
statement ok
CREATE TABLE tbl2 (i INT);
# Inserting into the index chunk-at-a-time.
statement ok
CREATE INDEX idx2 ON tbl2(i);
loop i 0 100
statement ok
INSERT INTO tbl1 SELECT range FROM range(50000);
statement ok
INSERT INTO tbl2 SELECT range FROM range(50000);
query I
SELECT COUNT(i) = ${i} + 1 FROM tbl2 WHERE i = 96;
----
1
statement ok
DELETE FROM tbl1 WHERE i > 270;
statement ok
DELETE FROM tbl2 WHERE i > 270;
endloop
# Parallel index construction.
statement ok
CREATE INDEX idx ON tbl1(i);
query I
SELECT COUNT(i) FROM tbl1 WHERE i = 49;
----
100
query I
SELECT COUNT(i) FROM tbl2 WHERE i = 49;
----
100
query I
SELECT COUNT(i) FROM tbl1 WHERE rowid = (SELECT MAX(rowid) FROM tbl1);
----
1
query I
SELECT COUNT(i) FROM tbl2 WHERE rowid = (SELECT MAX(rowid) FROM tbl2);
----
1