diff options
author | drh <drh@noemail.net> | 2009-02-05 16:31:45 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2009-02-05 16:31:45 +0000 |
commit | c7a3bb94c29b7298aa03d0fe9f3a5d4c73cf2e5b (patch) | |
tree | 6e4cd32360835c86e31804f685a8b8973b1bfaec | |
parent | f5d335f851f34d43170628351bea791489369214 (diff) | |
download | sqlite-c7a3bb94c29b7298aa03d0fe9f3a5d4c73cf2e5b.tar.gz sqlite-c7a3bb94c29b7298aa03d0fe9f3a5d4c73cf2e5b.zip |
Make the pending byte adjustable via sqlite3_test_control() on all builds,
not just on test builds. (CVS 6263)
FossilOrigin-Name: e8f192e2a93350a136d86bd9caceff65f52f3513
-rw-r--r-- | manifest | 34 | ||||
-rw-r--r-- | manifest.uuid | 2 | ||||
-rw-r--r-- | src/global.c | 22 | ||||
-rw-r--r-- | src/main.c | 21 | ||||
-rw-r--r-- | src/os.h | 14 | ||||
-rw-r--r-- | src/sqlite.h.in | 3 | ||||
-rw-r--r-- | src/sqliteInt.h | 4 | ||||
-rw-r--r-- | src/test2.c | 30 | ||||
-rw-r--r-- | test/lock2.test | 4 | ||||
-rw-r--r-- | test/lock4.test | 4 | ||||
-rw-r--r-- | test/lock6.test | 4 | ||||
-rw-r--r-- | test/misc7.test | 4 | ||||
-rw-r--r-- | test/tester.tcl | 6 |
13 files changed, 105 insertions, 47 deletions
@@ -1,5 +1,5 @@ -C Fixed\serror\sdetection\sin\swinTrucate()\sin\sos_win.c.\s\sWindows\sversion\sonly.\s\sTicket\s#3640.\s(CVS\s6262) -D 2009-02-05T03:16:21 +C Make\sthe\spending\sbyte\sadjustable\svia\ssqlite3_test_control()\son\sall\sbuilds,\nnot\sjust\son\stest\sbuilds.\s(CVS\s6263) +D 2009-02-05T16:31:46 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in c7a5a30fb6852bd7839b1024e1661da8549878ee F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -115,7 +115,7 @@ F src/delete.c 6249005bdd8f85db6ec5f31ddb5c07de023693cc F src/expr.c e60f69f624a03a8f493900b071b3affbfa699585 F src/fault.c dc88c821842157460750d2d61a8a8b4197d047ff F src/func.c 35d6f4a98c5fd5d504fd92a9197bae3220bbac39 -F src/global.c ab003581ea4ff193cfe17a00e1303bc51db619a5 +F src/global.c 448419c44ce0701104c2121b0e06919b44514c0c F src/hash.c 5824e6ff7ba78cd34c8d6cd724367713583e5b55 F src/hash.h 28f38ebb1006a5beedcb013bcdfe31befe7437ae F src/hwtime.h 4a1d45f4cae1f402ea19686acf24acf4f0cb53cb @@ -123,7 +123,7 @@ F src/insert.c f6db1e6f43aae337e64a755208abb6ff124edc19 F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0 F src/legacy.c 8b3b95d48d202614946d7ce7256e7ba898905c3b F src/loadext.c 3f96631089fc4f3871a67f02f2e4fc7ea4d51edc -F src/main.c 75e0ec759987984d54b1fe1c75d621f533d9f46c +F src/main.c 4912460dab29e4d37e4ba1d78320c6a77bb95ad8 F src/malloc.c bc408056b126db37b6fba00e170d578cc67be6b3 F src/mem0.c f2f84062d1f35814d6535c9f9e33de3bfb3b132c F src/mem1.c 3bfb39e4f60b0179713a7c087b2d4f0dc205735f @@ -138,7 +138,7 @@ F src/mutex_os2.c 6b5a74f812082a8483c3df05b47bbaac2424b9a0 F src/mutex_unix.c 2f936339dfef1a4c142db290d575a3509b77315f F src/mutex_w32.c f4b6a4a48f1dfff7f0089cba9b5a371691f17b8b F src/os.c ed93a6b46132a602c4fd7a58142e2981c829c79d -F src/os.h f996ab57d2035a20e63173419055608548a834c6 +F src/os.h fa3f4aa0119ff721a2da4b47ffd74406ac864c05 F src/os_common.h 24525d8b7bce66c374dfc1810a6c9043f3359b60 F src/os_os2.c bed77dc26e3a95ce4a204936b9a1ca6fe612fcc5 F src/os_unix.c f0fce3042011d462b8ae633564a5668260bd3636 @@ -157,15 +157,15 @@ F src/resolve.c 18dc9f0df1d60048e012ce6632251063e0dd356a F src/rowset.c ba9375f37053d422dd76965a9c370a13b6e1aac4 F src/select.c ae72b604e47092521c4d9ae54e1b1cbeb872a747 F src/shell.c f109ebbb50132926ebbc173a6c2d8838d5d78527 -F src/sqlite.h.in 31fa12602f784adea9be66424a2e8b052116736f +F src/sqlite.h.in bc6654bb2c8e07281c66e860a018b1f4cb6e5dfa F src/sqlite3ext.h 1db7d63ab5de4b3e6b83dd03d1a4e64fef6d2a17 -F src/sqliteInt.h 73c1d4f9716fe21f202f9d05c4fd9e6281f2636f +F src/sqliteInt.h b4b0933d3833faded0574f2165b26737636a00cf F src/sqliteLimit.h ffe93f5a0c4e7bd13e70cd7bf84cfb5c3465f45d F src/status.c 237b193efae0cf6ac3f0817a208de6c6c6ef6d76 F src/table.c 332ab0ea691e63862e2a8bdfe2c0617ee61062a3 F src/tclsqlite.c 524c1f49ccf9b6a5e3917591cf3b6c4f4204e607 F src/test1.c f88b447699786d58a0136a3a48b12990abc72c8a -F src/test2.c 9689e7d3b7791da8c03f9acd1ea801802cb83c17 +F src/test2.c 71c22e2974f8094fe0fd1eba8f27872dde9b2a39 F src/test3.c 88a246b56b824275300e6c899634fbac1dc94b14 F src/test4.c f79ab52d27ff49b784b631a42e2ccd52cfd5c84c F src/test5.c 162a1cea2105a2c460a3f39fa6919617b562a288 @@ -429,11 +429,11 @@ F test/limit.test 2db7b3b34fb925b8e847d583d2eb67531d0ce67e F test/loadext.test 18db29c081380fdedcfbd8c633847712059ae104 F test/loadext2.test 0bcaeb4d81cd5b6e883fdfea3c1bdbe1f173cbca F test/lock.test 3f9e98e96d331ee3035303b7431bcaac5fb087e3 -F test/lock2.test 018b846f6f3b3b695fad07e317b7988442b556f4 +F test/lock2.test d4f941d1f659e5fc782b4912b1a872d77d4b5470 F test/lock3.test 8adfbf438b96316267611214d494ebc1311b8cda -F test/lock4.test 09d97d52cae18fadfe631552af9880dac6b3ae90 +F test/lock4.test 991b57669a868bbfd39fe0c0df0d493985829105 F test/lock5.test 6b1f78f09ad1522843dad571b76b321e6f439bf7 -F test/lock6.test eafa70db6f50b6f6291f4f83b80e98834724a50d +F test/lock6.test 862aa71e97b288d6b3f92ba3313f51bd0b003776 F test/lookaside.test e69f822f13745f1d5c445c6e30e30f059f30c8e5 F test/main.test 187a9a1b5248ed74a83838c581c15ec6023b555b F test/make-where7.tcl 40bb740b37eead343eaf57b74ab72d2a5a304745 @@ -472,7 +472,7 @@ F test/misc3.test 7212ed8dad01427e9acab9bd3e7e5e2c2e89be9e F test/misc4.test 91e8ed25c092c2bb4e0bb01864631e2930f8d7de F test/misc5.test 6a5c1e3217a95b0db05ff9a0f1ecb5ce9043ffef F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91 -F test/misc7.test 065b4a32c44648f7dd79767a458916048744fb18 +F test/misc7.test 93c81aed664684461ea55f72542bcef78d93ba30 F test/misuse.test 30b3a458e5a70c31e74c291937b6c82204c59f33 F test/mutex1.test 1e5c196d5170bbe3a7d8370b1b905e8c86a9e07c F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660 @@ -552,7 +552,7 @@ F test/tableapi.test 505031f15b18a750184d967d2c896cf88fcc969c F test/tclsqlite.test 413a8a887d89ea8fa7055e8d118ffb03b0a4c91a F test/tempdb.test b88ac8a19823cf771d742bf61eef93ef337c06b1 F test/temptable.test 19b851b9e3e64d91e9867619b2a3f5fffee6e125 -F test/tester.tcl 94dc2fe5f8d9179e58ebfe1c7ce2618bdb44799d +F test/tester.tcl b28d5eb97e95b19eacdb5afb38db2c8558f398b0 F test/thread001.test 7595e58213eda498794860f608e0ea7e499d18d0 F test/thread002.test 0258a50c55f2371de2e4c7e02bec2576c1eef359 F test/thread003.test e17754799649c2b732c295620dca041c32f01e16 @@ -701,7 +701,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P a6fe3d6b02734b23fe067a373c0232024a782a6c -R 44c59b6fa98593f23066b22d11bd7514 -U shane -Z dc1ee389fb4cd7e5a18726142b311469 +P 82e03f1b5481c6fe5e94976f086e8fe8c99881af +R 2734eb5c39e38779f0284460e01933e6 +U drh +Z 8726398e2849afbae888397535f5fdc8 diff --git a/manifest.uuid b/manifest.uuid index 9930e6c4f..15dc0031b 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -82e03f1b5481c6fe5e94976f086e8fe8c99881af
\ No newline at end of file +e8f192e2a93350a136d86bd9caceff65f52f3513
\ No newline at end of file diff --git a/src/global.c b/src/global.c index b4bd93eaa..003043a20 100644 --- a/src/global.c +++ b/src/global.c @@ -12,7 +12,7 @@ ** ** This file contains definitions of global variables and contants. ** -** $Id: global.c,v 1.11 2009/01/24 11:30:43 drh Exp $ +** $Id: global.c,v 1.12 2009/02/05 16:31:46 drh Exp $ */ #include "sqliteInt.h" @@ -168,3 +168,23 @@ SQLITE_WSD struct Sqlite3Config sqlite3Config = { ** read-only. */ SQLITE_WSD FuncDefHash sqlite3GlobalFunctions; + +/* +** The value of the "pending" byte must be 0x40000000 (1 byte past the +** 1-gibabyte boundary) in a compatible database. SQLite never uses +** the database page that contains the pending byte. It never attempts +** to read or write that page. The pending byte page is set assign +** for use by the VFS layers as space for managing file locks. +** +** During testing, it is often desirable to move the pending byte to +** a different position in the file. This allows code that has to +** deal with the pending byte to run on files that are much smaller +** than 1 GiB. The sqlite3_test_control() interface can be used to +** move the pending byte. +** +** IMPORTANT: Changing the pending byte to any value other than +** 0x40000000 results in an incompatible database file format! +** Changing the pending byte during operating results in undefined +** and dileterious behavior. +*/ +int sqlite3PendingByte = 0x40000000; diff --git a/src/main.c b/src/main.c index 72a601d74..033937910 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: main.c,v 1.527 2009/02/04 17:40:58 drh Exp $ +** $Id: main.c,v 1.528 2009/02/05 16:31:46 drh Exp $ */ #include "sqliteInt.h" @@ -2150,6 +2150,25 @@ int sqlite3_test_control(int op, ...){ sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd); break; } + + /* + ** sqlite3_test_control(PENDING_BYTE, unsigned int X) + ** + ** Set the PENDING byte to the value in the argument, if X>0. + ** Make no changes if X==0. Return the value of the pending byte + ** as it existing before this routine was called. + ** + ** IMPORTANT: Changing the PENDING byte from 0x40000000 results in + ** an incompatible database file format. Changing the PENDING byte + ** while any database connection is open results in undefined and + ** dileterious behavior. + */ + case SQLITE_TESTCTRL_PENDING_BYTE: { + unsigned int newVal = va_arg(ap, unsigned int); + rc = sqlite3PendingByte; + if( newVal ) sqlite3PendingByte = newVal; + break; + } } va_end(ap); #endif /* SQLITE_OMIT_BUILTIN_TEST */ @@ -17,7 +17,7 @@ ** This header file is #include-ed by sqliteInt.h and thus ends up ** being included by every source file. ** -** $Id: os.h,v 1.107 2009/01/14 23:03:41 drh Exp $ +** $Id: os.h,v 1.108 2009/02/05 16:31:46 drh Exp $ */ #ifndef _SQLITE_OS_H_ #define _SQLITE_OS_H_ @@ -195,9 +195,7 @@ ** a random byte is selected for a shared lock. The pool of bytes for ** shared locks begins at SHARED_FIRST. ** -** These #defines are available in sqlite_aux.h so that adaptors for -** connecting SQLite to other operating systems can use the same byte -** ranges for locking. In particular, the same locking strategy and +** The same locking strategy and ** byte ranges are used for Unix. This leaves open the possiblity of having ** clients on win95, winNT, and unix all talking to the same shared file ** and all locking correctly. To do so would require that samba (or whatever @@ -221,13 +219,7 @@ ** 1GB boundary. ** */ -#ifndef SQLITE_TEST -#define PENDING_BYTE 0x40000000 /* First byte past the 1GB boundary */ -#else -extern unsigned int sqlite3_pending_byte; -#define PENDING_BYTE sqlite3_pending_byte -#endif - +#define PENDING_BYTE sqlite3PendingByte #define RESERVED_BYTE (PENDING_BYTE+1) #define SHARED_FIRST (PENDING_BYTE+2) #define SHARED_SIZE 510 diff --git a/src/sqlite.h.in b/src/sqlite.h.in index bd95d0c00..69b4c037f 100644 --- a/src/sqlite.h.in +++ b/src/sqlite.h.in @@ -30,7 +30,7 @@ ** the version number) and changes its name to "sqlite3.h" as ** part of the build process. ** -** @(#) $Id: sqlite.h.in,v 1.426 2009/02/03 21:13:08 drh Exp $ +** @(#) $Id: sqlite.h.in,v 1.427 2009/02/05 16:31:46 drh Exp $ */ #ifndef _SQLITE3_H_ #define _SQLITE3_H_ @@ -6372,6 +6372,7 @@ int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_BITVEC_TEST 8 #define SQLITE_TESTCTRL_FAULT_INSTALL 9 #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10 +#define SQLITE_TESTCTRL_PENDING_BYTE 11 /* ** CAPI3REF: SQLite Runtime Status {H17200} <S60200> diff --git a/src/sqliteInt.h b/src/sqliteInt.h index 8db2e69e3..2271edd17 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -11,7 +11,7 @@ ************************************************************************* ** Internal interface definitions for SQLite. ** -** @(#) $Id: sqliteInt.h,v 1.831 2009/02/03 16:51:25 danielk1977 Exp $ +** @(#) $Id: sqliteInt.h,v 1.832 2009/02/05 16:31:46 drh Exp $ */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ @@ -510,10 +510,12 @@ struct BusyHandler { #define sqlite3GlobalConfig GLOBAL(struct Sqlite3Config, sqlite3Config) int sqlite3_wsd_init(int N, int J); void *sqlite3_wsd_find(void *K, int L); + int sqlite3PendingByte; #else #define SQLITE_WSD #define GLOBAL(t,v) v #define sqlite3GlobalConfig sqlite3Config + int sqlite3PendingByte; #endif /* diff --git a/src/test2.c b/src/test2.c index 43096048c..4db8eede6 100644 --- a/src/test2.c +++ b/src/test2.c @@ -13,7 +13,7 @@ ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** -** $Id: test2.c,v 1.69 2009/01/20 17:06:27 danielk1977 Exp $ +** $Id: test2.c,v 1.70 2009/02/05 16:31:46 drh Exp $ */ #include "sqliteInt.h" #include "tcl.h" @@ -557,6 +557,29 @@ static int fake_big_file( /* +** test_control_pending_byte PENDING_BYTE +** +** Set the PENDING_BYTE using the sqlite3_test_control() interface. +*/ +static int testPendingByte( + void *NotUsed, + Tcl_Interp *interp, /* The TCL interpreter that invoked this command */ + int argc, /* Number of arguments */ + const char **argv /* Text of each argument */ +){ + int pbyte; + int rc; + if( argc!=2 ){ + Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], + " PENDING-BYTE\"", (void*)0); + } + if( Tcl_GetInt(interp, argv[1], &pbyte) ) return TCL_ERROR; + rc = sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, pbyte); + Tcl_SetObjResult(interp, Tcl_NewIntObj(rc)); + return TCL_OK; +} + +/* ** sqlite3BitvecBuiltinTest SIZE PROGRAM ** ** Invoke the SQLITE_TESTCTRL_BITVEC_TEST operator on test_control. @@ -624,7 +647,8 @@ int Sqlitetest2_Init(Tcl_Interp *interp){ #ifndef SQLITE_OMIT_DISKIO { "fake_big_file", (Tcl_CmdProc*)fake_big_file }, #endif - { "sqlite3BitvecBuiltinTest",(Tcl_CmdProc*)testBitvecBuiltinTest}, + { "sqlite3BitvecBuiltinTest",(Tcl_CmdProc*)testBitvecBuiltinTest }, + { "sqlite3_test_control_pending_byte", (Tcl_CmdProc*)testPendingByte }, }; int i; for(i=0; i<sizeof(aCmd)/sizeof(aCmd[0]); i++){ @@ -643,7 +667,7 @@ int Sqlitetest2_Init(Tcl_Interp *interp){ Tcl_LinkVar(interp, "sqlite_diskfull", (char*)&sqlite3_diskfull, TCL_LINK_INT); Tcl_LinkVar(interp, "sqlite_pending_byte", - (char*)&sqlite3_pending_byte, TCL_LINK_INT); + (char*)&sqlite3PendingByte, TCL_LINK_INT | TCL_LINK_READ_ONLY); Tcl_LinkVar(interp, "sqlite_pager_n_sort_bucket", (char*)&sqlite3_pager_n_sort_bucket, TCL_LINK_INT); return TCL_OK; diff --git a/test/lock2.test b/test/lock2.test index bfca19127..e6c46d396 100644 --- a/test/lock2.test +++ b/test/lock2.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is database locks between competing processes. # -# $Id: lock2.test,v 1.9 2007/12/13 21:54:11 drh Exp $ +# $Id: lock2.test,v 1.10 2009/02/05 16:31:46 drh Exp $ set testdir [file dirname $argv0] @@ -92,7 +92,7 @@ close $f # do_test lock2-1.1 { set ::tf1 [launch_testfixture] - testfixture $::tf1 "set sqlite_pending_byte $::sqlite_pending_byte" + testfixture $::tf1 "sqlite3_test_control_pending_byte $::sqlite_pending_byte" testfixture $::tf1 { sqlite3 db test.db -key xyzzy db eval {select * from sqlite_master} diff --git a/test/lock4.test b/test/lock4.test index dc8586f84..77de346f5 100644 --- a/test/lock4.test +++ b/test/lock4.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is database locks. # -# $Id: lock4.test,v 1.8 2008/03/14 08:57:42 danielk1977 Exp $ +# $Id: lock4.test,v 1.9 2009/02/05 16:31:46 drh Exp $ set testdir [file dirname $argv0] @@ -53,7 +53,7 @@ do_test lock4-1.2 { # Create a script for the second process to run. # set out [open test2-script.tcl w] - puts $out "set sqlite_pending_byte [set sqlite_pending_byte]" + puts $out "sqlite3_test_control_pending_byte [set sqlite_pending_byte]" puts $out { sqlite3 db2 test2.db db2 eval { diff --git a/test/lock6.test b/test/lock6.test index cbfb5661a..b64983a04 100644 --- a/test/lock6.test +++ b/test/lock6.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is database locks. # -# $Id: lock6.test,v 1.2 2009/01/12 14:01:45 danielk1977 Exp $ +# $Id: lock6.test,v 1.3 2009/02/05 16:31:46 drh Exp $ set testdir [file dirname $argv0] @@ -92,7 +92,7 @@ ifcapable lock_proxy_pragmas&&prefer_proxy_locking { do_test lock6-1.1 { set ::tf1 [launch_testfixture] - testfixture $::tf1 "set sqlite_pending_byte $::sqlite_pending_byte" + testfixture $::tf1 "sqlite3_test_control_pending_byte $::sqlite_pending_byte" testfixture $::tf1 { set sqlite_hostid_num 2 sqlite3 db test.db -key xyzzy diff --git a/test/misc7.test b/test/misc7.test index 0556f6627..10bcdb78a 100644 --- a/test/misc7.test +++ b/test/misc7.test @@ -10,7 +10,7 @@ #*********************************************************************** # This file implements regression tests for SQLite library. # -# $Id: misc7.test,v 1.26 2009/01/09 17:11:05 danielk1977 Exp $ +# $Id: misc7.test,v 1.27 2009/02/05 16:31:46 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -426,7 +426,7 @@ if {$tcl_platform(platform)!="windows" && $tcl_platform(platform)!="os2"} { } } {0 32} - set ::pending_byte_page [expr ($::sqlite_pending_byte / 1024) + 1] + sqlite3_test_control_pending_page [expr ($::sqlite_pending_byte / 1024) + 1] do_test misc7-17.3 { db eval { pragma writable_schema = true; diff --git a/test/tester.tcl b/test/tester.tcl index 0a8c4dc11..44b6ae291 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -11,7 +11,7 @@ # This file implements some common TCL routines used for regression # testing the SQLite library # -# $Id: tester.tcl,v 1.138 2009/02/04 22:46:47 drh Exp $ +# $Id: tester.tcl,v 1.139 2009/02/05 16:31:46 drh Exp $ # # What for user input before continuing. This gives an opportunity @@ -27,7 +27,7 @@ for {set i 0} {$i<[llength $argv]} {incr i} { } set tcl_precision 15 -set sqlite_pending_byte 0x0010000 +sqlite3_test_control_pending_byte 0x0010000 # # Check the command-line arguments for a default soft-heap-limit. @@ -576,7 +576,7 @@ proc crashsql {args} { set f [open crash.tcl w] puts $f "sqlite3_crash_enable 1" puts $f "sqlite3_crashparams $blocksize $dc $crashdelay $cfile" - puts $f "set sqlite_pending_byte $::sqlite_pending_byte" + puts $f "sqlite3_test_control_pending_byte $::sqlite_pending_byte" puts $f "sqlite3 db test.db -vfs crash" # This block sets the cache size of the main database to 10 |