-C Add\ssome\scrash-tests\sfor\ssavepoint.\sFix\sa\sbug\srevealed\sby\sthese\stests.\s(CVS\s6043)
-D 2008-12-19T16:31:11
+C Add\sextra\scrash\stest\scases\sthat\sstress\sthe\ssavepoint\smechanism\sto\ssavepoint4.test.\sCurrently,\sthese\stests\sare\scausing\sdatabase\scorruption\swhich\s(obviously)\sneeds\sto\sbe\sfixed.\s(CVS\s6044)
+D 2008-12-19T18:45:53
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in f7e4c81c347b04f7b0f1c1b081a168645d7b8af7
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F test/savepoint.test 24b7d67971c0b7a8d22ba1cabbfd846e72f21594
F test/savepoint2.test 65fed3f179cff053e0a75864b1afc13e100fce1f
F test/savepoint3.test b3c9aa5af3f777ccb8b9e15597c75c93eb5bc369
-F test/savepoint4.test 327937672df4511d8a61fd20fd6f21661119a45b
+F test/savepoint4.test 1dfe4e6a089a44e50bdfaa5a723603d0973eb1a8
F test/schema.test a8b000723375fd42c68d310091bdbd744fde647c
F test/schema2.test 35e1c9696443d6694c8980c411497c2b5190d32e
F test/select1.test d0a4cad954fd41c030ec16ffbd2d08a4c0548742
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P ed81ad5a5d22304a4d96e778e8e9094f74c461c0
-R 8635252259ed45c0604b104373f9fbca
+P 6f36c16678b6e3baa5a9d9ceba1a756a8034f3e1
+R 2a5a11863cbc6dc85f1a72ca45278583
U danielk1977
-Z 13ba02f495748ab97267c0a69d578609
+Z f91b2e50bc859a782a332b4d8be666cb
#
#***********************************************************************
#
-# $Id: savepoint4.test,v 1.1 2008/12/19 16:31:12 danielk1977 Exp $
+# $Id: savepoint4.test,v 1.2 2008/12/19 18:45:53 danielk1977 Exp $
set testdir [file dirname $argv0]
source $testdir/tester.tcl
proc signature {} {
- return [db eval {SELECT count(*), md5sum(x) FROM t3}]
+ return [db eval {SELECT count(*), md5sum(x) FROM t1}]
}
+set ITERATIONS 3
+
expr srand(0)
do_test savepoint4-1 {
execsql {
PRAGMA cache_size=10;
BEGIN;
- CREATE TABLE t3(x TEXT);
- INSERT INTO t3 VALUES(randstr(10,400));
- INSERT INTO t3 VALUES(randstr(10,400));
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
- INSERT INTO t3 SELECT randstr(10,400) FROM t3;
+ CREATE TABLE t1(x TEXT);
+ INSERT INTO t1 VALUES(randstr(10,400));
+ INSERT INTO t1 VALUES(randstr(10,400));
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
COMMIT;
- SELECT count(*) FROM t3;
+ SELECT count(*) FROM t1;
}
} {1024}
unset -nocomplain ::sig
-for {set ii 1} {$ii<25} {incr ii} {
+for {set ii 1} {$ii<=$ITERATIONS} {incr ii} {
set ::sig [signature]
- set crashed 1
- for {set iDelay 1} {$crashed} {incr iDelay} {
- do_test savepoint4-$ii.1.$iDelay {
+ for {set iDelay 1 ; set crashed 1} {$crashed} {incr iDelay} {
+
+ do_test savepoint4-1.$ii.1.$iDelay {
set ret [crashsql -delay $iDelay -file test.db-journal {
PRAGMA cache_size = 20;
SAVEPOINT one;
- DELETE FROM t3 WHERE random()%2==0;
+ DELETE FROM t1 WHERE random()%2==0;
SAVEPOINT two;
- INSERT INTO t3 SELECT randstr(10,10)||x FROM t3;
+ INSERT INTO t1 SELECT randstr(10,10)||x FROM t1;
ROLLBACK TO two;
- UPDATE t3 SET x = randstr(10, 400) WHERE random()%10;
+ UPDATE t1 SET x = randstr(10, 400) WHERE random()%10;
RELEASE two;
ROLLBACK TO one;
+ RELEASE one;
}]
signature
} $::sig
+
set crashed [lindex $ret 0]
- integrity_check savepoint4-$ii.1.$iDelay.integrity
+ integrity_check savepoint4-1.$ii.1.$iDelay.integrity
+ }
+
+ do_test savepoint4-1.$ii.2 {
+ execsql {
+ DELETE FROM t1 WHERE random()%10==0;
+ INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0;
+ }
+ } {}
+}
+
+do_test savepoint4-2 {
+ execsql {
+ PRAGMA cache_size=10;
+ DROP TABLE IF EXISTS t1;
+ BEGIN;
+ CREATE TABLE t1(x TEXT);
+ CREATE INDEX i1 ON t1(x);
+ INSERT INTO t1 VALUES(randstr(10,400));
+ INSERT INTO t1 VALUES(randstr(10,400));
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ INSERT INTO t1 SELECT randstr(10,400) FROM t1;
+ COMMIT;
+ SELECT count(*) FROM t1;
+ }
+} {256}
+
+for {set ii 1} {$ii<=$ITERATIONS} {incr ii} {
+ set ::sig [signature]
+ set file test.db-journal
+
+ for {set iDelay 1 ; set crashed 1} {$crashed} {incr iDelay} {
+
+ do_test savepoint4-2.$ii.1.$iDelay {
+
+ set ret [crashsql -delay $iDelay -file $file {
+ SAVEPOINT one;
+ INSERT INTO t1 SELECT * FROM t1 WHERE rowid<50;
+ ROLLBACK TO one;
+ INSERT INTO t1 SELECT * FROM t1 WHERE rowid<50;
+ SAVEPOINT two;
+ DELETE FROM t1 WHERE (random()%10)==0;
+ SAVEPOINT three;
+ DELETE FROM t1 WHERE (random()%10)==0;
+ SAVEPOINT four;
+ DELETE FROM t1 WHERE (random()%10)==0;
+ RELEASE two;
+
+ SAVEPOINT three;
+ UPDATE t1 SET x = x||x WHERE (rowid%12)==0;
+ SAVEPOINT four;
+ UPDATE t1 SET x = x||x WHERE (rowid%14)==0;
+ ROLLBACK TO three;
+ UPDATE t1 SET x = x||x WHERE (rowid%13)==0;
+ RELEASE three;
+
+ DELETE FROM t1 WHERE rowid > (SELECT rowid FROM t1 LIMIT 1 OFFSET 256);
+ RELEASE one;
+ }]
+
+ set crashed [lindex $ret 0]
+ if {$crashed} {
+ signature
+ } else {
+ set ::sig
+ }
+ } $::sig
+
+ integrity_check savepoint4-2.$ii.1.$iDelay.integrity
+
+ if {$crashed == 0 && $file == "test.db-journal"} {
+ set crashed 1
+ set iDelay 0
+ set file test.db
+ set ::sig [signature]
+ }
}
- do_test savepoint4-$ii.2 {
+ do_test savepoint4-2.$ii.2 {
execsql {
- DELETE FROM t3 WHERE random()%10==0;
- INSERT INTO t3 SELECT randstr(10,10)||x FROM t3 WHERE random()%9==0;
+ DELETE FROM t1 WHERE random()%10==0;
+ INSERT INTO t1 SELECT randstr(10,10)||x FROM t1 WHERE random()%9==0;
}
} {}
}