OLD | NEW |
| (Empty) |
1 # 2007 December 19 | |
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 # This file implements regression tests for SQLite library. The | |
12 # focus of this file is testing for correct handling of I/O errors | |
13 # during incremental vacuum with a shared cache. | |
14 # | |
15 # $Id: ioerr4.test,v 1.2 2008/05/08 01:11:42 drh Exp $ | |
16 | |
17 set testdir [file dirname $argv0] | |
18 source $testdir/tester.tcl | |
19 | |
20 # This test requires both shared cache and incremental vacuum. | |
21 # | |
22 ifcapable {!shared_cache || !autovacuum} { | |
23 finish_test | |
24 return | |
25 } | |
26 | |
27 # Enable shared cache mode and incremental vacuum. | |
28 # | |
29 do_test ioerr4-1.1 { | |
30 db close | |
31 set ::enable_shared_cache [sqlite3_enable_shared_cache 1] | |
32 } {0} | |
33 do_test ioerr4-1.2 { | |
34 forcedelete test.db test.db-journal | |
35 sqlite3 db test.db | |
36 sqlite3 db2 test.db | |
37 db eval { | |
38 PRAGMA auto_vacuum=INCREMENTAL; | |
39 CREATE TABLE a(i INTEGER, b BLOB); | |
40 } | |
41 db2 eval { | |
42 SELECT name FROM sqlite_master | |
43 } | |
44 } {a} | |
45 do_test ioerr4-1.3 { | |
46 db eval { | |
47 PRAGMA auto_vacuum; | |
48 } | |
49 } {2} | |
50 | |
51 # Insert and delete many records in order to put lots of pages | |
52 # on the freelist. | |
53 # | |
54 do_test ioerr4-1.4 { | |
55 db eval { | |
56 INSERT INTO a VALUES(1, zeroblob(2000)); | |
57 INSERT INTO a VALUES(2, zeroblob(2000)); | |
58 INSERT INTO a SELECT i+2, zeroblob(2000) FROM a; | |
59 INSERT INTO a SELECT i+4, zeroblob(2000) FROM a; | |
60 INSERT INTO a SELECT i+8, zeroblob(2000) FROM a; | |
61 INSERT INTO a SELECT i+16, zeroblob(2000) FROM a; | |
62 SELECT count(*) FROM a; | |
63 } | |
64 } {32} | |
65 do_test ioerr4-1.5 { | |
66 db eval { | |
67 PRAGMA freelist_count | |
68 } | |
69 } {0} | |
70 do_test ioerr4-1.6 { | |
71 db eval { | |
72 DELETE FROM a; | |
73 PRAGMA freelist_count; | |
74 } | |
75 } {64} | |
76 | |
77 # Set up for an I/O error on incremental vacuum | |
78 # with two connections on shared cache. | |
79 # | |
80 db close | |
81 db2 close | |
82 forcecopy test.db test.db-bu | |
83 do_ioerr_test ioerr4-2 -tclprep { | |
84 catch {db2 close} | |
85 db close | |
86 forcedelete test.db test.db-journal | |
87 forcecopy test.db-bu test.db | |
88 sqlite3_enable_shared_cache 1 | |
89 set ::DB [sqlite3 db test.db; sqlite3_connection_pointer db] | |
90 db eval {PRAGMA auto_vacuum=INCREMENTAL} | |
91 sqlite3 db2 test.db | |
92 } -tclbody { | |
93 db eval {PRAGMA incremental_vacuum(5)} | |
94 } | |
95 | |
96 db2 close | |
97 forcedelete test.db-bu | |
98 sqlite3_enable_shared_cache $::enable_shared_cache | |
99 | |
100 finish_test | |
OLD | NEW |