os/persistentdata/persistentstorage/sqlite3api/TEST/TclScript/autovacuum_ioerr2.test
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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