xref: /sqlite-3.40.0/test/conflict.test (revision bb37fdc7)
1*bb37fdc7Sdrh# 2002 January 29
2*bb37fdc7Sdrh#
3*bb37fdc7Sdrh# The author disclaims copyright to this source code.  In place of
4*bb37fdc7Sdrh# a legal notice, here is a blessing:
5*bb37fdc7Sdrh#
6*bb37fdc7Sdrh#    May you do good and not evil.
7*bb37fdc7Sdrh#    May you find forgiveness for yourself and forgive others.
8*bb37fdc7Sdrh#    May you share freely, never taking more than you give.
9*bb37fdc7Sdrh#
10*bb37fdc7Sdrh#***********************************************************************
11*bb37fdc7Sdrh# This file implements regression tests for SQLite library.
12*bb37fdc7Sdrh#
13*bb37fdc7Sdrh# This file implements tests for the conflict resolution extension
14*bb37fdc7Sdrh# to SQLite.
15*bb37fdc7Sdrh#
16*bb37fdc7Sdrh# $Id: conflict.test,v 1.1 2002/01/30 00:54:57 drh Exp $
17*bb37fdc7Sdrh
18*bb37fdc7Sdrhset testdir [file dirname $argv0]
19*bb37fdc7Sdrhsource $testdir/tester.tcl
20*bb37fdc7Sdrh
21*bb37fdc7Sdrh# Create a table with three fields, two of which must be
22*bb37fdc7Sdrh# UNIQUE.
23*bb37fdc7Sdrh#
24*bb37fdc7Sdrhdo_test conflict-1.1 {
25*bb37fdc7Sdrh  execsql {
26*bb37fdc7Sdrh    CREATE TABLE t1(a, b, c, UNIQUE(a,b));
27*bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,2,3);
28*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
29*bb37fdc7Sdrh  }
30*bb37fdc7Sdrh} {3}
31*bb37fdc7Sdrhdo_test conflict-1.2 {
32*bb37fdc7Sdrh  catchsql {
33*bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,2,4);
34*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
35*bb37fdc7Sdrh  }
36*bb37fdc7Sdrh} {1 {constraint failed}}
37*bb37fdc7Sdrhdo_test conflict-1.3 {
38*bb37fdc7Sdrh  catchsql {
39*bb37fdc7Sdrh    INSERT ON CONFLICT IGNORE INTO t1 VALUES(1,2,4);
40*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
41*bb37fdc7Sdrh  }
42*bb37fdc7Sdrh} {0 3}
43*bb37fdc7Sdrhdo_test conflict-1.4 {
44*bb37fdc7Sdrh  catchsql {
45*bb37fdc7Sdrh    INSERT ON CONFLICT REPLACE INTO t1 VALUES(1,2,4);
46*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
47*bb37fdc7Sdrh  }
48*bb37fdc7Sdrh} {0 4}
49*bb37fdc7Sdrhdo_test conflict-1.5 {
50*bb37fdc7Sdrh  catchsql {
51*bb37fdc7Sdrh    INSERT ON CONFLICT ABORT INTO t1 VALUES(1,2,5);
52*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
53*bb37fdc7Sdrh  }
54*bb37fdc7Sdrh} {1 {constraint failed}}
55*bb37fdc7Sdrhdo_test conflict-1.6 {
56*bb37fdc7Sdrh  catchsql {
57*bb37fdc7Sdrh    INSERT IGNORE INTO t1 VALUES(1,2,5);
58*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
59*bb37fdc7Sdrh  }
60*bb37fdc7Sdrh} {0 4}
61*bb37fdc7Sdrhdo_test conflict-1.7 {
62*bb37fdc7Sdrh  catchsql {
63*bb37fdc7Sdrh    INSERT REPLACE INTO t1 VALUES(1,2,5);
64*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
65*bb37fdc7Sdrh  }
66*bb37fdc7Sdrh} {0 5}
67*bb37fdc7Sdrhdo_test conflict-1.8 {
68*bb37fdc7Sdrh  catchsql {
69*bb37fdc7Sdrh    INSERT ON CONFLICT ABORT INTO t1 VALUES(1,2,6);
70*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
71*bb37fdc7Sdrh  }
72*bb37fdc7Sdrh} {1 {constraint failed}}
73*bb37fdc7Sdrh
74*bb37fdc7Sdrhdo_test conflict-1.9 {
75*bb37fdc7Sdrh  execsql {
76*bb37fdc7Sdrh    BEGIN;
77*bb37fdc7Sdrh    CREATE TABLE t2(a,b,c);
78*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,11);
79*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,12);
80*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,13);
81*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,2,14);
82*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,21);
83*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,22);
84*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,23);
85*bb37fdc7Sdrh    INSERT INTO t2 VALUES(1,3,24);
86*bb37fdc7Sdrh    COMMIT;
87*bb37fdc7Sdrh    SELECT count(*) FROM t2;
88*bb37fdc7Sdrh  }
89*bb37fdc7Sdrh} 8
90*bb37fdc7Sdrhdo_test conflict-1.10 {
91*bb37fdc7Sdrh  catchsql {
92*bb37fdc7Sdrh    INSERT IGNORE INTO t1 SELECT a,b,c FROM t2 ORDER BY c;
93*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
94*bb37fdc7Sdrh  }
95*bb37fdc7Sdrh} {0 {5 21}}
96*bb37fdc7Sdrhdo_test conflict-1.11 {
97*bb37fdc7Sdrh  catchsql {
98*bb37fdc7Sdrh    INSERT REPLACE INTO t1 SELECT a,b,c FROM t2 ORDER BY c;
99*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
100*bb37fdc7Sdrh  }
101*bb37fdc7Sdrh} {0 {14 24}}
102*bb37fdc7Sdrh
103*bb37fdc7Sdrh###### Fix me!
104*bb37fdc7Sdrhdo_test conflict-1.12 {
105*bb37fdc7Sdrh  catchsql {
106*bb37fdc7Sdrh    INSERT REPLACE INTO t1 SELECT a,b,c FROM t2 ORDER BY c DESC;
107*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
108*bb37fdc7Sdrh  }
109*bb37fdc7Sdrh} {0 {14 24}}
110*bb37fdc7Sdrh
111*bb37fdc7Sdrhdo_test conflict-1.13 {
112*bb37fdc7Sdrh  execsql {
113*bb37fdc7Sdrh    BEGIN;
114*bb37fdc7Sdrh    DELETE FROM t1;
115*bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,2,3);
116*bb37fdc7Sdrh    INSERT INTO t1 VALUES(1,3,4);
117*bb37fdc7Sdrh    INSERT INTO t1 VALUES(2,3,5);
118*bb37fdc7Sdrh    COMMIT;
119*bb37fdc7Sdrh    SELECT * FROM t1 ORDER BY c;
120*bb37fdc7Sdrh  }
121*bb37fdc7Sdrh} {1 2 3 1 3 4 2 3 5}
122*bb37fdc7Sdrhdo_test conflict-1.14 {
123*bb37fdc7Sdrh  catchsql {
124*bb37fdc7Sdrh    UPDATE ON CONFLICT ABORT t1 SET b=3 WHERE b=2;
125*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
126*bb37fdc7Sdrh  }
127*bb37fdc7Sdrh} {1 {constraint failed}};
128*bb37fdc7Sdrhdo_test conflict-1.15 {
129*bb37fdc7Sdrh  catchsql {
130*bb37fdc7Sdrh    UPDATE t1 SET b=3 WHERE b=2;
131*bb37fdc7Sdrh    SELECT c FROM t1 ORDER BY c;
132*bb37fdc7Sdrh  }
133*bb37fdc7Sdrh} {1 {constraint failed}};
134*bb37fdc7Sdrhdo_test conflict-1.16 {
135*bb37fdc7Sdrh  catchsql {
136*bb37fdc7Sdrh    UPDATE ON CONFLICT IGNORE t1 SET b=3 WHERE b=2;
137*bb37fdc7Sdrh    SELECT * FROM t1 ORDER BY c;
138*bb37fdc7Sdrh  }
139*bb37fdc7Sdrh} {0 {1 2 3 1 3 4 2 3 5}}
140*bb37fdc7Sdrhdo_test conflict-1.17 {
141*bb37fdc7Sdrh  catchsql {
142*bb37fdc7Sdrh    UPDATE ON CONFLICT REPLACE t1 SET b=3 WHERE b=2;
143*bb37fdc7Sdrh    SELECT * FROM t1 ORDER BY c;
144*bb37fdc7Sdrh  }
145*bb37fdc7Sdrh} {0 {1 3 3 2 3 5}}
146*bb37fdc7Sdrh
147*bb37fdc7Sdrh
148*bb37fdc7Sdrhfinish_test
149