blob: 692728dda48d296a0aa8a3aabeeb6c9730f7b780 [file] [log] [blame]
drh253cea52011-07-26 16:23:25 +00001# 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
dan52091322011-09-24 05:55:36 +000020ifcapable !wal {
21 finish_test
22 return
23}
24
drh253cea52011-07-26 16:23:25 +000025do_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
drh8dd4afa2011-12-08 19:50:32 +000070# Make sure the journal_size_limit works to limit the size of the
drheed42502011-12-16 15:38:52 +000071# 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#
drh8dd4afa2011-12-08 19:50:32 +000075forcedelete 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
drheed42502011-12-16 15:38:52 +000091 concat [file exists test.db-wal] [file size test.db-wal]
92} {1 0}
dane98842f2011-12-16 17:01:04 +000093do_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
drh253cea52011-07-26 16:23:25 +0000125
126finish_test