OLD | NEW |
1 # 2007 March 24 | 1 # 2007 March 24 |
2 # | 2 # |
3 # The author disclaims copyright to this source code. In place of | 3 # The author disclaims copyright to this source code. In place of |
4 # a legal notice, here is a blessing: | 4 # a legal notice, here is a blessing: |
5 # | 5 # |
6 # May you do good and not evil. | 6 # May you do good and not evil. |
7 # May you find forgiveness for yourself and forgive others. | 7 # May you find forgiveness for yourself and forgive others. |
8 # May you share freely, never taking more than you give. | 8 # May you share freely, never taking more than you give. |
9 # | 9 # |
10 #*********************************************************************** | 10 #*********************************************************************** |
11 # This file implements regression tests for SQLite library. | 11 # This file implements regression tests for SQLite library. |
12 # | 12 # |
13 # $Id: exclusive2.test,v 1.10 2008/11/27 02:22:11 drh Exp $ | 13 # $Id: exclusive2.test,v 1.10 2008/11/27 02:22:11 drh Exp $ |
14 | 14 |
15 set testdir [file dirname $argv0] | 15 set testdir [file dirname $argv0] |
16 source $testdir/tester.tcl | 16 source $testdir/tester.tcl |
17 | 17 |
18 # Do not use a codec for tests in this file, as the database file is | 18 # Do not use a codec for tests in this file, as the database file is |
19 # manipulated directly using tcl scripts (using the [hexio_write] command). | 19 # manipulated directly using tcl scripts (using the [hexio_write] command). |
20 # | 20 # |
21 do_not_use_codec | 21 do_not_use_codec |
22 | 22 |
23 ifcapable {!pager_pragmas} { | 23 ifcapable {!pager_pragmas} { |
24 finish_test | 24 finish_test |
25 return | 25 return |
26 } | 26 } |
27 | 27 |
| 28 # Tests in this file verify that locking_mode=exclusive causes SQLite to |
| 29 # use cached pages even if the database is changed on disk. This doesn't |
| 30 # work with mmap. |
| 31 if {[permutation]=="mmap"} { |
| 32 finish_test |
| 33 return |
| 34 } |
| 35 |
28 # This module does not work right if the cache spills at unexpected | 36 # This module does not work right if the cache spills at unexpected |
29 # moments. So disable the soft-heap-limit. | 37 # moments. So disable the soft-heap-limit. |
30 # | 38 # |
31 sqlite3_soft_heap_limit 0 | 39 sqlite3_soft_heap_limit 0 |
32 | 40 |
33 proc pagerChangeCounter {filename new {fd ""}} { | 41 proc pagerChangeCounter {filename new {fd ""}} { |
34 if {$fd==""} { | 42 if {$fd==""} { |
35 set fd [open $filename RDWR] | 43 set fd [open $filename RDWR] |
36 fconfigure $fd -translation binary -encoding binary | 44 fconfigure $fd -translation binary -encoding binary |
37 set needClose 1 | 45 set needClose 1 |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 | 260 |
253 #-------------------------------------------------------------------- | 261 #-------------------------------------------------------------------- |
254 # These tests - exclusive2-3.X - verify that the pager change-counter | 262 # These tests - exclusive2-3.X - verify that the pager change-counter |
255 # is only incremented by the first change when in exclusive access | 263 # is only incremented by the first change when in exclusive access |
256 # mode. In normal mode, the change-counter is incremented once | 264 # mode. In normal mode, the change-counter is incremented once |
257 # per write-transaction. | 265 # per write-transaction. |
258 # | 266 # |
259 | 267 |
260 db close | 268 db close |
261 catch {close $::fd} | 269 catch {close $::fd} |
262 file delete -force test.db | 270 forcedelete test.db |
263 file delete -force test.db-journal | 271 forcedelete test.db-journal |
264 | 272 |
265 do_test exclusive2-3.0 { | 273 do_test exclusive2-3.0 { |
266 sqlite3 db test.db | 274 sqlite3 db test.db |
267 execsql { | 275 execsql { |
268 BEGIN; | 276 BEGIN; |
269 CREATE TABLE t1(a UNIQUE); | 277 CREATE TABLE t1(a UNIQUE); |
270 INSERT INTO t1 VALUES(randstr(200, 200)); | 278 INSERT INTO t1 VALUES(randstr(200, 200)); |
271 INSERT INTO t1 VALUES(randstr(200, 200)); | 279 INSERT INTO t1 VALUES(randstr(200, 200)); |
272 COMMIT; | 280 COMMIT; |
273 } | 281 } |
(...skipping 12 matching lines...) Expand all Loading... |
286 readPagerChangeCounter test.db | 294 readPagerChangeCounter test.db |
287 } {3} | 295 } {3} |
288 do_test exclusive2-3.3 { | 296 do_test exclusive2-3.3 { |
289 execsql { | 297 execsql { |
290 PRAGMA locking_mode = exclusive; | 298 PRAGMA locking_mode = exclusive; |
291 INSERT INTO t1 VALUES(randstr(200, 200)); | 299 INSERT INTO t1 VALUES(randstr(200, 200)); |
292 } | 300 } |
293 readPagerChangeCounter test.db | 301 readPagerChangeCounter test.db |
294 } {4} | 302 } {4} |
295 do_test exclusive2-3.4 { | 303 do_test exclusive2-3.4 { |
296 breakpoint | |
297 execsql { | 304 execsql { |
298 INSERT INTO t1 VALUES(randstr(200, 200)); | 305 INSERT INTO t1 VALUES(randstr(200, 200)); |
299 } | 306 } |
300 readPagerChangeCounter test.db | 307 readPagerChangeCounter test.db |
301 } {4} | 308 } {4} |
302 do_test exclusive2-3.5 { | 309 do_test exclusive2-3.5 { |
303 execsql { | 310 execsql { |
304 PRAGMA locking_mode = normal; | 311 PRAGMA locking_mode = normal; |
305 INSERT INTO t1 VALUES(randstr(200, 200)); | 312 INSERT INTO t1 VALUES(randstr(200, 200)); |
306 } | 313 } |
307 readPagerChangeCounter test.db | 314 readPagerChangeCounter test.db |
308 } {4} | 315 } {4} |
309 do_test exclusive2-3.6 { | 316 do_test exclusive2-3.6 { |
310 execsql { | 317 execsql { |
311 INSERT INTO t1 VALUES(randstr(200, 200)); | 318 INSERT INTO t1 VALUES(randstr(200, 200)); |
312 } | 319 } |
313 readPagerChangeCounter test.db | 320 readPagerChangeCounter test.db |
314 } {5} | 321 } {5} |
315 sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) | 322 sqlite3_soft_heap_limit $cmdlinearg(soft-heap-limit) |
316 | 323 |
317 finish_test | 324 finish_test |
OLD | NEW |