#
#***********************************************************************
#
-# Test some properties of the pager_ota_mode pragma.
+# Test some properties of the pager_ota_mode and ota_mode pragmas.
#
set testdir [file join [file dirname $argv0] .. .. test]
source $testdir/tester.tcl
set ::testprefix ota4
+#-------------------------------------------------------------------------
+# The following tests aim to verify some properties of the pager_ota_mode
+# pragma:
+#
# 1. Cannot set the pager_ota_mode flag on a WAL mode database.
#
# 2. Or if there is an open read transaction.
# file was started.
#
-do_execsql_test 1.1 {
+do_execsql_test 1.1.1 {
PRAGMA journal_mode = wal;
SELECT * FROM sqlite_master;
} {wal}
-do_catchsql_test 1.2 {
+do_catchsql_test 1.1.2 {
PRAGMA pager_ota_mode = 1
} {1 {cannot set pager_ota_mode in wal mode}}
-do_execsql_test 2.1 {
+do_execsql_test 1.2.1 {
PRAGMA journal_mode = delete;
BEGIN;
SELECT * FROM sqlite_master;
} {delete}
-do_catchsql_test 2.2 {
+do_catchsql_test 1.2.2 {
PRAGMA pager_ota_mode = 1
} {1 {cannot set pager_ota_mode with open transaction}}
-do_execsql_test 2.3 {
+do_execsql_test 1.2.3 {
COMMIT;
} {}
-do_execsql_test 3.1 {
+do_execsql_test 1.3.1 {
PRAGMA journal_mode = wal;
CREATE TABLE t1(a, b);
INSERT INTO t1 VALUES(1, 2);
} {wal}
-do_test 3.2 {
+do_test 1.3.2 {
forcecopy test.db-wal test.db-bak
execsql {
PRAGMA journal_mode = delete;
}
} {1 {unable to open database file}}
-do_test 4.1 {
+do_test 1.4.1 {
db close
forcedelete test.db-wal test.db-oal
sqlite3 db test.db
}
} {1 {unable to open database file}}
-do_test 5.1 {
+do_test 1.5.1 {
forcedelete test.db-oal
reset_db
execsql {
SELECT * FROM t1;
}
} {1 2}
-do_execsql_test 5.2 {
+do_execsql_test 1.5.2 {
PRAGMA pager_ota_mode = 1;
SELECT * FROM t1;
INSERT INTO t1 VALUES(5, 6);
SELECT * FROM t1;
}
} {1 2 7 8}
-do_catchsql_test 5.4 {
+do_catchsql_test 1.5.4 {
PRAGMA pager_ota_mode = 1;
SELECT * FROM t1;
} {1 {database is locked}}
+#-------------------------------------------------------------------------
+# These tests - ota4-2.* - aim to verify some properties of the ota_mode
+# pragma.
+#
+# 1. Check that UNIQUE constraints are not tested in ota_mode.
+# 2. Except for (real) PRIMARY KEY constraints.
+# 3. Check that all non-temporary triggers are ignored.
+#
+reset_db
+do_execsql_test 2.1.1 {
+ CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c);
+ CREATE UNIQUE INDEX i1 ON t1(b);
+ INSERT INTO t1 VALUES(1, 2, 3);
+ INSERT INTO t1 VALUES(2, 4, 6);
+}
+
+do_execsql_test 2.1.2 {
+ PRAGMA ota_mode = 1;
+ INSERT INTO t1 VALUES(3, 2, 6);
+ UPDATE t1 SET b=2 WHERE a=2;
+ SELECT * FROM t1;
+} {
+ 1 2 3
+ 2 2 6
+ 3 2 6
+}
+
+reset_db
+do_execsql_test 2.2.1 {
+ CREATE TABLE t1(a INTEGER PRIMARY KEY, b, c);
+ CREATE TABLE t2(x, y, z, PRIMARY KEY(y, z)) WITHOUT ROWID;
+
+ INSERT INTO t1 VALUES(1, 2, 3);
+ INSERT INTO t2 VALUES(4, 5, 6);
+ PRAGMA ota_mode = 1;
+}
+do_catchsql_test 2.2.2 {
+ INSERT INTO t1 VALUES(1, 'two', 'three');
+} {1 {UNIQUE constraint failed: t1.a}}
+do_catchsql_test 2.2.3 {
+ INSERT INTO t2 VALUES('four', 5, 6);
+} {1 {UNIQUE constraint failed: t2.y, t2.z}}
+
+reset_db
+do_execsql_test 2.3.1 {
+ CREATE TABLE t1(a, b, c);
+ CREATE TABLE log(x);
+ INSERT INTO t1 VALUES(1, 2, 3);
+
+ CREATE TRIGGER tr1 BEFORE INSERT ON t1 BEGIN
+ INSERT INTO log VALUES('permanent');
+ END;
+ CREATE TRIGGER tr2 AFTER INSERT ON t1 BEGIN
+ INSERT INTO log VALUES('permanent');
+ END;
+ CREATE TRIGGER tr3 BEFORE DELETE ON t1 BEGIN
+ INSERT INTO log VALUES('permanent');
+ END;
+ CREATE TRIGGER tr4 AFTER DELETE ON t1 BEGIN
+ INSERT INTO log VALUES('permanent');
+ END;
+ CREATE TRIGGER tr5 BEFORE UPDATE ON t1 BEGIN
+ INSERT INTO log VALUES('permanent');
+ END;
+ CREATE TRIGGER tr6 AFTER UPDATE ON t1 BEGIN
+ INSERT INTO log VALUES('permanent');
+ END;
+
+ CREATE TEMP TRIGGER ttr1 BEFORE INSERT ON t1 BEGIN
+ INSERT INTO log VALUES('temp');
+ END;
+ CREATE TEMP TRIGGER ttr2 AFTER INSERT ON t1 BEGIN
+ INSERT INTO log VALUES('temp');
+ END;
+ CREATE TEMP TRIGGER ttr3 BEFORE DELETE ON t1 BEGIN
+ INSERT INTO log VALUES('temp');
+ END;
+ CREATE TEMP TRIGGER ttr4 AFTER DELETE ON t1 BEGIN
+ INSERT INTO log VALUES('temp');
+ END;
+ CREATE TEMP TRIGGER ttr5 BEFORE UPDATE ON t1 BEGIN
+ INSERT INTO log VALUES('temp');
+ END;
+ CREATE TEMP TRIGGER ttr6 AFTER UPDATE ON t1 BEGIN
+ INSERT INTO log VALUES('temp');
+ END;
+}
+do_execsql_test 2.3.2 {
+ INSERT INTO t1 VALUES(4, 5, 6);
+ DELETE FROM t1 WHERE a = 4;
+ UPDATE t1 SET c = 6;
+ SELECT x FROM log;
+} {
+ temp permanent temp permanent temp permanent
+ temp permanent temp permanent temp permanent
+}
+do_execsql_test 2.3.3 {
+ DELETE FROM log;
+ PRAGMA ota_mode = 1;
+ INSERT INTO t1 VALUES(4, 5, 6);
+ DELETE FROM t1 WHERE a = 4;
+ UPDATE t1 SET c = 6;
+ SELECT x FROM log;
+} {temp temp temp temp temp temp}
+
finish_test
+
-C Clarify\sthe\seffects\sof\sthe\spager_ota_mode\spragma.\sAdd\stests\sand\sfixes\sfor\sthe\ssame.
-D 2014-09-16T20:02:41.756
+C Add\stests\sand\sfixes\sfor\s"PRAGMA\sota_mode".
+D 2014-09-17T15:20:24.516
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F ext/misc/wholenumber.c 784b12543d60702ebdd47da936e278aa03076212
F ext/ota/ota.c d37097e92a005d3915883adefbb93019ea6f8841
F ext/ota/ota1.test 7cbf37a9f6cd29320f47b041cfeb0cc1d7eaa916
-F ext/ota/ota2.test 13f76922446c62ed96192e938b8e625ebf0142fa
+F ext/ota/ota2.test 716f9c66e8bf8b0ad2fe3a5d8323e6cf460a2e27
F ext/ota/ota3.test 1c48b7476af1c5920db9a43e7b1476d421a463b5
-F ext/ota/ota4.test ec01b0d69ad2989559a65fde74560c1cfcca8202
+F ext/ota/ota4.test baf23b47748a5056c713871959cc70fc623c90e9
F ext/ota/sqlite3ota.c 668ed08dd81ff8ae1e8524b2d4bf0f2609cbf907
F ext/ota/sqlite3ota.h 39ce4dffbfcf4ade9e4526369fe2243709345c8e
F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5
F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094
F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
-F src/insert.c 25e63641927530eee0487c5a8bbf6e5414c4c753
+F src/insert.c 887551441b3a46d964733b16a86c614d0152778d
F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e
F src/lempar.c 7274c97d24bb46631e504332ccd3bd1b37841770
F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
F src/threads.c 22dded4283dc4b25422f6444cdcb8d6b1ea0b5ff
F src/tokenize.c 3df63041994f55afeb168b463ec836e8f1c50e7c
-F src/trigger.c 25571661fdeae8c7f975ff40ffec205520a3f92f
+F src/trigger.c eb921d1292aca83d515bde5881df71df91d962d6
F src/update.c 729f6f18fc27740591d085e1172cebe311144bf0
F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359
F src/util.c 4006c01772bd8d8ac4306d523bbcee41d3e392d8
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 48d201cd8b68c0377cf8a2cc6439b893f9462fe2
-R de185427497b23c6bf5f7a43a97cdd26
+P decaccc37cbdcd2a663233469efdf4982a810513
+R d8d51626052024a717c822f3b6627467
U dan
-Z de73fdb4c4401b74adf143cdfee4f7e2
+Z 65720a0642c813fef614e2d54b0a69b7