/
clang
/
sqlite
Обзор
Документация
Войти
/
clang
/
sqlite
Код
Вики
Пакеты
0
Релизы
0
Аналитика
patch-release
test/jrnlmode3.test
149 строк
3 KB
mistachkin
Add retry logic for AV defense to winOpen. Also, refactor test suite to allow the key Tcl file operations (e.g. copy and delete) to be retried.
02 авг 2011, 04:57
02 авг 2011, 04:57
fda06be
Код
Авторство
О чём код?
# 2009 April 20 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # Test cases inspired by ticket #3811. Tests to make sure that # the journal_mode can only be changed at appropriate times and that # all reported changes are effective. # # $Id: jrnlmode3.test,v 1.5 2009/04/20 17:43:03 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable {!pager_pragmas} { finish_test return } # # Verify that journal_mode=OFF works as long as it occurs before the first # transaction, even if locking_mode=EXCLUSIVE is enabled. The behavior if # journal_mode is changed after the first transaction is undefined and hence # untested. # do_test jrnlmode3-1.1 { db eval { PRAGMA journal_mode=OFF; PRAGMA locking_mode=EXCLUSIVE; CREATE TABLE t1(x); INSERT INTO t1 VALUES(1); SELECT * FROM t1; } } {off exclusive 1} do_test jrnlmode3-1.2 { db eval { BEGIN; INSERT INTO t1 VALUES(2); ROLLBACK; SELECT * FROM t1; } } {1} db close forcedelete test.db test.db-journal sqlite3 db test.db do_test jrnlmode3-2.1 { db eval { PRAGMA locking_mode=EXCLUSIVE; PRAGMA journal_mode=OFF; CREATE TABLE t1(x); INSERT INTO t1 VALUES(1); SELECT * FROM t1; } } {exclusive off 1} do_test jrnlmode3-2.2 { db eval { BEGIN; INSERT INTO t1 VALUES(2); ROLLBACK; SELECT * FROM t1; } } {1} # Test cases to verify that we can move from any journal_mode # to any other, as long as we are not in a transaction. Verify # that we cannot change journal_mode while a transaction is active. # set all_journal_modes {delete persist truncate memory off} set cnt 0 foreach fromjmode $all_journal_modes { foreach tojmode $all_journal_modes { # Skip the no-change cases if {$fromjmode==$tojmode} continue incr cnt # Start with a fresh database connection an empty database file. # db close forcedelete test.db test.db-journal sqlite3 db test.db # Initialize the journal mode. # do_test jrnlmode3-3.$cnt.1-($fromjmode-to-$tojmode) { db eval "PRAGMA journal_mode = $fromjmode;" } $fromjmode # Verify that the initial journal mode takes. # do_test jrnlmode3-3.$cnt.2 { db eval {PRAGMA main.journal_mode} } $fromjmode # Start a transaction and try to change the journal mode within # the transaction. This should fail. # do_test jrnlmode3-3.$cnt.3 { db eval { CREATE TABLE t1(x); BEGIN; INSERT INTO t1 VALUES($cnt); } db eval "PRAGMA journal_mode=$tojmode" } $fromjmode # Rollback the transaction. # do_test jrnlmode3-3.$cnt.4 { db eval { ROLLBACK; SELECT * FROM t1; } } {} # Now change the journal mode again. This time the new mode # should take. # do_test jrnlmode3-3.$cnt.5 { db eval "PRAGMA journal_mode=$tojmode" } $tojmode # Do a the transaction. Verify that the rollback occurred # if journal_mode!=OFF. # do_test jrnlmode3-3.$cnt.6 { db eval { DROP TABLE IF EXISTS t1; CREATE TABLE t1(x); BEGIN; INSERT INTO t1 VALUES(1); } db eval ROLLBACK db eval { SELECT * FROM t1; } } {} } } finish_test