| Index: third_party/sqlite/sqlite-src-3080704/test/conflict2.test
|
| diff --git a/third_party/sqlite/sqlite-src-3070603/test/conflict.test b/third_party/sqlite/sqlite-src-3080704/test/conflict2.test
|
| similarity index 78%
|
| copy from third_party/sqlite/sqlite-src-3070603/test/conflict.test
|
| copy to third_party/sqlite/sqlite-src-3080704/test/conflict2.test
|
| index 17c7263f1ef2cf9a1aab3112b4926d675173c0e6..8419f1a3ff3f7a65e8100ae94859e0518d805108 100644
|
| --- a/third_party/sqlite/sqlite-src-3070603/test/conflict.test
|
| +++ b/third_party/sqlite/sqlite-src-3080704/test/conflict2.test
|
| @@ -1,4 +1,4 @@
|
| -# 2002 January 29
|
| +# 2013-11-04
|
| #
|
| # The author disclaims copyright to this source code. In place of
|
| # a legal notice, here is a blessing:
|
| @@ -11,9 +11,8 @@
|
| # This file implements regression tests for SQLite library.
|
| #
|
| # This file implements tests for the conflict resolution extension
|
| -# to SQLite.
|
| +# in WITHOUT ROWID tables
|
| #
|
| -# $Id: conflict.test,v 1.32 2009/04/30 09:10:38 danielk1977 Exp $
|
|
|
| set testdir [file dirname $argv0]
|
| source $testdir/tester.tcl
|
| @@ -25,9 +24,9 @@ ifcapable !conflict {
|
|
|
| # Create tables for the first group of tests.
|
| #
|
| -do_test conflict-1.0 {
|
| +do_test conflict2-1.0 {
|
| execsql {
|
| - CREATE TABLE t1(a, b, c, UNIQUE(a,b));
|
| + CREATE TABLE t1(a, b, c, PRIMARY KEY(a,b)) WITHOUT rowid;
|
| CREATE TABLE t2(x);
|
| SELECT c FROM t1 ORDER BY c;
|
| }
|
| @@ -51,7 +50,7 @@ foreach {i cmd t0 t1 t2 t3} {
|
| 6 {INSERT OR ABORT} 1 {} 1 0
|
| 7 {INSERT OR ROLLBACK} 1 {} {} 0
|
| } {
|
| - do_test conflict-1.$i {
|
| + do_test conflict2-1.$i {
|
| set ::sqlite_opentemp_count 0
|
| set r0 [catch {execsql [subst {
|
| DELETE FROM t1;
|
| @@ -71,11 +70,11 @@ foreach {i cmd t0 t1 t2 t3} {
|
|
|
| # Create tables for the first group of tests.
|
| #
|
| -do_test conflict-2.0 {
|
| +do_test conflict2-2.0 {
|
| execsql {
|
| DROP TABLE t1;
|
| DROP TABLE t2;
|
| - CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(a,b));
|
| + CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c, UNIQUE(a,b)) WITHOUT rowid;
|
| CREATE TABLE t2(x);
|
| SELECT c FROM t1 ORDER BY c;
|
| }
|
| @@ -98,7 +97,7 @@ foreach {i cmd t0 t1 t2} {
|
| 6 {INSERT OR ABORT} 1 {} 1
|
| 7 {INSERT OR ROLLBACK} 1 {} {}
|
| } {
|
| - do_test conflict-2.$i {
|
| + do_test conflict2-2.$i {
|
| set r0 [catch {execsql [subst {
|
| DELETE FROM t1;
|
| DELETE FROM t2;
|
| @@ -116,11 +115,11 @@ foreach {i cmd t0 t1 t2} {
|
|
|
| # Create tables for the first group of tests.
|
| #
|
| -do_test conflict-3.0 {
|
| +do_test conflict2-3.0 {
|
| execsql {
|
| DROP TABLE t1;
|
| DROP TABLE t2;
|
| - CREATE TABLE t1(a, b, c INTEGER, PRIMARY KEY(c), UNIQUE(a,b));
|
| + CREATE TABLE t1(a, b, c INTEGER, PRIMARY KEY(c), UNIQUE(a,b)) WITHOUT rowid;
|
| CREATE TABLE t2(x);
|
| SELECT c FROM t1 ORDER BY c;
|
| }
|
| @@ -143,7 +142,7 @@ foreach {i cmd t0 t1 t2} {
|
| 6 {INSERT OR ABORT} 1 {} 1
|
| 7 {INSERT OR ROLLBACK} 1 {} {}
|
| } {
|
| - do_test conflict-3.$i {
|
| + do_test conflict2-3.$i {
|
| set r0 [catch {execsql [subst {
|
| DELETE FROM t1;
|
| DELETE FROM t2;
|
| @@ -159,7 +158,7 @@ foreach {i cmd t0 t1 t2} {
|
| } [list $t0 $t1 $t2]
|
| }
|
|
|
| -do_test conflict-4.0 {
|
| +do_test conflict2-4.0 {
|
| execsql {
|
| DROP TABLE t2;
|
| CREATE TABLE t2(x);
|
| @@ -189,11 +188,11 @@ foreach {i conf1 cmd t0 t1 t2} {
|
| 10 ABORT {INSERT OR REPLACE} 0 4 1
|
| 11 ROLLBACK {INSERT OR IGNORE } 0 3 1
|
| } {
|
| - do_test conflict-4.$i {
|
| + do_test conflict2-4.$i {
|
| if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"}
|
| set r0 [catch {execsql [subst {
|
| DROP TABLE t1;
|
| - CREATE TABLE t1(a,b,c,UNIQUE(a,b) $conf1);
|
| + CREATE TABLE t1(a,b,c,PRIMARY KEY(a,b) $conf1) WITHOUT rowid;
|
| DELETE FROM t2;
|
| INSERT INTO t1 VALUES(1,2,3);
|
| BEGIN;
|
| @@ -207,7 +206,7 @@ foreach {i conf1 cmd t0 t1 t2} {
|
| } [list $t0 $t1 $t2]
|
| }
|
|
|
| -do_test conflict-5.0 {
|
| +do_test conflict2-5.0 {
|
| execsql {
|
| DROP TABLE t2;
|
| CREATE TABLE t2(x);
|
| @@ -242,8 +241,8 @@ foreach {i conf1 cmd t0 t1 t2} {
|
| 15 {} {INSERT OR ABORT} 1 {} 1
|
| 16 {} {INSERT OR ROLLBACK} 1 {} {}
|
| } {
|
| - if {$t0} {set t1 {t1.c may not be NULL}}
|
| - do_test conflict-5.$i {
|
| + if {$t0} {set t1 {NOT NULL constraint failed: t1.c}}
|
| + do_test conflict2-5.$i {
|
| if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"}
|
| set r0 [catch {execsql [subst {
|
| DROP TABLE t1;
|
| @@ -260,7 +259,7 @@ foreach {i conf1 cmd t0 t1 t2} {
|
| } [list $t0 $t1 $t2]
|
| }
|
|
|
| -do_test conflict-6.0 {
|
| +do_test conflict2-6.0 {
|
| execsql {
|
| DROP TABLE t2;
|
| CREATE TABLE t2(a,b,c);
|
| @@ -296,23 +295,28 @@ foreach {i conf1 cmd t0 t1 t2 t3 t4} {
|
| 5 ABORT UPDATE 1 {1 2 3 4} 1 0 1
|
| 6 ROLLBACK UPDATE 1 {1 2 3 4} 0 0 0
|
| 7 REPLACE {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0
|
| - 8 IGNORE {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0
|
| + 8 IGNORE {UPDATE OR REPLACE} 0 {7 6 9} 1 0 1
|
| 9 FAIL {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0
|
| - 10 ABORT {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0
|
| + 10 ABORT {UPDATE OR REPLACE} 0 {7 6 9} 1 0 1
|
| 11 ROLLBACK {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0
|
| 12 {} {UPDATE OR IGNORE} 0 {6 7 3 9} 1 0 0
|
| - 13 {} {UPDATE OR REPLACE} 0 {7 6 9} 1 0 0
|
| + 13 {} {UPDATE OR REPLACE} 0 {7 6 9} 1 0 1
|
| 14 {} {UPDATE OR FAIL} 1 {6 7 3 4} 1 0 0
|
| 15 {} {UPDATE OR ABORT} 1 {1 2 3 4} 1 0 1
|
| 16 {} {UPDATE OR ROLLBACK} 1 {1 2 3 4} 0 0 0
|
| } {
|
| - if {$t0} {set t1 {column a is not unique}}
|
| +
|
| + # When using in-memory journals, no temporary files are required for
|
| + # statement journals.
|
| + if {[permutation] == "inmemory_journal"} { set t4 0 }
|
| +
|
| + if {$t0} {set t1 {UNIQUE constraint failed: t1.a}}
|
| if {[info exists TEMP_STORE] && $TEMP_STORE==3} {
|
| set t3 0
|
| } else {
|
| set t3 [expr {$t3+$t4}]
|
| }
|
| - do_test conflict-6.$i {
|
| + do_test conflict2-6.$i {
|
| db close
|
| sqlite3 db test.db
|
| if {$conf1!=""} {set conf1 "ON CONFLICT $conf1"}
|
| @@ -320,7 +324,7 @@ foreach {i conf1 cmd t0 t1 t2 t3 t4} {
|
| set ::sqlite_opentemp_count 0
|
| set r0 [catch {execsql [subst {
|
| DROP TABLE t1;
|
| - CREATE TABLE t1(a,b,c, UNIQUE(a) $conf1);
|
| + CREATE TABLE t1(a,b,c, PRIMARY KEY(a) $conf1) WITHOUT rowid;
|
| INSERT INTO t1 SELECT * FROM t2;
|
| UPDATE t3 SET x=0;
|
| BEGIN;
|
| @@ -337,12 +341,12 @@ foreach {i conf1 cmd t0 t1 t2 t3 t4} {
|
|
|
| # Test to make sure a lot of IGNOREs don't cause a stack overflow
|
| #
|
| -do_test conflict-7.1 {
|
| +do_test conflict2-7.1 {
|
| execsql {
|
| DROP TABLE t1;
|
| DROP TABLE t2;
|
| DROP TABLE t3;
|
| - CREATE TABLE t1(a unique, b);
|
| + CREATE TABLE t1(a PRIMARY KEY, b) without rowid;
|
| }
|
| for {set i 1} {$i<=50} {incr i} {
|
| execsql "INSERT into t1 values($i,[expr {$i+1}]);"
|
| @@ -351,40 +355,35 @@ do_test conflict-7.1 {
|
| SELECT count(*), min(a), max(b) FROM t1;
|
| }
|
| } {50 1 51}
|
| -do_test conflict-7.2 {
|
| +do_test conflict2-7.2 {
|
| execsql {
|
| PRAGMA count_changes=on;
|
| UPDATE OR IGNORE t1 SET a=1000;
|
| }
|
| } {1}
|
| -do_test conflict-7.2.1 {
|
| +do_test conflict2-7.2.1 {
|
| db changes
|
| } {1}
|
| -do_test conflict-7.3 {
|
| +do_test conflict2-7.3 {
|
| execsql {
|
| SELECT b FROM t1 WHERE a=1000;
|
| }
|
| } {2}
|
| -do_test conflict-7.4 {
|
| +do_test conflict2-7.4 {
|
| execsql {
|
| SELECT count(*) FROM t1;
|
| }
|
| } {50}
|
| -do_test conflict-7.5 {
|
| +do_test conflict2-7.5 {
|
| execsql {
|
| PRAGMA count_changes=on;
|
| UPDATE OR REPLACE t1 SET a=1001;
|
| }
|
| } {50}
|
| -do_test conflict-7.5.1 {
|
| +do_test conflict2-7.5.1 {
|
| db changes
|
| } {50}
|
| -do_test conflict-7.6 {
|
| - execsql {
|
| - SELECT b FROM t1 WHERE a=1001;
|
| - }
|
| -} {51}
|
| -do_test conflict-7.7 {
|
| +do_test conflict2-7.7 {
|
| execsql {
|
| SELECT count(*) FROM t1;
|
| }
|
| @@ -392,14 +391,14 @@ do_test conflict-7.7 {
|
|
|
| # Update for version 3: A SELECT statement no longer resets the change
|
| # counter (Test result changes from 0 to 50).
|
| -do_test conflict-7.7.1 {
|
| +do_test conflict2-7.7.1 {
|
| db changes
|
| } {50}
|
|
|
| # Make sure the row count is right for rows that are ignored on
|
| # an insert.
|
| #
|
| -do_test conflict-8.1 {
|
| +do_test conflict2-8.1 {
|
| execsql {
|
| DELETE FROM t1;
|
| INSERT INTO t1 VALUES(1,2);
|
| @@ -408,207 +407,214 @@ do_test conflict-8.1 {
|
| INSERT OR IGNORE INTO t1 VALUES(2,3);
|
| }
|
| } {1}
|
| -do_test conflict-8.1.1 {
|
| +do_test conflict2-8.1.1 {
|
| db changes
|
| } {1}
|
| -do_test conflict-8.2 {
|
| +do_test conflict2-8.2 {
|
| execsql {
|
| INSERT OR IGNORE INTO t1 VALUES(2,4);
|
| }
|
| } {0}
|
| -do_test conflict-8.2.1 {
|
| +do_test conflict2-8.2.1 {
|
| db changes
|
| } {0}
|
| -do_test conflict-8.3 {
|
| +do_test conflict2-8.3 {
|
| execsql {
|
| INSERT OR REPLACE INTO t1 VALUES(2,4);
|
| }
|
| } {1}
|
| -do_test conflict-8.3.1 {
|
| +do_test conflict2-8.3.1 {
|
| db changes
|
| } {1}
|
| -do_test conflict-8.4 {
|
| +do_test conflict2-8.4 {
|
| execsql {
|
| INSERT OR IGNORE INTO t1 SELECT * FROM t1;
|
| }
|
| } {0}
|
| -do_test conflict-8.4.1 {
|
| +do_test conflict2-8.4.1 {
|
| db changes
|
| } {0}
|
| -do_test conflict-8.5 {
|
| +do_test conflict2-8.5 {
|
| execsql {
|
| INSERT OR IGNORE INTO t1 SELECT a+2,b+2 FROM t1;
|
| }
|
| } {2}
|
| -do_test conflict-8.5.1 {
|
| +do_test conflict2-8.5.1 {
|
| db changes
|
| } {2}
|
| -do_test conflict-8.6 {
|
| +do_test conflict2-8.6 {
|
| execsql {
|
| INSERT OR IGNORE INTO t1 SELECT a+3,b+3 FROM t1;
|
| }
|
| } {3}
|
| -do_test conflict-8.6.1 {
|
| +do_test conflict2-8.6.1 {
|
| db changes
|
| } {3}
|
|
|
| -integrity_check conflict-8.99
|
| +integrity_check conflict2-8.99
|
|
|
| -do_test conflict-9.1 {
|
| +do_test conflict2-9.1 {
|
| execsql {
|
| PRAGMA count_changes=0;
|
| CREATE TABLE t2(
|
| - a INTEGER UNIQUE ON CONFLICT IGNORE,
|
| + a INTEGER PRIMARY KEY ON CONFLICT IGNORE,
|
| b INTEGER UNIQUE ON CONFLICT FAIL,
|
| c INTEGER UNIQUE ON CONFLICT REPLACE,
|
| d INTEGER UNIQUE ON CONFLICT ABORT,
|
| e INTEGER UNIQUE ON CONFLICT ROLLBACK
|
| - );
|
| + ) WITHOUT rowid;
|
| CREATE TABLE t3(x);
|
| INSERT INTO t3 VALUES(1);
|
| SELECT * FROM t3;
|
| }
|
| } {1}
|
| -do_test conflict-9.2 {
|
| +do_test conflict2-9.2 {
|
| catchsql {
|
| INSERT INTO t2 VALUES(1,1,1,1,1);
|
| INSERT INTO t2 VALUES(2,2,2,2,2);
|
| SELECT * FROM t2;
|
| }
|
| } {0 {1 1 1 1 1 2 2 2 2 2}}
|
| -do_test conflict-9.3 {
|
| +do_test conflict2-9.3 {
|
| catchsql {
|
| INSERT INTO t2 VALUES(1,3,3,3,3);
|
| SELECT * FROM t2;
|
| }
|
| } {0 {1 1 1 1 1 2 2 2 2 2}}
|
| -do_test conflict-9.4 {
|
| +do_test conflict2-9.4 {
|
| catchsql {
|
| UPDATE t2 SET a=a+1 WHERE a=1;
|
| SELECT * FROM t2;
|
| }
|
| } {0 {1 1 1 1 1 2 2 2 2 2}}
|
| -do_test conflict-9.5 {
|
| +do_test conflict2-9.5 {
|
| catchsql {
|
| INSERT INTO t2 VALUES(3,1,3,3,3);
|
| - SELECT * FROM t2;
|
| }
|
| -} {1 {column b is not unique}}
|
| -do_test conflict-9.6 {
|
| +} {1 {UNIQUE constraint failed: t2.b}}
|
| +do_test conflict2-9.5b {
|
| + db eval {SELECT * FROM t2;}
|
| +} {1 1 1 1 1 2 2 2 2 2}
|
| +do_test conflict2-9.6 {
|
| catchsql {
|
| UPDATE t2 SET b=b+1 WHERE b=1;
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column b is not unique}}
|
| -do_test conflict-9.7 {
|
| +} {1 {UNIQUE constraint failed: t2.b}}
|
| +do_test conflict2-9.6b {
|
| + db eval {SELECT * FROM t2;}
|
| +} {1 1 1 1 1 2 2 2 2 2}
|
| +do_test conflict2-9.7 {
|
| catchsql {
|
| BEGIN;
|
| UPDATE t3 SET x=x+1;
|
| INSERT INTO t2 VALUES(3,1,3,3,3);
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column b is not unique}}
|
| -do_test conflict-9.8 {
|
| +} {1 {UNIQUE constraint failed: t2.b}}
|
| +do_test conflict2-9.8 {
|
| execsql {COMMIT}
|
| execsql {SELECT * FROM t3}
|
| } {2}
|
| -do_test conflict-9.9 {
|
| +do_test conflict2-9.9 {
|
| catchsql {
|
| BEGIN;
|
| UPDATE t3 SET x=x+1;
|
| UPDATE t2 SET b=b+1 WHERE b=1;
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column b is not unique}}
|
| -do_test conflict-9.10 {
|
| +} {1 {UNIQUE constraint failed: t2.b}}
|
| +do_test conflict2-9.10 {
|
| execsql {COMMIT}
|
| execsql {SELECT * FROM t3}
|
| } {3}
|
| -do_test conflict-9.11 {
|
| +do_test conflict2-9.11 {
|
| catchsql {
|
| INSERT INTO t2 VALUES(3,3,3,1,3);
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column d is not unique}}
|
| -do_test conflict-9.12 {
|
| +} {1 {UNIQUE constraint failed: t2.d}}
|
| +do_test conflict2-9.12 {
|
| catchsql {
|
| UPDATE t2 SET d=d+1 WHERE d=1;
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column d is not unique}}
|
| -do_test conflict-9.13 {
|
| +} {1 {UNIQUE constraint failed: t2.d}}
|
| +do_test conflict2-9.13 {
|
| catchsql {
|
| BEGIN;
|
| UPDATE t3 SET x=x+1;
|
| INSERT INTO t2 VALUES(3,3,3,1,3);
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column d is not unique}}
|
| -do_test conflict-9.14 {
|
| +} {1 {UNIQUE constraint failed: t2.d}}
|
| +do_test conflict2-9.14 {
|
| execsql {COMMIT}
|
| execsql {SELECT * FROM t3}
|
| } {4}
|
| -do_test conflict-9.15 {
|
| +do_test conflict2-9.15 {
|
| catchsql {
|
| BEGIN;
|
| UPDATE t3 SET x=x+1;
|
| UPDATE t2 SET d=d+1 WHERE d=1;
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column d is not unique}}
|
| -do_test conflict-9.16 {
|
| +} {1 {UNIQUE constraint failed: t2.d}}
|
| +do_test conflict2-9.16 {
|
| execsql {COMMIT}
|
| execsql {SELECT * FROM t3}
|
| } {5}
|
| -do_test conflict-9.17 {
|
| +do_test conflict2-9.17 {
|
| catchsql {
|
| INSERT INTO t2 VALUES(3,3,3,3,1);
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column e is not unique}}
|
| -do_test conflict-9.18 {
|
| +} {1 {UNIQUE constraint failed: t2.e}}
|
| +do_test conflict2-9.18 {
|
| catchsql {
|
| UPDATE t2 SET e=e+1 WHERE e=1;
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column e is not unique}}
|
| -do_test conflict-9.19 {
|
| +} {1 {UNIQUE constraint failed: t2.e}}
|
| +do_test conflict2-9.19 {
|
| catchsql {
|
| BEGIN;
|
| UPDATE t3 SET x=x+1;
|
| INSERT INTO t2 VALUES(3,3,3,3,1);
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column e is not unique}}
|
| -do_test conflict-9.20 {
|
| +} {1 {UNIQUE constraint failed: t2.e}}
|
| +verify_ex_errcode conflict2-9.21b SQLITE_CONSTRAINT_UNIQUE
|
| +do_test conflict2-9.20 {
|
| catch {execsql {COMMIT}}
|
| execsql {SELECT * FROM t3}
|
| } {5}
|
| -do_test conflict-9.21 {
|
| +do_test conflict2-9.21 {
|
| catchsql {
|
| BEGIN;
|
| UPDATE t3 SET x=x+1;
|
| UPDATE t2 SET e=e+1 WHERE e=1;
|
| SELECT * FROM t2;
|
| }
|
| -} {1 {column e is not unique}}
|
| -do_test conflict-9.22 {
|
| +} {1 {UNIQUE constraint failed: t2.e}}
|
| +verify_ex_errcode conflict2-9.21b SQLITE_CONSTRAINT_UNIQUE
|
| +do_test conflict2-9.22 {
|
| catch {execsql {COMMIT}}
|
| execsql {SELECT * FROM t3}
|
| } {5}
|
| -do_test conflict-9.23 {
|
| +do_test conflict2-9.23 {
|
| catchsql {
|
| INSERT INTO t2 VALUES(3,3,1,3,3);
|
| SELECT * FROM t2;
|
| }
|
| } {0 {2 2 2 2 2 3 3 1 3 3}}
|
| -do_test conflict-9.24 {
|
| +do_test conflict2-9.24 {
|
| catchsql {
|
| UPDATE t2 SET c=c-1 WHERE c=2;
|
| SELECT * FROM t2;
|
| }
|
| } {0 {2 2 1 2 2}}
|
| -do_test conflict-9.25 {
|
| +do_test conflict2-9.25 {
|
| catchsql {
|
| BEGIN;
|
| UPDATE t3 SET x=x+1;
|
| @@ -616,12 +622,12 @@ do_test conflict-9.25 {
|
| SELECT * FROM t2;
|
| }
|
| } {0 {3 3 1 3 3}}
|
| -do_test conflict-9.26 {
|
| +do_test conflict2-9.26 {
|
| catch {execsql {COMMIT}}
|
| execsql {SELECT * FROM t3}
|
| } {6}
|
|
|
| -do_test conflict-10.1 {
|
| +do_test conflict2-10.1 {
|
| catchsql {
|
| DELETE FROM t1;
|
| BEGIN;
|
| @@ -631,7 +637,7 @@ do_test conflict-10.1 {
|
| }
|
| execsql {SELECT * FROM t1}
|
| } {}
|
| -do_test conflict-10.2 {
|
| +do_test conflict2-10.2 {
|
| catchsql {
|
| CREATE TABLE t4(x);
|
| CREATE UNIQUE INDEX t4x ON t4(x);
|
| @@ -646,11 +652,11 @@ do_test conflict-10.2 {
|
| # Ticket #1171. Make sure statement rollbacks do not
|
| # damage the database.
|
| #
|
| -do_test conflict-11.1 {
|
| +do_test conflict2-11.1 {
|
| execsql {
|
| -- Create a database object (pages 2, 3 of the file)
|
| BEGIN;
|
| - CREATE TABLE abc(a UNIQUE, b, c);
|
| + CREATE TABLE abc(a PRIMARY KEY, b, c) WITHOUT rowid;
|
| INSERT INTO abc VALUES(1, 2, 3);
|
| INSERT INTO abc VALUES(4, 5, 6);
|
| INSERT INTO abc VALUES(7, 8, 9);
|
| @@ -702,11 +708,11 @@ do_test conflict-11.1 {
|
| SELECT * FROM abc;
|
| }
|
| } {1 2 3 4 5 6 7 8 9}
|
| -integrity_check conflict-11.2
|
| +integrity_check conflict2-11.2
|
|
|
| -# Repeat test conflict-11.1 but this time commit.
|
| +# Repeat test conflict2-11.1 but this time commit.
|
| #
|
| -do_test conflict-11.3 {
|
| +do_test conflict2-11.3 {
|
| execsql {
|
| BEGIN;
|
| -- Make sure the pager is in EXCLUSIVE state.
|
| @@ -731,9 +737,9 @@ do_test conflict-11.3 {
|
| SELECT * FROM abc;
|
| }
|
| } {1 2 3 4 5 6 7 8 9}
|
| -# Repeat test conflict-11.1 but this time commit.
|
| +# Repeat test conflict2-11.1 but this time commit.
|
| #
|
| -do_test conflict-11.5 {
|
| +do_test conflict2-11.5 {
|
| execsql {
|
| BEGIN;
|
| -- Make sure the pager is in EXCLUSIVE state.
|
| @@ -757,31 +763,32 @@ do_test conflict-11.5 {
|
| SELECT * FROM abc;
|
| }
|
| } {1 2 3 7 8 9}
|
| -integrity_check conflict-11.6
|
| +integrity_check conflict2-11.6
|
|
|
| # Make sure UPDATE OR REPLACE works on tables that have only
|
| # an INTEGER PRIMARY KEY.
|
| #
|
| -do_test conflict-12.1 {
|
| +do_test conflict2-12.1 {
|
| execsql {
|
| - CREATE TABLE t5(a INTEGER PRIMARY KEY, b text);
|
| + CREATE TABLE t5(a INTEGER PRIMARY KEY, b text) WITHOUT rowid;
|
| INSERT INTO t5 VALUES(1,'one');
|
| INSERT INTO t5 VALUES(2,'two');
|
| SELECT * FROM t5
|
| }
|
| } {1 one 2 two}
|
| -do_test conflict-12.2 {
|
| +do_test conflict2-12.2 {
|
| execsql {
|
| UPDATE OR IGNORE t5 SET a=a+1 WHERE a=1;
|
| SELECT * FROM t5;
|
| }
|
| } {1 one 2 two}
|
| -do_test conflict-12.3 {
|
| +do_test conflict2-12.3 {
|
| catchsql {
|
| UPDATE t5 SET a=a+1 WHERE a=1;
|
| }
|
| -} {1 {PRIMARY KEY must be unique}}
|
| -do_test conflict-12.4 {
|
| +} {1 {UNIQUE constraint failed: t5.a}}
|
| +verify_ex_errcode conflict2-12.3b SQLITE_CONSTRAINT_PRIMARYKEY
|
| +do_test conflict2-12.4 {
|
| execsql {
|
| UPDATE OR REPLACE t5 SET a=a+1 WHERE a=1;
|
| SELECT * FROM t5;
|
| @@ -792,17 +799,18 @@ do_test conflict-12.4 {
|
| # Ticket [c38baa3d969eab7946dc50ba9d9b4f0057a19437]
|
| # REPLACE works like ABORT on a CHECK constraint.
|
| #
|
| -do_test conflict-13.1 {
|
| +do_test conflict2-13.1 {
|
| execsql {
|
| - CREATE TABLE t13(a CHECK(a!=2));
|
| + CREATE TABLE t13(a PRIMARY KEY CHECK(a!=2)) WITHOUT rowid;
|
| BEGIN;
|
| REPLACE INTO t13 VALUES(1);
|
| }
|
| catchsql {
|
| REPLACE INTO t13 VALUES(2);
|
| }
|
| -} {1 {constraint failed}}
|
| -do_test conflict-13.2 {
|
| +} {1 {CHECK constraint failed: t13}}
|
| +verify_ex_errcode conflict2-13.1b SQLITE_CONSTRAINT_CHECK
|
| +do_test conflict2-13.2 {
|
| execsql {
|
| REPLACE INTO t13 VALUES(3);
|
| COMMIT;
|
| @@ -810,5 +818,38 @@ do_test conflict-13.2 {
|
| }
|
| } {1 3}
|
|
|
| +# Test for an unreleased bug in the REPLACE conflict resolution
|
| +# discovered on 2013-11-09.
|
| +#
|
| +do_execsql_test conflict2-14.1 {
|
| + DROP TABLE IF EXISTS t1;
|
| + CREATE TABLE t1(
|
| + x TEXT PRIMARY KEY NOT NULL,
|
| + y TEXT NOT NULL,
|
| + z INTEGER
|
| + );
|
| + INSERT INTO t1 VALUES('alpha','beta',1);
|
| + CREATE UNIQUE INDEX t1xy ON t1(x,y);
|
| + REPLACE INTO t1(x,y,z) VALUES('alpha','gamma',1);
|
| + PRAGMA integrity_check;
|
| + SELECT x,y FROM t1 INDEXED BY t1xy;
|
| + SELECT x,y,z FROM t1 NOT INDEXED;
|
| +} {ok alpha gamma alpha gamma 1}
|
| +do_execsql_test conflict2-14.2 {
|
| + DROP TABLE IF EXISTS t1;
|
| + CREATE TABLE t1(
|
| + x TEXT PRIMARY KEY NOT NULL,
|
| + y TEXT NOT NULL,
|
| + z INTEGER
|
| + ) WITHOUT ROWID;
|
| + INSERT INTO t1 VALUES('alpha','beta',1);
|
| + CREATE UNIQUE INDEX t1xy ON t1(x,y);
|
| + REPLACE INTO t1(x,y,z) VALUES('alpha','gamma',1);
|
| + PRAGMA integrity_check;
|
| + SELECT x,y FROM t1 INDEXED BY t1xy;
|
| + SELECT x,y,z FROM t1 NOT INDEXED;
|
| +} {ok alpha gamma alpha gamma 1}
|
| +
|
| +
|
|
|
| finish_test
|
|
|