|
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 # This file implements regression tests for SQLite library. The |
|
12 # focus of this file is testing for correct handling of I/O errors |
|
13 # such as writes failing because the disk is full. |
|
14 # |
|
15 # The tests in this file use special facilities that are only |
|
16 # available in the SQLite test fixture. |
|
17 # |
|
18 # $Id: autovacuum_ioerr2.test,v 1.7 2008/07/12 14:52:20 drh Exp $ |
|
19 |
|
20 set testdir [file dirname $argv0] |
|
21 source $testdir/tester.tcl |
|
22 |
|
23 # If this build of the library does not support auto-vacuum, omit this |
|
24 # whole file. |
|
25 ifcapable {!autovacuum} { |
|
26 finish_test |
|
27 return |
|
28 } |
|
29 |
|
30 do_ioerr_test autovacuum-ioerr2-1 -sqlprep { |
|
31 PRAGMA auto_vacuum = 1; |
|
32 CREATE TABLE abc(a); |
|
33 INSERT INTO abc VALUES(randstr(1500,1500)); |
|
34 } -sqlbody { |
|
35 CREATE TABLE abc2(a); |
|
36 BEGIN; |
|
37 DELETE FROM abc; |
|
38 INSERT INTO abc VALUES(randstr(1500,1500)); |
|
39 CREATE TABLE abc3(a); |
|
40 COMMIT; |
|
41 } |
|
42 |
|
43 do_ioerr_test autovacuum-ioerr2-2 -tclprep { |
|
44 execsql { |
|
45 PRAGMA auto_vacuum = 1; |
|
46 PRAGMA cache_size = 10; |
|
47 BEGIN; |
|
48 CREATE TABLE abc(a); |
|
49 INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 4 is overflow |
|
50 INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 5 is overflow |
|
51 } |
|
52 for {set i 0} {$i<150} {incr i} { |
|
53 execsql { |
|
54 INSERT INTO abc VALUES(randstr(100,100)); |
|
55 } |
|
56 } |
|
57 execsql COMMIT |
|
58 } -sqlbody { |
|
59 BEGIN; |
|
60 DELETE FROM abc WHERE length(a)>100; |
|
61 UPDATE abc SET a = randstr(90,90); |
|
62 CREATE TABLE abc3(a); |
|
63 COMMIT; |
|
64 } |
|
65 |
|
66 do_ioerr_test autovacuum-ioerr2-3 -sqlprep { |
|
67 PRAGMA auto_vacuum = 1; |
|
68 CREATE TABLE abc(a); |
|
69 CREATE TABLE abc2(b); |
|
70 } -sqlbody { |
|
71 BEGIN; |
|
72 INSERT INTO abc2 VALUES(10); |
|
73 DROP TABLE abc; |
|
74 COMMIT; |
|
75 DROP TABLE abc2; |
|
76 } |
|
77 |
|
78 file delete -force backup.db |
|
79 ifcapable subquery { |
|
80 do_ioerr_test autovacuum-ioerr2-4 -tclprep { |
|
81 if {![file exists backup.db]} { |
|
82 sqlite3 dbb backup.db |
|
83 execsql { |
|
84 PRAGMA auto_vacuum = 1; |
|
85 BEGIN; |
|
86 CREATE TABLE abc(a); |
|
87 INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 4 is overflow |
|
88 INSERT INTO abc VALUES(randstr(1100,1100)); -- Page 5 is overflow |
|
89 } dbb |
|
90 for {set i 0} {$i<2500} {incr i} { |
|
91 execsql { |
|
92 INSERT INTO abc VALUES(randstr(100,100)); |
|
93 } dbb |
|
94 } |
|
95 execsql { |
|
96 COMMIT; |
|
97 PRAGMA cache_size = 10; |
|
98 } dbb |
|
99 dbb close |
|
100 } |
|
101 db close |
|
102 file delete -force test.db |
|
103 file delete -force test.db-journal |
|
104 copy_file backup.db test.db |
|
105 set ::DB [sqlite3 db test.db] |
|
106 execsql { |
|
107 PRAGMA cache_size = 10; |
|
108 } |
|
109 } -sqlbody { |
|
110 BEGIN; |
|
111 DELETE FROM abc WHERE oid < 3; |
|
112 UPDATE abc SET a = randstr(100,100) WHERE oid > 2300; |
|
113 UPDATE abc SET a = randstr(1100,1100) WHERE oid = |
|
114 (select max(oid) from abc); |
|
115 COMMIT; |
|
116 } |
|
117 } |
|
118 |
|
119 do_ioerr_test autovacuum-ioerr2-1 -sqlprep { |
|
120 PRAGMA auto_vacuum = 1; |
|
121 CREATE TABLE abc(a); |
|
122 INSERT INTO abc VALUES(randstr(1500,1500)); |
|
123 } -sqlbody { |
|
124 CREATE TABLE abc2(a); |
|
125 BEGIN; |
|
126 DELETE FROM abc; |
|
127 INSERT INTO abc VALUES(randstr(1500,1500)); |
|
128 CREATE TABLE abc3(a); |
|
129 COMMIT; |
|
130 } |
|
131 |
|
132 finish_test |