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,90 @@
# name: test/sql/constraints/unique/test_unique.test
# description: Single UNIQUE constraint
# group: [unique]
statement ok
SET default_null_order='nulls_first';
statement ok
CREATE TABLE integers(i INTEGER UNIQUE, j INTEGER)
# insert unique values
statement ok
INSERT INTO integers VALUES (3, 4), (2, 5)
query II
SELECT * FROM integers
----
3 4
2 5
# insert a duplicate value as part of a chain of values, this should fail
statement error
INSERT INTO integers VALUES (6, 6), (3, 4);
----
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
# but if we try to replace them like this it's going to fail
statement error
UPDATE integers SET i=77 WHERE i IS NULL
----
query II
SELECT * FROM integers ORDER BY i, j
----
NULL 6
NULL 7
2 5
3 4
# we can replace them like this though
statement ok
UPDATE integers SET i=77 WHERE i IS NULL AND j=6
query II
SELECT * FROM integers ORDER BY i, j
----
NULL 7
2 5
3 4
77 6
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement error
INSERT INTO integers VALUES (NULL, 6), (3, 7)
----
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,17 @@
# name: test/sql/constraints/unique/test_unique_error.test
# description: UNIQUE constraint on temporary tables with duplicate data
# group: [unique]
statement ok
CREATE TEMPORARY TABLE integers(i INTEGER, j VARCHAR)
statement ok
INSERT INTO integers VALUES (3, '4'), (2, '4')
statement error
CREATE UNIQUE INDEX uidx ON integers (j)
----
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,92 @@
# name: test/sql/constraints/unique/test_unique_multi_column.test
# description: NULL values and a multi-column UNIQUE constraint
# group: [unique]
statement ok
SET default_null_order='nulls_first';
statement ok
CREATE TEMPORARY TABLE integers(i INTEGER, j INTEGER)
statement ok
CREATE UNIQUE INDEX uidx ON integers (i,j)
statement ok
INSERT INTO integers VALUES (3, 4), (2, 5)
query II
SELECT * FROM integers
----
3 4
2 5
# insert a duplicate value as part of a chain of values, this should fail
statement error
INSERT INTO integers VALUES (6, 6), (3, 4);
----
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 6), (NULL, 7)
statement error
UPDATE integers SET i=77 WHERE i IS NULL
----
query II
SELECT * FROM integers ORDER BY i, j
----
NULL 6
NULL 6
NULL 7
2 5
3 4
statement ok
UPDATE integers SET i=77 WHERE i IS NULL AND j=7
query II
SELECT * FROM integers ORDER BY i, j
----
NULL 6
NULL 6
2 5
3 4
77 7
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement error
INSERT INTO integers VALUES (3, 4)
----
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,74 @@
# name: test/sql/constraints/unique/test_unique_multi_constraint.test
# description: Multiple constraints
# group: [unique]
statement ok
CREATE TABLE integers(i INTEGER PRIMARY KEY, j INTEGER UNIQUE)
# no constraints are violated
statement ok
INSERT INTO integers VALUES (1, 1), (2, 2)
# only the second UNIQUE constraint is violated
statement error
INSERT INTO integers VALUES (3, 3), (4, 1)
----
# no constraints are violated
statement ok
INSERT INTO integers VALUES (3, 3), (4, 4)
# insert many values with a unique constraint violation at the end
statement error
INSERT INTO integers VALUES (5, 5), (6, 6), (7, 7), (8, 8), (9, 9), (10, 10), (11, 11), (12, 12), (13, 13), (14, 14), (15, 15), (16, 16), (17, 17), (18, 18), (19, 19), (20, 20), (21, 21), (22, 22), (23, 23), (24, 24), (25, 25), (26, 26), (27, 27), (28, 28), (29, 29), (30, 30), (31, 31), (32, 32), (33, 33), (34, 34), (35, 35), (36, 36), (37, 37), (38, 38), (39, 39), (40, 40), (41, 41), (42, 42), (43, 43), (44, 44), (45, 45), (46, 46), (47, 47), (48, 48), (49, 49), (50, 50), (51, 51), (52, 52), (53, 53), (54, 54), (55, 55), (56, 56), (57, 57), (58, 58), (59, 59), (60, 60), (61, 61), (62, 62), (63, 63), (64, 64), (65, 65), (66, 66), (67, 67), (68, 68), (69, 69), (70, 70), (71, 71), (72, 72), (73, 73), (74, 74), (75, 75), (76, 76), (77, 77), (78, 78), (79, 79), (80, 80), (81, 81), (82, 82), (83, 83), (84, 84), (85, 85), (86, 86), (87, 87), (88, 88), (89, 89), (90, 90), (91, 91), (92, 92), (93, 93), (94, 94), (95, 95), (96, 96), (97, 97), (98, 98), (99, 99), (5, 5), (NULL, NULL), (NULL, NULL), (NULL, NULL), (NULL, NULL)
----
query II
SELECT * FROM integers WHERE i > 0 ORDER BY 1
----
1 1
2 2
3 3
4 4
# attempt to append values that were inserted before (but failed)
# should work now
statement ok
INSERT INTO integers VALUES (5, 5), (6, 6)
query II
SELECT * FROM integers WHERE i > 0 ORDER BY 1
----
1 1
2 2
3 3
4 4
5 5
6 6
# now attempt conflicting updates
# conflict on PRIMARY KEY
statement error
UPDATE integers SET i=4, j=100 WHERE i=1
----
# conflict on UNIQUE INDEX
statement error
UPDATE integers SET i=100, j=4 WHERE j=1
----
# we can insert the old tuple normally
statement ok
INSERT INTO integers VALUES (100, 100)
query II
SELECT * FROM integers WHERE i > 0 ORDER BY 1
----
1 1
2 2
3 3
4 4
5 5
6 6
100 100

View File

@@ -0,0 +1,83 @@
# name: test/sql/constraints/unique/test_unique_string.test
# description: UNIQUE constraint on temporary tables with Strings
# group: [unique]
statement ok
CREATE TEMPORARY TABLE integers(i INTEGER, j VARCHAR)
statement ok
CREATE UNIQUE INDEX "uidx" ON "integers" ("j")
statement ok
INSERT INTO integers VALUES (3, '4'), (2, '5')
query IT
SELECT * FROM integers
----
3 4
2 5
statement error
INSERT INTO integers VALUES (6, '6'), (3, '4');
----
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement error
UPDATE integers SET j='77' WHERE j IS NULL
----
query IT
SELECT * FROM integers ORDER BY i, j
----
2 5
3 4
6 NULL
7 NULL
statement ok
UPDATE integers SET j='7777777777777777777777777777' WHERE j IS NULL AND i=6
# we can insert a bunch of null values
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement ok
INSERT INTO integers VALUES (6,NULL), (7,NULL)
statement error
INSERT INTO integers VALUES (3, '4')
----
statement error
INSERT INTO integers VALUES (3, '4')
----
statement ok
DROP TABLE integers

View File

@@ -0,0 +1,92 @@
# name: test/sql/constraints/unique/test_unique_temp.test
# description: UNIQUE constraint on temporary tables
# group: [unique]
statement ok
SET default_null_order='nulls_first';
statement ok
CREATE TEMPORARY TABLE integers(i INTEGER, j INTEGER)
statement ok
CREATE UNIQUE INDEX uidx ON integers (i)
# insert unique values
statement ok
INSERT INTO integers VALUES (3, 4), (2, 5)
query II
SELECT * FROM integers
----
3 4
2 5
# insert a duplicate value as part of a chain of values, this should fail
statement error
INSERT INTO integers VALUES (6, 6), (3, 4);
----
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
# but if we try to replace them like this it's going to fail
statement error
UPDATE integers SET i=77 WHERE i IS NULL
----
query II
SELECT * FROM integers ORDER BY i, j
----
NULL 6
NULL 7
2 5
3 4
# we can replace them like this though
statement ok
UPDATE integers SET i=77 WHERE i IS NULL AND j=6
query II
SELECT * FROM integers ORDER BY i, j
----
NULL 7
2 5
3 4
77 6
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement ok
INSERT INTO integers VALUES (NULL, 6), (NULL, 7)
statement error
INSERT INTO integers VALUES (NULL, 6), (3, 7)
----
statement ok
DROP TABLE integers