Add TCL tests for INSERT OR IGNORE handling

This commit is contained in:
PThorpe92
2025-10-15 22:46:55 -04:00
parent 41d2a0af77
commit 3112f55e05

View File

@@ -701,4 +701,77 @@ do_execsql_test_on_specific_db {:memory:} insert-rowid-backwards-compability-2 {
CREATE TABLE t(a INTEGER, PRIMARY KEY (a DESC));
INSERT INTO t(a) VALUES (123);
SELECT rowid, * FROM t;
} {123|123}
} {123|123}
do_execsql_test_on_specific_db {:memory:} ignore-pk-conflict {
CREATE TABLE t(a INTEGER PRIMARY KEY);
INSERT INTO t VALUES (1),(2),(3);
INSERT OR IGNORE INTO t VALUES (2);
SELECT a FROM t ORDER BY a;
} {1
2
3}
do_execsql_test_on_specific_db {:memory:} ignore-unique-conflict {
CREATE TABLE t(a INTEGER, b TEXT UNIQUE);
INSERT INTO t VALUES (1,'x'),(2,'y');
INSERT OR IGNORE INTO t VALUES (3,'y');
SELECT a,b FROM t ORDER BY a;
} {1|x
2|y}
do_execsql_test_on_specific_db {:memory:} ignore-multi-unique-conflict {
CREATE TABLE t(a UNIQUE, b UNIQUE, c);
INSERT INTO t VALUES (1,10,100),(2,20,200);
INSERT OR IGNORE INTO t VALUES (1,30,300); -- conflicts on a
INSERT OR IGNORE INTO t VALUES (3,20,300); -- conflicts on b
INSERT OR IGNORE INTO t VALUES (1,20,300); -- conflicts on both
SELECT a,b,c FROM t ORDER BY a;
} {1|10|100
2|20|200}
do_execsql_test_on_specific_db {:memory:} ignore-some-conflicts-multirow {
CREATE TABLE t(a INTEGER UNIQUE);
INSERT INTO t VALUES (2),(4);
INSERT OR IGNORE INTO t VALUES (1),(2),(3),(4),(5);
SELECT a FROM t ORDER BY a;
} {1
2
3
4
5}
do_execsql_test_on_specific_db {:memory:} ignore-from-select {
CREATE TABLE src(x);
INSERT INTO src VALUES (1),(2),(2),(3);
CREATE TABLE dst(a INTEGER UNIQUE);
INSERT INTO dst VALUES (2);
INSERT OR IGNORE INTO dst SELECT x FROM src;
SELECT a FROM dst ORDER BY a;
} {1
2
3}
do_execsql_test_on_specific_db {:memory:} ignore-null-in-unique {
CREATE TABLE t(a INTEGER UNIQUE);
INSERT INTO t VALUES (1),(NULL),(NULL);
INSERT OR IGNORE INTO t VALUES (1),(NULL);
SELECT COUNT(*) FROM t WHERE a IS NULL;
} {3}
do_execsql_test_on_specific_db {:memory:} ignore-preserves-rowid {
CREATE TABLE t(data TEXT UNIQUE);
INSERT INTO t VALUES ('x'),('y'),('z');
SELECT rowid, data FROM t WHERE data='y';
INSERT OR IGNORE INTO t VALUES ('y');
SELECT rowid, data FROM t WHERE data='y';
} {2|y
2|y}
do_execsql_test_on_specific_db {:memory:} ignore-intra-statement-dups {
CREATE TABLE t(a INTEGER PRIMARY KEY, b TEXT);
INSERT OR IGNORE INTO t VALUES (5,'first'),(6,'x'),(5,'second'),(5,'third');
SELECT a,b FROM t ORDER BY a;
} {5|first
6|x}