~ubuntu-branches/ubuntu/maverick/sqlite3/maverick-updates

« back to all changes in this revision

Viewing changes to test/diskfull.test

  • Committer: Bazaar Package Importer
  • Author(s): Laszlo Boszormenyi (GCS)
  • Date: 2008-10-01 20:16:18 UTC
  • mfrom: (3.1.20 intrepid)
  • Revision ID: james.westby@ubuntu.com-20081001201618-yfvqqj1qs29wdtcc
Tags: 3.5.9-5
Backport fix for distinct on indexes (closes: #500792).

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
# focus of this file is testing for correct handling of disk full
13
13
# errors.
14
14
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 $
16
16
 
17
17
set testdir [file dirname $argv0]
18
18
source $testdir/tester.tcl
19
19
 
 
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 {
21
24
  execsql {
22
25
    CREATE TABLE t1(x);
47
50
  }
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
51
55
 
52
 
set go 1
53
 
set i 0
54
 
while {$go} {
55
 
  incr i
56
 
  do_test diskfull-2.$i.1 {
57
 
    set sqlite_diskfull_pending $i
58
 
    set sqlite_diskfull 0
59
 
    set r [catchsql {VACUUM}]
60
 
    if {!$sqlite_diskfull} {
61
 
      set r {1 {database or disk is full}}
62
 
      set go 0
63
 
    }
64
 
    if {$r=="1 {disk I/O error}"} {
65
 
      set r {1 {database or disk is full}}
66
 
    }
67
 
    set r
68
 
  } {1 {database or disk is full}}
69
 
  set sqlite_diskfull_pending 0
70
 
  db close
71
 
  sqlite3 db test.db
72
 
  integrity_check diskfull-2.$i.2
 
56
proc do_diskfull_test {prefix sql} {
 
57
  set ::go 1
 
58
  set ::sql $sql
 
59
  set ::i 1
 
60
  while {$::go} {
 
61
    incr ::i
 
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}}
 
68
        set ::go 0
 
69
      }
 
70
      if {$r=="1 {disk I/O error}"} {
 
71
        set r {1 {database or disk is full}}
 
72
      }
 
73
      set r
 
74
    } {1 {database or disk is full}}
 
75
    set ::sqlite_diskfull_pending 0
 
76
    db close
 
77
    sqlite3 db test.db
 
78
    integrity_check ${prefix}.$::i.2
 
79
  }
73
80
}
74
81
 
 
82
do_diskfull_test diskfull-2 VACUUM
 
83
 
 
84
# db close
 
85
# file delete -force test.db
 
86
# file delete -force test.db-journal
 
87
# sqlite3 db test.db
 
88
 
89
# do_test diskfull-3.1 {
 
90
#   execsql {
 
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;
 
101
#     UPDATE t3 
 
102
#     SET b = (SELECT a FROM t3 WHERE rowid = (SELECT max(rowid)-1 FROM t3))
 
103
#     WHERE rowid = (SELECT max(rowid) FROM t3);
 
104
#     PRAGMA cache_size;
 
105
#   }
 
106
# } {10}
 
107
# breakpoint
 
108
# do_diskfull_test diskfull-3.2 {
 
109
#   BEGIN;
 
110
#     INSERT INTO t3 VALUES( randstr(100, 100), randstr(100, 100) );
 
111
#     UPDATE t3 SET a = b;
 
112
#   COMMIT;
 
113
# }
 
114
 
75
115
finish_test