Add tests for name resolution in ON CONFLICT clauses.
FossilOrigin-Name: cf253584ecf7aed04406b4bae78b536818fadfb3fb96c05f2c99954b841db85f
This commit is contained in:
parent
4da91eed80
commit
224d92c8c0
15
manifest
15
manifest
@ -1,5 +1,5 @@
|
||||
C Avoid\sunnecessary\scursor\sseeking\swhen\sperforming\san\sUPSERT.
|
||||
D 2018-04-20T17:02:16.531
|
||||
C Add\stests\sfor\sname\sresolution\sin\sON\sCONFLICT\sclauses.
|
||||
D 2018-04-20T17:50:49.589
|
||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||
F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
|
||||
@ -1512,7 +1512,7 @@ F test/update2.test 5e67667e1c54017d964e626db765cf8bedcf87483c184f4c575bdb8c1dd2
|
||||
F test/upsert1.test 934315888a04b4e119ebb6abf558d92bf01d9f94fc8ff0bbc1c7c6015005340f
|
||||
F test/upsert2.test 9c3cdbb1a890227f6504ce4b0e3de68f4cdfa16bb21d8641208a9239896c5a09
|
||||
F test/upsert3.test 88d7d590a1948a9cb6eac1b54b0642f67a9f35a1fc0f19b200e97d5d39e3179c
|
||||
F test/upsert4.test c70b9dd9ae9952d8942ae2558dcecdeb1128097b1d03a22d8ae42660112ffc73
|
||||
F test/upsert4.test 1674e23c9d831e39464865a9fa63d855e148eeced8a147e8911febfe7c11f771
|
||||
F test/uri.test 3481026f00ade6dfe8adb7acb6e1e47b04369568
|
||||
F test/uri2.test 9d3ba7a53ee167572d53a298ee4a5d38ec4a8fb7
|
||||
F test/userauth01.test e740a2697a7b40d7c5003a7d7edaee16acd349a9
|
||||
@ -1724,8 +1724,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P d8eb9f8d9b61400c7e12f01ef5c233257b03532221f7c7a8386f7ac2db439626 131ed95e1452a5b0d92341c48a5d3915b328ccfce2cf605f702428ae7ee3e21b
|
||||
R 18734526551b7a3f2bbebfc4bb6f5573
|
||||
T +closed 131ed95e1452a5b0d92341c48a5d3915b328ccfce2cf605f702428ae7ee3e21b
|
||||
U drh
|
||||
Z 23a2cba3b6d85936a323e52ae5cb1690
|
||||
P 693a3dcbdd8fb2d516c0f46fdbb478838cde675afc1026740e942705aac3c07f
|
||||
R edb0f8d75d196edc7e220a2b21ed76d2
|
||||
U dan
|
||||
Z 98b6f0b67bad58c0b46cab1188f88f7f
|
||||
|
@ -1 +1 @@
|
||||
693a3dcbdd8fb2d516c0f46fdbb478838cde675afc1026740e942705aac3c07f
|
||||
cf253584ecf7aed04406b4bae78b536818fadfb3fb96c05f2c99954b841db85f
|
@ -219,14 +219,147 @@ do_catchsql_test 5.0 {
|
||||
} {1 {ON CONFLICT clause does not match any PRIMARY KEY or UNIQUE constraint}}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test that ON CONFLICT constraint processing occurs before any REPLACE
|
||||
# constraint processing.
|
||||
#
|
||||
do_execsql_test 6.0 {
|
||||
CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c);
|
||||
INSERT INTO t1 VALUES(1, 1, 'one');
|
||||
INSERT INTO t1 VALUES(2, 2, 'two');
|
||||
INSERT OR REPLACE INTO t1 VALUES(1, 2, 'two') ON CONFLICT(b) DO NOTHING;
|
||||
PRAGMA integrity_check;
|
||||
} {ok}
|
||||
foreach {tn sql} {
|
||||
1 {
|
||||
CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c);
|
||||
}
|
||||
2 {
|
||||
CREATE TABLE t1(a INT PRIMARY KEY, b UNIQUE, c);
|
||||
}
|
||||
3 {
|
||||
CREATE TABLE t1(a INT PRIMARY KEY, b UNIQUE, c) WITHOUT ROWID;
|
||||
}
|
||||
} {
|
||||
reset_db
|
||||
execsql $sql
|
||||
do_execsql_test 6.1.$tn {
|
||||
INSERT INTO t1 VALUES(1, 1, 'one');
|
||||
INSERT INTO t1 VALUES(2, 2, 'two');
|
||||
INSERT OR REPLACE INTO t1 VALUES(1, 2, 'two') ON CONFLICT(b) DO NOTHING;
|
||||
PRAGMA integrity_check;
|
||||
} {ok}
|
||||
}
|
||||
|
||||
foreach {tn sql} {
|
||||
1 {
|
||||
CREATE TABLE t1(a INTEGER PRIMARY KEY, b UNIQUE, c UNIQUE);
|
||||
}
|
||||
} {
|
||||
reset_db
|
||||
execsql $sql
|
||||
|
||||
do_execsql_test 6.2.$tn.1 {
|
||||
INSERT INTO t1 VALUES(1, 1, 1);
|
||||
INSERT INTO t1 VALUES(2, 2, 2);
|
||||
}
|
||||
|
||||
do_execsql_test 6.2.$tn.2 {
|
||||
INSERT OR REPLACE INTO t1 VALUES(3, 1, 1) ON CONFLICT(b) DO NOTHING;
|
||||
SELECT * FROM t1;
|
||||
PRAGMA integrity_check;
|
||||
} {1 1 1 2 2 2 ok}
|
||||
|
||||
do_execsql_test 6.2.$tn.3 {
|
||||
INSERT OR REPLACE INTO t1 VALUES(3, 2, 2) ON CONFLICT(c) DO NOTHING;
|
||||
SELECT * FROM t1;
|
||||
PRAGMA integrity_check;
|
||||
} {1 1 1 2 2 2 ok}
|
||||
|
||||
do_execsql_test 6.2.$tn.2 {
|
||||
INSERT OR REPLACE INTO t1 VALUES(3, 1, 1) ON CONFLICT(b)
|
||||
DO UPDATE SET b=b||'x';
|
||||
SELECT * FROM t1;
|
||||
PRAGMA integrity_check;
|
||||
} {1 1x 1 2 2 2 ok}
|
||||
|
||||
do_execsql_test 6.2.$tn.2 {
|
||||
INSERT OR REPLACE INTO t1 VALUES(3, 2, 2) ON CONFLICT(c)
|
||||
DO UPDATE SET c=c||'x';
|
||||
SELECT * FROM t1;
|
||||
PRAGMA integrity_check;
|
||||
} {1 1x 1 2 2 2x ok}
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# Test references to "excluded". And using an alias in an INSERT
|
||||
# statement.
|
||||
#
|
||||
foreach {tn sql} {
|
||||
1 {
|
||||
CREATE TABLE t1(w, x, y, z, PRIMARY KEY(x, y));
|
||||
CREATE UNIQUE INDEX zz ON t1(z);
|
||||
}
|
||||
2 {
|
||||
CREATE TABLE t1(w, x, y, z, PRIMARY KEY(x, y)) WITHOUT ROWID;
|
||||
CREATE UNIQUE INDEX zz ON t1(z);
|
||||
}
|
||||
} {
|
||||
reset_db
|
||||
execsql $sql
|
||||
do_execsql_test 7.$tn.0 {
|
||||
INSERT INTO t1 VALUES('a', 1, 1, 1);
|
||||
INSERT INTO t1 VALUES('b', 2, 2, 2);
|
||||
}
|
||||
|
||||
do_execsql_test 7.$tn.1 {
|
||||
INSERT INTO t1 VALUES('c', 3, 3, 1) ON CONFLICT(z)
|
||||
DO UPDATE SET w = excluded.w;
|
||||
SELECT * FROM t1;
|
||||
} {c 1 1 1 b 2 2 2}
|
||||
|
||||
do_execsql_test 7.$tn.2 {
|
||||
INSERT INTO t1 VALUES('c', 2, 2, 3) ON CONFLICT(y, x)
|
||||
DO UPDATE SET w = w||w;
|
||||
SELECT * FROM t1;
|
||||
} {c 1 1 1 bb 2 2 2}
|
||||
|
||||
do_execsql_test 7.$tn.3 {
|
||||
INSERT INTO t1 VALUES('c', 2, 2, 3) ON CONFLICT(y, x)
|
||||
DO UPDATE SET w = w||t1.w;
|
||||
SELECT * FROM t1;
|
||||
} {c 1 1 1 bbbb 2 2 2}
|
||||
|
||||
do_execsql_test 7.$tn.4 {
|
||||
INSERT INTO t1 AS tbl VALUES('c', 2, 2, 3) ON CONFLICT(y, x)
|
||||
DO UPDATE SET w = w||tbl.w;
|
||||
SELECT * FROM t1;
|
||||
} {c 1 1 1 bbbbbbbb 2 2 2}
|
||||
}
|
||||
|
||||
foreach {tn sql} {
|
||||
1 {
|
||||
CREATE TABLE excluded(w, x, 'a b', z, PRIMARY KEY(x, 'a b'));
|
||||
CREATE UNIQUE INDEX zz ON excluded(z);
|
||||
}
|
||||
2 {
|
||||
CREATE TABLE excluded(w, x, 'a b', z, PRIMARY KEY(x, 'a b')) WITHOUT ROWID;
|
||||
CREATE UNIQUE INDEX zz ON excluded(z);
|
||||
}
|
||||
} {
|
||||
reset_db
|
||||
execsql $sql
|
||||
do_execsql_test 8.$tn.0 {
|
||||
INSERT INTO excluded VALUES('a', 1, 1, 1);
|
||||
INSERT INTO excluded VALUES('b', 2, 2, 2);
|
||||
}
|
||||
|
||||
# Note: An error in Postgres: "table reference "excluded" is ambiguous".
|
||||
#
|
||||
do_execsql_test 8.$tn.1 {
|
||||
INSERT INTO excluded VALUES('hello', 1, 1, NULL) ON CONFLICT(x, "a b")
|
||||
DO UPDATE SET w=excluded.w;
|
||||
SELECT * FROM excluded;
|
||||
} {a 1 1 1 b 2 2 2}
|
||||
|
||||
do_execsql_test 8.$tn.2 {
|
||||
INSERT INTO excluded AS x1 VALUES('hello', 1, 1, NULL) ON CONFLICT(x, [a b])
|
||||
DO UPDATE SET w=excluded.w;
|
||||
SELECT * FROM excluded;
|
||||
} {hello 1 1 1 b 2 2 2}
|
||||
}
|
||||
|
||||
|
||||
finish_test
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user