]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Modifications to crash-test infrastructure. (CVS 3695)
authordanielk1977 <danielk1977@noemail.net>
Sat, 17 Mar 2007 10:26:59 +0000 (10:26 +0000)
committerdanielk1977 <danielk1977@noemail.net>
Sat, 17 Mar 2007 10:26:59 +0000 (10:26 +0000)
FossilOrigin-Name: c4be8d9949fc7b5e1bed757423c5195f38069048

manifest
manifest.uuid
src/build.c
src/test6.c
test/all.test
test/crash.test
test/ioerr.test
test/malloc.test
test/quick.test
test/tester.tcl
www/capi3ref.tcl

index 83dfad92bf8188f393e0e412fb2ba8f5e2044d68..f9ee0929e76b1e927e3f6581241a357526e39f1f 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Combine\sthe\stwo\svery\ssimilar\sdefinitions\sof\s(crashsql)\sin\sthe\stest\sscripts.\s(CVS\s3694)
-D 2007-03-17T07:22:43
+C Modifications\sto\scrash-test\sinfrastructure.\s(CVS\s3695)
+D 2007-03-17T10:26:59
 F Makefile.in 1fe3d0b46e40fd684e1e61f8e8056cefed16de9f
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -60,7 +60,7 @@ F src/attach.c fd286a9140a2df84b1482f052b67ff5fad9569a1
 F src/auth.c 902f4722661c796b97f007d9606bd7529c02597f
 F src/btree.c f5c1b3d88ad62ab4682de37229168a00b87fc948
 F src/btree.h 066444ee25bd6e6accb997bfd2cf5ace14dbcd00
-F src/build.c f6b2616b60b19520b93cd26f21f76a8d2fbadc49
+F src/build.c f2edc786b5bf165a7d0949ed3a5872455a610c0e
 F src/callback.c 31d22b4919c7645cbcbb1591ce2453e8c677c558
 F src/complete.c 7d1a44be8f37de125fcafd3d3a018690b3799675
 F src/date.c 393c73fc027597e008dcd81454544659e978b05c
@@ -106,7 +106,7 @@ F src/test2.c 59085c04e22a22bed9f1078ab318adc34c1229f3
 F src/test3.c ed494a126221c4b9f66f8f0445554ad749764709
 F src/test4.c 8b784cd82de158a2317cb4ac4bc86f91ad315e25
 F src/test5.c 7162f8526affb771c4ed256826eee7bb9eca265f
-F src/test6.c 60a02961ceb7b3edc25f5dc5c1ac2556622a76de
+F src/test6.c edbd903a4886c171f199048af58c3aa5b2a86712
 F src/test7.c 03fa8d787f6aebc6d1f72504d52f33013ad2c8e3
 F src/test8.c 628ec89f9fbf3bfb9c58a503d845a0719595d0ad
 F src/test_async.c e3deaedd4d86a56391b81808fde9e44fbd92f1d3
@@ -133,7 +133,7 @@ F src/vtab.c 7fbda947e28cbe7adb3ba752a76ca9ef29936750
 F src/where.c 1242dd545ffa7be8b2f539984d5f458ec731a937
 F tclinstaller.tcl 046e3624671962dc50f0481d7c25b38ef803eb42
 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
-F test/all.test b62fcd122052efaff1b0979aefa2dd65cfc8ee52
+F test/all.test 7da67663cb5af0c95ecd4805d888459023fb8cfd
 F test/alter.test a2cc30e844cb3b5d203416962f56f78fc11b1978
 F test/alter2.test 8b2d81eae944471d473de99ab25ba6d9cda73cd3
 F test/alter3.test a6eec8f454be9b6ce73d8d7dc711453675a10ce7
@@ -183,7 +183,7 @@ F test/colmeta.test 6505c73ab58796afcb7c89ba9f429d573fbc6e53
 F test/conflict.test 8a59399f61a14296a9bfed02e0570590a8a79cba
 F test/corrupt.test 18c7a995b1af76a8c8600b996257f2c7b7bff083
 F test/corrupt2.test 572f8df0303d0ce63ddad5c5c9101a83a345ae46
-F test/crash.test 61bf6b1467e6308faeb24053731a53b9810d0ad1
+F test/crash.test 167eb4652eccbedb199b6f21850346c3f5d779fb
 F test/crashtest1.c 09c1c7d728ccf4feb9e481671e29dda5669bbcc2
 F test/date.test 63cc718e1d209b10c6b7be8ce72b11addb9f1e04
 F test/default.test 252298e42a680146b1dd64f563b95bdf088d94fb
@@ -232,7 +232,7 @@ F test/insert3.test 09a532d5b6f3a788d91be0d4d368462f522685d1
 F test/insert4.test 0bb119fea2868afdcf78e4e3e3bfed27bbdb2430
 F test/interrupt.test c38b7f7c17914f0cd6a119beed5d03bc3f47f9eb
 F test/intpkey.test af4fd826c4784ec5c93b444de07adea0254d0d30
-F test/ioerr.test 053da63476d1b6a32ec61ac21c0391e614cb1d1a
+F test/ioerr.test 491d42c49bbec598966d26b01ed7901f55e5ee2d
 F test/join.test af0443185378b64878750aa1cf4b83c216f246b4
 F test/join2.test f2171c265e57ee298a27e57e7051d22962f9f324
 F test/join3.test 6f0c774ff1ba0489e6c88a3e77b9d3528fb4fda0
@@ -249,7 +249,7 @@ F test/lock.test 6825aea0b5885578b1b63a3b178803842c4ee9f1
 F test/lock2.test d83ba79d3c4fffdb5b926c7d8ca7a36c34288a55
 F test/lock3.test 615111293cf32aa2ed16d01c6611737651c96fb9
 F test/main.test e7212ce1023957c7209778cc87fa932bd79ba89a
-F test/malloc.test 0eb9fcffa8693bcbc47fd28f26616474da44f18b
+F test/malloc.test 2f234703cd206fe441e21341dba2d554a7cf8e68
 F test/malloc2.test 4ed7d719542c4570dec9c2ebe2bbdf3a9f3b0d05
 F test/malloc3.test fd4186bee73c2a2638f4e2a05a684c06836f725b
 F test/malloc4.test 59cd02f71b363302a04c4e77b97c0a1572eaa210
@@ -276,7 +276,7 @@ F test/pagesize.test 05c74ea49f790734ec1e9ab765d9bf1cce79b8f2
 F test/pragma.test 91739ef06ab9ecf91e90d25951858caba71d6fe7
 F test/printf.test cdd8e20dd901382a385afcbaa777b9377815c2ad
 F test/progress.test 8b22b4974b0a95272566385f8cb8c341c7130df8 x
-F test/quick.test 6bc0f7c7b905f7de5fe4d3f13239ced3e4e66fe7
+F test/quick.test 9c02be6cdc6ee2247a1b00486b162cfbd60a01ae
 F test/quote.test 5891f2338980916cf7415484b4ce785294044adb
 F test/reindex.test 38b138abe36bf9a08c791ed44d9f76cd6b97b78b
 F test/rollback.test 673cd8c44c685ad54987fe7f0eeba84efa09685d
@@ -305,7 +305,7 @@ F test/table.test feea6a3eb08cf166f570255eea5447e42ef82498
 F test/tableapi.test 036575a98dcce7c92e9f39056839bbad8a715412
 F test/tclsqlite.test 51334389283c74bcbe28645a73159b17e239e9f3
 F test/temptable.test c36f3e5a94507abb64f7ba23deeb4e1a8a8c3821
-F test/tester.tcl 4e062859b4a4597e23894b9afa2fbd320b9513a9
+F test/tester.tcl 3c7545cbd7fc80a986eda77145e18260dbf34c96
 F test/thread1.test 776c9e459b75ba905193b351926ac4019b049f35
 F test/thread2.test 6d7b30102d600f51b4055ee3a5a19228799049fb
 F test/threadtest1.c 6029d9c5567db28e6dc908a0c63099c3ba6c383b
@@ -392,7 +392,7 @@ F www/audit.tcl 90e09d580f79c7efec0c7d6f447b7ec5c2dce5c0
 F www/autoinc.tcl b357f5ba954b046ee35392ce0f884a2fcfcdea06
 F www/c_interface.tcl b51b08591554c16a0c3ef718364a508ac25abc7e
 F www/capi3.tcl 7a7cc225fe02eb7ab861a6019b08baa0014409e1
-F www/capi3ref.tcl 4e0df9c41ebc669a7d7e9b81b410d1f907d20e78
+F www/capi3ref.tcl 24fc13e145bdc07a77051d944534a97a957267ab
 F www/changes.tcl dba0e1f40192f79c7a887fa3efa56e6fdd54f85a
 F www/common.tcl 2b793e5c31486c8a01dd27dc0a631ad93704438e
 F www/compile.tcl 276546d7eb445add5a867193bbd80f6919a6b084
@@ -436,7 +436,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P fbc53da8c645935c74e49af2ab2cf447dc72ba4e
-R 9f3ee429c1669bb49f23db6678a5b730
+P eaf434d5887bf75330e1cea12be810dfe667b62a
+R 3e037a9ae48873c3a73dcd8bd26cfac6
 U danielk1977
-Z be503f1e3c0d6d60b895890cf3d106d6
+Z 2681bb64cf477e20030d108b1c89215c
index 0801472c050c01de5b5443c6c70b84fea3760b84..fcaddc3ac86bb7babe5b3b00c968ab013a78afe6 100644 (file)
@@ -1 +1 @@
-eaf434d5887bf75330e1cea12be810dfe667b62a
\ No newline at end of file
+c4be8d9949fc7b5e1bed757423c5195f38069048
\ No newline at end of file
index 88e83d2d9f2e32617e5b627364d2db66b8176a6b..1998b142a837f72b7fd3f9d4b4a0974492630c6a 100644 (file)
@@ -22,7 +22,7 @@
 **     COMMIT
 **     ROLLBACK
 **
-** $Id: build.c,v 1.414 2007/03/13 16:32:25 danielk1977 Exp $
+** $Id: build.c,v 1.415 2007/03/17 10:26:59 danielk1977 Exp $
 */
 #include "sqliteInt.h"
 #include <ctype.h>
@@ -2362,12 +2362,12 @@ void sqlite3CreateIndex(
         goto exit_create_index;
       }
     }
-      if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){
-        if( !ifNotExist ){
-          sqlite3ErrorMsg(pParse, "index %s already exists", zName);
-        }
-        goto exit_create_index;
+    if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){
+      if( !ifNotExist ){
+        sqlite3ErrorMsg(pParse, "index %s already exists", zName);
       }
+      goto exit_create_index;
+    }
   }else{
     char zBuf[30];
     int n;
index 32ee4762a7ede063a359f97c883db028cf21a7c3..1743342070176743467ab55089821ab2e547a692 100644 (file)
@@ -38,9 +38,9 @@ struct crashFile {
 };
 
 /*
-** Size of a simulated disk block
+** Size of a simulated disk block. Default is 512 bytes.
 */
-#define BLOCKSIZE 512
+static int BLOCKSIZE = 512;
 #define BLOCK_OFFSET(x) ((x) * BLOCKSIZE)
 
 
@@ -58,6 +58,11 @@ struct crashFile {
 static int iCrashDelay = 0;
 static char zCrashFile[500];
 
+/*
+** A list of all open files.
+*/
+static crashFile *pAllFiles = 0;
+
 /*
 ** Set the value of the two crash parameters.
 */
@@ -69,6 +74,16 @@ static void setCrashParams(int iDelay, char const *zFile){
   sqlite3OsLeaveMutex();
 }
 
+/*
+** Set the value of the simulated disk block size.
+*/
+static void setBlocksize(int iBlockSize){
+  sqlite3OsEnterMutex();
+  assert( !pAllFiles );
+  BLOCKSIZE = iBlockSize;
+  sqlite3OsLeaveMutex();
+}
+
 /*
 ** File zPath is being sync()ed. Return non-zero if this should
 ** cause a crash.
@@ -94,11 +109,6 @@ static int crashRequired(char const *zPath){
   return r;
 }
 
-/*
-** A list of all open files.
-*/
-static crashFile *pAllFiles = 0;
-
 /* Forward reference */
 static void initFile(OsFile **pId, char const *zName, OsFile *pBase);
 
@@ -510,7 +520,7 @@ static void initFile(OsFile **pId, char const *zName, OsFile *pBase){
 
 
 /*
-** tclcmd:   sqlite_crashparams DELAY CRASHFILE
+** tclcmd:   sqlite_crashparams DELAY CRASHFILE ?BLOCKSIZE?
 **
 ** This procedure implements a TCL command that enables crash testing
 ** in testfixture.  Once enabled, crash testing cannot be disabled.
@@ -521,20 +531,31 @@ static int crashParamsObjCmd(
   int objc,
   Tcl_Obj *CONST objv[]
 ){
-  int delay;
+  int iDelay;
   const char *zFile;
   int nFile;
-  if( objc!=3 ){
-    Tcl_WrongNumArgs(interp, 1, objv, "DELAY CRASHFILE");
+
+  if( objc!=3 && objc!=4 ){
+    Tcl_WrongNumArgs(interp, 1, objv, "DELAY CRASHFILE ?BLOCKSIZE?");
     return TCL_ERROR;
   }
-  if( Tcl_GetIntFromObj(interp, objv[1], &delay) ) return TCL_ERROR;
+  if( Tcl_GetIntFromObj(interp, objv[1], &iDelay) ) return TCL_ERROR;
   zFile = Tcl_GetStringFromObj(objv[2], &nFile);
   if( nFile>=sizeof(zCrashFile)-1 ){
     Tcl_AppendResult(interp, "crash file name too big", 0);
     return TCL_ERROR;
   }
-  setCrashParams(delay, zFile);
+  setCrashParams(iDelay, zFile);
+  if( objc==4 ){
+    int iBlockSize = 0;
+    if( Tcl_GetIntFromObj(interp, objv[3], &iBlockSize) ) return TCL_ERROR;
+    if( pAllFiles ){
+      char *zErr = "Cannot modify blocksize after opening files";
+      Tcl_SetResult(interp, zErr, TCL_STATIC);
+      return TCL_ERROR;
+    }
+    setBlocksize(iBlockSize);
+  }
   sqlite3CrashTestEnable = 1;
   return TCL_OK;
 }
index e63fbf953ca4fe5ed7d4456982c89eaaca98bc05..17d950349e508e0c98e54320dbd407d2c1e4c620 100644 (file)
@@ -10,7 +10,7 @@
 #***********************************************************************
 # This file runs all tests.
 #
-# $Id: all.test,v 1.36 2006/11/23 21:09:11 drh Exp $
+# $Id: all.test,v 1.37 2007/03/17 10:26:59 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -51,6 +51,7 @@ set EXCLUDE {
   all.test
   async.test
   crash.test
+  crash2.test
   autovacuum_crash.test
   quick.test
   malloc.test
index e088658822edb09421e7b54cbdc094a319b1cd77..80dd9f1df03f83e633b2bea29789dcef14073939 100644 (file)
 # The focus of this file is testing the ability of the database to
 # uses its rollback journal to recover intact (no database corruption)
 # from a power failure during the middle of a COMMIT.  The OS interface
-# modules are overloaded in a separate instance of testfixture using
-# the modified I/O routines found in test6.c.  These routines allow us
-# to simulate the kind of file damage that occurs after a power failure.
+# modules are overloaded using the modified I/O routines found in test6.c.  
+# These routines allow us to simulate the kind of file damage that 
+# occurs after a power failure.
 #
-# $Id: crash.test,v 1.22 2007/03/17 07:22:43 danielk1977 Exp $
+# $Id: crash.test,v 1.23 2007/03/17 10:26:59 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -68,7 +68,7 @@ do_test crash-1.1 {
   expr 0
 } {0}
 do_test crash-1.2 {
-  crashsql 1 test.db-journal {
+  crashsql -delay 1 -file test.db-journal {
     DELETE FROM abc WHERE a = 1;
   }
 } {1 {child process exited abnormally}}
@@ -76,7 +76,7 @@ do_test crash-1.3 {
   signature
 } $::sig
 do_test crash-1.4 {
-  crashsql 1 test.db {
+  crashsql -delay 1 -file test.db {
     DELETE FROM abc WHERE a = 1;
   }
 } {1 {child process exited abnormally}}
@@ -84,7 +84,7 @@ do_test crash-1.5 {
   signature
 } $::sig
 do_test crash-1.6 {
-  crashsql 2 test.db-journal {
+  crashsql -delay 2 -file test.db-journal {
     DELETE FROM abc WHERE a = 1;
   }
 } {1 {child process exited abnormally}}
@@ -95,7 +95,7 @@ do_test crash-1.7 {
 } {0 {1 2 3 4 5 6}}
 
 do_test crash-1.8 {
-  crashsql 3 test.db-journal {
+  crashsql -delay 3 -file test.db-journal {
     DELETE FROM abc WHERE a = 1;
   }
 } {0 {}}
@@ -105,7 +105,7 @@ do_test crash-1.9 {
   }
 } {0 {4 5 6}}
 do_test crash-1.10 {
-  crashsql 2 test.db {
+  crashsql -delay 2 -file test.db {
     DELETE FROM abc WHERE a = 4;
   }
 } {0 {}}
@@ -143,7 +143,7 @@ do_test crash-2.2 {
   expr ([file size test.db] / 1024)>16
 } {1}
 do_test crash-2.3 {
-  crashsql 2 test.db-journal {
+  crashsql -delay 2 -file test.db-journal {
     DELETE FROM abc WHERE a < 800;
   }
 } {1 {child process exited abnormally}}
@@ -151,7 +151,7 @@ do_test crash-2.4 {
   signature
 } $sig
 do_test crash-2.5 {
-  crashsql 1 test.db {
+  crashsql -delay 1 -file test.db {
     DELETE FROM abc WHERE a<800;
   }
 } {1 {child process exited abnormally}}
@@ -185,7 +185,7 @@ do_test crash-3.0 {
 for {set i 1} {$i < $repeats} {incr i} {
   set sig [signature]
   do_test crash-3.$i.1 {
-     crashsql [expr $i%5 + 1] test.db-journal "
+     crashsql -delay [expr $i%5 + 1] -file test.db-journal "
        BEGIN;
        SELECT random() FROM abc LIMIT $i;
        INSERT INTO abc VALUES(randstr(10,10), 0, 0);
@@ -224,7 +224,7 @@ for {set i 1} {$i<$repeats} {incr i} {
   set sig [signature]
   set sig2 [signature2]
   do_test crash-4.1.$i.1 {
-     set c [crashsql $i test.db-journal "
+     set c [crashsql -delay $i -file test.db-journal "
        ATTACH 'test2.db' AS aux;
        BEGIN;
        SELECT random() FROM abc LIMIT $i;
@@ -249,7 +249,7 @@ while {[incr i]} {
   set sig2 [signature2]
   set ::fin 0
   do_test crash-4.2.$i.1 {
-     set c [crashsql $i test2.db-journal "
+     set c [crashsql -delay $i -file test2.db-journal "
        ATTACH 'test2.db' AS aux;
        BEGIN;
        SELECT random() FROM abc LIMIT $i;
@@ -277,7 +277,7 @@ for {set i 1} {$i < 5} {incr i} {
   set sig [signature]
   set sig2 [signature2]
   do_test crash-4.3.$i.1 {
-     crashsql 1 test.db-mj* "
+     crashsql -delay 1 -file test.db-mj* "
        ATTACH 'test2.db' AS aux;
        BEGIN;
        SELECT random() FROM abc LIMIT $i;
@@ -340,7 +340,7 @@ do_test crash-5.3 {
 # database file and the journal file does not contain trustworthy rollback
 # data for this page.
 #
-  crashsql 1 test.db-journal {
+  crashsql -delay 1 -file test.db-journal {
     BEGIN;                                             -- 1
     DELETE FROM abc WHERE oid = 1;                     -- 2
     INSERT INTO abc VALUES(randstr(1500,1500), 0, 0);  -- 3
@@ -361,7 +361,7 @@ do_test crash-5.5 {
 # journal file before truncation in an auto-vacuum database.
 #
 do_test crash-6.1 {
-  crashsql 1 test.db {
+  crashsql -delay 1 -file test.db {
     DROP TABLE abc;
   }
 } {1 {child process exited abnormally}}
@@ -374,7 +374,7 @@ do_test crash-6.2 {
 # corrupted slightly so that the corruption has to be detected by the
 # checksum.
 do_test crash-7.1 {
-  crashsql 1 test.db {
+  crashsql -delay 1 -file test.db {
     ATTACH 'test2.db' AS aux;
     BEGIN;
     INSERT INTO abc VALUES(randstr(1500,1500), 0, 0);
index c9513ab65a1d32cf00630b816e38324b78a10647..4717b36c2c89d8f2c6608bcd20d67dd86c8b995f 100644 (file)
@@ -15,7 +15,7 @@
 # The tests in this file use special facilities that are only
 # available in the SQLite test fixture.
 #
-# $Id: ioerr.test,v 1.30 2007/03/15 12:17:43 drh Exp $
+# $Id: ioerr.test,v 1.31 2007/03/17 10:26:59 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -141,7 +141,7 @@ ifcapable crashtest {
         CREATE TABLE tx(a, b);
         CREATE TABLE aux.ty(a, b);
       }
-      set rc [crashsql 2 test2.db-journal {
+      set rc [crashsql -delay 2 -file test2.db-journal {
         ATTACH 'test2.db' as aux;
         PRAGMA cache_size = 10;
         BEGIN;
index f48e37e76e1493c29d91f5f737b0f207df328c37..8e592c8764b9c0cfcb5a8398e999d3484c5625f7 100644 (file)
@@ -14,7 +14,7 @@
 # special feature is used to see what happens in the library if a malloc
 # were to really fail due to an out-of-memory situation.
 #
-# $Id: malloc.test,v 1.36 2006/10/18 23:26:39 drh Exp $
+# $Id: malloc.test,v 1.37 2007/03/17 10:26:59 danielk1977 Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -359,7 +359,7 @@ do_malloc_test 12 -tclbody {
 # transaction.
 ifcapable crashtest {
   do_malloc_test 13 -tclprep {
-    set rc [crashsql 1 test2.db {
+    set rc [crashsql -delay 1 -file test2.db {
       ATTACH 'test2.db' as aux;
       PRAGMA cache_size = 10;
       BEGIN;
index 937b60ef00815a736f368e08b8037f7fb894dd1b..24162c686929bcc950581c8a5d6f0c500b09a6ea 100644 (file)
@@ -6,7 +6,7 @@
 #***********************************************************************
 # This file runs all tests.
 #
-# $Id: quick.test,v 1.47 2006/11/23 21:09:11 drh Exp $
+# $Id: quick.test,v 1.48 2007/03/17 10:26:59 danielk1977 Exp $
 
 proc lshift {lvar} {
   upvar $lvar l
@@ -43,6 +43,7 @@ set EXCLUDE {
   btree6.test
   corrupt.test
   crash.test
+  crash2.test
   loadext.test
   malloc.test
   malloc2.test
index ccce39fd15e9466656917f3d02a866dcf4083c7d..37b60b05487b58785070de77ae4c8954b93d1e53 100644 (file)
@@ -11,7 +11,7 @@
 # This file implements some common TCL routines used for regression
 # testing the SQLite library
 #
-# $Id: tester.tcl,v 1.74 2007/03/17 07:22:43 danielk1977 Exp $
+# $Id: tester.tcl,v 1.75 2007/03/17 10:26:59 danielk1977 Exp $
 
 # Make sure tclsqlite3 was compiled correctly.  Abort now with an
 # error message if not.
@@ -309,14 +309,37 @@ proc ifcapable {expr code {else ""} {elsecode ""}} {
 # error message. This is "child process exited abnormally" if the crash
 # occured.
 #
-proc crashsql {crashdelay crashfile sql} {
+#   crashsql -delay CRASHDELAY -file CRASHFILE ?-blocksize BLOCKSIZE $sql
+#
+proc crashsql {args} {
   if {$::tcl_platform(platform)!="unix"} {
     error "crashsql should only be used on unix"
   }
+
+  set blocksize ""
+  set crashdelay 1
+  set crashfile ""
+  set sql [lindex $args end]
+  
+  for {set ii 0} {$ii < [llength $args]-1} {incr ii 2} {
+    set z [lindex $args $ii]
+    set n [string length $z]
+    set z2 [lindex $args [expr $ii+1]]
+
+    if     {$n>1 && [string first $z -delay]==0}     {set crashdelay $z2} \
+    elseif {$n>1 && [string first $z -file]==0}      {set crashfile $z2}  \
+    elseif {$n>1 && [string first $z -blocksize]==0} {set blocksize $z2}  \
+    else   { error "Unrecognized option: $z" }
+  }
+
+  if {$crashfile eq ""} {
+    error "Compulsory option -file missing"
+  }
+
   set cfile [file join [pwd] $crashfile]
 
   set f [open crash.tcl w]
-  puts $f "sqlite3_crashparams $crashdelay $cfile"
+  puts $f "sqlite3_crashparams $crashdelay $cfile $blocksize"
   puts $f "set sqlite_pending_byte $::sqlite_pending_byte"
   puts $f "sqlite3 db test.db"
 
index 9c93914794fbe9137f30933da1ef4ebf9ef2540d..635359c9b535d52b29dbf49be44e3c3923153694 100644 (file)
@@ -1,8 +1,8 @@
-set rcsid {$Id: capi3ref.tcl,v 1.52 2007/02/20 15:21:05 drh Exp $}
+set rcsid {$Id: capi3ref.tcl,v 1.53 2007/03/17 10:26:59 danielk1977 Exp $}
 source common.tcl
 header {C/C++ Interface For SQLite Version 3}
 puts {
-<h2>C/C++ Interface For SQLite Version 3</h2>
+<h2 class=pdf_section>C/C++ Interface For SQLite Version 3</h2>
 }
 
 proc api {name prototype desc {notused x}} {
@@ -1722,6 +1722,7 @@ foreach name [lsort [array names name_to_idx]] {
 #parray name_to_idx
 #parray sname
 incr n -1
+puts "<DIV class=pdf_ignore>"
 puts {<table width="100%" cellpadding="5"><tr>}
 set nrow [expr {($n+2)/3}]
 set i 0
@@ -1740,6 +1741,7 @@ for {set j 0} {$j<3} {incr j} {
 }
 puts "</table>"
 puts "<!-- $n entries.  $nrow rows in 3 columns -->"
+puts "</DIV>"
 
 proc resolve_name {ignore_list name} {
   global name_to_idx
@@ -1756,7 +1758,7 @@ foreach name [lsort [array names name_to_idx]] {
   set done($i) 1
   foreach {namelist prototype desc} [lindex $apilist $i] break
   foreach name $namelist {
-    puts "<a name=\"$name\">"
+    puts "<a name=\"$name\"></a>"
   }
   puts "<p><hr></p>"
   puts "<blockquote><pre>"
@@ -1773,4 +1775,6 @@ foreach name [lsort [array names name_to_idx]] {
   puts "<p>$d3</p>"
 }
 
+puts "<DIV class=pdf_ignore>"
 footer $rcsid
+puts "</DIV>"