OLD | NEW |
| (Empty) |
1 # 2001 October 12 | |
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 # Test that "PRAGMA incremental_vacuum" detects and reports database | |
12 # corruption properly. And that "PRAGMA auto_vacuum = INCREMENTAL" | |
13 # does as well. | |
14 # | |
15 | |
16 set testdir [file dirname $argv0] | |
17 source $testdir/tester.tcl | |
18 set testprefix incrcorrupt | |
19 | |
20 # If this build of the library does not support auto-vacuum, omit this | |
21 # whole file. | |
22 ifcapable {!autovacuum} { | |
23 finish_test | |
24 return | |
25 } | |
26 | |
27 do_execsql_test 1.0 { | |
28 PRAGMA auto_vacuum = 2; | |
29 CREATE TABLE t1(a PRIMARY KEY, b); | |
30 | |
31 WITH data(i) AS ( | |
32 SELECT 1 UNION ALL SELECT i+1 FROM data | |
33 ) | |
34 INSERT INTO t1 SELECT i, randomblob(600) FROM data LIMIT 20; | |
35 PRAGMA page_count; | |
36 } {24} | |
37 | |
38 do_execsql_test 1.1 { | |
39 PRAGMA incremental_vacuum; | |
40 } {} | |
41 | |
42 do_test 1.2 { | |
43 db_save | |
44 hexio_write test.db 36 00000019 | |
45 catchsql { PRAGMA incremental_vacuum; } | |
46 } {1 {database disk image is malformed}} | |
47 | |
48 do_test 1.3 { | |
49 set stmt [sqlite3_prepare_v2 db "PRAGMA incremental_vacuum" -1 dummy] | |
50 sqlite3_step $stmt | |
51 } {SQLITE_CORRUPT} | |
52 do_test 1.4 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
53 do_test 1.5 { sqlite3_errmsg db } {database disk image is malformed} | |
54 do_test 1.6 { sqlite3_finalize $stmt } {SQLITE_CORRUPT} | |
55 do_test 1.7 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
56 do_test 1.8 { sqlite3_errmsg db } {database disk image is malformed} | |
57 | |
58 do_test 1.9 { | |
59 set stmt [sqlite3_prepare_v2 db "PRAGMA incremental_vacuum" -1 dummy] | |
60 sqlite3_step $stmt | |
61 } {SQLITE_CORRUPT} | |
62 do_test 1.10 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
63 do_test 1.11 { sqlite3_errmsg db } {database disk image is malformed} | |
64 | |
65 do_test 1.12 { | |
66 set stmt2 [sqlite3_prepare_v2 db "SELECT 1" -1 dummy] | |
67 sqlite3_finalize $stmt2 | |
68 } {SQLITE_OK} | |
69 do_test 1.13 { sqlite3_errcode db } {SQLITE_OK} | |
70 do_test 1.14 { sqlite3_errmsg db } {not an error} | |
71 | |
72 do_test 1.15 { sqlite3_finalize $stmt } {SQLITE_CORRUPT} | |
73 do_test 1.16 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
74 do_test 1.17 { sqlite3_errmsg db } {database disk image is malformed} | |
75 | |
76 #------------------------------------------------------------------------- | |
77 # | |
78 reset_db | |
79 | |
80 do_execsql_test 2.1 { | |
81 PRAGMA auto_vacuum = 1; | |
82 CREATE TABLE t1(a PRIMARY KEY, b); | |
83 WITH data(i) AS ( | |
84 SELECT 1 UNION ALL SELECT i+1 FROM data | |
85 ) | |
86 INSERT INTO t1 SELECT i, randomblob(600) FROM data LIMIT 20; | |
87 PRAGMA page_count; | |
88 } {24} | |
89 | |
90 do_test 2.2 { | |
91 db_save | |
92 set fd [open test.db r+] | |
93 chan truncate $fd [expr 22*1024] | |
94 close $fd | |
95 catchsql { PRAGMA incremental_vacuum; } | |
96 } {1 {database disk image is malformed}} | |
97 | |
98 do_test 2.3 { | |
99 set stmt [sqlite3_prepare_v2 db "PRAGMA auto_vacuum = INCREMENTAL" -1 dummy] | |
100 sqlite3_step $stmt | |
101 } {SQLITE_CORRUPT} | |
102 do_test 2.4 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
103 do_test 2.5 { sqlite3_errmsg db } {database disk image is malformed} | |
104 do_test 2.6 { sqlite3_finalize $stmt } {SQLITE_CORRUPT} | |
105 do_test 2.7 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
106 do_test 2.8 { sqlite3_errmsg db } {database disk image is malformed} | |
107 | |
108 do_test 2.9 { | |
109 set stmt [sqlite3_prepare_v2 db "PRAGMA auto_vacuum = INCREMENTAL" -1 dummy] | |
110 sqlite3_step $stmt | |
111 } {SQLITE_CORRUPT} | |
112 do_test 2.10 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
113 do_test 2.11 { sqlite3_errmsg db } {database disk image is malformed} | |
114 | |
115 do_test 2.12 { | |
116 set stmt2 [sqlite3_prepare_v2 db "SELECT 1" -1 dummy] | |
117 sqlite3_finalize $stmt2 | |
118 } {SQLITE_OK} | |
119 do_test 2.13 { sqlite3_errcode db } {SQLITE_OK} | |
120 do_test 2.14 { sqlite3_errmsg db } {not an error} | |
121 | |
122 do_test 2.15 { sqlite3_finalize $stmt } {SQLITE_CORRUPT} | |
123 do_test 2.16 { sqlite3_errcode db } {SQLITE_CORRUPT} | |
124 do_test 2.17 { sqlite3_errmsg db } {database disk image is malformed} | |
125 | |
126 finish_test | |
127 | |
OLD | NEW |