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