12
12
# focus of this file is testing for correct handling of disk full
15
# $Id: diskfull.test,v 1.3 2005/09/09 10:46:19 drh Exp $
15
# $Id: diskfull.test,v 1.7 2007/08/24 03:51:34 drh Exp $
17
17
set testdir [file dirname $argv0]
18
18
source $testdir/tester.tcl
20
set sqlite_io_error_persist 0
21
set sqlite_io_error_hit 0
22
set sqlite_io_error_pending 0
20
23
do_test diskfull-1.1 {
22
25
CREATE TABLE t1(x);
48
51
} {1 {database or disk is full}}
49
52
set sqlite_diskfull_pending 0
53
set sqlite_io_error_hit 0
50
54
integrity_check diskfull-1.6
56
do_test diskfull-2.$i.1 {
57
set sqlite_diskfull_pending $i
59
set r [catchsql {VACUUM}]
60
if {!$sqlite_diskfull} {
61
set r {1 {database or disk is full}}
64
if {$r=="1 {disk I/O error}"} {
65
set r {1 {database or disk is full}}
68
} {1 {database or disk is full}}
69
set sqlite_diskfull_pending 0
72
integrity_check diskfull-2.$i.2
56
proc do_diskfull_test {prefix sql} {
62
do_test ${prefix}.$::i.1 {
63
set ::sqlite_diskfull_pending $::i
64
set ::sqlite_diskfull 0
65
set r [catchsql $::sql]
66
if {!$::sqlite_diskfull} {
67
set r {1 {database or disk is full}}
70
if {$r=="1 {disk I/O error}"} {
71
set r {1 {database or disk is full}}
74
} {1 {database or disk is full}}
75
set ::sqlite_diskfull_pending 0
78
integrity_check ${prefix}.$::i.2
82
do_diskfull_test diskfull-2 VACUUM
85
# file delete -force test.db
86
# file delete -force test.db-journal
89
# do_test diskfull-3.1 {
91
# PRAGMA default_cache_size = 10;
92
# CREATE TABLE t3(a, b, UNIQUE(a, b));
93
# INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) );
94
# INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
95
# INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
96
# INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
97
# INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
98
# INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
99
# INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
100
# INSERT INTO t3 SELECT randstr(100, 100), randstr(100, 100) FROM t3;
102
# SET b = (SELECT a FROM t3 WHERE rowid = (SELECT max(rowid)-1 FROM t3))
103
# WHERE rowid = (SELECT max(rowid) FROM t3);
108
# do_diskfull_test diskfull-3.2 {
110
# INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) );
111
# UPDATE t3 SET a = b;