xref: /sqlite-3.40.0/test/upsert5.test (revision 93eb9064)
158b18a47Sdrh# 2020-12-11
258b18a47Sdrh#
358b18a47Sdrh# The author disclaims copyright to this source code.  In place of
458b18a47Sdrh# a legal notice, here is a blessing:
558b18a47Sdrh#
658b18a47Sdrh#    May you do good and not evil.
758b18a47Sdrh#    May you find forgiveness for yourself and forgive others.
858b18a47Sdrh#    May you share freely, never taking more than you give.
958b18a47Sdrh#
1058b18a47Sdrh#***********************************************************************
1158b18a47Sdrh#
1258b18a47Sdrh# Test cases for generalized UPSERT
1358b18a47Sdrh
1458b18a47Sdrhset testdir [file dirname $argv0]
1558b18a47Sdrhsource $testdir/tester.tcl
1658b18a47Sdrhset testprefix upsert5
1758b18a47Sdrh
1858b18a47Sdrhforeach {tn sql} {
1958b18a47Sdrh  1 { CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c UNIQUE, d UNIQUE, e UNIQUE) }
2058b18a47Sdrh  2 { CREATE TABLE t1(a INT PRIMARY KEY, b, c UNIQUE, d UNIQUE, e UNIQUE) }
2158b18a47Sdrh  3 { CREATE TABLE t1(a INT PRIMARY KEY, b, c UNIQUE, d UNIQUE, e UNIQUE) WITHOUT ROWID}
2258b18a47Sdrh  4 { CREATE TABLE t1(e UNIQUE, d UNIQUE, c UNIQUE, a INTEGER PRIMARY KEY, b) }
2358b18a47Sdrh  5 { CREATE TABLE t1(e UNIQUE, d UNIQUE, c UNIQUE, a INT PRIMARY KEY, b) }
2458b18a47Sdrh  6 { CREATE TABLE t1(e UNIQUE, d UNIQUE, c UNIQUE, a INT PRIMARY KEY, b) WITHOUT ROWID}
2558b18a47Sdrh} {
2658b18a47Sdrh  reset_db
2758b18a47Sdrh  execsql $sql
2858b18a47Sdrh
2958b18a47Sdrh  do_execsql_test 1.$tn.100 {
3058b18a47Sdrh    DELETE FROM t1;
3158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
3258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,3,4,5)
3358b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
3458b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
3558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
3658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
3758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
3858b18a47Sdrh  } {1 a 3 4 5}
3958b18a47Sdrh  do_execsql_test 1.$tn.101 {
4058b18a47Sdrh    DELETE FROM t1;
4158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
4258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,3,4,5)
4358b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
4458b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
4558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
4658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
4758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
4858b18a47Sdrh  } {1 c 3 4 5}
4958b18a47Sdrh  do_execsql_test 1.$tn.102 {
5058b18a47Sdrh    DELETE FROM t1;
5158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
5258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,4,5)
5358b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
5458b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
5558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
5658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
5758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
5858b18a47Sdrh  } {1 d 3 4 5}
5958b18a47Sdrh  do_execsql_test 1.$tn.103 {
6058b18a47Sdrh    DELETE FROM t1;
6158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
6258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
6358b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
6458b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
6558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
6658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
6758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
6858b18a47Sdrh  } {1 e 3 4 5}
6958b18a47Sdrh  do_execsql_test 1.$tn.200 {
7058b18a47Sdrh    DELETE FROM t1;
7158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
7258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
7358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
7458b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
7558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
7658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
7758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
7858b18a47Sdrh  } {1 a 3 4 5}
7958b18a47Sdrh  do_execsql_test 1.$tn.201 {
8058b18a47Sdrh    DELETE FROM t1;
8158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
8258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,3,94,95)
8358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
8458b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
8558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
8658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
8758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
8858b18a47Sdrh  } {1 c 3 4 5}
8958b18a47Sdrh  do_execsql_test 1.$tn.202 {
9058b18a47Sdrh    DELETE FROM t1;
9158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
9258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,3,4,5)
9358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
9458b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
9558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
9658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
9758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
9858b18a47Sdrh  } {1 c 3 4 5}
9958b18a47Sdrh  do_execsql_test 1.$tn.203 {
10058b18a47Sdrh    DELETE FROM t1;
10158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
10258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,5)
10358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
10458b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
10558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
10658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
10758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
10858b18a47Sdrh  } {1 a 3 4 5}
10958b18a47Sdrh  do_execsql_test 1.$tn.204 {
11058b18a47Sdrh    DELETE FROM t1;
11158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
11258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,4,95)
11358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
11458b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
11558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
11658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
11758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
11858b18a47Sdrh  } {1 a 3 4 5}
11958b18a47Sdrh  do_execsql_test 1.$tn.210 {
12058b18a47Sdrh    DELETE FROM t1;
12158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
12258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
12358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
12458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
12558b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
12658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
12758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
12858b18a47Sdrh  } {1 a 3 4 5}
12958b18a47Sdrh  do_execsql_test 1.$tn.211 {
13058b18a47Sdrh    DELETE FROM t1;
13158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
13258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,4,95)
13358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
13458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
13558b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
13658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
13758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
13858b18a47Sdrh  } {1 d 3 4 5}
13958b18a47Sdrh  do_execsql_test 1.$tn.212 {
14058b18a47Sdrh    DELETE FROM t1;
14158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
14258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,5)
14358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
14458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
14558b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
14658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
14758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
14858b18a47Sdrh  } {1 a 3 4 5}
14958b18a47Sdrh  do_execsql_test 1.$tn.213 {
15058b18a47Sdrh    DELETE FROM t1;
15158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
15258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
15358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
15458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
15558b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a'
15658b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
15758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
15858b18a47Sdrh  } {1 e 3 4 5}
15958b18a47Sdrh  do_execsql_test 1.$tn.214 {
16058b18a47Sdrh    DELETE FROM t1;
16158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
16258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
16358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
16458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
16558b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e'
16658b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a';
16758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
16858b18a47Sdrh  } {1 e 3 4 5}
16958b18a47Sdrh  do_execsql_test 1.$tn.215 {
17058b18a47Sdrh    DELETE FROM t1;
17158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
17258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,5)
17358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
17458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
17558b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e'
17658b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a';
17758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
17858b18a47Sdrh  } {1 e 3 4 5}
17958b18a47Sdrh  do_execsql_test 1.$tn.216 {
18058b18a47Sdrh    DELETE FROM t1;
18158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
18258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
18358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
18458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
18558b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e'
18658b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a';
18758b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
18858b18a47Sdrh  } {1 a 3 4 5}
18958b18a47Sdrh
19058b18a47Sdrh  do_execsql_test 1.$tn.300 {
19158b18a47Sdrh    DELETE FROM t1;
19258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
19358b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
19458b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
19558b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
19658b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a1'
19758b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a2'
19858b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a3'
19958b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a4'
20058b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a5'
20158b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
20258b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
20358b18a47Sdrh  } {1 a1 3 4 5}
20458b18a47Sdrh  do_execsql_test 1.$tn.301 {
20558b18a47Sdrh    DELETE FROM t1;
20658b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
20758b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
20858b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
20958b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
21058b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a1'
21158b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a2'
21258b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a3'
21358b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a4'
21458b18a47Sdrh      ON CONFLICT(a) DO UPDATE SET b='a5'
21558b18a47Sdrh      ON CONFLICT(e) DO UPDATE SET b='e';
21658b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
21758b18a47Sdrh  } {1 e 3 4 5}
21858b18a47Sdrh
21958b18a47Sdrh  do_execsql_test 1.$tn.400 {
22058b18a47Sdrh    DELETE FROM t1;
22158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
22258b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
22358b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
22458b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
22558b18a47Sdrh      ON CONFLICT DO UPDATE set b='x';
22658b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
22758b18a47Sdrh  } {1 x 3 4 5}
22858b18a47Sdrh  do_execsql_test 1.$tn.401 {
22958b18a47Sdrh    DELETE FROM t1;
23058b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
23158b18a47Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
23258b18a47Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
23358b18a47Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
23458b18a47Sdrh      ON CONFLICT DO UPDATE set b='x';
23558b18a47Sdrh    SELECT a,b,c,d,e FROM t1;
23658b18a47Sdrh  } {1 x 3 4 5}
237255c1c15Sdrh  do_execsql_test 1.$tn.402 {
238255c1c15Sdrh    DELETE FROM t1;
239255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
240255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
241255c1c15Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
242255c1c15Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
243255c1c15Sdrh      ON CONFLICT DO UPDATE set b='x';
244255c1c15Sdrh    SELECT a,b,c,d,e FROM t1;
245255c1c15Sdrh  } {1 x 3 4 5}
246255c1c15Sdrh  do_execsql_test 1.$tn.403 {
247255c1c15Sdrh    DELETE FROM t1;
248255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
249255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,3,94,95)
250255c1c15Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
251255c1c15Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
252255c1c15Sdrh      ON CONFLICT DO UPDATE set b='x';
253255c1c15Sdrh    SELECT a,b,c,d,e FROM t1;
254255c1c15Sdrh  } {1 c 3 4 5}
255255c1c15Sdrh  do_execsql_test 1.$tn.404 {
256255c1c15Sdrh    DELETE FROM t1;
257255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
258255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,3,4,95)
259255c1c15Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
260255c1c15Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
261255c1c15Sdrh      ON CONFLICT DO UPDATE set b='x';
262255c1c15Sdrh    SELECT a,b,c,d,e FROM t1;
263255c1c15Sdrh  } {1 c 3 4 5}
264255c1c15Sdrh  do_execsql_test 1.$tn.405 {
265255c1c15Sdrh    DELETE FROM t1;
266255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
267255c1c15Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,4,5)
268255c1c15Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
269255c1c15Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
270255c1c15Sdrh      ON CONFLICT DO UPDATE set b='x';
271255c1c15Sdrh    SELECT a,b,c,d,e FROM t1;
272255c1c15Sdrh  } {1 d 3 4 5}
27358b18a47Sdrh
274250af6e0Sdrh  do_execsql_test 1.$tn.410 {
275250af6e0Sdrh    DELETE FROM t1;
276250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
277250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
278250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
279250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
280250af6e0Sdrh  } {1 x 3 4 5}
281250af6e0Sdrh  do_execsql_test 1.$tn.411 {
282250af6e0Sdrh    DELETE FROM t1;
283250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
284250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
285250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
286250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
287250af6e0Sdrh  } {1 x 3 4 5}
288250af6e0Sdrh  do_execsql_test 1.$tn.412 {
289250af6e0Sdrh    DELETE FROM t1;
290250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
291250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,4,95)
292250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
293250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
294250af6e0Sdrh  } {1 x 3 4 5}
295250af6e0Sdrh  do_execsql_test 1.$tn.413 {
296250af6e0Sdrh    DELETE FROM t1;
297250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
298250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,3,94,95)
299250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
300250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
301250af6e0Sdrh  } {1 x 3 4 5}
302250af6e0Sdrh
303250af6e0Sdrh  do_execsql_test 1.$tn.420 {
304250af6e0Sdrh    DELETE FROM t1;
305250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
306250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
307250af6e0Sdrh      ON CONFLICT(c) DO NOTHING
308250af6e0Sdrh      ON CONFLICT(d) DO NOTHING
309250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
310250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
311250af6e0Sdrh  } {1 x 3 4 5}
312250af6e0Sdrh  do_execsql_test 1.$tn.421 {
313250af6e0Sdrh    DELETE FROM t1;
314250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
315250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
316250af6e0Sdrh      ON CONFLICT(c) DO NOTHING
317250af6e0Sdrh      ON CONFLICT(d) DO NOTHING
318250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
319250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
320250af6e0Sdrh  } {1 x 3 4 5}
321250af6e0Sdrh  do_execsql_test 1.$tn.422 {
322250af6e0Sdrh    DELETE FROM t1;
323250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
324250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,4,95)
325250af6e0Sdrh      ON CONFLICT(c) DO NOTHING
326250af6e0Sdrh      ON CONFLICT(d) DO NOTHING
327250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
328250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
329250af6e0Sdrh  } {1 2 3 4 5}
330250af6e0Sdrh  do_execsql_test 1.$tn.423 {
331250af6e0Sdrh    DELETE FROM t1;
332250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
333250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,3,94,95)
334250af6e0Sdrh      ON CONFLICT(c) DO NOTHING
335250af6e0Sdrh      ON CONFLICT(d) DO NOTHING
336250af6e0Sdrh      ON CONFLICT DO UPDATE set b='x';
337250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
338250af6e0Sdrh  } {1 2 3 4 5}
339250af6e0Sdrh
340250af6e0Sdrh  do_execsql_test 1.$tn.500 {
341250af6e0Sdrh    DELETE FROM t1;
342250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
343250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
344250af6e0Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
345250af6e0Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
346250af6e0Sdrh      ON CONFLICT DO NOTHING;
347250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
348250af6e0Sdrh  } {1 2 3 4 5}
349250af6e0Sdrh  do_execsql_test 1.$tn.501 {
350250af6e0Sdrh    DELETE FROM t1;
351250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
352250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,93,94,5)
353250af6e0Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
354250af6e0Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
355250af6e0Sdrh      ON CONFLICT DO NOTHING;
356250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
357250af6e0Sdrh  } {1 2 3 4 5}
358250af6e0Sdrh  do_execsql_test 1.$tn.502 {
359250af6e0Sdrh    DELETE FROM t1;
360250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
361250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,94,95)
362250af6e0Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
363250af6e0Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
364250af6e0Sdrh      ON CONFLICT DO NOTHING;
365250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
366250af6e0Sdrh  } {1 2 3 4 5}
367250af6e0Sdrh  do_execsql_test 1.$tn.503 {
368250af6e0Sdrh    DELETE FROM t1;
369250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
370250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,3,94,95)
371250af6e0Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
372250af6e0Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
373250af6e0Sdrh      ON CONFLICT DO NOTHING;
374250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
375250af6e0Sdrh  } {1 c 3 4 5}
376250af6e0Sdrh  do_execsql_test 1.$tn.504 {
377250af6e0Sdrh    DELETE FROM t1;
378250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
379250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(91,NULL,3,4,95)
380250af6e0Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
381250af6e0Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
382250af6e0Sdrh      ON CONFLICT DO NOTHING;
383250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
384250af6e0Sdrh  } {1 c 3 4 5}
385250af6e0Sdrh  do_execsql_test 1.$tn.505 {
386250af6e0Sdrh    DELETE FROM t1;
387250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,2,3,4,5);
388250af6e0Sdrh    INSERT INTO t1(a,b,c,d,e) VALUES(1,NULL,93,4,5)
389250af6e0Sdrh      ON CONFLICT(c) DO UPDATE SET b='c'
390250af6e0Sdrh      ON CONFLICT(d) DO UPDATE SET b='d'
391250af6e0Sdrh      ON CONFLICT DO NOTHING;
392250af6e0Sdrh    SELECT a,b,c,d,e FROM t1;
393250af6e0Sdrh  } {1 d 3 4 5}
394250af6e0Sdrh
39558b18a47Sdrh}
39658b18a47Sdrh
397*93eb9064Sdan#--------------------------------------------------------------------------
398*93eb9064Sdanreset_db
399*93eb9064Sdando_execsql_test 2.0 {
400*93eb9064Sdan  CREATE TABLE t2(a, b, c REAL, d, e, PRIMARY KEY(a,b)) WITHOUT ROWID;
401*93eb9064Sdan  CREATE UNIQUE INDEX t2c ON t2(c);
402*93eb9064Sdan}
403*93eb9064Sdan
404*93eb9064Sdando_catchsql_test 2.1 {
405*93eb9064Sdan  INSERT INTO t2(a,b,c,e,d) VALUES(1,2,3,4,5)
406*93eb9064Sdan      ON CONFLICT(c) DO UPDATE SET b=''
407*93eb9064Sdan      ON CONFLICT((SELECT t2 FROM nosuchtable)) DO NOTHING;
408*93eb9064Sdan
409*93eb9064Sdan} {1 {no such table: nosuchtable}}
410*93eb9064Sdan
41158b18a47Sdrhfinish_test
412