1# 2011 July 26 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# 12# This file contains tests for using WAL with persistent WAL file mode. 13# 14 15set testdir [file dirname $argv0] 16source $testdir/tester.tcl 17source $testdir/lock_common.tcl 18set ::testprefix walpersist 19 20ifcapable !wal { 21 finish_test 22 return 23} 24 25do_test walpersist-1.0 { 26 db eval { 27 PRAGMA journal_mode=WAL; 28 CREATE TABLE t1(a); 29 INSERT INTO t1 VALUES(randomblob(5000)); 30 } 31 file exists test.db-wal 32} {1} 33do_test walpersist-1.1 { 34 file exists test.db-shm 35} {1} 36do_test walpersist-1.2 { 37 db close 38 list [file exists test.db] [file exists test.db-wal] [file exists test.db-shm] 39} {1 0 0} 40do_test walpersist-1.3 { 41 sqlite3 db test.db 42 db eval {SELECT length(a) FROM t1} 43} {5000} 44do_test walpersist-1.4 { 45 list [file exists test.db] [file exists test.db-wal] [file exists test.db-shm] 46} {1 1 1} 47do_test walpersist-1.5 { 48 file_control_persist_wal db -1 49} {0 0} 50do_test walpersist-1.6 { 51 file_control_persist_wal db 1 52} {0 1} 53do_test walpersist-1.7 { 54 file_control_persist_wal db -1 55} {0 1} 56do_test walpersist-1.8 { 57 file_control_persist_wal db 0 58} {0 0} 59do_test walpersist-1.9 { 60 file_control_persist_wal db -1 61} {0 0} 62do_test walpersist-1.10 { 63 file_control_persist_wal db 1 64} {0 1} 65do_test walpersist-1.11 { 66 db close 67 list [file exists test.db] [file exists test.db-wal] [file exists test.db-shm] 68} {1 1 1} 69 70# Make sure the journal_size_limit works to limit the size of the 71# persisted wal file. In persistent-wal mode, any non-negative 72# journal_size_limit causes the WAL file to be truncated to zero bytes 73# when closing. 74# 75forcedelete test.db test.db-shm test.db-wal 76do_test walpersist-2.1 { 77 sqlite3 db test.db 78 db eval { 79 PRAGMA journal_mode=WAL; 80 PRAGMA wal_autocheckpoint=OFF; 81 PRAGMA journal_size_limit=12000; 82 CREATE TABLE t1(x); 83 INSERT INTO t1 VALUES(randomblob(50000)); 84 UPDATE t1 SET x=randomblob(50000); 85 } 86 expr {[file size test.db-wal]>100000} 87} {1} 88do_test walpersist-2.2 { 89 file_control_persist_wal db 1 90 db close 91 concat [file exists test.db-wal] [file size test.db-wal] 92} {1 0} 93do_test walpersist-2.3 { 94 sqlite3 db test.db 95 execsql { PRAGMA integrity_check } 96} {ok} 97 98do_test 3.1 { 99 catch {db close} 100 forcedelete test.db test.db-shm test.db-wal 101 sqlite3 db test.db 102 execsql { 103 PRAGMA page_size = 1024; 104 PRAGMA journal_mode = WAL; 105 PRAGMA wal_autocheckpoint=128; 106 PRAGMA journal_size_limit=16384; 107 CREATE TABLE t1(a, b, PRIMARY KEY(a, b)); 108 } 109} {wal 128 16384} 110do_test 3.2 { 111 for {set i 0} {$i<200} {incr i} { 112 execsql { INSERT INTO t1 VALUES(randomblob(500), randomblob(500)) } 113 } 114 file_control_persist_wal db 1 115 db close 116} {} 117do_test walpersist-3.3 { 118 file size test.db-wal 119} {0} 120do_test walpersist-3.4 { 121 sqlite3 db test.db 122 execsql { PRAGMA integrity_check } 123} {ok} 124 125 126finish_test 127