xref: /sqlite-3.40.0/test/conflict.test (revision ef6764a1)
1bb37fdc7Sdrh# 2002 January 29
2bb37fdc7Sdrh#
3bb37fdc7Sdrh# The author disclaims copyright to this source code.  In place of
4bb37fdc7Sdrh# a legal notice, here is a blessing:
5bb37fdc7Sdrh#
6bb37fdc7Sdrh#    May you do good and not evil.
7bb37fdc7Sdrh#    May you find forgiveness for yourself and forgive others.
8bb37fdc7Sdrh#    May you share freely, never taking more than you give.
9bb37fdc7Sdrh#
10bb37fdc7Sdrh#***********************************************************************
11bb37fdc7Sdrh# This file implements regression tests for SQLite library.
12bb37fdc7Sdrh#
13bb37fdc7Sdrh# This file implements tests for the conflict resolution extension
14bb37fdc7Sdrh# to SQLite.
15bb37fdc7Sdrh#
16*ef6764a1Sdrh# $Id: conflict.test,v 1.2 2002/01/30 04:32:01 drh Exp $
17bb37fdc7Sdrh
18bb37fdc7Sdrhset testdir [file dirname $argv0]
19bb37fdc7Sdrhsource $testdir/tester.tcl
20bb37fdc7Sdrh
21bb37fdc7Sdrh# Create a table with three fields, two of which must be
22bb37fdc7Sdrh# UNIQUE.
23bb37fdc7Sdrh#
24bb37fdc7Sdrhdo_test conflict-1.1 {
25bb37fdc7Sdrh  execsql {
26bb37fdc7Sdrh    CREATE TABLE t1(a, b, c, UNIQUE(a,b));
27bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,2,3);
28bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
29bb37fdc7Sdrh  }
30bb37fdc7Sdrh} {3}
31bb37fdc7Sdrhdo_test conflict-1.2 {
32bb37fdc7Sdrh  catchsql {
33bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,2,4);
34bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
35bb37fdc7Sdrh  }
36bb37fdc7Sdrh} {1 {constraint failed}}
37bb37fdc7Sdrhdo_test conflict-1.3 {
38bb37fdc7Sdrh  catchsql {
39bb37fdc7Sdrh    INSERT ON CONFLICT IGNORE INTO t1 VALUES(1,2,4);
40bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
41bb37fdc7Sdrh  }
42bb37fdc7Sdrh} {0 3}
43bb37fdc7Sdrhdo_test conflict-1.4 {
44bb37fdc7Sdrh  catchsql {
45bb37fdc7Sdrh    INSERT ON CONFLICT REPLACE INTO t1 VALUES(1,2,4);
46bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
47bb37fdc7Sdrh  }
48bb37fdc7Sdrh} {0 4}
49bb37fdc7Sdrhdo_test conflict-1.5 {
50bb37fdc7Sdrh  catchsql {
51bb37fdc7Sdrh    INSERT ON CONFLICT ABORT INTO t1 VALUES(1,2,5);
52bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
53bb37fdc7Sdrh  }
54bb37fdc7Sdrh} {1 {constraint failed}}
55bb37fdc7Sdrhdo_test conflict-1.6 {
56bb37fdc7Sdrh  catchsql {
57bb37fdc7Sdrh    INSERT IGNORE INTO t1 VALUES(1,2,5);
58bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
59bb37fdc7Sdrh  }
60bb37fdc7Sdrh} {0 4}
61bb37fdc7Sdrhdo_test conflict-1.7 {
62bb37fdc7Sdrh  catchsql {
63bb37fdc7Sdrh    INSERT REPLACE INTO t1 VALUES(1,2,5);
64bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
65bb37fdc7Sdrh  }
66bb37fdc7Sdrh} {0 5}
67bb37fdc7Sdrhdo_test conflict-1.8 {
68bb37fdc7Sdrh  catchsql {
69bb37fdc7Sdrh    INSERT ON CONFLICT ABORT INTO t1 VALUES(1,2,6);
70bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
71bb37fdc7Sdrh  }
72bb37fdc7Sdrh} {1 {constraint failed}}
73bb37fdc7Sdrh
74bb37fdc7Sdrhdo_test conflict-1.9 {
75bb37fdc7Sdrh  execsql {
76bb37fdc7Sdrh    BEGIN;
77bb37fdc7Sdrh    CREATE TABLE t2(a,b,c);
78bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,11);
79bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,12);
80bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,13);
81bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,14);
82bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,21);
83bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,22);
84bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,23);
85bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,24);
86bb37fdc7Sdrh    COMMIT;
87bb37fdc7Sdrh    SELECT count(*) FROM t2;
88bb37fdc7Sdrh  }
89bb37fdc7Sdrh} 8
90bb37fdc7Sdrhdo_test conflict-1.10 {
91bb37fdc7Sdrh  catchsql {
92bb37fdc7Sdrh    INSERT IGNORE INTO t1 SELECT a,b,c FROM t2 ORDER BY c;
93bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
94bb37fdc7Sdrh  }
95bb37fdc7Sdrh} {0 {5 21}}
96bb37fdc7Sdrhdo_test conflict-1.11 {
97bb37fdc7Sdrh  catchsql {
98bb37fdc7Sdrh    INSERT REPLACE INTO t1 SELECT a,b,c FROM t2 ORDER BY c;
99bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
100bb37fdc7Sdrh  }
101bb37fdc7Sdrh} {0 {14 24}}
102bb37fdc7Sdrh
103bb37fdc7Sdrh###### Fix me!
104bb37fdc7Sdrhdo_test conflict-1.12 {
105bb37fdc7Sdrh  catchsql {
106bb37fdc7Sdrh    INSERT REPLACE INTO t1 SELECT a,b,c FROM t2 ORDER BY c DESC;
107bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
108bb37fdc7Sdrh  }
109bb37fdc7Sdrh} {0 {14 24}}
110bb37fdc7Sdrh
111bb37fdc7Sdrhdo_test conflict-1.13 {
112bb37fdc7Sdrh  execsql {
113bb37fdc7Sdrh    BEGIN;
114bb37fdc7Sdrh    DELETE FROM t1;
115bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,2,3);
116bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,3,4);
117bb37fdc7Sdrh    INSERT INTO t1 VALUES(2,3,5);
118bb37fdc7Sdrh    COMMIT;
119bb37fdc7Sdrh    SELECT * FROM t1 ORDER BY c;
120bb37fdc7Sdrh  }
121bb37fdc7Sdrh} {1 2 3 1 3 4 2 3 5}
122bb37fdc7Sdrhdo_test conflict-1.14 {
123bb37fdc7Sdrh  catchsql {
124bb37fdc7Sdrh    UPDATE ON CONFLICT ABORT t1 SET b=3 WHERE b=2;
125bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
126bb37fdc7Sdrh  }
127bb37fdc7Sdrh} {1 {constraint failed}};
128bb37fdc7Sdrhdo_test conflict-1.15 {
129bb37fdc7Sdrh  catchsql {
130bb37fdc7Sdrh    UPDATE t1 SET b=3 WHERE b=2;
131bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
132bb37fdc7Sdrh  }
133bb37fdc7Sdrh} {1 {constraint failed}};
134bb37fdc7Sdrhdo_test conflict-1.16 {
135bb37fdc7Sdrh  catchsql {
136bb37fdc7Sdrh    UPDATE ON CONFLICT IGNORE t1 SET b=3 WHERE b=2;
137bb37fdc7Sdrh    SELECT * FROM t1 ORDER BY c;
138bb37fdc7Sdrh  }
139bb37fdc7Sdrh} {0 {1 2 3 1 3 4 2 3 5}}
140bb37fdc7Sdrhdo_test conflict-1.17 {
141bb37fdc7Sdrh  catchsql {
142bb37fdc7Sdrh    UPDATE ON CONFLICT REPLACE t1 SET b=3 WHERE b=2;
143bb37fdc7Sdrh    SELECT * FROM t1 ORDER BY c;
144bb37fdc7Sdrh  }
145bb37fdc7Sdrh} {0 {1 3 3 2 3 5}}
146bb37fdc7Sdrh
147*ef6764a1Sdrhdo_test conflict-2.1 {
148*ef6764a1Sdrh  execsql {
149*ef6764a1Sdrh    DROP TABLE t1;
150*ef6764a1Sdrh    DROP TABLE t2;
151*ef6764a1Sdrh    CREATE TABLE t1(a integer primary key, b, c, UNIQUE(a,b));
152*ef6764a1Sdrh    CREATE INDEX t1b ON t1(b);
153*ef6764a1Sdrh    CREATE INDEX t1bc ON t1(b,c);
154*ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3);
155*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
156*ef6764a1Sdrh  }
157*ef6764a1Sdrh} {3}
158*ef6764a1Sdrhdo_test conflict-2.2 {
159*ef6764a1Sdrh  catchsql {
160*ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,4);
161*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
162*ef6764a1Sdrh  }
163*ef6764a1Sdrh} {1 {constraint failed}}
164*ef6764a1Sdrhdo_test conflict-2.3 {
165*ef6764a1Sdrh  catchsql {
166*ef6764a1Sdrh    INSERT ON CONFLICT IGNORE INTO t1 VALUES(1,2,4);
167*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
168*ef6764a1Sdrh  }
169*ef6764a1Sdrh} {0 3}
170*ef6764a1Sdrhdo_test conflict-2.4 {
171*ef6764a1Sdrh  catchsql {
172*ef6764a1Sdrh    INSERT ON CONFLICT REPLACE INTO t1 VALUES(1,2,4);
173*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
174*ef6764a1Sdrh  }
175*ef6764a1Sdrh} {0 4}
176*ef6764a1Sdrhdo_test conflict-2.5 {
177*ef6764a1Sdrh  catchsql {
178*ef6764a1Sdrh    INSERT ON CONFLICT ABORT INTO t1 VALUES(1,2,5);
179*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
180*ef6764a1Sdrh  }
181*ef6764a1Sdrh} {1 {constraint failed}}
182*ef6764a1Sdrhdo_test conflict-2.6 {
183*ef6764a1Sdrh  catchsql {
184*ef6764a1Sdrh    INSERT IGNORE INTO t1 VALUES(1,2,5);
185*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
186*ef6764a1Sdrh  }
187*ef6764a1Sdrh} {0 4}
188*ef6764a1Sdrhdo_test conflict-2.7 {
189*ef6764a1Sdrh  catchsql {
190*ef6764a1Sdrh    INSERT REPLACE INTO t1 VALUES(1,2,5);
191*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
192*ef6764a1Sdrh  }
193*ef6764a1Sdrh} {0 5}
194*ef6764a1Sdrhdo_test conflict-2.8 {
195*ef6764a1Sdrh  catchsql {
196*ef6764a1Sdrh    INSERT ON CONFLICT ABORT INTO t1 VALUES(1,2,6);
197*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
198*ef6764a1Sdrh  }
199*ef6764a1Sdrh} {1 {constraint failed}}
200*ef6764a1Sdrh
201*ef6764a1Sdrhdo_test conflict-2.9 {
202*ef6764a1Sdrh  execsql {
203*ef6764a1Sdrh    BEGIN;
204*ef6764a1Sdrh    CREATE TABLE t2(a,b,c INTEGER PRIMARY KEY);
205*ef6764a1Sdrh    INSERT INTO t2 VALUES(1,2,11);
206*ef6764a1Sdrh    INSERT INTO t2 VALUES(1,2,12);
207*ef6764a1Sdrh    INSERT INTO t2 VALUES(1,2,13);
208*ef6764a1Sdrh    INSERT INTO t2 VALUES(1,2,14);
209*ef6764a1Sdrh    INSERT INTO t2 VALUES(2,2,21);
210*ef6764a1Sdrh    INSERT INTO t2 VALUES(2,2,22);
211*ef6764a1Sdrh    INSERT INTO t2 VALUES(2,2,23);
212*ef6764a1Sdrh    INSERT INTO t2 VALUES(2,2,24);
213*ef6764a1Sdrh    COMMIT;
214*ef6764a1Sdrh    SELECT count(*) FROM t2;
215*ef6764a1Sdrh  }
216*ef6764a1Sdrh} 8
217*ef6764a1Sdrhdo_test conflict-2.10 {
218*ef6764a1Sdrh  catchsql {
219*ef6764a1Sdrh    INSERT IGNORE INTO t1 SELECT a,b,c FROM t2 ORDER BY c;
220*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
221*ef6764a1Sdrh  }
222*ef6764a1Sdrh} {0 {5 21}}
223*ef6764a1Sdrhdo_test conflict-2.11 {
224*ef6764a1Sdrh  catchsql {
225*ef6764a1Sdrh    INSERT REPLACE INTO t1 SELECT a,b,c FROM t2 ORDER BY c;
226*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
227*ef6764a1Sdrh  }
228*ef6764a1Sdrh} {0 {14 24}}
229*ef6764a1Sdrh
230*ef6764a1Sdrh###### Fix me!
231*ef6764a1Sdrhdo_test conflict-2.12 {
232*ef6764a1Sdrh  catchsql {
233*ef6764a1Sdrh    INSERT REPLACE INTO t1 SELECT a,b,c FROM t2 ORDER BY c DESC;
234*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
235*ef6764a1Sdrh  }
236*ef6764a1Sdrh} {0 {14 24}}
237*ef6764a1Sdrh
238*ef6764a1Sdrhdo_test conflict-2.13 {
239*ef6764a1Sdrh  execsql {
240*ef6764a1Sdrh    BEGIN;
241*ef6764a1Sdrh    DELETE FROM t1;
242*ef6764a1Sdrh    INSERT INTO t1 VALUES(1,2,3);
243*ef6764a1Sdrh    INSERT INTO t1 VALUES(2,3,4);
244*ef6764a1Sdrh    INSERT INTO t1 VALUES(3,3,5);
245*ef6764a1Sdrh    COMMIT;
246*ef6764a1Sdrh    SELECT * FROM t1 ORDER BY c;
247*ef6764a1Sdrh  }
248*ef6764a1Sdrh} {1 2 3 2 3 4 3 3 5}
249*ef6764a1Sdrhdo_test conflict-2.14 {
250*ef6764a1Sdrh  catchsql {
251*ef6764a1Sdrh    UPDATE ON CONFLICT ABORT t1 SET a=2, b=3 WHERE b=2;
252*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
253*ef6764a1Sdrh  }
254*ef6764a1Sdrh} {1 {constraint failed}};
255*ef6764a1Sdrhdo_test conflict-2.15 {
256*ef6764a1Sdrh  catchsql {
257*ef6764a1Sdrh    UPDATE t1 SET a=2, b=3 WHERE b=2;
258*ef6764a1Sdrh    SELECT c FROM t1 ORDER BY c;
259*ef6764a1Sdrh  }
260*ef6764a1Sdrh} {1 {constraint failed}};
261*ef6764a1Sdrhdo_test conflict-2.16 {
262*ef6764a1Sdrh  catchsql {
263*ef6764a1Sdrh    UPDATE ON CONFLICT IGNORE t1 SET a=2, b=3 WHERE b=2;
264*ef6764a1Sdrh    SELECT * FROM t1 ORDER BY c;
265*ef6764a1Sdrh  }
266*ef6764a1Sdrh} {0 {1 2 3 2 3 4 3 3 5}}
267*ef6764a1Sdrhdo_test conflict-2.17 {
268*ef6764a1Sdrh  catchsql {
269*ef6764a1Sdrh    UPDATE ON CONFLICT REPLACE t1 SET a=2, b=3 WHERE b=2;
270*ef6764a1Sdrh    SELECT * FROM t1 ORDER BY c;
271*ef6764a1Sdrh  }
272*ef6764a1Sdrh} {0 {2 3 3 3 3 5}}
273*ef6764a1Sdrh
274bb37fdc7Sdrh
275bb37fdc7Sdrhfinish_test
276