Annotation of embedaddon/sqlite3/test/savepoint4.test, revision 1.1

1.1     ! misho       1: # 2008 December 15
        !             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: #
        !            12: # $Id: savepoint4.test,v 1.7 2009/06/09 15:25:33 danielk1977 Exp $
        !            13: 
        !            14: set testdir [file dirname $argv0]
        !            15: source $testdir/tester.tcl
        !            16: 
        !            17: ifcapable !crashtest {
        !            18:   finish_test
        !            19:   return
        !            20: }
        !            21: 
        !            22: proc signature {} {
        !            23:   return [db eval {SELECT count(*), md5sum(x) FROM t1}]
        !            24: }
        !            25: 
        !            26: set ITERATIONS 25                   ;# Number of iterations for savepoint4-1
        !            27: set ITERATIONS2 13                  ;# Number of iterations for savepoint4-2
        !            28: expr srand(0)
        !            29: 
        !            30: do_test savepoint4-1 {
        !            31:   execsql {
        !            32:     PRAGMA cache_size=10;
        !            33:     BEGIN;
        !            34:     CREATE TABLE t1(x TEXT);
        !            35:     INSERT INTO t1 VALUES(randstr(10,400));
        !            36:     INSERT INTO t1 VALUES(randstr(10,400));
        !            37:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            38:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            39:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            40:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            41:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            42:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            43:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            44:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            45:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            46:     COMMIT;
        !            47:     SELECT count(*) FROM t1;
        !            48:   }
        !            49: } {1024}
        !            50: 
        !            51: 
        !            52: unset -nocomplain ::sig
        !            53: 
        !            54: for {set ii 1} {$ii<=$ITERATIONS} {incr ii} {
        !            55:   set ::sig [signature]
        !            56: 
        !            57:   for {set iDelay 1 ; set crashed 1} {$crashed} {incr iDelay} {
        !            58: 
        !            59:     do_test savepoint4-1.$ii.1.$iDelay {
        !            60:       set ret [crashsql -delay $iDelay -file test.db-journal {
        !            61:         PRAGMA cache_size = 20;
        !            62:         SAVEPOINT one;
        !            63:           DELETE FROM t1 WHERE random()%2==0;
        !            64:           SAVEPOINT two;
        !            65:             INSERT INTO t1 SELECT randstr(10,10)||x FROM t1;
        !            66:            ROLLBACK TO two;
        !            67:             UPDATE t1 SET x = randstr(10, 400) WHERE random()%10;
        !            68:           RELEASE two;
        !            69:         ROLLBACK TO one;
        !            70:         RELEASE one;
        !            71:       }]
        !            72:       signature
        !            73:     } $::sig
        !            74: 
        !            75:     set crashed [lindex $ret 0]
        !            76:     integrity_check savepoint4-1.$ii.1.$iDelay.integrity
        !            77:   }
        !            78: 
        !            79:   do_test savepoint4-1.$ii.2 {
        !            80:     execsql {
        !            81:       DELETE FROM t1 WHERE random()%10==0;
        !            82:       INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0;
        !            83:     }
        !            84:   } {}
        !            85: }
        !            86: 
        !            87: do_test savepoint4-2 {
        !            88:   execsql {
        !            89:     PRAGMA cache_size=10;
        !            90:     DROP TABLE IF EXISTS t1;
        !            91:     BEGIN;
        !            92:     CREATE TABLE t1(x TEXT);
        !            93:     CREATE INDEX i1 ON t1(x);
        !            94:     INSERT INTO t1 VALUES(randstr(10,400));
        !            95:     INSERT INTO t1 VALUES(randstr(10,400));
        !            96:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            97:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            98:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !            99:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !           100:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !           101:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !           102:     INSERT INTO t1 SELECT randstr(10,400) FROM t1;
        !           103:     COMMIT;
        !           104:     SELECT count(*) FROM t1;
        !           105:   }
        !           106: } {256}
        !           107: 
        !           108: for {set ii 1} {$ii<=$ITERATIONS2} {incr ii} {
        !           109:   set ::sig [signature]
        !           110:   set file test.db-journal
        !           111: 
        !           112:   for {set iDelay 1 ; set crashed 1} {$crashed} {incr iDelay} {
        !           113: 
        !           114:     do_test savepoint4-2.$ii.1.$iDelay {
        !           115: 
        !           116:       set ret [crashsql -delay $iDelay -file $file {
        !           117:         SAVEPOINT one;
        !           118:           INSERT INTO t1 SELECT * FROM t1 WHERE rowid<50;
        !           119:          ROLLBACK TO one;
        !           120:           INSERT INTO t1 SELECT * FROM t1 WHERE rowid<50;
        !           121:           SAVEPOINT two;
        !           122:             DELETE FROM t1 WHERE (random()%10)==0;
        !           123:             SAVEPOINT three;
        !           124:               DELETE FROM t1 WHERE (random()%10)==0;
        !           125:               SAVEPOINT four;
        !           126:                 DELETE FROM t1 WHERE (random()%10)==0;
        !           127:           RELEASE two;
        !           128: 
        !           129:           SAVEPOINT three;
        !           130:             UPDATE t1 SET x = substr(x||x, 12, 100000) WHERE (rowid%12)==0;
        !           131:             SAVEPOINT four;
        !           132:               UPDATE t1 SET x = substr(x||x, 14, 100000) WHERE (rowid%14)==0;
        !           133:            ROLLBACK TO three;
        !           134:             UPDATE t1 SET x = substr(x||x, 13, 100000) WHERE (rowid%13)==0;
        !           135:           RELEASE three;
        !           136: 
        !           137:         DELETE FROM t1 WHERE rowid > (
        !           138:           SELECT rowid FROM t1 ORDER BY rowid ASC LIMIT 1 OFFSET 256
        !           139:         );
        !           140:         RELEASE one;
        !           141:       }]
        !           142: 
        !           143:       set crashed [lindex $ret 0]
        !           144:       if {$crashed} {
        !           145:         signature
        !           146:       } else {
        !           147:         set ::sig
        !           148:       }
        !           149:     } $::sig
        !           150: 
        !           151:     integrity_check savepoint4-2.$ii.1.$iDelay.integrity
        !           152: 
        !           153:     if {$crashed == 0 && $file == "test.db-journal"} {
        !           154:       set crashed 1
        !           155:       set iDelay 0
        !           156:       set file test.db
        !           157:       set ::sig [signature]
        !           158:     }
        !           159:   }
        !           160: 
        !           161:   do_test savepoint4-2.$ii.2 {
        !           162:     execsql {
        !           163:       DELETE FROM t1 WHERE random()%10==0;
        !           164:       INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0;
        !           165:     }
        !           166:   } {}
        !           167: }
        !           168: 
        !           169: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>