• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 2010 June 15
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
13set testdir [file dirname $argv0]
14source $testdir/tester.tcl
15source $testdir/lock_common.tcl
16source $testdir/malloc_common.tcl
17
18set otn 0
19testvfs tv -default 1
20foreach code [list {
21  set s 512
22} {
23  set s 1024
24  set sql { PRAGMA journal_mode = memory }
25} {
26  set s 1024
27  set sql {
28    PRAGMA journal_mode = memory;
29    PRAGMA locking_mode = exclusive;
30  }
31} {
32  set s 2048
33  tv devchar safe_append
34} {
35  set s 4096
36} {
37  set s 4096
38  set sql { PRAGMA journal_mode = WAL }
39} {
40  set s 4096
41  set sql { PRAGMA auto_vacuum = 1 }
42} {
43  set s 8192
44  set sql { PRAGMA synchronous = off }
45}] {
46
47  incr otn
48  set sql ""
49  tv devchar {}
50  eval $code
51  tv sectorsize $s
52
53  do_test pager2-1.$otn.0 {
54    faultsim_delete_and_reopen
55    execsql $sql
56    execsql {
57      PRAGMA cache_size = 10;
58      CREATE TABLE t1(i INTEGER PRIMARY KEY, j blob);
59    }
60  } {}
61
62  set tn 0
63  set lowpoint 0
64  foreach x {
65    100 x 0 100
66  x
67    70 22 96 59 96 50 22 56 21 16 37 64 43 40  0 38 22 38 55  0  6
68    43 62 32 93 54 18 13 29 45 66 29 25 61 31 53 82 75 25 96 86 10 69
69     2 29  6 60 80 95 42 82 85 50 68 96 90 39 78 69 87 97 48 74 65 43
70  x
71    86 34 26 50 41 85 58 44 89 22  6 51 45 46 58 32 97  6  1 12 32  2
72    69 39 48 71 33 31  5 58 90 43 24 54 12  9 18 57  4 38 91 42 27 45
73    50 38 56 29 10  0 26 37 83  1 78 15 47 30 75 62 46 29 68  5 30  4
74    27 96 33 95 79 75 56 10 29 70 32 75 52 88  5 36 50 57 46 63 88 65
75  x
76    44 95 64 20 24 35 69 61 61  2 35 92 42 46 23 98 78  1 38 72 79 35
77    94 37 13 59  5 93 27 58 80 75 58  7 67 13 10 76 84  4  8 70 81 45
78     8 41 98  5 60 26 92 29 91 90  2 62 40  4  5 22 80 15 83 76 52 88
79    29  5 68 73 72  7 54 17 89 32 81 94 51 28 53 71  8 42 54 59 70 79
80  x
81  } {
82    incr tn
83    set now [db one {SELECT count(i) FROM t1}]
84    if {$x == "x"} {
85      execsql { COMMIT ; BEGIN }
86      set lowpoint $now
87      do_test pager2.1.$otn.$tn {
88        sqlite3 db2 test.db
89        execsql {
90          SELECT COALESCE(max(i), 0) FROM t1;
91          PRAGMA integrity_check;
92        }
93      } [list $lowpoint ok]
94      db2 close
95    } else {
96      if {$now > $x } {
97        if { $x>=$lowpoint } {
98          execsql "ROLLBACK TO sp_$x"
99        } else {
100          execsql "DELETE FROM t1 WHERE i>$x"
101          set lowpoint $x
102        }
103      } elseif {$now < $x} {
104        for {set k $now} {$k < $x} {incr k} {
105          execsql "SAVEPOINT sp_$k"
106          execsql { INSERT INTO t1(j) VALUES(randomblob(1500)) }
107        }
108      }
109      do_execsql_test pager2.1.$otn.$tn {
110        SELECT COALESCE(max(i), 0) FROM t1;
111        PRAGMA integrity_check;
112      } [list $x ok]
113    }
114  }
115}
116db close
117tv delete
118
119
120#-------------------------------------------------------------------------
121#
122# pager2-2.1: Test a ROLLBACK with journal_mode=off.
123# pager2-2.2: Test shrinking the database (auto-vacuum) with
124#             journal_mode=off
125#
126do_test pager2-2.1 {
127  faultsim_delete_and_reopen
128  execsql {
129    CREATE TABLE t1(a, b);
130    PRAGMA journal_mode = off;
131    BEGIN;
132      INSERT INTO t1 VALUES(1, 2);
133    ROLLBACK;
134    SELECT * FROM t1;
135  }
136} {off}
137do_test pager2-2.2 {
138  faultsim_delete_and_reopen
139  execsql {
140    PRAGMA auto_vacuum = incremental;
141    PRAGMA page_size = 1024;
142    PRAGMA journal_mode = off;
143    CREATE TABLE t1(a, b);
144    INSERT INTO t1 VALUES(zeroblob(5000), zeroblob(5000));
145    DELETE FROM t1;
146    PRAGMA incremental_vacuum;
147  }
148  file size test.db
149} {3072}
150
151finish_test
152