Fix a problem causing the recovery extension to use excessive memory and CPU time...
[sqlite.git] / test / autovacuum_ioerr2.test
blob891d00eb06bce225482c4f49a8d573edffa27bcf
1 # 2001 October 12
3 # The author disclaims copyright to this source code.  In place of
4 # a legal notice, here is a blessing:
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.
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.
18 # $Id: autovacuum_ioerr2.test,v 1.7 2008/07/12 14:52:20 drh Exp $
20 set testdir [file dirname $argv0]
21 source $testdir/tester.tcl
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
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;
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;
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;
78 forcedelete 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     forcedelete test.db
103     forcedelete test.db-journal
104     forcecopy 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   }
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;
132 finish_test