1 # 2010 December 1 2 # 3 # The author disclaims copyright to this source code. In place of 4 # a legal notice, here is a blessing: 5 # 6 # May you do good and not evil. 7 # May you find forgiveness for yourself and forgive others. 8 # May you share freely, never taking more than you give. 9 # 10 #*********************************************************************** 11 # This file implements regression tests for SQLite library. The 12 # focus of this file is testing the operation of the library in 13 # "PRAGMA journal_mode=WAL" mode. 14 # 15 16 set testdir [file dirname $argv0] 17 source $testdir/tester.tcl 18 source $testdir/lock_common.tcl 19 source $testdir/wal_common.tcl 20 source $testdir/malloc_common.tcl 21 ifcapable !wal {finish_test ; return } 22 23 #------------------------------------------------------------------------- 24 # Changing to WAL mode in one connection forces the change in others. 25 # 26 db close 27 forcedelete test.db 28 29 set all_journal_modes {delete persist truncate memory off} 30 foreach jmode $all_journal_modes { 31 32 do_test wal6-1.0.$jmode { 33 sqlite3 db test.db 34 execsql "PRAGMA journal_mode = $jmode;" 35 } $jmode 36 37 do_test wal6-1.1.$jmode { 38 execsql { 39 CREATE TABLE t1(a INTEGER PRIMARY KEY, b); 40 INSERT INTO t1 VALUES(1,2); 41 SELECT * FROM t1; 42 } 43 } {1 2} 44 45 # Under Windows, you'll get an error trying to delete 46 # a file this is already opened. For now, make sure 47 # we get that error, then close the first connection 48 # so the other tests work. 49 if {$tcl_platform(platform)=="windows"} { 50 if {$jmode=="persist" || $jmode=="truncate"} { 51 do_test wal6-1.2.$jmode.win { 52 sqlite3 db2 test.db 53 catchsql { 54 PRAGMA journal_mode=WAL; 55 } db2 56 } {1 {disk I/O error}} 57 db2 close 58 db close 59 } 60 } 61 62 do_test wal6-1.2.$jmode { 63 sqlite3 db2 test.db 64 execsql { 65 PRAGMA journal_mode=WAL; 66 INSERT INTO t1 VALUES(3,4); 67 SELECT * FROM t1 ORDER BY a; 68 } db2 69 } {wal 1 2 3 4} 70 71 if {$tcl_platform(platform)=="windows"} { 72 if {$jmode=="persist" || $jmode=="truncate"} { 73 sqlite3 db test.db 74 } 75 } 76 77 do_test wal6-1.3.$jmode { 78 execsql { 79 SELECT * FROM t1 ORDER BY a; 80 } 81 } {1 2 3 4} 82 83 db close 84 db2 close 85 forcedelete test.db 86 87 } 88 89 finish_test 90 91