should be it
This commit is contained in:
90
external/duckdb/test/sql/constraints/unique/test_unique.test
vendored
Normal file
90
external/duckdb/test/sql/constraints/unique/test_unique.test
vendored
Normal 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
|
||||
|
||||
17
external/duckdb/test/sql/constraints/unique/test_unique_error.test
vendored
Normal file
17
external/duckdb/test/sql/constraints/unique/test_unique_error.test
vendored
Normal 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
|
||||
|
||||
92
external/duckdb/test/sql/constraints/unique/test_unique_multi_column.test
vendored
Normal file
92
external/duckdb/test/sql/constraints/unique/test_unique_multi_column.test
vendored
Normal 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
|
||||
|
||||
74
external/duckdb/test/sql/constraints/unique/test_unique_multi_constraint.test
vendored
Normal file
74
external/duckdb/test/sql/constraints/unique/test_unique_multi_constraint.test
vendored
Normal 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
|
||||
|
||||
83
external/duckdb/test/sql/constraints/unique/test_unique_string.test
vendored
Normal file
83
external/duckdb/test/sql/constraints/unique/test_unique_string.test
vendored
Normal 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
|
||||
|
||||
92
external/duckdb/test/sql/constraints/unique/test_unique_temp.test
vendored
Normal file
92
external/duckdb/test/sql/constraints/unique/test_unique_temp.test
vendored
Normal 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
|
||||
Reference in New Issue
Block a user