wasCSharpSQLite – Blame information for rev 7
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 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 | |||
13 | set testdir [file dirname $argv0] |
||
14 | source $testdir/tester.tcl |
||
15 | source $testdir/lock_common.tcl |
||
16 | source $testdir/malloc_common.tcl |
||
17 | |||
18 | set otn 0 |
||
19 | testvfs tv -default 1 |
||
20 | foreach 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 | } |
||
116 | db close |
||
117 | tv 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 | # |
||
126 | do_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} |
||
137 | do_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 | |||
151 | finish_test |