]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Initial attempt to merge in all trunk changes over the previous 1.5 years.
authordrh <drh@noemail.net>
Thu, 8 May 2014 23:01:59 +0000 (23:01 +0000)
committerdrh <drh@noemail.net>
Thu, 8 May 2014 23:01:59 +0000 (23:01 +0000)
This check-in compiles but there are compiler warnings and "make test"
segfaults after only running a few test modules.

FossilOrigin-Name: 9411d7dc6fbee689730c6f74736341bccd333d9e

56 files changed:
1  2 
Makefile.in
ext/rtree/rtree.c
main.mk
manifest
manifest.uuid
src/btree.c
src/func.c
src/legacy.c
src/main.c
src/os.c
src/os_unix.c
src/os_win.c
src/pager.c
src/pager.h
src/pragma.c
src/prepare.c
src/select.c
src/sqlite.h.in
src/sqliteInt.h
src/test1.c
src/test_backup.c
src/test_config.c
src/test_rtree.c
src/vdbe.c
src/vdbeapi.c
src/vdbeaux.c
src/wal.c
src/wal.h
test/8_3_names.test
test/cache.test
test/dbstatus2.test
test/exclusive.test
test/fallocate.test
test/incrblob3.test
test/malloc_common.tcl
test/memdb.test
test/memsubsys1.test
test/pager1.test
test/pagerfault.test
test/pcache.test
test/pragma.test
test/stat.test
test/tester.tcl
test/tkt-2d1a5c67d.test
test/tkt3457.test
test/wal.test
test/wal2.test
test/wal5.test
test/wal6.test
test/walcksum.test
test/walcrash.test
test/walcrash2.test
test/walcrash3.test
test/walfault.test
test/walro.test
tool/mksqlite3c.tcl

diff --cc Makefile.in
index c8a952bcfe0f64fa7c89cb551860277df48a2b1a,c30435b66dcbdc6a6ec981c78c3a581f04e0d448..022b5fc1241218980463d52e60370107b7b565aa
@@@ -503,10 -511,11 +525,10 @@@ libsqlite3.la:  $(LIBOBJ
                ${ALLOWRELEASE} -rpath "$(libdir)" -version-info "8:6:8"
  
  libtclsqlite3.la:     tclsqlite.lo libsqlite3.la
-       $(LTLINK) -o $@ tclsqlite.lo \
+       $(LTLINK) -no-undefined -o $@ tclsqlite.lo \
                libsqlite3.la @TCL_STUB_LIB_SPEC@ $(TLIBS) \
 -              -rpath "$(TCLLIBDIR)" \
 -              -version-info "8:6:8" \
 -              -avoid-version
 +                -rpath "$(TCLLIBDIR)/sqlite3" \
 +              -version-info "8:6:8"
  
  sqlite3$(TEXE):       $(TOP)/src/shell.c libsqlite3.la sqlite3.h
        $(LTLINK) $(READLINE_FLAGS) \
index 71ad5f91bb2fc4cb7f0fbf945a2bbe7ef872a62c,7b540b4be11b7204afad2d36e9e49913ab7d871c..979dd082e144205ba7326b20ed48308fba7a10fd
  
  #include <string.h>
  #include <assert.h>
 +#include <stdint.h>
+ #include <stdio.h>
  
  #ifndef SQLITE_AMALGAMATION
  #include "sqlite3rtree.h"
diff --cc main.mk
index 379917ef902ea332cb56db135a9bcdd297c9c34d,3bdbe810f8ac10c922b074725db29da4ce1f45c8..b94a77fea2d20753c48f14ca53ea22a7cd86c457
+++ b/main.mk
@@@ -204,10 -210,9 +210,11 @@@ SRC += 
    $(TOP)/ext/icu/sqliteicu.h \
    $(TOP)/ext/icu/icu.c
  SRC += \
+   $(TOP)/ext/rtree/sqlite3rtree.h \
    $(TOP)/ext/rtree/rtree.h \
    $(TOP)/ext/rtree/rtree.c
 +SRC += \
 +  $(TOP)/ext/sqlrr/sqlrr.c
  
  
  # Generated source code files
@@@ -358,12 -402,12 +389,12 @@@ sqlite3.o:      sqlite3.
  # files are automatically generated.  This target takes care of
  # all that automatic generation.
  #
 -target_source:        $(SRC) $(TOP)/tool/vdbe-compress.tcl
 +target_source:        $(SRC) $(EXTHDR) $(TOP)/tool/vdbe-compress.tcl
        rm -rf tsrc
        mkdir tsrc
 -      cp -f $(SRC) tsrc
 +      cp -f $(SRC) $(EXTHDR) tsrc
        rm tsrc/sqlite.h.in tsrc/parse.y
-       tclsh $(TOP)/tool/vdbe-compress.tcl <tsrc/vdbe.c >vdbe.new
+       tclsh $(TOP)/tool/vdbe-compress.tcl $(OPTS) <tsrc/vdbe.c >vdbe.new
        mv vdbe.new tsrc/vdbe.c
        touch target_source
  
diff --cc manifest
index 4fce30a1a741978583fb178d174862b41b1b3cf2,bec4a2d4fe13372f44a1f9f1f0108c791bdbc0e6..8e1b95e42d0f8f6833eb58a892fe789ffedaf09e
+++ b/manifest
@@@ -1,14 -1,14 +1,14 @@@
- C Merge\sthe\slatest\strunk\schanges\s(PRAGMA\sbusy_timeout\sand\sthe\sORDER\sBY\nquery\splanner\senhancements)\sinto\sthe\sapple-osx\sbranch.
- D 2012-09-28T10:57:42.795
 -C Include\ssqlite3rtree.h\sin\sthe\stsrc/\spile\sof\ssource\sfiles\sduring\ntarget_source\sin\sthe\smain.mk\smakefile.
 -D 2014-05-07T21:16:56.524
++C Initial\sattempt\sto\smerge\sin\sall\strunk\schanges\sover\sthe\sprevious\s1.5\syears.\nThis\scheck-in\scompiles\sbut\sthere\sare\scompiler\swarnings\sand\s"make\stest"\nsegfaults\safter\sonly\srunning\sa\sfew\stest\smodules.
++D 2014-05-08T23:01:59.070
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
- F Makefile.in 535aaf4b82ce03a91c9b7b31367f160401cce226
 -F Makefile.in dd2b1aba364ff9b05de41086f74407f285c57670
++F Makefile.in 444faa7b5c5b3189fa674ff42be94d87a37eba9d
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
- F Makefile.msc 1102ce2c75965b9b5534efce380007ffcb08c52e
- F Makefile.vxworks b18ad88e9a8c6a001f5cf4a389116a4f1a7ab45f
- F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
- F VERSION edab4af5a4623f8198833ea481ce98ab53750a8d
+ F Makefile.msc 7e6c495d9a145054a09f518781916c7503f7a8e9
+ F Makefile.vxworks 034289efa9d591b04b1a73598623119c306cbba0
 -F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8
++F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8 w README
+ F VERSION 9f823c026c6a32fc5f84d212a8aae0a221dba45c
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
- F addopcodes.awk 17dc593f791f874d2c23a0f9360850ded0286531
+ F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
  F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90
  F art/sqlite370.jpg d512473dae7e378a67e28ff96a34da7cb331def2
@@@ -78,231 -102,254 +102,258 @@@ F ext/fts3/mkfts3amal.tcl 252ecb7fe6467
  F ext/fts3/tool/fts3view.c 6cfc5b67a5f0e09c0d698f9fd012c784bfaa9197
  F ext/fts3/unicode/CaseFolding.txt 8c678ca52ecc95e16bc7afc2dbf6fc9ffa05db8c
  F ext/fts3/unicode/UnicodeData.txt cd07314edb62d49fde34debdaf92fa2aa69011e7
- F ext/fts3/unicode/mkunicode.tcl 7a9bc018e2962abb79563c5a39fe581fcbf2f675
- F ext/icu/README.txt bf8461d8cdc6b8f514c080e4e10dc3b2bbdfefa9
- F ext/icu/icu.c eb9ae1d79046bd7871aa97ee6da51eb770134b5a
+ F ext/fts3/unicode/mkunicode.tcl dc6f268eb526710e2c6e496c372471d773d0c368
+ F ext/icu/README.txt d9fbbad0c2f647c3fdf715fc9fd64af53aedfc43
+ F ext/icu/icu.c d415ccf984defeb9df2c0e1afcfaa2f6dc05eacb
  F ext/icu/sqliteicu.h 728867a802baa5a96de7495e9689a8e01715ef37
 -F ext/misc/fuzzer.c 136533c53cfce0957f0b48fa11dba27e21c5c01d
+ F ext/misc/amatch.c 678056a4bfcd83c4e82dea81d37543cd1d6dbee1
+ F ext/misc/closure.c 636024302cde41b2bf0c542f81c40c624cfb7012
 -F ext/misc/spellfix.c 93f3961074cebe63c31fcefe62ca2a032ee8dfed
++F ext/misc/fuzzer.c 136533c53cfce0957f0b48fa11dba27e21c5c01d w src/test_fuzzer.c
+ F ext/misc/ieee754.c b0362167289170627659e84173f5d2e8fee8566e
+ F ext/misc/nextchar.c 35c8b8baacb96d92abbb34a83a997b797075b342
+ F ext/misc/percentile.c bcbee3c061b884eccb80e21651daaae8e1e43c63
+ F ext/misc/regexp.c af92cdaa5058fcec1451e49becc7ba44dba023dc
+ F ext/misc/rot13.c 1ac6f95f99b575907b9b09c81a349114cf9be45a
 -F ext/misc/wholenumber.c 784b12543d60702ebdd47da936e278aa03076212
++F ext/misc/spellfix.c 93f3961074cebe63c31fcefe62ca2a032ee8dfed w src/test_spellfix.c
+ F ext/misc/totype.c 4a167594e791abeed95e0a8db028822b5e8fe512
+ F ext/misc/vfslog.c fe40fab5c077a40477f7e5eba994309ecac6cc95
+ F ext/misc/vtshim.c babb0dc2bf116029e3e7c9a618b8a1377045303e
++F ext/misc/wholenumber.c 784b12543d60702ebdd47da936e278aa03076212 w src/test_wholenumber.c
  F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
- F ext/rtree/rtree.c 950e43bcef7739f3b206e6da78a339ab83b3578c
 -F ext/rtree/rtree.c 6f70db93e0e42c369325c5cddcf2024c5a87ca43
++F ext/rtree/rtree.c 8884ffb0db17df33084b0ae2d475427a4276e383
  F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e
- F ext/rtree/rtree1.test e474a2b5eff231496dbd073fe67e5fbaf7f444c9
+ F ext/rtree/rtree1.test e2da4aaa426918d27122d1a1066c6ecf8409a514
  F ext/rtree/rtree2.test acbb3a4ce0f4fbc2c304d2b4b784cfa161856bba
  F ext/rtree/rtree3.test a494da55c30ee0bc9b01a91c80c81b387b22d2dc
  F ext/rtree/rtree4.test c8fe384f60ebd49540a5fecc990041bf452eb6e0
- F ext/rtree/rtree5.test 9a229678a00f40e6aedb40cb3a07ec5444af892c
- F ext/rtree/rtree6.test 3ff9113b4a872fa935309e3511cd9b7cdb4d2472
+ F ext/rtree/rtree5.test 6a510494f12454bf57ef28f45bc7764ea279431e
+ F ext/rtree/rtree6.test 756585abc51727fec97c77852476445c10c0ee95
  F ext/rtree/rtree7.test 1fa710b9e6bf997a0c1a537b81be7bb6fded1971
- F ext/rtree/rtree8.test 9772e16da71e17e02bdebf0a5188590f289ab37d
+ F ext/rtree/rtree8.test db79c812f9e4a11f9b1f3f9934007884610a713a
  F ext/rtree/rtree9.test d86ebf08ff6328895613ed577dd8a2a37c472c34
  F ext/rtree/rtreeA.test ace05e729a36e342d40cf94e9efc7b4723d9dcdf
- F ext/rtree/rtreeB.test 983e567b49b5dca165940f66b87e161aa30e82b2
+ F ext/rtree/rtreeB.test c85f9ce78766c4e68b8b89fbf2979ee9cfa82b4e
+ F ext/rtree/rtreeC.test df158dcc81f1a43ce7eef361af03c48ec91f1e06
+ F ext/rtree/rtreeD.test 636630357638f5983701550b37f0f5867130d2ca
+ F ext/rtree/rtreeE.test 388c1c8602c3ce55c15f03b509e9cf545fb7c41f
  F ext/rtree/rtree_perf.tcl 6c18c1f23cd48e0f948930c98dfdd37dfccb5195
  F ext/rtree/rtree_util.tcl 06aab2ed5b826545bf215fff90ecb9255a8647ea
- F ext/rtree/sqlite3rtree.h c34c1e41d1ab80bb8ad09aae402c9c956871a765
+ F ext/rtree/sqlite3rtree.h 83349d519fe5f518b3ea025d18dd1fe51b1684bd
  F ext/rtree/tkt3363.test 142ab96eded44a3615ec79fba98c7bde7d0f96de
  F ext/rtree/viewrtree.tcl eea6224b3553599ae665b239bd827e182b466024
 +F ext/sqlrr/README.txt 4239030e73023e72a2e727808cd433577d5bf730
 +F ext/sqlrr/sqlrr.c 8d1e6571cd6a6beabdb5bcdfe3a0e723b914db41
 +F ext/sqlrr/sqlrr.h 09e4f8929ad9bc2638732c0cc0db5eef8c417824
  F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x
  F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8
- F main.mk b96c4ca76db96d169006c53867410c455918ce40
- F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
- F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
- F mkextw.sh 4123480947681d9b434a5e7b1ee08135abe409ac
- F mkopcodec.awk f6fccee29e68493bfd90a2e0466ede5fa94dd2fc
- F mkopcodeh.awk 29b84656502eee5f444c3147f331ee686956ab0e
+ F magic.txt f439556c5ce01ced70987e5ee86549a45165d9ff
 -F main.mk cfa185eed4e0f7e9d28a2e3167cecaa9d6cb39f3
++F main.mk 8400550fd8065095031ba4ecadf355d184a81282
+ F mkopcodec.awk c2ff431854d702cdd2d779c9c0d1f58fa16fa4ea
+ F mkopcodeh.awk c6b3fa301db6ef7ac916b14c60868aeaec1337b5
  F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83
+ F mptest/config01.test 3c6adcbc50b991866855f1977ff172eb6d901271
+ F mptest/config02.test 4415dfe36c48785f751e16e32c20b077c28ae504
+ F mptest/crash01.test cce8e306d8596d5a2e497e27112dae1f6e5e3538
+ F mptest/crash02.subtest f4ef05adcd15d60e5d2bd654204f2c008b519df8
+ F mptest/mptest.c 499a74af4be293b7c1c7c3d40f332b67227dd739
+ F mptest/multiwrite01.test 499ad0310da8dff8e8f98d2e272fc2a8aa741b2e
  F spec.template 86a4a43b99ebb3e75e6b9a735d5fd293a24e90ca
  F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b
- F sqlite3.1 6be1ad09113570e1fc8dcaff84c9b0b337db5ffc
- F sqlite3.pc.in ae6f59a76e862f5c561eb32a380228a02afc3cad
- F src/alter.c 0c1716aa8d248bd6bc750e23be4c68ad05f8668c
- F src/analyze.c 7553068d21e32a57fc33ab6b2393fc8c1ba41410
- F src/attach.c 577bf5675b0c50495fc28549f2fcbdb1bac71143
+ F sqlite3.1 3d8b83c91651f53472ca17599dae3457b8b89494
+ F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a
+ F src/alter.c b00900877f766f116f9e16116f1ccacdc21d82f1
+ F src/analyze.c 3596f863bb80126fe56ba217df5932749271efc8
+ F src/attach.c 3801129015ef59d76bf23c95ef9b0069d18a0c52
  F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
- F src/backup.c 5b31b24d6814b11de763debf342c8cd0a15a4910
- F src/bitvec.c 26675fe8e431dc555e6f2d0e11e651d172234aa1
+ F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53
+ F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb
  F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
- F src/btree.c 64acbd5fd89629d2f52d5d6f851cc534d2a66fbe
- F src/btree.h 4aee02e879211bfcfd3f551769578d2e940ab6c2
- F src/btreeInt.h 4e5c2bd0f9b36b2a815a6d84f771a61a65830621
- F src/build.c c4555e16f8ccdadb2616014c617ed8166c5a93f7
- F src/callback.c 0cb4228cdcd827dcc5def98fb099edcc9142dbcd
 -F src/btree.c 6c9b51abd404ce5b78b173b6f2248e8cb824758c
++F src/btree.c 12c020dbba798e47fcc8a9955d7faef4792125cc
+ F src/btree.h d79306df4ed9181b48916737fe8871a4392c4594
+ F src/btreeInt.h cf180d86b2e9e418f638d65baa425c4c69c0e0e3
+ F src/build.c 02665ca158431a0926b10cbd7d8178a4c9fc4a22
+ F src/callback.c 174e3c8656bc29f91d710ab61550d16eea34be98
  F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac
- F src/ctime.c 72a70dcfda75d3a1f81041ce4573e7afddcd8e4e
- F src/date.c 067a81c9942c497aafd2c260e13add8a7d0c7dd4
- F src/delete.c 4f7d773ec44b7db22b30ec9144f58a69154e09b7
- F src/expr.c 4de967b85f577ba00a7cdcb53d22070def6198db
+ F src/ctime.c 0231df905e2c4abba4483ee18ffc05adc321df2a
+ F src/date.c 593c744b2623971e45affd0bde347631bdfa4625
+ F src/delete.c bcf8f72126cea80fc3d5bc5494cf19b3f8935aaf
+ F src/expr.c 4f9e497c66e2f25a4d139357a778c84d5713207c
  F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
- F src/fkey.c c82a04e7a92bb728f9ab972b76590403283be2af
- F src/func.c 8dea4e82d536997cf4aa85d6573479995e18f38c
- F src/global.c fb44b11e02e06c995e6ed6642509edd23599d584
- F src/hash.c a4031441741932da9e7a65bee2b36b5d0e81c073
- F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970
+ F src/fkey.c 5269ef07b100763134f71b889327c333bd0989cf
 -F src/func.c 2e16316ec3a6365a0dc3e553c586f91b20f7f6c8
++F src/func.c 6ace0c0c0d5f0a23273a0c74b35b5f41113f09eb
+ F src/global.c 1d7bb7ea8254ae6a68ed9bfaf65fcb3d1690b486
+ F src/hash.c d139319967164f139c8d1bb8a11b14db9c4ba3cd
+ F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22
  F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
- F src/insert.c 6e2aa7fbb5d4c5f34d412772751ed0aff0b9e87b
- F src/journal.c 552839e54d1bf76fb8f7abe51868b66acacf6a0e
- F src/legacy.c 015826a958f690302d27e096a68d50b3657e4201
- F src/lempar.c 0ee69fca0be54cd93939df98d2aca4ca46f44416
- F src/loadext.c f20382fbaeec832438a1ba7797bee3d3c8a6d51d
- F src/main.c 6fb68d1b6c7dd9188f3ef0182ca1a3ebd1fa0b42
- F src/malloc.c fe085aa851b666b7c375c1ff957643dc20a04bf6
+ F src/insert.c ab34bea5af4fee9f956a0805a32463fb7f674d00
+ F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d
 -F src/legacy.c 0df0b1550b9cc1f58229644735e317ac89131f12
++F src/legacy.c 17887cec559966b62ab3673a02c427338483b147
+ F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b
+ F src/loadext.c 867c7b330b740c6c917af9956b13b81d0a048303
 -F src/main.c 0a8cfb6b2899649880e5874ac9bfd1c6f7c6a4a3
++F src/main.c b3ce9d74745c8ebd16aca28dcacbd30a080626c9
+ F src/malloc.c 0203ebce9152c6a0e5de520140b8ba65187350be
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
- F src/mem1.c 437c7c4af964895d4650f29881df63535caaa1fa
- F src/mem2.c e307323e86b5da1853d7111b68fd6b84ad6f09cf
+ F src/mem1.c c0c990fcaddff810ea277b4fb5d9138603dd5d4b
+ F src/mem2.c dce31758da87ec2cfa52ba4c5df1aed6e07d8e8f
  F src/mem3.c 61c9d47b792908c532ca3a62b999cf21795c6534
- F src/mem5.c c2c63b7067570b00bf33d751c39af24182316f7f
- F src/memjournal.c 0ebce851677a7ac035ba1512a7e65851b34530c6
+ F src/mem5.c 74670012946c4adc8a6ad84d03acc80959c3e529
+ F src/memjournal.c 0683aac6cab6ec2b5374c0db37c0deb2436a3785
  F src/mutex.c d3b66a569368015e0fcb1ac15f81c119f504d3bc
  F src/mutex.h 5bc526e19dccc412b7ff04642f6fdad3fdfdabea
  F src/mutex_noop.c 7682796b7d8d39bf1c138248858efcd10c9e1553
  F src/mutex_unix.c c3a4e00f96ba068a8dbef34084465979aaf369cc
- F src/mutex_w32.c 32a9b3841e2d757355f0012b860b1bc5e01eafa0
+ F src/mutex_w32.c ab08c0fc54b71979370ca7c8f42fc64a9f211ebb
  F src/notify.c 976dd0f6171d4588e89e874fcc765e92914b6d30
- F src/os.c 4c8c8d72a6c58ad2fde4865783e8ae26b494a85e
- F src/os.h 027491c77d2404c0a678bb3fb06286f331eb9b57
 -F src/os.c 1b147e4cf7cc39e618115c14a086aed44bc91ace
++F src/os.c 25df79baf4bec87f75a2c4e995d63361b66b918a
+ F src/os.h 60d419395e32a8029fa380a80a3da2e9030f635e
  F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
- F src/os_unix.c 0482b132e8f1617276661276dd49e6b0ebe1db49
- F src/os_win.c 1e6b79bea91ee0000ed59aec8cc4935342529229
- F src/pager.c 403e8cfae0e0e798e147ec6b04ee712301b54158
- F src/pager.h 491e782fbefc83e115f85588987ebb7d00d9fde6
- F src/parse.y f29df90bd3adc64b33114ab1de9fb7768fcf2099
- F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
- F src/pcache.h 1b5dcc3dc8103d03e625b177023ee67764fa6b7c
- F src/pcache1.c 9fd22671c270b35131ef480bbc00392b8b5f8ab9
- F src/pragma.c 2b556a8a7afcb9e5c17f1901d63413f15c75c4a7
- F src/prepare.c 417a6a758be68de72b34f526d554171bf240e5da
- F src/printf.c 4a9f882f1c1787a8b494a2987765acf9d97ac21f
- F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
- F src/resolve.c 9e28280ec98035f31900fdd1db01f86f68ca6c32
- F src/rowset.c 64655f1a627c9c212d9ab497899e7424a34222e0
- F src/select.c 80633ba7505bf830597edafbeae7b6016fc635ed
- F src/shell.c 8ee5a3cb502e2d574f97b43972e6c1e275e7bec7
- F src/sqlite.h.in f157b58f6876dbfc23d5e64ea2a7eb01d33c02d6
- F src/sqlite3.rc fea433eb0a59f4c9393c8e6d76a6e2596b1fe0c0
+ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa
 -F src/os_unix.c ae4b5240af4619d711301d7992396e182585269f
 -F src/os_win.c 485d06a93965f306c7281fca0937829292367234
++F src/os_unix.c a0ebd5f039e35f4a7e6f254b279a08324166fd00
++F src/os_win.c 31f80c90591fdee22a76682c4b1dd5552d5a69a9
+ F src/os_win.h 057344a6720b4c8405d9bd98f58cb37a6ee46c25
 -F src/pager.c f6bb1fa6cdf2062f2d8aec3e64db302bca519ab8
 -F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
++F src/pager.c 0f8835053ca30c67177bcebf10a2011dde152e27
++F src/pager.h 8feb18f845951ab37e1f65a319b2da24185173ac
+ F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0
+ F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2
+ F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
+ F src/pcache1.c 102e6f5a2fbc646154463eb856d1fd716867b64c
 -F src/pragma.c 810ef31ccfaa233201dcf100637a9777cc24e897
 -F src/prepare.c 677521ab7132615a8a26107a1d1c3132f44ae337
++F src/pragma.c 67d3b4a85cb1844ace98889de10d5b7ae8bf4a80
++F src/prepare.c 954f80160f120ca715ffa5db5549c3262abb335e
+ F src/printf.c e5a0005f8b3de21f85da6a709d2fbee76775bf4b
+ F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece
+ F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66
+ F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be
 -F src/select.c 089c4d46f067a5cccae93524c6377f981ba99bd9
++F src/select.c 2270f57439f69f4b2fd97452203b5da53a51d668
+ F src/shell.c 2afe7a7154e97be0c74c5feacf09626bda8493be
 -F src/sqlite.h.in 564fc23db33870b5096b20d72df7491ce0b8b74f
++F src/sqlite.h.in 1581bfade051f90dcd28b44c6b04fbf326bec4db
+ F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
 +F src/sqlite3_private.h a81a9c5f97c095cc3e86914a05f8fabe0011f4a1
- F src/sqlite3ext.h 6904f4aadf976f95241311fbffb00823075d9477
- F src/sqliteInt.h 44d0917a4fa806cfa51a3f4737b13845fdc4e569
+ F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
 -F src/sqliteInt.h b2947801eccefd7ba3e5f14e1353289351a83cf3
++F src/sqliteInt.h 53c0b5cd25c12a22837807373693a129d90ab98b
  F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
- F src/status.c 35939e7e03abf1b7577ce311f48f682c40de3208
+ F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
  F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
- F src/tclsqlite.c e4de2458b3ef38fdd0498bc4e5ea5367a241b0f3
- F src/test1.c f435cf69dc915a692c37862e5abcab0f79f550e8
- F src/test2.c 4178056dd1e7d70f954ad8a1e3edb71a2a784daf
- F src/test3.c 3c3c2407fa6ec7a19e24ae23f7cb439d0275a60d
- F src/test4.c bf9fa9bece01de08e6f5e02314e4af5c13590dfa
- F src/test5.c a6d1ac55ac054d0b2b8f37b5e655b6c92645a013
- F src/test6.c 417e1e214734393c24a8ee80b41485a9c4169123
- F src/test7.c 2e0781754905c8adc3268d8f0967e7633af58843
- F src/test8.c 8bcce65e5ee027fbfd7da41d28371aabbfd369ff
+ F src/tclsqlite.c e87c99e28a145943666b51b212dacae35fcea0bd
 -F src/test1.c 899bddeb0c7fb2b8062de6f03af4a4e4f48f9df5
++F src/test1.c d289efd4896bf3536c99c097a9181a3239201ca4
+ F src/test2.c 7355101c085304b90024f2261e056cdff13c6c35
+ F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c
+ F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df
+ F src/test5.c 5a34feec76d9b3a86aab30fd4f6cc9c48cbab4c1
+ F src/test6.c 41cacf3b0dd180823919bf9e1fbab287c9266723
+ F src/test7.c 72b732baa5642f795655ba1126ea032af46ecfd2
+ F src/test8.c 54ccd7b1df5062f0ecbf50a8f7b618f8b1f13b20
  F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60
- F src/test_async.c 0612a752896fad42d55c3999a5122af10dcf22ad
- F src/test_autoext.c 30e7bd98ab6d70a62bb9ba572e4c7df347fe645e
- F src/test_backup.c 64fd6173ad99daade1227aa17c3ca0d18fa5e5fa
- F src/test_btree.c 5b89601dcb42a33ba8b820a6b763cc9cb48bac16
- F src/test_config.c e8a50ba3bdd9b191f9078c7d2ce068ae7d99117c
- F src/test_demovfs.c 20a4975127993f4959890016ae9ce5535a880094
+ F src/test_async.c 21e11293a2f72080eda70e1124e9102044531cd8
+ F src/test_autoext.c dea8a01a7153b9adc97bd26161e4226329546e12
 -F src/test_backup.c 3875e899222b651e18b662f86e0e50daa946344e
++F src/test_backup.c 2e6e6a081870150f20c526a2e9d0d29cda47d803
+ F src/test_btree.c 2e9978eca99a9a4bfa8cae949efb00886860a64f
 -F src/test_config.c dabaa32868974e1ae39770cc17d7e066a9c38e6d
++F src/test_config.c 15c77838d6646644362c8ec13348f9889d6e37b0
+ F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9
  F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
- F src/test_func.c 3a8dd37c08ab43b76d38eea2836e34a3897bf170
- F src/test_fuzzer.c 1d26aa965120420bc14807da29d4d4541bfa6148
+ F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f
+ F src/test_func.c d3013ce36f19ac72a99c73864930fd1fa41832f8
  F src/test_hexio.c abfdecb6fa58c354623978efceb088ca18e379cd
- F src/test_init.c 3cbad7ce525aec925f8fda2192d576d47f0d478a
- F src/test_intarray.c d879bbf8e4ce085ab966d1f3c896a7c8b4f5fc99
- F src/test_intarray.h 489edb9068bb926583445cb02589344961054207
+ F src/test_init.c 66b33120ffe9cd853b5a905ec850d51151337b32
+ F src/test_intarray.c 87847c71c3c36889c0bcc9c4baf9d31881665d61
+ F src/test_intarray.h 2ece66438cfd177b78d1bfda7a4180cd3a10844d
  F src/test_journal.c f5c0a05b7b3d5930db769b5ee6c3766dc2221a64
- F src/test_loadext.c df586c27176e3c2cb2e099c78da67bf14379a56e
- F src/test_malloc.c 01cd65ae7ae93de9fbf8214d1ee6b4eba4850700
- F src/test_multiplex.c ac0fbc1748e5b86a41a1d7a84654fae0d53a881d
- F src/test_multiplex.h e99c571bc4968b7a9363b661481f3934bfead61d
- F src/test_mutex.c a6bd7b9cf6e19d989e31392b06ac8d189f0d573e
+ F src/test_loadext.c a5251f956ab6af21e138dc1f9c0399394a510cb4
+ F src/test_malloc.c 1ff5b1243d96124c9a180f3b89424820a1f337f3
+ F src/test_multiplex.c 9f304bf04170c91c0318238d512df2da039eb1c8
+ F src/test_multiplex.h 110a8c4d356e0aa464ca8730375608a9a0b61ae1
+ F src/test_mutex.c 293042d623ebba969160f471a82aa1551626454f
  F src/test_onefile.c 0396f220561f3b4eedc450cef26d40c593c69a25
- F src/test_osinst.c 90a845c8183013d80eccb1f29e8805608516edba
+ F src/test_osinst.c 3d0340bc31a9f3d8a3547e0272373e80f78dde25
  F src/test_pcache.c a5cd24730cb43c5b18629043314548c9169abb00
- F src/test_quota.c 8ab295092c70903ca6f3209fa4c75f5cb6c1bf8e
- F src/test_quota.h 8761e463b25e75ebc078bd67d70e39b9c817a0cb
- F src/test_rtree.c a1bbfc30f14d2bad2f93dbea7dcc697c97a40c66
- F src/test_schema.c 8c06ef9ddb240c7a0fcd31bc221a6a2aade58bf0
- F src/test_server.c 2f99eb2837dfa06a4aacf24af24c6affdf66a84f
- F src/test_spellfix.c 76dd8d3111d2f5354c374f71fa23b752bd0b029c
- F src/test_stat.c d1569c7a4839f13e80187e2c26b2ab4da2d03935
+ F src/test_quota.c 65f6348fec0f2b3020c907247fb47556b214abb9
+ F src/test_quota.h 2a8ad1952d1d2ca9af0ce0465e56e6c023b5e15d
 -F src/test_rtree.c fdd8d29ca5165c7857987a2ba263fac5c69e231f
++F src/test_rtree.c bfe6f4386517f70054311109f3528adffec34485
+ F src/test_schema.c cd12a2223c3a394f4d07bb93bdf6d344c5c121b6
+ F src/test_server.c a2615049954cbb9cfb4a62e18e2f0616e4dc38fe
+ F src/test_sqllog.c c1c1bbedbcaf82b93d83e4f9dd990e62476a680e
+ F src/test_stat.c 9898687a6c2beca733b0dd6fe19163d987826d31
 -F src/test_superlock.c 2b97936ca127d13962c3605dbc9a4ef269c424cd
 +F src/test_superlock.c 12e2bc484c6c2ba837327d37f2e6a6fd9d1464f8
- F src/test_syscall.c a992d8c80ea91fbf21fb2dd570db40e77dd7e6ae
+ F src/test_syscall.c 2e21ca7f7dc54a028f1967b63f1e76155c356f9b
  F src/test_tclvar.c f4dc67d5f780707210d6bb0eb6016a431c04c7fa
- F src/test_thread.c e286f2173563f2a1747c24bcda6b9d030bf4f4e4
- F src/test_vfs.c c6260ef238c1142c8f8bd402db02216afd182ae3
- F src/test_vfstrace.c f60e12754e65c05386aab59db8d2ae086314138d
- F src/test_wholenumber.c 3d2b9ed1505c40ad5c5ca2ad16ae7a289d6cc251
+ F src/test_thread.c 1e133a40b50e9c035b00174035b846e7eef481cb
+ F src/test_vfs.c f84075a388527892ff184988f43b69ce69b8083c
+ F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698
  F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9
- F src/tokenize.c 1e86210d3976717a19238ea7b047fac481fe8c12
- F src/trigger.c 3f258307040173aff383eb23fb74c44fe829078c
- F src/update.c 28d2d098b43a2c70dae399896ea8a02f622410ef
- F src/utf.c 8d819e2e5104a430fc2005f018db14347c95a38f
- F src/util.c 0af2e515dc0dabacec931bca39525f6c3f1c5455
- F src/vacuum.c 587a52bb8833d7ac15af8916f25437e2575028bd
- F src/vdbe.c fcb5bb6f48d8ac9079e1b0fddbc680c91fe95c68
- F src/vdbe.h 18f581cac1f4339ec3299f3e0cc6e11aec654cdb
- F src/vdbeInt.h 573a43ab5697b648a1e8f3dfc7d8667d5ca55729
- F src/vdbeapi.c e05707f39ab3691422b59b72188c004154eb6417
- F src/vdbeaux.c a709b258b800bcfddc69a9d262fe46f88fea63b1
- F src/vdbeblob.c 32f2a4899d67f69634ea4dd93e3f651936d732cb
- F src/vdbemem.c cb55e84b8e2c15704968ee05f0fae25883299b74
- F src/vdbesort.c 0dc1b274dcb4d4c8e71b0b2b15261f286caba39b
- F src/vdbetrace.c 36c1ae141327a5352e5656fd448194b6927bc763
- F src/vtab.c d8020c0a0e8ccc490ca449d7e665311b6e9f3ba9
- F src/wal.c 61b556fa9ddf1f6d60244ead41f9a17aeb1e0f12
- F src/wal.h ce626f1f9000caf09a99a6634a8d794686f92e1b
- F src/walker.c 3d75ba73de15e0f8cd0737643badbeb0e002f07b
- F src/where.c d836df3a2096c41c39e48ab5636f09f94ba02676
- F test/8_3_names.test 0ed0f6711fefac33829ef9f1d6ca3c56c48ef1c7
+ F src/tokenize.c 6da2de6e12218ccb0aea5184b56727d011f4bee7
+ F src/trigger.c 66f3470b03b52b395e839155786966e3e037fddb
+ F src/update.c 5b3e74a03b3811e586b4f2b4cbd7c49f01c93115
+ F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c
+ F src/util.c 2b5fb283a190aacdb286f7835a447c45b345b83c
+ F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
 -F src/vdbe.c 7f359193bf2366cc914a9ece093ebf284e56acdc
++F src/vdbe.c 0c64781331869342b7c1b2fd7140318da0d9a3a8
+ F src/vdbe.h 394464909ed682334aa3d5831aae0c2fe2abef94
+ F src/vdbeInt.h e6d83e5bfd62fc6685ba1ed6153f7099f82de9f7
 -F src/vdbeapi.c 0ed6053f947edd0b30f64ce5aeb811872a3450a4
 -F src/vdbeaux.c e493f38758c4b8f4ca2007cf6a700bd405d192f3
++F src/vdbeapi.c e37d694feecdcd458427715d8d7ab62e1a5761ef
++F src/vdbeaux.c a82cfad30a3b4c1758c28dcee2b4fc20a70cd121
+ F src/vdbeblob.c 9205ce9d3b064d9600f8418a897fc88b5687d9ac
+ F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447
+ F src/vdbesort.c 4abb7c0f8f19b7d7d82f4558d5da1a30fdf9ea38
+ F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
+ F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
 -F src/wal.c 76e7fc6de229bea8b30bb2539110f03a494dc3a8
 -F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4
++F src/wal.c 29854e652a9d7dc0d7a87ff1a9dbffac0aaf2e16
++F src/wal.h 6b3a67ecd7172dcc9f18fc9cd4d76dc4c2166e68
+ F src/walker.c 11edb74d587bc87b33ca96a5173e3ec1b8389e45
+ F src/where.c fd4b525cd5ab652cea2fbc71ac15c975271ca461
+ F src/whereInt.h 6804c2e5010378568c2bb1350477537755296a46
 -F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
++F test/8_3_names.test 05034aadccd2253ffe6cbefb06662b8aa4600f77
  F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2
- F test/aggnested.test 0be144b453e0622a085fae8665c32f5676708e00
+ F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6
  F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87
- F test/all.test 52fc8dee494092031a556911d404ca30a749a30b
- F test/alter.test 57d96ec9b320bd07af77567034488dcb6642c748
+ F test/all.test 6ff7b43c2b4b905c74dc4a813d201d0fa64c5783
+ F test/alter.test 547dc2d292644301ac9a7dda22b319b74f9c08d2
  F test/alter2.test 7ea05c7d92ac99349a802ef7ada17294dd647060
  F test/alter3.test 49c9d9fba2b8fcdce2dedeca97bbf1f369cc548d
- F test/alter4.test b2debc14d8cbe4c1d12ccd6a41eef88a8c1f15d5
+ F test/alter4.test d6c011fa0d6227abba762498cafbb607c9609e93
  F test/altermalloc.test e81ac9657ed25c6c5bb09bebfa5a047cd8e4acfc
- F test/analyze.test f8ab7d15858b4093b06caf5e57e2a5ff7104bdae
- F test/analyze3.test c3c7f6c3951900c188cf94b2d5ee3246d6b3ff89
- F test/analyze4.test 757b37875cf9bb528d46f74497bc789c88365045
- F test/analyze5.test 713354664c5ff1853ab2cbcb740f0cf5cb7c802e
- F test/analyze6.test aa8dae5066bbed35c5f45a507fb87f2d342f2c99
- F test/analyze7.test d3587aa5af75c9048d031b94fceca2534fa75d1d
- F test/analyze8.test 4ca170de2ba30ccb1af2c0406803db72262f9691
+ F test/amatch1.test b5ae7065f042b7f4c1c922933f4700add50cdb9f
+ F test/analyze.test 1772936d66471c65221e437b6d1999c3a03166c4
+ F test/analyze3.test bf41f0f680dd1e0d44eed5e769531e93a5320275
+ F test/analyze4.test eff2df19b8dd84529966420f29ea52edc6b56213
+ F test/analyze5.test 765c4e284aa69ca172772aa940946f55629bc8c4
+ F test/analyze6.test d31defa011a561b938b4608d3538c1b4e0b5e92c
+ F test/analyze7.test bb1409afc9e8629e414387ef048b8e0e3e0bdc4f
+ F test/analyze8.test 093d15c1c888eed5034304a98c992f7360130b88
+ F test/analyze9.test 623e02a99a78fa12fe5def2fd559032d5d887e0f
+ F test/analyzeA.test 1a5c40079894847976d983ca39c707aaa44b6944
+ F test/analyzeB.test 8bf35ee0a548aea831bf56762cb8e7fdb1db083d
  F test/async.test 1d0e056ba1bb9729283a0f22718d3a25e82c277b
  F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b
  F test/async3.test d73a062002376d7edc1fe3edff493edbec1fc2f7
  F test/async4.test 1787e3952128aa10238bf39945126de7ca23685a
- F test/async5.test 0dd8701bd588bf6e70c2557a22ae3f22b2567b4c
- F test/atof1.test 9bf1d25180a2e05fc12ce3940cc8003033642f68
+ F test/async5.test 383ab533fdb9f7ad228cc99ee66e1acb34cc0dc0
+ F test/atof1.test 08a61df9365c341f334a65f4348897312d8f3db7
 -F test/attach.test 0d112b7713611fdf0340260192749737135fda5f
 +F test/attach.test 63033baa59be42c811ef0d4e73ebd2d6dba4805c
- F test/attach2.test e54436ed956d3d88bdee61221da59bf3935a0966
- F test/attach3.test d89ccfe4fe6e2b5e368d480fcdfe4b496c54cf4e
+ F test/attach2.test 0ec5defa340363de6cd50fd595046465e9aaba2d
+ F test/attach3.test 359eb65d00102cdfcef6fa4e81dc1648f8f80b27
 -F test/attach4.test 53bf502f17647c6d6c5add46dda6bac8b6f4665c
 +F test/attach4.test faaaf33fa51f986b414520cb03cecdc7999df108
  F test/attachmalloc.test 3a4bfca9545bfe906a8d2e622de10fbac5b711b0
- F test/auth.test 304e82f31592820d3bde26ab6b75deaa123e1a6f
- F test/auth2.test 270baddc8b9c273682760cffba6739d907bd2882
+ F test/auth.test 5bdf154eb28c0e4bbc0473f335858c0d96171768
+ F test/auth2.test c3b415b76c033bedb81292118fb7c01f5f10cbcd
  F test/auth3.test a4755e6a2a2fea547ffe63c874eb569e60a28eb5
- F test/autoinc.test bd30d372d00045252f6c2e41b5f41455e1975acf
- F test/autoindex1.test 058d0b331ae6840a61bbee910d8cbae27bfd5991
- F test/autovacuum.test 9f22a7733f39c56ef6a5665d10145ac25d8cb574
+ F test/autoinc.test c58912526998a39e11f66b533e23cfabea7f25b7
+ F test/autoindex1.test 762ff3f8e25d852aae55c6462ca166a80c0cde61
+ F test/autovacuum.test 941892505d2c0f410a0cb5970dfa1c7c4e5f6e74
  F test/autovacuum_ioerr2.test 8a367b224183ad801e0e24dcb7d1501f45f244b4
  F test/avtrans.test 0252654f4295ddda3b2cce0e894812259e655a85
- F test/backcompat.test ecd841f3a3bfb81518721879cc56a760670e3198
+ F test/backcompat.test 5f8ad58b3eaebc78cd2c66c65476a42e6f32b2ad
  F test/backup.test c9cdd23a495864b9edf75a9fa66f5cb7e10fcf62
  F test/backup2.test 34986ef926ea522911a51dfdb2f8e99b7b75ebcf
- F test/backup_ioerr.test 40d208bc9224b666ee3ed423f49bc9062a36a9d0
+ F test/backup4.test 2a2e4a64388090b152de753fd9e123f28f6a3bd4
+ F test/backup_ioerr.test 4c3c7147cee85b024ecf6e150e090c32fdbb5135
  F test/backup_malloc.test 7162d604ec2b4683c4b3799a48657fb8b5e2d450
  F test/badutf.test d5360fc31f643d37a973ab0d8b4fb85799c3169f
  F test/badutf2.test f5bc7f2d280670ecd79b9cf4f0f1760c607fe51f
  F test/bc_common.tcl 5c8689cc6d2fb44b7c0968ae4f85eb26d50022fa
- F test/between.test 16b1776c6323faadb097a52d673e8e3d8be7d070
- F test/bigfile.test 8f88b5ef065e31c615c49d725ede94155fbe9609
- F test/bigfile2.test 8a3c242c3c3481e7cde5a6ef2a66fdc367a095f7
+ F test/between.test 34d375fb5ce1ae283ffe82b6b233e9f38e84fc6c
+ F test/bigfile.test aa74f4e5db51c8e54a1d9de9fa65d01d1eb20b59
+ F test/bigfile2.test 1b489a3a39ae90c7f027b79110d6b4e1dbc71bfc
  F test/bigrow.test f0aeb7573dcb8caaafea76454be3ade29b7fc747
 -F test/bind.test 3c7b320969000c441a70952b0b15938fbb66237c
 +F test/bind.test 30af0fc61bc3836034215cdbdeca46113ca1b4a1
  F test/bindxfer.test efecd12c580c14df5f4ad3b3e83c667744a4f7e0
  F test/bitvec.test 75894a880520164d73b1305c1c3f96882615e142
  F test/blob.test e7ac6c7d3a985cc4678c64f325292529a69ae252
@@@ -314,21 -361,24 +365,24 @@@ F test/boundary3.tcl 23361e108a125dca9c
  F test/boundary3.test 56ef82096b4329aca2be74fa1e2b0f762ea0eb45
  F test/boundary4.tcl 0bb4b1a94f4fc5ae59b79b9a2b7a140c405e2983
  F test/boundary4.test 89e02fa66397b8a325d5eb102b5806f961f8ec4b
+ F test/btreefault.test c2bcb542685eea44621275cfedbd8a13f65201e3
  F test/busy.test 76b4887f8b9160ba903c1ac22e8ff406ad6ae2f0
- F test/cache.test 3e50417948e06959aca785db81896b28a38c36dd
- F test/capi2.test 835d4cee9f542ea50fa8d01f3fe6de80b0627360
- F test/capi3.test 56ab450125ead38846cbae7e5b6a216686c3cffa
 -F test/cache.test 13bc046b26210471ca6f2889aceb1ea52dc717de
++F test/cache.test 0bc2195f4a7207108af2617ed356e77daf4412f7
+ F test/capi2.test 011c16da245fdc0106a2785035de6b242c05e738
+ F test/capi3.test 71bcf2fbd36a9732f617766dfd752552c8e491b5
  F test/capi3b.test efb2b9cfd127efa84433cd7a2d72ce0454ae0dc4
- F test/capi3c.test 93d24621c9ff84da9da060f30431e0453db1cdb0
- F test/capi3d.test 17b57ca28be3e37e14c2ba8f787d292d84b724a1
- F test/capi3e.test f7408dda65c92b9056199fdc180f893015f83dde
+ F test/capi3c.test a21869e4d50d5dbb7e566e328fc0bc7c2efa6a32
+ F test/capi3d.test 6d0fc0a86d73f42dd19a7d8b7761ab9bc02277d0
+ F test/capi3e.test 3d49c01ef2a1a55f41d73cba2b23b5059ec460fe
  F test/cast.test 4c275cbdc8202d6f9c54a3596701719868ac7dc3
- F test/check.test 193f47ed43a8d29aca12b30cd30ceb105fbe710d
+ F test/check.test 5831ddb6f2c687782eaf2e1a07b6e17f24c4f763
+ F test/close.test 340bd24cc58b16c6bc01967402755027c37eb815
+ F test/closure01.test b1703ba40639cfc9b295cf478d70739415eec6a4
  F test/coalesce.test cee0dccb9fbd2d494b77234bccf9dc6c6786eb91
- F test/collate1.test e3eaa48c21e150814be1a7b852d2a8af24458d04
- F test/collate2.test 04cebe4a033be319d6ddbb3bbc69464e01700b49
- F test/collate3.test d28d2cfab2c3a3d4628ae4b2b7afc9965daa3b4c
- F test/collate4.test d37682293d3c32223dec2e6afdeaf9de18415248
+ F test/collate1.test 73b91005f264b7c403e2d63a6708d150679ac99a
+ F test/collate2.test 9aaa410a00734e48bcb27f3872617d6f69b2a621
+ F test/collate3.test 79558a286362cb9ed603c6fa543f1cda7f563f0f
+ F test/collate4.test f04d5168685f2eef637ecfa2d4ddf8ec0d600177
  F test/collate5.test 65d928034d30d2d263a80f6359f7549ee1598ec6
  F test/collate6.test 8be65a182abaac8011a622131486dafb8076e907
  F test/collate7.test 8ec29d98f3ee4ccebce6e16ce3863fb6b8c7b868
@@@ -367,54 -424,57 +428,57 @@@ F test/crashtest1.c 09c1c7d728ccf4feb9e
  F test/createtab.test b5de160630b209c4b8925bdcbbaf48cc90b67fe8
  F test/cse.test 277350a26264495e86b1785f34d2d0c8600e021c
  F test/ctime.test 7bd009071e242aac4f18521581536b652b789a47
- F test/date.test f3228180c87bbe5d39c9397bf001c0095c3821b9
- F test/dbstatus.test 207e5b63fcb7b9c3bb8e1fdf38ebd4654ad0e54b
- F test/dbstatus2.test 3efd4beb77136cd02f826d81d83bc3b94cf9d276
- F test/default.test 6faf23ccb300114924353007795aa9a8ec0aa9dc
+ F test/date.test 42973251b9429f2c41b77eb98a7b0b0ba2d3b2c0
+ F test/dbstatus.test 8de104bb5606f19537d23cd553b41349b5ab1204
 -F test/dbstatus2.test 10418e62b3db5dca070f0c3eef3ea13946f339c2
++F test/dbstatus2.test fc968d3005b4d827eba807a06573a6c528aa119a
+ F test/default.test 792c3c70836f1901e2a8cb34fa0880ed71e2c1a9
  F test/delete.test a065b05d2ebf60fd16639c579a4adfb7c381c701
  F test/delete2.test 3a03f2cca1f9a67ec469915cb8babd6485db43fa
  F test/delete3.test 555e84a00a99230b7d049d477a324a631126a6ab
- F test/descidx1.test 533dcbda614b0463b0ea029527fd27e5a9ab2d66
+ F test/descidx1.test 6d03b44c8538fe0eb4924e19fba10cdd8f3c9240
  F test/descidx2.test 9f1a0c83fd57f8667c82310ca21b30a350888b5d
- F test/descidx3.test fe720e8b37d59f4cef808b0bf4e1b391c2e56b6f
+ F test/descidx3.test 09ddbe3f5295f482d2f8b687cf6db8bad7acd9a2
  F test/diskfull.test 106391384780753ea6896b7b4f005d10e9866b6e
- F test/distinct.test c239558222e5ae357aade535bfe61aaabcb00bbf
+ F test/distinct.test 086e70c765f172e8974e9f83b9ac5ca03c154e77
  F test/distinctagg.test 1a6ef9c87a58669438fc771450d7a72577417376
- F test/e_createtable.test 0a2465736199cb5e084645a8714ee04299b81721
- F test/e_delete.test 89aa84d3d1bd284a0689ede04bce10226a5aeaa5
- F test/e_droptrigger.test afd5c4d27dec607f5997a66bf7e2498a082cb235
- F test/e_dropview.test 583411e470458c5d76148542cfb5a5fa84c8f93e
- F test/e_expr.test 5489424d3d9a452ac3701cdf4b680ae31a157894
- F test/e_fkey.test a79ab1d3213c7ac64621eec28f8e8bb219775445
+ F test/e_createtable.test ed82efcedc4b3656b27a5fcd12335cdb7e20eeee
+ F test/e_delete.test d5186e2f5478b659f16a2c8b66c09892823e542a
+ F test/e_droptrigger.test 3cd080807622c13e5bbb61fc9a57bd7754da2412
+ F test/e_dropview.test 0c9f7f60989164a70a67a9d9c26d1083bc808306
+ F test/e_expr.test 5c71d183fbf519a4769fd2e2124afdc70b5b1f42
+ F test/e_fkey.test a1783fe1f759e1990e6a11adfcf0702dac4d0707
  F test/e_fts3.test 5c02288842e4f941896fd44afdef564dd5fc1459
- F test/e_insert.test c6ac239a97cb16dfbd0c16496f8cd871b4068c0c
- F test/e_reindex.test dfedfc32c5a282b0596c6537cbcd4217fbb1a216
+ F test/e_insert.test 1e44f84d2abe44d66e4fbf198be4b20e3cc724a0
+ F test/e_reindex.test 396b7b4f0a66863b4e95116a67d93b227193e589
  F test/e_resolve.test dcce9308fb13b934ce29591105d031d3e14fbba6
- F test/e_select.test 07e8d81268ba1ffcaf1dc4bec48956af150c42f9
- F test/e_select2.test 5c3d3da19c7b3e90ae444579db2b70098599ab92
- F test/e_update.test 161d5dc6a3ed9dd08f5264d13e20735d7a89f00c
- F test/e_uri.test 9e190ca799d9190eec6e43f2aadf1d10c06a57a3
- F test/e_vacuum.test 331da289ae186656cf5f2eb27f577a89c0c221af
+ F test/e_select.test 52692ff3849541e828ad4661fe3773a9b8711763
+ F test/e_select2.test aceb80ab927d46fba5ce7586ebabf23e2bb0604f
+ F test/e_update.test 312cb8f5ccfe41515a6bb092f8ea562a9bd54d52
+ F test/e_uri.test a2c92d80093a7efdcfbb11093651cbea87097b6b
+ F test/e_vacuum.test 5bfbdc21b65c0abf24398d0ba31dc88d93ca77a9
  F test/enc.test e54531cd6bf941ee6760be041dff19a104c7acea
- F test/enc2.test 796c59832e2b9a52842f382ffda8f3e989db03ad
+ F test/enc2.test 83437a79ba1545a55fb549309175c683fb334473
  F test/enc3.test 90683ad0e6ea587b9d5542ca93568af9a9858c40
  F test/enc4.test c8f1ce3618508fd0909945beb8b8831feef2c020
- F test/eqp.test 46aa946dd55c90635327898275d3e533d23a9845
- F test/errmsg.test 3bb606db9d040cc6854459f8f5e5a2bcd9b7fd2a
+ F test/eqp.test 90b56d03a93a2e7bb90f88be6083a8ea53f11a0e
+ F test/errmsg.test f31592a594b44ee121371d25ddd5d63497bb3401
  F test/eval.test bc269c365ba877554948441e91ad5373f9f91be3
- F test/exclusive.test bd8976a6e67daf8e9948eb1c6a27afafe79752fa
- F test/exclusive2.test 372be98f6de44dd78734e364b7b626ea211761a6
 -F test/exclusive.test c7ebbc756eacf544c108b15eed64d7d4e5f86b75
++F test/exclusive.test c0d5e3c0756ac6ccd4d45e0b21ff9f01b963fa61
+ F test/exclusive2.test 32798111aae78a5deec980eee383213f189df308
  F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
  F test/exists.test 8f7b27b61c2fbe5822f0a1f899c715d14e416e30
  F test/expr.test 67c9fd6f8f829e239dc8b0f4a08a73c08b09196d
- F test/fallocate.test 9b74e7469ac8c1c19871a667dac1dd642d06a9ed
- F test/filectrl.test f0327bd804d9c7bd048fa7a151c5eab8e27df42b
- F test/filefmt.test ffa17b5aebc3eb4b1e3be1ccb5ee906ffbd97f6e
- F test/fkey1.test 01c7de578e11747e720c2d9aeef27f239853c4da
- F test/fkey2.test 080969fe219b3b082b0e097ac18c6af2e5b0631f
- F test/fkey3.test 5ec899d12b13bcf1e9ef40eff7fb692fdb91392e
- F test/fkey4.test c6c8f9f9be885f95c85c7bceb26f243ad906fd49
- F test/fkey_malloc.test c3a12acd053c976de09036498eef09b83afa4a80
 -F test/fallocate.test 3e979af17dfa7e5e9dda5eba1a696c04fa9d47f7
++F test/fallocate.test fe52076a43ff99da8411990dbb4f374e81e88c85
+ F test/filectrl.test 14fa712e42c4cb791e09dfd58a6a03efb47ef13a
+ F test/filefmt.test cb34663f126cbc2d358af552dcaf5c72769b0146
+ F test/fkey1.test e1d1fa84cde579185ea01358436839703e415a5b
+ F test/fkey2.test 32ca728bcb854feed72d1406ea375fe423eebff2
+ F test/fkey3.test 76d475c80b84ee7a5d062e56ccb6ea68882e2b49
+ F test/fkey4.test 86446017011273aad8f9a99c1a65019e7bd9ca9d
+ F test/fkey5.test 8a1fde4e7721ae00b05b3178888833726ca2df8d
+ F test/fkey6.test abb59f866c1b44926fd02d1fdd217d831fe04f48
+ F test/fkey7.test e31d0e71a41c1d29349a16448d6c420e2c53a8fc
+ F test/fkey_malloc.test 594a7ea1fbab553c036c70813cd8bd9407d63749
  F test/format4.test 1f0cac8ff3895e9359ed87e41aaabee982a812eb
  F test/fts-9fd058691.test 78b887e30ae6816df0e1fed6259de4b5a64ad33c
  F test/fts1a.test 46090311f85da51bb33bd5ce84f7948359c6d8d7
@@@ -505,53 -575,62 +579,62 @@@ F test/fts4langid.test 24a6e41063b416bb
  F test/fts4merge.test c424309743fdd203f8e56a1f1cd7872cd66cc0ee
  F test/fts4merge2.test 5faa558d1b672f82b847d2a337465fa745e46891
  F test/fts4merge3.test aab02a09f50fe6baaddc2e159c3eabc116d45fc7
- F test/fts4unicode.test aad033abdcfa0f87ce5f56468f59fdf2a0acbcef
+ F test/fts4merge4.test c19c85ca1faa7b6d536832b49c12e1867235f584
+ F test/fts4noti.test aed33ba44808852dcb24bf70fa132e7bf530f057
+ F test/fts4unicode.test 01ec3fe2a7c3cfff3b4c0581b83caa11b33efa36
  F test/full.test 6b3c8fb43c6beab6b95438c1675374b95fab245d
- F test/func.test 0d89043dab9a8853358d14c68e028ee0093bf066
+ F test/func.test ae97561957aba6ca9e3a7b8a13aac41830d701ef
  F test/func2.test 772d66227e4e6684b86053302e2d74a2500e1e0f
- F test/func3.test 001021e5b88bd02a3b365a5c5fd8f6f49d39744a
+ F test/func3.test dbccee9133cfef1473c59ec07b5f0262b9d72f9a
+ F test/func4.test 6beacdfcb0e18c358e6c2dcacf1b65d1fa80955f
+ F test/func5.test cdd224400bc3e48d891827cc913a57051a426fa4
  F test/fuzz-oss1.test 4912e528ec9cf2f42134456933659d371c9e0d74
- F test/fuzz.test 77fd50afc12847af50fcf1941679d90adebadde6
+ F test/fuzz.test 96083052bf5765e4518c1ba686ce2bab785670d1
  F test/fuzz2.test 207d0f9d06db3eaf47a6b7bfc835b8e2fc397167
- F test/fuzz3.test aec64345184d1662bd30e6a17851ff659d596dc5
+ F test/fuzz3.test efd384b896c647b61a2c1848ba70d42aad60a7b3
  F test/fuzz_common.tcl a87dfbb88c2a6b08a38e9a070dabd129e617b45b
  F test/fuzz_malloc.test 328f70aaca63adf29b4c6f06505ed0cf57ca7c26
- F test/fuzzer1.test 69cf1036b92fd3b8e1fd65bef4d7ee3f085c28fb
- F test/fuzzerfault.test ff2282c81797b6a355f0748d8b54c7287c5d2b25
- F test/hook.test 5f3749de6462a6b87b4209b74adf7df5ac2df639
+ F test/fuzzer1.test d4c52aaf3ef923da293a2653cfab33d02f718a36
+ F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536
+ F test/genesis.tcl 1e2e2e8e5cc4058549a154ff1892fe5c9de19f98
+ F test/hook.test 162d7cef7a2d2b04839fe14402934e6a1b79442f
  F test/icu.test 70df4faca133254c042d02ae342c0a141f2663f4
- F test/in.test 5941096407d8c133b9eff15bd3e666624b6cbde3
+ F test/in.test 047c4671328e9032ab95666a67021adbbd36e98e
  F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75
  F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0
- F test/in4.test 64f3cc1acde1b9161ccdd8e5bde3daefdb5b2617
+ F test/in4.test 41c1c031aa46b1eb4411df2687ed2ed498da23b5
  F test/in5.test 99f9a40af01711b06d2d614ecfe96129f334fba3
- F test/incrblob.test 34765fa6fb5d8e0f256fc7d6497c04b205398849
- F test/incrblob2.test edc3a96e557bd61fb39acc8d2edd43371fbbaa19
- F test/incrblob3.test 086482e7937202be9f8cf327117a042d8628fe7d
- F test/incrblob4.test 09be37d3dd996a31ea6993bba7837ece549414a8
+ F test/incrblob.test e81846d214f3637622620fbde7cd526781cfe328
+ F test/incrblob2.test bf4d549aa4a466d7fbe3e3a3693d3861263d5600
 -F test/incrblob3.test d8d036fde015d4a159cd3cbae9d29003b37227a4
++F test/incrblob3.test 5fa6f2665ae37da05928bb16851d4f86515af78a
+ F test/incrblob4.test f26502a5697893e5acea268c910f16478c2f0fab
  F test/incrblob_err.test d2562d2771ebffd4b3af89ef64c140dd44371597
- F test/incrblobfault.test 917c0292224c64a56ef7215fd633a3a82f805be0
+ F test/incrblobfault.test 280474078f6da9e732cd2a215d3d854969014b6e
  F test/incrvacuum.test d2a6ddf5e429720b5fe502766af747915ccf6c32
 -F test/incrvacuum2.test 379eeb8740b0ef60c372c439ad4cbea20b34bb9b
 +F test/incrvacuum2.test a1828b6165af6c248c4eb80aeaee2bcbb45768c1
- F test/incrvacuum_ioerr.test 22f208d01c528403240e05beecc41dc98ed01637
- F test/index.test b5429732b3b983fa810e3ac867d7ca85dae35097
+ F test/incrvacuum3.test 75256fb1377e7c39ef2de62bfc42bbff67be295a
+ F test/incrvacuum_ioerr.test 6ae2f783424e47a0033304808fe27789cf93e635
+ F test/index.test 4d990005a67a36984e4f1a5f1bdccea8d08da4ee
  F test/index2.test ee83c6b5e3173a3d7137140d945d9a5d4fdfb9d6
- F test/index3.test 423a25c789fc8cc51aaf2a4370bbdde2d9e9eed7
- F test/index4.test 2983216eb8c86ee62d9ed7cb206b5cc3331c0026
- F test/index5.test edc8c64ca78bee140c21ce3836820fadf47906bb
- F test/indexedby.test be501e381b82b2f8ab406309ba7aac46e221f4ad
+ F test/index3.test 55a90cff99834305e8141df7afaef39674b57062
+ F test/index4.test ab92e736d5946840236cd61ac3191f91a7856bf6
+ F test/index5.test fc07c14193c0430814e7a08b5da46888ee795c33
+ F test/index6.test fb370966ac3cd0989053dd5385757b5c3e24ab6a
+ F test/index7.test a3baf9a625bda7fd49471e99aeae04095fbfeecf
+ F test/indexedby.test b2f22f3e693a53813aa3f50b812eb609ba6df1ec
  F test/indexfault.test 31d4ab9a7d2f6e9616933eb079722362a883eb1d
  F test/init.test 15c823093fdabbf7b531fe22cf037134d09587a7
- F test/insert.test 489aa12a027c83d291f5034a83c8c32e6be1dca2
+ F test/insert.test acf909b067b838eb55338d619e800e148c17f1f5
  F test/insert2.test 4f3a04d168c728ed5ec2c88842e772606c7ce435
  F test/insert3.test 1b7db95a03ad9c5013fdf7d6722b6cd66ee55e30
- F test/insert4.test 87f6798f31d60c4e177622fcc3663367e6ecbd90
+ F test/insert4.test 4791662c50518bdd37d394cae9a7a8014e845bb3
  F test/insert5.test 394f96728d1258f406fe5f5aeb0aaf29487c39a6
+ F test/instr.test 737bbf80685232033f3abedc6ae92f75860b5dd2
  F test/intarray.test 066b7d7ac38d25bf96f87f1b017bfc687551cdd4
- F test/interrupt.test 42e7cf98646fd9cb4a3b131a93ed3c50b9e149f1
- F test/intpkey.test 7af30f6ae852d8d1c2b70e4bf1551946742e92d8
- F test/io.test 36d251507d72e92b965fb2f0801c2f0b56335bcf
- F test/ioerr.test 40bb2cfcab63fb6aa7424cd97812a84bc16b5fb8
+ F test/interrupt.test dfe9a67a94b0b2d8f70545ba1a6cca10780d71cc
+ F test/intpkey.test 7506090fc08e028712a8bf47e5f54111947e3844
+ F test/io.test 3a7abcef18727cc0f2399e04b0e8903eccae50f8
+ F test/ioerr.test 2a24bd6ed5a8b062e64bfe1f6cf94fb25e92210d
  F test/ioerr2.test 9d71166f8466eda510f1af6137bdabaa82b5408d
  F test/ioerr3.test d3cec5e1a11ad6d27527d0d38573fbff14c71bdd
  F test/ioerr4.test f130fe9e71008577b342b8874d52984bd04ede2c
@@@ -580,18 -660,17 +664,18 @@@ F test/lock.test 87af515b0c4cf928576d0f
  F test/lock2.test 5242d8ac4e2d59c403aebff606af449b455aceff
  F test/lock3.test f271375930711ae044080f4fe6d6eda930870d00
  F test/lock4.test e175ae13865bc87680607563bafba21f31a26f12
 -F test/lock5.test 5ad6a1f536036ff1be915cfdd41481aeafda3273
 -F test/lock6.test ad5b387a3a8096afd3c68a55b9535056431b0cf5
 +F test/lock5.test 71d0ba9cd23212b5ce1a433107c806203fa6d5f9
 +F test/lock6.test 83434ae8ca1d1c5e2eaf74d4e44aa24ab62b291c
- F test/lock7.test 64006c84c1c616657e237c7ad6532b765611cf64
+ F test/lock7.test 49f1eaff1cdc491cc5dee3669f3c671d9f172431
  F test/lock_common.tcl 0c270b121d40959fa2f3add382200c27045b3d95
 +F test/lock_proxy.test 95be9c32d79be25cf643b4e41a0aa0e53aa21621
  F test/lookaside.test 93f07bac140c5bb1d49f3892d2684decafdc7af2
 -F test/main.test 39c4bb8a157f57298ed1659d6df89d9f35aaf2c8
 +F test/main.test 3991157c720c2b2b9ec27254d940f06ab81aab84
  F test/make-where7.tcl 05c16b5d4f5d6512881dfec560cb793915932ef9
- F test/malloc.test bc745155ff4252d4f35ec8316625b0dfe2abc659
- F test/malloc3.test de8eca0c3e748878845fdca3663ec4b642073caf
+ F test/malloc.test fd368e31fe98d4779ed80442f311ed9f03bcd1f7
+ F test/malloc3.test e3b32c724b5a124b57cb0ed177f675249ad0c66a
  F test/malloc4.test 957337613002b7058a85116493a262f679f3a261
- F test/malloc5.test a577cbbcc1594c7763b9b3515b3633555751c7f0
+ F test/malloc5.test fafce0aa9157060445cd1a56ad50fc79d82f28c3
  F test/malloc6.test 2f039d9821927eacae43e1831f815e157659a151
  F test/malloc7.test 7c68a32942858bc715284856c5507446bba88c3a
  F test/malloc8.test 9b7a3f8cb9cf0b12fff566e80a980b1767bd961d
@@@ -608,59 -687,75 +692,75 @@@ F test/mallocH.test 79b65aed612c9b3ed2d
  F test/mallocI.test a88c2b9627c8506bf4703d8397420043a786cdb6
  F test/mallocJ.test b5d1839da331d96223e5f458856f8ffe1366f62e
  F test/mallocK.test d79968641d1b70d88f6c01bdb9a7eb4a55582cc9
- F test/malloc_common.tcl 11838863dc689f2d2b10896c8f4276771a60b42f
 -F test/malloc_common.tcl 58e54229c4132ef882a11fab6419ec4cd3073589
 -F test/manydb.test 28385ae2087967aa05c38624cec7d96ec74feb3e
++F test/malloc_common.tcl e0fbe63a9a0bb8c42fe8d3ebf502141f485acbc2
 +F test/manydb.test 3cd8e52ab3112cb8365afeedd6e8231977920577
  F test/mem5.test c6460fba403c5703141348cd90de1c294188c68f
- F test/memdb.test 499d199e612bc229f52d1c46c6038deeef93d1f2
 -F test/memdb.test fcb5297b321b562084fc79d64d5a12a1cd2b639b
++F test/memdb.test da09b7f354f3dc0b74d992f5451ae03ebfb36920
  F test/memleak.test 10b9c6c57e19fc68c32941495e9ba1c50123f6e2
- F test/memsubsys1.test c5fcd4bfda423c7cca6edbba96491af631758939
 -F test/memsubsys1.test f97cfd0b30e85c2f1ed16d642e7ac58006be84b2
++F test/memsubsys1.test 04b6c76f91070bbb7cb8713cd51882d6e49f7530
  F test/memsubsys2.test 3a1c1a9de48e5726faa85108b02459fae8cb9ee9
- F test/minmax.test 722d80816f7e096bf2c04f4111f1a6c1ba65453d
- F test/minmax2.test 33504c01a03bd99226144e4b03f7631a274d66e0
+ F test/minmax.test 42fbad0e81afaa6e0de41c960329f2b2c3526efd
+ F test/minmax2.test b44bae787fc7b227597b01b0ca5575c7cb54d3bc
  F test/minmax3.test cc1e8b010136db0d01a6f2a29ba5a9f321034354
  F test/minmax4.test 536a3360470633a177e42fbc19660d146b51daef
- F test/misc1.test 889b40722442380a2f6575f30831b32b2372d70e
+ F test/misc1.test 441a0fafc7087f841db09fbfca54e7aea9f5a84c
  F test/misc2.test 00d7de54eda90e237fc9a38b9e5ccc769ebf6d4d
- F test/misc3.test fe55130a43e444ee75e2156ff75dc96e964b5738
+ F test/misc3.test cf3dda47d5dda3e53fc5804a100d3c82be736c9d
  F test/misc4.test 9c078510fbfff05a9869a0b6d8b86a623ad2c4f6
  F test/misc5.test 528468b26d03303b1f047146e5eefc941b9069f5
  F test/misc6.test 953cc693924d88e6117aeba16f46f0bf5abede91
- F test/misc7.test f00dad9a004da659330013e6f21819d018b683d3
- F test/misuse.test ba4fb5d1a6101d1c171ea38b3c613d0661c83054
+ F test/misc7.test edd0b63e2ee29a256900b0514f6fff27e19e9bb2
+ F test/misuse.test 3c34719944ba045cc6c188a4852ba04680728912
+ F test/mmap1.test 93d167b328255cbe6679fe1e1a23be1b1197d07b
+ F test/mmap2.test 9d6dd9ddb4ad2379f29cc78f38ce1e63ed418022
+ F test/mmap3.test c92273e16eb8d23c1d55c9815b446bb72ef0512e
+ F test/mmapfault.test d4c9eff9cd8c2dc14bc43e71e042f175b0a26fe3
 -F test/multiplex.test e08cc7177bd6d85990ee1d71100bb6c684c02256
 +F test/multiplex.test 85a4be2b23e7294d468b6e3a578ec00020723bee
  F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
  F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101
  F test/mutex1.test 78b2b9bb320e51d156c4efdb71b99b051e7a4b41
  F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660
  F test/nan.test e9648b9d007c7045242af35e11a984d4b169443a
+ F test/nolock.test 0540dd96f39b8876e3ffdd8814fad0ea425efeee
  F test/notify1.test 669b2b743618efdc18ca4b02f45423d5d2304abf
- F test/notify2.test 9503e51b9a272a5405c205ad61b7623d5a9ca489
- F test/notify3.test a86259abbfb923aa27d30f0fc038c88e5251488a
- F test/notnull.test cc7c78340328e6112a13c3e311a9ab3127114347
+ F test/notify2.test ce23eb522c9e1fff6443f96376fe67872202061c
+ F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934
+ F test/notnull.test f8fcf58669ddba79274daa2770d61dfad8274f62
  F test/null.test a8b09b8ed87852742343b33441a9240022108993
+ F test/numcast.test 5d126f7f581432e86a90d1e35cac625164aec4a1
  F test/openv2.test 0d3040974bf402e19b7df4b783e447289d7ab394
- F test/orderby1.test 31c9865626046666e81cd22ecf8e1c24a4ea41b6
+ F test/orderby1.test 9b524aff9147288da43a6d7ddfdcff47fa2303c6
+ F test/orderby2.test bc11009f7cd99d96b1b11e57b199b00633eb5b04
+ F test/orderby3.test 8619d06a3debdcd80a27c0fdea5c40b468854b99
+ F test/orderby4.test 4d39bfbaaa3ae64d026ca2ff166353d2edca4ba4
+ F test/orderby5.test 8f08a54836d21fb7c70245360751aedd1c2286fb
+ F test/orderby6.test 8b38138ab0972588240b3fca0985d2e400432859
+ F test/orderby7.test 3d1383d52ade5b9eb3a173b3147fdd296f0202da
  F test/oserror.test 50417780d0e0d7cd23cf12a8277bb44024765df3
- F test/pager1.test f1f261a4dc5a40b385dfcef946c2e772180d12a9
- F test/pager2.test 745b911dde3d1f24ae0870bd433dfa83d7c658c1
 -F test/pager1.test 1acbdb14c5952a72dd43129cabdbf69aaa3ed1fa
++F test/pager1.test 1c39b52a036afd0813fdd47c9d2ebc83dec8fd90
+ F test/pager2.test 67b8f40ae98112bcdba1f2b2d03ea83266418c71
  F test/pager3.test 3856d9c80839be0668efee1b74811b1b7f7fc95f
- F test/pagerfault.test a15ef77c8495882d7debb43794e87b6e46174c8a
- F test/pagerfault2.test 1f79ea40d1133b2683a2f811b00f2399f7ec2401
- F test/pagerfault3.test f16e2efcb5fc9996d1356f7cbc44c998318ae1d7
- F test/pageropt.test 9191867ed19a2b3db6c42d1b36b6fbc657cd1ab0
+ F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e
 -F test/pagerfault.test ae9ee0db5a30aecda9db8290ce3dd12e5f7bbaa1
++F test/pagerfault.test 3ae5dafba16772a2349af57ebc5549fcf14646b0
+ F test/pagerfault2.test caf4c7facb914fd3b03a17b31ae2b180c8d6ca1f
+ F test/pagerfault3.test 1003fcda009bf48a8e22a516e193b6ef0dd1bbd8
+ F test/pageropt.test 6b8f6a123a5572c195ad4ae40f2987007923bbd6
  F test/pagesize.test 1dd51367e752e742f58e861e65ed7390603827a0
- F test/pcache.test fa8a2b0677225765eced806d9d1676b78a9e2c40
 -F test/pcache.test b09104b03160aca0d968d99e8cd2c5b1921a993d
++F test/pcache.test 488061b5dd685df2234d690370285c9b4813377b
  F test/pcache2.test a83efe2dec0d392f814bfc998def1d1833942025
- F test/permutations.test 360b92859c0af814b3fe10b68746936389606501
- F test/pragma.test eaf172eb376b20b9d6c639e03903dd43e476f0b8
- F test/pragma2.test 3a55f82b954242c642f8342b17dffc8b47472947
+ F test/percentile.test b98fc868d71eb5619d42a1702e9ab91718cbed54
+ F test/permutations.test 40add071ba71aefe1c04f5845308cf46f7de8d04
 -F test/pragma.test adb21a90875bc54a880fa939c4d7c46598905aa0
++F test/pragma.test 8ee8929dd652a5753d9cd72dbcbcb9b152bd6fd8
+ F test/pragma2.test aea7b3d82c76034a2df2b38a13745172ddc0bc13
  F test/printf.test ec9870c4dce8686a37818e0bf1aba6e6a1863552
- F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301
+ F test/printf2.test bed79b4c3e5da08ba88ad637c0bf62586843cfb1
+ F test/progress.test a282973d1d17f08071bc58a77d6b80f2a81c354d
  F test/ptrchng.test ef1aa72d6cf35a2bbd0869a649b744e9d84977fc
+ F test/queryonly.test 5f653159e0f552f0552d43259890c1089391dcca
  F test/quick.test 1681febc928d686362d50057c642f77a02c62e57
  F test/quota-glob.test 32901e9eed6705d68ca3faee2a06b73b57cb3c26
- F test/quota.test b5b3eec55a059e0fe493c66c6e27bd2c07676cfd
- F test/quota2.test 6d2bd57e8a4da28817f46db9da18551211cd325f
+ F test/quota.test 2379902c25e291eac5c12b4cf96946a3447e3744
+ F test/quota2.test 7dc12e08b11cbc4c16c9ba2aa2e040ea8d8ab4b8
  F test/quote.test 215897dbe8de1a6f701265836d6601cc6ed103e6
  F test/randexpr1.tcl 40dec52119ed3a2b8b2a773bce24b63a3a746459
  F test/randexpr1.test eda062a97e60f9c38ae8d806b03b0ddf23d796df
@@@ -683,41 -781,49 +786,49 @@@ F test/schema.test 8f7999be894260f151ad
  F test/schema2.test 906408621ea881fdb496d878b1822572a34e32c5
  F test/schema3.test 1bc1008e1f8cb5654b248c55f27249366eb7ed38
  F test/schema4.test e6a66e20cc69f0e306667c08be7fda3d11707dc5
- F test/schema5.test 0103e4c0313b3725b5ae5600bdca53006ab53db3
- F test/securedel.test 87a2561151af1f1e349071a89fdd77059f50113c
- F test/securedel2.test f13a916155f790a6b9de835049641b14ef312986
- F test/select1.test deba017eed9daa5af33de868676c997e7eebb931
+ F test/schema5.test 29699b4421f183c8f0e88bd28ce7d75d13ea653e
+ F test/securedel.test 21749c32ccc30f1ea9e4b9f33295a6521ec20fa0
+ F test/securedel2.test 2d54c28e46eb1fd6902089958b20b1b056c6f1c5
+ F test/select1.test fc2a61f226a649393664ad54bc5376631801517c
  F test/select2.test 352480e0e9c66eda9c3044e412abdf5be0215b56
  F test/select3.test 2ce595f8fb8e2ac10071d3b4e424cadd4634a054
- F test/select4.test 00179be44e531fe04c1c3f15df216439dff2519d
+ F test/select4.test 8c5a60d439e2df824aed56223566877a883c5c84
  F test/select5.test e758b8ef94f69b111df4cb819008856655dcd535
  F test/select6.test e76bd10a56988f15726c097a5d5a7966fe82d3b2
- F test/select7.test dad6f00f0d49728a879d6eb6451d4752db0b0abe
+ F test/select7.test 7fd2ef598cfabb6b9ff6ac13973b91d0527df49d
  F test/select8.test 391de11bdd52339c30580dabbbbe97e3e9a3c79d
- F test/select9.test c0ca3cd87a8ebb04de2cb1402c77df55d911a0ea
- F test/selectA.test 06d1032fa9009314c95394f2ca2e60d9f7ae8532
+ F test/select9.test aebc2bb0c3bc44606125033cbcaac2c8d1f33a95
+ F test/selectA.test 64b88a80271c1710966e50e633380696b60a12a4
  F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
  F test/selectC.test 871fb55d884d3de5943c4057ebd22c2459e71977
+ F test/selectD.test b0f02a04ef7737decb24e08be2c39b9664b43394
+ F test/selectE.test fc02a1eb04c8eb537091482644b7d778ae8759b7
+ F test/selectF.test 21c94e6438f76537b72532fa9fd4710cdd455fc3
  F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118
 -F test/shared.test 1da9dbad400cee0d93f252ccf76e1ae007a63746
 +F test/shared.test 13376ba3be1c5685ab1ec184189adabd15fa70be
  F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
- F test/shared3.test ebf77f023f4bdaa8f74f65822b559e86ce5c6257
+ F test/shared3.test fcd65cb11d189eff5f5c85cc4fad246fb0933108
  F test/shared4.test 72d90821e8d2fc918a08f16d32880868d8ee8e9d
  F test/shared6.test 866bb4982c45ce216c61ded5e8fde4e7e2f3ffa9
- F test/shared7.test 960760bc8d03e1419e70dea69cf41db62853616e
- F test/shared8.test b27befbefbe7f4517f1d6b7ff8f64a41ec74165d
- F test/shared_err.test 91e26ec4f3fbe07951967955585137e2f18993de
- F test/sharedlock.test ffa0a3c4ac192145b310f1254f8afca4d553eabf
- F test/shell1.test 272384163432c0efd2c6817396beb0d119565d53
- F test/shell2.test 037d6ad16e873354195d30bb2dc4b5321788154a
- F test/shell3.test 9196c42772d575685e722c92b4b39053c6ebba59
+ F test/shared7.test a81e99f83e6c51b02ac99c96fb3a2a7b5978c956
+ F test/shared8.test 00a07bf5e1337ecf72e94542bdefdc330d7a2538
+ F test/shared9.test 5f2a8f79b4d6c7d107a01ffa1ed05ae7e6333e21
+ F test/sharedA.test 0cdf1a76dfa00e6beee66af5b534b1e8df2720f5
+ F test/shared_err.test 0079c05c97d88cfa03989b7c20a8b266983087aa
+ F test/sharedlock.test 5ede3c37439067c43b0198f580fd374ebf15d304
+ F test/shell1.test f2a1d471e5cd2b42f7a65b166dc1ace2b8d11583
+ F test/shell2.test c57da3a381c099b02c813ba156298d5c2f5c93a3
+ F test/shell3.test 5e8545ec72c4413a0e8d4c6be56496e3c257ca29
  F test/shell4.test aa4eef8118b412d1a01477a53426ece169ea86a9
- F test/shell5.test fa2188bbb13fe2d183fd04a5f7b512650c35ef5d
+ F test/shell5.test bb755ea9144b8078a752fc56223582627070b5f1
  F test/shortread1.test bb591ef20f0fd9ed26d0d12e80eee6d7ac8897a3
 -F test/shrink.test 8c70f62b6e8eb4d54533de6d65bd06b1b9a17868
+ F test/show_speedtest1_rtree.tcl 32e6c5f073d7426148a6936a0408f4b5b169aba5
 +F test/shrink.test 41ab166b276af4812bcaf6f1b99c53fab4e706d0
  F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329
+ F test/skipscan1.test bed8cbe9d554c8c27afb6c88500f704c86a9196f
+ F test/skipscan2.test d77f79cdbba25f0f6f35298136cff21a7d7a553a
  F test/soak.test 0b5b6375c9f4110c828070b826b3b4b0bb65cd5f
- F test/softheap1.test c16709a16ad79fa43b32929b2e623d1d117ccf53
+ F test/softheap1.test 40562fe6cac6d9827b7b42b86d45aedf12c15e24
  F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5
  F test/speed1.test f2974a91d79f58507ada01864c0e323093065452
  F test/speed1p.explain d841e650a04728b39e6740296b852dccdca9b2cb
@@@ -727,26 -833,28 +838,28 @@@ F test/speed3.test d32043614c08c53eafdc
  F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715
  F test/speed4p.explain 6b5f104ebeb34a038b2f714150f51d01143e59aa
  F test/speed4p.test 0e51908951677de5a969b723e03a27a1c45db38b
- F test/spellfix.test 2953e9da0e46dab5f83059ef6bfdebca66e13418
+ F test/speedtest1.c d29c8048beb7ea9254191f3fde9414709166a920
+ F test/spellfix.test 61309f5efbec53603b3f86457d34a504f80abafe
  F test/sqllimits1.test b1aae27cc98eceb845e7f7adf918561256e31298
- F test/stat.test 6d55845481374066804847cafadb2285839556ff
 -F test/stat.test 76fd746b85459e812a0193410fb599f0531f22de
 -F test/stmt.test 25d64e3dbf9a3ce89558667d7f39d966fe2a71b9
++F test/stat.test 1e5faf39649a0bb368770f780f926847520ea3f4
 +F test/stmt.test 78a6764439cfa5abdcbf98d4d084739e81eeec4f
- F test/subquery.test d4aea23ac267463d4aa604bf937c3992347b20f7
- F test/subquery2.test edcad5c118f0531c2e21bf16a09bbb105252d4cd
+ F test/subquery.test 666fdecceac258f5fd84bed09a64e49d9f37edd9
+ F test/subquery2.test 91e1e364072aeff431d1f9689b15147e421d88c7
  F test/subselect.test d24fd8757daf97dafd2e889c73ea4c4272dcf4e4
  F test/substr.test 18f57c4ca8a598805c4d64e304c418734d843c1a
 -F test/superlock.test 1cde669f68d2dd37d6c9bd35eee1d95491ae3fc2
 +F test/superlock.test 2b27b4ae7c6b9d534b0412e0d99f989aa1f3b9cf
  F test/sync.test a34cd43e98b7fb84eabbf38f7ed8f7349b3f3d85
- F test/syscall.test bea9bf329bff733c791310244617c2a76974e64a
- F test/sysfault.test c79441d88d23696fbec7b147dba98d42a04f523f
- F test/table.test a59d985ca366e39b17b175f387f9d5db5a18d4e2
+ F test/syscall.test d2fdaad713f103ac611fe7ef9b724c7b69f8149c
+ F test/sysfault.test fa776e60bf46bdd3ae69f0b73e46ee3977a58ae6
+ F test/table.test 580d23530187026d4502fae74a490f0408cf2cc7
  F test/tableapi.test 2674633fa95d80da917571ebdd759a14d9819126
- F test/tclsqlite.test a3d2df21ee98957f5de4f9dc1db0eab68047ab5d
+ F test/tableopts.test dba698ba97251017b7c80d738c198d39ab747930
+ F test/tclsqlite.test 37a61c2da7e3bfe3b8c1a2867199f6b860df5d43
 -F test/tempdb.test 19d0f66e2e3eeffd68661a11c83ba5e6ace9128c
 +F test/tempdb.test 3263e5c3f0604e54d307481e8587327c54544d18
- F test/temptable.test 51edd31c65ed1560dd600b1796e8325df96318e2
- F test/temptrigger.test 26670ed7a39cf2296a7f0a9e0a1d7bdb7abe936d
- F test/tester.tcl 5764d5fe85275f9e40272754d6d06f1a43c32a38
- F test/thread001.test 7cc2ce08f9cde95964736d11e91f9ab610f82f91
+ F test/temptable.test d2c9b87a54147161bcd1822e30c1d1cd891e5b30
+ F test/temptrigger.test 8ec228b0db5d7ebc4ee9b458fc28cb9e7873f5e1
 -F test/tester.tcl f31bea1483ea1d39620f982130026e76f872d744
++F test/tester.tcl 8c152084186b281f2d16aa4ef7cac35e71027adf
+ F test/thread001.test 9f22fd3525a307ff42a326b6bc7b0465be1745a5
  F test/thread002.test e630504f8a06c00bf8bbe68528774dd96aeb2e58
  F test/thread003.test ee4c9efc3b86a6a2767516a37bd64251272560a7
  F test/thread004.test f51dfc3936184aaf73ee85f315224baad272a87f
@@@ -759,17 -867,20 +872,20 @@@ F test/threadtest2.c ace893054fa134af3f
  F test/threadtest3.c 0ed13e09690f6204d7455fac3b0e8ece490f6eef
  F test/tkt-02a8e81d44.test 6c80d9c7514e2a42d4918bf87bf6bc54f379110c
  F test/tkt-26ff0c2d1e.test 888324e751512972c6e0d1a09df740d8f5aaf660
- F test/tkt-2a5629202f.test 1ab32e084e9fc3d36be6dee2617530846a0eb0b6
- F test/tkt-2d1a5c67d.test 0e23cbbbecda6ce453ffb560fdac28489d491d36
+ F test/tkt-2a5629202f.test 0521bd25658428baa26665aa53ffed9367d33af2
 -F test/tkt-2d1a5c67d.test d371279946622698ab393ff88cad9f5f6d82960b
++F test/tkt-2d1a5c67d.test 8f48335224537ac91aa16277a1d5a44c9fc1bb3d
  F test/tkt-2ea2425d34.test 1cf13e6f75d149b3209a0cb32927a82d3d79fb28
- F test/tkt-31338dca7e.test 1f714c14b6682c5db715e0bda347926a3456f7a9
+ F test/tkt-31338dca7e.test 6fb8807851964da0d24e942f2e19c7c705b9fb58
 -F test/tkt-313723c356.test c47f8a9330523e6f35698bf4489bcb29609b53ac
 +F test/tkt-313723c356.test 54a1558d2719e171bd88967d66c73be4c617ec55
- F test/tkt-385a5b56b9.test 7782a382912a51f09f1d1a1442bca1e75f9c549b
+ F test/tkt-385a5b56b9.test c0a06ada41d7f06b1686da0e718553f853771d1e
  F test/tkt-38cb5df375.test f3cc8671f1eb604d4ae9cf886ed4366bec656678
  F test/tkt-3998683a16.test 6d1d04d551ed1704eb3396ca87bb9ccc8c5c1eb7
- F test/tkt-3a77c9714e.test 32bb28afa8c63fc76e972e996193139b63551ed9
- F test/tkt-3fe897352e.test 10de1a67bd5c66b238a4c96abe55531b37bb4f00
- F test/tkt-4a03edc4c8.test 2865e4edbc075b954daa82f8da7cc973033ec76e
+ F test/tkt-3a77c9714e.test b08bca26de1140bdf004a37716582a43d7bd8be8
+ F test/tkt-3fe897352e.test 27e26eb0f1811aeba4d65aba43a4c52e99da5e70
+ F test/tkt-4a03edc4c8.test 91c0e135888cdc3d4eea82406a44b05c8c1648d0
+ F test/tkt-4c86b126f2.test cbcc611becd0396890169ab23102dd70048bbc9a
+ F test/tkt-4dd95f6943.test 3d0ce415d2ee15d3d564121960016b9c7be79407
+ F test/tkt-4ef7e3cfca.test 3965ae11cc9cf6e334f9d7d3c1e20bf8d56254b1
  F test/tkt-54844eea3f.test a12b851128f46a695e4e378cca67409b9b8f5894
  F test/tkt-5d863f876e.test c9f36ca503fa154a3655f92a69d2c30da1747bfa
  F test/tkt-5e10420e8d.test 904d1687b3c06d43e5b3555bbcf6802e7c0ffd84
@@@ -847,8 -968,8 +973,8 @@@ F test/tkt3346.test 6f67c3ed7db94dfc5df
  F test/tkt3357.test 77c37c6482b526fe89941ce951c22d011f5922ed
  F test/tkt3419.test 1bbf36d7ea03b638c15804251287c2391f5c1f6b
  F test/tkt3424.test 61f831bd2b071bd128fa5d00fbda57e656ca5812
- F test/tkt3442.test 0adb70e9fe9cb750a702065a68ad647409dbc158
- F test/tkt3457.test 026dae357d34b416b07cf042794c0c83ea661d23
+ F test/tkt3442.test 53840ec5325bb94544792aad4c20476f81dc26b1
 -F test/tkt3457.test 44e980fe5334753dcc27b94fa4deabc485a92f74
++F test/tkt3457.test 08d2d9b3fc37fcc7ad9f24e5d1e004571f2a79c8
  F test/tkt3461.test 228ea328a5a21e8663f80ee3d212a6ad92549a19
  F test/tkt3493.test 1686cbde85f8721fc1bdc0ee72f2ef2f63139218
  F test/tkt3508.test d75704db9501625c7f7deec119fcaf1696aefb7d
@@@ -935,51 -1059,69 +1064,69 @@@ F test/vtabE.test 7c4693638d7797ce2eda1
  F test/vtabF.test fd5ad376f5a34fe0891df1f3cddb4fe7c3eb077e
  F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
  F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
- F test/vtab_shared.test 82f463886e18d7f8395a4b6167c91815efe54839
- F test/wal.test 5759631b0e610d616c33cc21124b3395f39cd0c7
- F test/wal2.test b715008438d7332d8c3d9f8dbead2a455d847ba8
+ F test/vtab_shared.test ea8778d5b0df200adef2ca7c00c3c37d4375f772
 -F test/wal.test 885f32b2b390b30b4aa3dbb0e568f8f78d40f5cc
 -F test/wal2.test 1f841d2048080d32f552942e333fd99ce541dada
 -F test/wal3.test b22eb662bcbc148c5f6d956eaf94b047f7afe9c0
 -F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
 -F test/wal5.test 8f888b50f66b78821e61ed0e233ded5de378224b
 -F test/wal6.test 527581f5527bf9c24394991e2be83000aace5f9e
++F test/wal.test 0ae504805b7e41b64a55fb5b7745de5ca2a0db2a
++F test/wal2.test 703b87c21c1e3e169d607158de414c7c2655b93e
 +F test/wal3.test de822707fbc8e9d056edc895adfb8abcccee4590
 +F test/wal4.test 5755887f321baa4c55de0b91066fa7d0cafcac9d
- F test/wal5.test 187ae92cc9ba1ec6803681b9025cad89af1a8c69
- F test/wal6.test c561d1e44c89f9cb458a7b03003ed4baac08ba07
++F test/wal5.test da70332902b19fea23b74c657a941a180e1cb777
++F test/wal6.test 54ac71d59046014c70ad78957139984c5bfb7eb2
+ F test/wal64k.test 163655ecd2cb8afef4737cac2a40fdd2eeaf20b8
 -F test/wal7.test 2ae8f427d240099cc4b2dfef63cff44e2a68a1bd
 -F test/wal8.test 75c42e1bc4545c277fed212f8fc9b7723cd02216
 +F test/wal7.test 18cf68ab8010ae0a2baaa48e5b59567a9503e63e
 +F test/wal8.test c35dd183708148120928dca908641c361f58062c
+ F test/wal9.test 378e76a9ad09cd9bee06c172ad3547b0129a6750
 -F test/wal_common.tcl a98f17fba96206122eff624db0ab13ec377be4fe
 -F test/walbak.test b9f68e39646375c2b877be906babcc15d38b4877
 -F test/walbig.test f437473a16cfb314867c6b5d1dbcd519e73e3434
 -F test/walcksum.test 9afeb96240296c08c72fc524d199c912cfe34daa
 -F test/walcrash.test 451d79e528add5c42764cea74aa2750754171b25
 -F test/walcrash2.test a0edab4e5390f03b99a790de89aad15d6ec70b36
 -F test/walcrash3.test e426aa58122d20f2b9fbe9a507f9eb8cab85b8af
 -F test/walfault.test 1f8389f7709877e9b4cc679033d71d6fe529056b
 -F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483
 -F test/walmode.test 4022fe03ae6e830583672caa101f046438a0473c
 -F test/walnoshm.test 84ca10c544632a756467336b7c3b864d493ee496
 -F test/walpersist.test 8c6b7e3ec1ba91b5e4dc4e0921d6d3f87cd356a6
 -F test/walro.test 34422d1d95aaff0388f0791ec20edb34e2a3ed57
 -F test/walshared.test 0befc811dcf0b287efae21612304d15576e35417
 -F test/walslow.test e7be6d9888f83aa5d3d3c7c08aa9b5c28b93609a
 -F test/walthread.test de8dbaf6d9e41481c460ba31ca61e163d7348f8e
 +F test/wal_common.tcl 15f152fd55703975878741beca6cfa4209d5b3b3
 +F test/walbak.test 67339b9e54db0cdaaf21287349bc8056e2919f96
 +F test/walbig.test 3ca3d94751b80054eed5bda20a1339ae1f619483
- F test/walcksum.test 6510e82303f6fffc2c55bb77a7774cd0eed21a6e
- F test/walcrash.test a8fa8d8a9a50a49b7abaf8a4a7e2c7ea352c49be
- F test/walcrash2.test c032d0040374ae28b41f99fc0cc290b4e2e34f17
- F test/walcrash3.test 97e775404f4c76e5c46f71fbd09691c7e9c25c68
- F test/walfault.test e5309befcaf4ab08151c35dba20cc5b8a5846748
++F test/walcksum.test 932d12a2a36fb2765560d35e7eaa1e5f0b198385
++F test/walcrash.test 011e05e9170da888851cb9ec4276bb1894ad32e3
++F test/walcrash2.test 6eb6842d34cc5955726264c80566963c32a9cbea
++F test/walcrash3.test 279640ffafa23f7564529ccd69bfb97849ccae9d
++F test/walfault.test f4160abd02d583d06d7ea9554e7a3f749f6b3410
 +F test/walhook.test 5d2bdb04fd3e220e2f96e6b566d57e00020bdaec
 +F test/walmode.test aa45339b4afa435dde5d88e71a95459cc221a3f4
 +F test/walnoshm.test 559b878f3aab838971d820329ca35f1caa7b038e
 +F test/walpersist.test abd956d66e2f36d2d9d05d3a969f48be6d2ddbec
- F test/walro.test 3ce5c1d16a3d8c6b2f7504d44d1ebf1098efaa64
++F test/walro.test 256ea9380825a34be43e8ff02bd1e240f1f62e8c
 +F test/walshared.test 04590b10c677f75318701818c50bc0dda5da64ab
 +F test/walslow.test 658066419a92d3bd85be71a11ce477af4ffe9153
 +F test/walthread.test c13f5a12fbd9d81e58f49875dc9dd8a52a84cf03
- F test/where.test a6bfb5a29286811d798d326a8f1153a58c0fb2bd
- F test/where2.test 43d4becaf5a5df854e6c21d624a1cb84c6904554
- F test/where3.test 667e75642102c97a00bf9b23d3cb267db321d006
- F test/where4.test e9b9e2f2f98f00379e6031db6a6fca29bae782a2
+ F test/where.test 28b64e93428961b07b0d486778d63fd672948f6b
+ F test/where2.test 455a2eb2666e66c1e84e2cb5815173a85e6237db
+ F test/where3.test 1ad55ba900bd7747f98b6082e65bd3e442c5004e
+ F test/where4.test d8420ceeb8323a41ceff1f1841fc528e824e1ecf
  F test/where5.test fdf66f96d29a064b63eb543e28da4dfdccd81ad2
  F test/where6.test 5da5a98cec820d488e82708301b96cb8c18a258b
- F test/where7.test 5c566388f0cc318b0032ce860f4ac5548e3c265a
- F test/where8.test a6c740fd286d7883e274e17b6230a9d672a7ab1f
+ F test/where7.test 5a4b0abc207d71da4deecd734ad8579e8dd40aa8
+ F test/where8.test 806f1dcec4088be2b826b33f757fe6e17c3236a1
  F test/where8m.test da346596e19d54f0aba35ebade032a7c47d79739
- F test/where9.test bcab47eff78f1412a6aec1d6b8a3939d4a9db098
- F test/whereA.test 24c234263c8fe358f079d5e57d884fb569d2da0a
+ F test/where9.test 4f3eab951353a3ae164befc521c777dfa903e46c
+ F test/whereA.test 4d253178d135ec46d1671e440cd8f2b916aa6e6b
  F test/whereB.test 0def95db3bdec220a731c7e4bec5930327c1d8c5
- F test/whereC.test 13ff5ec0dba407c0e0c075980c75b3275a6774e5
- F test/whereD.test 304ccbe3c77e0d0764f37c91d43b8c4792a5e02f
+ F test/whereC.test d6f4ecd4fa2d9429681a5b22a25d2bda8e86ab8a
+ F test/whereD.test fd9120e262f9da3c45940f52aefeef4d15b904e5
+ F test/whereE.test b3a055eef928c992b0a33198a7b8dc10eea5ad2f
+ F test/whereF.test 5b2ba0dbe8074aa13e416b37c753991f0a2492d7
+ F test/whereG.test 0ac23e5e8311b69d87245f4a85112de321031658
+ F test/whereH.test e4b07f7a3c2f5d31195cd33710054c78667573b2
  F test/wherelimit.test 5e9fd41e79bb2b2d588ed999d641d9c965619b31
- F test/win32lock.test b2a539e85ae6b2d78475e016a9636b4451dc7fb9
+ F test/wild001.test bca33f499866f04c24510d74baf1e578d4e44b1c
+ F test/win32heap.test ea19770974795cff26e11575e12d422dbd16893c
+ F test/win32lock.test 7a6bd73a5dcdee39b5bb93e92395e1773a194361
+ F test/win32longpath.test 169c75a3b2e43481f4a62122510210c67b08f26d
+ F test/with1.test 268081a6b14817a262ced4d0ee34d4d2a1dd2068
+ F test/with2.test ee227a663586aa09771cafd4fa269c5217eaf775
+ F test/withM.test e97f2a8c506ab3ea9eab94e6f6072f6cc924c991
+ F test/without_rowid1.test e00a0a9dc9f0be651f011d61e8a32b7add5afb30
+ F test/without_rowid2.test af260339f79d13cb220288b67cd287fbcf81ad99
+ F test/without_rowid3.test eac3d5c8a1924725b58503a368f2cbd24fd6c8a0
+ F test/without_rowid4.test 4e08bcbaee0399f35d58b5581881e7a6243d458a
+ F test/without_rowid5.test b4a639a367f04d382d20e8f44fc1be4f2d57d107
+ F test/wordcount.c 9915e06cb33d8ca8109b8700791afe80d305afda
  F test/zeroblob.test caaecfb4f908f7bc086ed238668049f96774d688
- F test/zerodamage.test e7f77fded01dfcdf92ac2c5400f1e35d7a21463c
- F tool/build-all-msvc.bat 1a18aa39983ae7354d834bc55a850a54fc007576 x
- F tool/build-shell.sh b64a481901fc9ffe5ca8812a2a9255b6cfb77381
+ F test/zerodamage.test cf6748bad89553cc1632be51a6f54e487e4039ac
+ F tool/build-all-msvc.bat a0534c971b86fe95f1983f445db5b896d3394818 x
+ F tool/build-shell.sh 950f47c6174f1eea171319438b93ba67ff5bf367
  F tool/checkSpacing.c 810e51703529a204fc4e1eb060e9ab663e3c06d2
  F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b
  F tool/extract.c 054069d81b095fbdc189a6f5d4466e40380505e2
@@@ -987,27 -1130,31 +1135,31 @@@ F tool/fragck.tcl 5265a95126abcf6ab357f
  F tool/genfkey.README cf68fddd4643bbe3ff8e31b8b6d8b0a1b85e20f4
  F tool/genfkey.test 4196a8928b78f51d54ef58e99e99401ab2f0a7e5
  F tool/getlock.c f4c39b651370156cae979501a7b156bdba50e7ce
- F tool/lemon.c 680980c7935bfa1edec20c804c9e5ba4b1dd96f5
+ F tool/lemon.c 07aba6270d5a5016ba8107b09e431eea4ecdc123
  F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
- F tool/mkkeywordhash.c bb52064aa614e1426445e4b2b9b00eeecd23cc79
+ F tool/logest.c eef612f8adf4d0993dafed0416064cf50d5d33c6
+ F tool/mkautoconfamal.sh f8d8dbf7d62f409ebed5134998bf5b51d7266383
+ F tool/mkkeywordhash.c c9e05e4a7bcab8fab9f583d5b321fb72f565ad97
  F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
+ F tool/mkpragmatab.tcl 78a77b2c554d534c6f2dc903130186ed15715460
  F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
- F tool/mksqlite3c-noext.tcl 8bce31074e4cbe631bb7676526a048335f4c9f02
- F tool/mksqlite3c.tcl 4edfe153b7e9f7b5e3df5ef5dd2e28a4c7fd3aed
- F tool/mksqlite3h.tcl 78013ad79a5e492e5f764f3c7a8ef834255061f8
- F tool/mksqlite3internalh.tcl 3dca7bb5374cee003379b8cbac73714f610ef795
- F tool/mkvsix.tcl 19b2ab9ea16445953a76568a5bbe4cb864f92dfe
+ F tool/mksqlite3c-noext.tcl 1712d3d71256ca1f297046619c89e77a4d7c8f6d
 -F tool/mksqlite3c.tcl ba274df71f5e6534b0a913c7c48eabfcbd0934b6
++F tool/mksqlite3c.tcl 071ff81a618ca48c89662c0c38284d96887d09c3
+ F tool/mksqlite3h.tcl ba24038056f51fde07c0079c41885ab85e2cff12
+ F tool/mksqlite3internalh.tcl b6514145a7d5321b47e64e19b8116cc44f973eb1
+ F tool/mkvsix.tcl 924dcdecda86969686833301c08f84cca2600d94
  F tool/offsets.c fe4262fdfa378e8f5499a42136d17bf3b98f6091
- F tool/omittest.tcl 4665982e95a6e5c1bd806cf7bc3dea95be422d77
+ F tool/omittest.tcl 34d7ac01fe4fd18e3637f64abe12c40eca0f6b97
  F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c
+ F tool/pagesig.c ff0ca355fd3c2398e933da5e22439bbff89b803b
  F tool/restore_jrnl.tcl 6957a34f8f1f0f8285e07536225ec3b292a9024a
  F tool/rollback-test.c 9fc98427d1e23e84429d7e6d07d9094fbdec65a5
- F tool/showdb.c 2e28d8e499b016485672e9a7ac65dacc0d28ff69
+ F tool/showdb.c 1f3fe634d6f690b8d39ab1b9fd34583d468921e1
  F tool/showjournal.c b62cecaab86a4053d944c276bb5232e4d17ece02
- F tool/showwal.c f09e5a80a293919290ec85a6a37c85a5ddcf37d9
+ F tool/showwal.c 3f7f7da5ec0cba51b1449a75f700493377da57b5
  F tool/soak1.tcl 8d407956e1a45b485a8e072470a3e629a27037fe
  F tool/space_used.tcl f714c41a59e326b8b9042f415b628b561bafa06b
- F tool/spaceanal.tcl e42273000686a4afbf6a5e5d7fb12be65e92afb1
+ F tool/spaceanal.tcl 8e50b217c56a6a086a1b47eac9d09c5cd65b996f
  F tool/speedtest.tcl 06c76698485ccf597b9e7dbb1ac70706eb873355
  F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
  F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
@@@ -1018,11 -1165,12 +1170,12 @@@ F tool/stack_usage.tcl f8e71b92cdb099a1
  F tool/symbols-mingw.sh 4dbcea7e74768305384c9fd2ed2b41bbf9f0414d
  F tool/symbols.sh fec58532668296d7c7dc48be9c87f75ccdb5814f
  F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
- F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381
+ F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891
+ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
- F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
- F tool/win/sqlite.vsix 67d8a99aceb56384a81b3f30d6c71743146d2cc9
- P bc9b9cd0589c4a51ece2e4657d622a04fc203315 1e874629d7cf568368b912b295bd3001147d0b52
- R 729e26131787df9859d2cc515ea0c277
+ F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
+ F tool/win/sqlite.vsix a94fb9b1b1ef06efc2898975cdfcfa9643731f5e
 -P 68766f837491cb89c2103f2627eb9e23ab326a68
 -R 1b75d6e5e9a19ccc14f8e59e21c749f6
++P 6a5c59dd7e0de9b5a2136f1c333afe522f724a71 116bed5af664899a73b46dca528ac0c021fc50c3
++R 06b2bd1e0552b0311ec4ae7a91709791
  U drh
- Z 2ac0e014d1bc5c5d9d375cc66ce59204
 -Z 3528e73d8f87faaf66e6658213b6d573
++Z 342cd5aa6e06528e5576874b8f28089b
diff --cc manifest.uuid
index e12e197b31067905c597af052aa621ae6b20544e,150ca3781017ca77e9c4542a0189d2f516daf99d..d502576b531ca99fbc9c031ee89a9cb6997be8e3
@@@ -1,1 -1,1 +1,1 @@@
- 6a5c59dd7e0de9b5a2136f1c333afe522f724a71
 -116bed5af664899a73b46dca528ac0c021fc50c3
++9411d7dc6fbee689730c6f74736341bccd333d9e
diff --cc src/btree.c
Simple merge
diff --cc src/func.c
Simple merge
diff --cc src/legacy.c
index 3cf025c73ff957cd1d165009c99811db0d9e7c7f,94649ae705ab9385108d0d887af0759289fb23cb..725c8d5619e1e161115ae044c33e2c9223381e5e
@@@ -46,12 -42,10 +45,12 @@@ int sqlite3_exec
  
    if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
    if( zSql==0 ) zSql = "";
 -
 +#ifdef SQLITE_ENABLE_SQLRR
 +  SRRecExec(db, zSql);
 +#endif  
    sqlite3_mutex_enter(db->mutex);
    sqlite3Error(db, SQLITE_OK, 0);
-   while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){
+   while( rc==SQLITE_OK && zSql[0] ){
      int nCol;
      char **azVals = 0;
  
diff --cc src/main.c
index 835dfde4839d5756229cd0586baec4bb95e5eeaf,65521f4466fb5e9c5385720e2163d0c54cf7aea7..c8aed113b323ba48d3482e67539408f32fe0d985
@@@ -2389,11 -2495,12 +2591,15 @@@ static int openDatabase
    memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
    db->autoCommit = 1;
    db->nextAutovac = -1;
+   db->szMmap = sqlite3GlobalConfig.szMmap;
    db->nextPagesize = 0;
-   db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex | SQLITE_EnableTrigger
+   db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_CacheSpill
+ #if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
+                  | SQLITE_AutoIndex
+ #endif
 +#if SQLITE_DEFAULT_CKPTFULLFSYNC
 +                 | SQLITE_CkptFullFSync
 +#endif
  #if SQLITE_DEFAULT_FILE_FORMAT<4
                   | SQLITE_LegacyFileFmt
  #endif
@@@ -2549,29 -2656,13 +2755,36 @@@ opendb_out
    }else if( rc!=SQLITE_OK ){
      db->magic = SQLITE_MAGIC_SICK;
    }
 +#if defined(__APPLE__) && ENABLE_FORCE_WAL
 +  if( db && !rc ){
 +    if ((0 == access("/var/db/enableForceWAL", R_OK))) {
 +#ifdef SQLITE_DEBUG
 +      fprintf(stderr, "SQLite WAL journal_mode ENABLED by default.\n");
 +#endif
 +      
 +      sqlite3_exec(db, "pragma journal_mode=wal", NULL, NULL, NULL);
 +#ifdef SQLITE_DEBUG
 +//    } else {
 +//      fprintf(stderr, "SQLite WAL journal_mode NOT ENABLED by default.\n");
 +#endif
 +    }
 +  }
 +#endif
 +#if defined(SQLITE_ENABLE_AUTO_PROFILE)
 +  if( db && !rc ){
 +    enableAutoLogging(db);
 +  }
 +#endif
    *ppDb = db;
 +#ifdef SQLITE_ENABLE_SQLRR
 +  SRRecOpen(db, zFilename, flags);
++#endif
+ #ifdef SQLITE_ENABLE_SQLLOG
+   if( sqlite3GlobalConfig.xSqllog ){
+     /* Opening a db handle. Fourth parameter is passed 0. */
+     void *pArg = sqlite3GlobalConfig.pSqllogArg;
+     sqlite3GlobalConfig.xSqllog(pArg, db, zFilename, 0);
+   }
  #endif
    return sqlite3ApiExit(0, rc);
  }
diff --cc src/os.c
Simple merge
diff --cc src/os_unix.c
index f039f0f917c308ab600d6e0015170b5308e23b43,fc320a4926f26c8565c51e4acd5c8b4d7239cb74..5c90d1ffe77b8574a5de99cbe10a3e0f1c17a161
@@@ -226,12 -192,20 +200,23 @@@ struct unixFile 
    const char *zPath;                  /* Name of the file */
    unixShm *pShm;                      /* Shared memory segment information */
    int szChunk;                        /* Configured by FCNTL_CHUNK_SIZE */
 -#if SQLITE_ENABLE_LOCKING_STYLE
+ #if SQLITE_MAX_MMAP_SIZE>0
+   int nFetchOut;                      /* Number of outstanding xFetch refs */
+   sqlite3_int64 mmapSize;             /* Usable size of mapping at pMapRegion */
+   sqlite3_int64 mmapSizeActual;       /* Actual size of mapping at pMapRegion */
+   sqlite3_int64 mmapSizeMax;          /* Configured FCNTL_MMAP_SIZE value */
+   void *pMapRegion;                   /* Memory mapped region */
+ #endif
+ #ifdef __QNXNTO__
+   int sectorSize;                     /* Device sector size */
+   int deviceCharacteristics;          /* Precomputed device characteristics */
+ #endif
 +#if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__)
    int openFlags;                      /* The flags specified at open() */
  #endif
 +#if SQLITE_ENABLE_DATA_PROTECTION
 +  int protFlags;                      /* Data protection flags from unixOpen */
 +#endif
  #if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__)
    unsigned fsFlags;                   /* cached details from statfs() */
  #endif
@@@ -306,290 -289,17 +300,301 @@@ static int randomnessPid = 0
  #define threadid 0
  #endif
  
 +#ifdef __APPLE__
 +#define SQLITE_ENABLE_SUPERLOCK 1
 +#endif
 +
 +#if SQLITE_ENABLE_SUPERLOCK
 +#include "sqlite3.h"
 +#include <string.h>
 +#include <assert.h>
 +
 +/*
 +** A structure to collect a busy-handler callback and argument and a count
 +** of the number of times it has been invoked.
 +*/
 +struct SuperlockBusy {
 +  int (*xBusy)(void*,int);        /* Pointer to busy-handler function */
 +  void *pBusyArg;                 /* First arg to pass to xBusy */
 +  int nBusy;                      /* Number of times xBusy has been invoked */
 +};
 +typedef struct SuperlockBusy SuperlockBusy;
 +
 +/*
 +** An instance of the following structure is allocated for each active
 +** superlock. The opaque handle returned by sqlite3demo_superlock() is
 +** actually a pointer to an instance of this structure.
 +*/
 +struct Superlock {
 +  sqlite3 *db;                    /* Database handle used to lock db */
 +  int bWal;                       /* True if db is a WAL database */
 +};
 +typedef struct Superlock Superlock;
 +
 +/*
 +** The pCtx pointer passed to this function is actually a pointer to a
 +** SuperlockBusy structure. Invoke the busy-handler function encapsulated
 +** by the structure and return the result.
 +*/
 +static int superlockBusyHandler(void *pCtx, int UNUSED){
 +  SuperlockBusy *pBusy = (SuperlockBusy *)pCtx;
 +  if( pBusy->xBusy==0 ) return 0;
 +  return pBusy->xBusy(pBusy->pBusyArg, pBusy->nBusy++);
 +}
 +
 +/*
 +** This function is used to determine if the main database file for 
 +** connection db is open in WAL mode or not. If no error occurs and the
 +** database file is in WAL mode, set *pbWal to true and return SQLITE_OK.
 +** If it is not in WAL mode, set *pbWal to false.
 +**
 +** If an error occurs, return an SQLite error code. The value of *pbWal
 +** is undefined in this case.
 +*/
 +static int superlockIsWal(Superlock *pLock){
 +  int rc;                         /* Return Code */
 +  sqlite3_stmt *pStmt;            /* Compiled PRAGMA journal_mode statement */
 +
 +  rc = sqlite3_prepare(pLock->db, "PRAGMA main.journal_mode", -1, &pStmt, 0);
 +  if( rc!=SQLITE_OK ) return rc;
 +
 +  pLock->bWal = 0;
 +  if( SQLITE_ROW==sqlite3_step(pStmt) ){
 +    const char *zMode = (const char *)sqlite3_column_text(pStmt, 0);
 +    if( zMode && strlen(zMode)==3 && sqlite3_strnicmp("wal", zMode, 3)==0 ){
 +      pLock->bWal = 1;
 +    }
 +  }
 +
 +  return sqlite3_finalize(pStmt);
 +}
 +
 +/*
 +** Obtain an exclusive shm-lock on nByte bytes starting at offset idx
 +** of the file fd. If the lock cannot be obtained immediately, invoke
 +** the busy-handler until either it is obtained or the busy-handler
 +** callback returns 0.
 +*/
 +static int superlockShmLock(
 +  sqlite3_file *fd,               /* Database file handle */
 +  int idx,                        /* Offset of shm-lock to obtain */
 +  int nByte,                      /* Number of consective bytes to lock */
 +  SuperlockBusy *pBusy            /* Busy-handler wrapper object */
 +){
 +  int rc;
 +  int (*xShmLock)(sqlite3_file*, int, int, int) = fd->pMethods->xShmLock;
 +  do {
 +    rc = xShmLock(fd, idx, nByte, SQLITE_SHM_LOCK|SQLITE_SHM_EXCLUSIVE);
 +  }while( rc==SQLITE_BUSY && superlockBusyHandler((void *)pBusy, 0) );
 +  return rc;
 +}
 +
 +/*
 +** Obtain the extra locks on the database file required for WAL databases.
 +** Invoke the supplied busy-handler as required.
 +*/
 +static int superlockWalLock(
 +  sqlite3 *db,                    /* Database handle open on WAL database */
 +  SuperlockBusy *pBusy            /* Busy handler wrapper object */
 +){
 +  int rc;                         /* Return code */
 +  sqlite3_file *fd = 0;           /* Main database file handle */
 +  void volatile *p = 0;           /* Pointer to first page of shared memory */
 +
 +  /* Obtain a pointer to the sqlite3_file object open on the main db file. */
 +  rc = sqlite3_file_control(db, "main", SQLITE_FCNTL_FILE_POINTER, (void *)&fd);
 +  if( rc!=SQLITE_OK ) return rc;
 +
 +  /* Obtain the "recovery" lock. Normally, this lock is only obtained by
 +  ** clients running database recovery.  
 +  */
 +  rc = superlockShmLock(fd, 2, 1, pBusy);
 +  if( rc!=SQLITE_OK ) return rc;
 +
 +  /* Zero the start of the first shared-memory page. This means that any
 +  ** clients that open read or write transactions from this point on will
 +  ** have to run recovery before proceeding. Since they need the "recovery"
 +  ** lock that this process is holding to do that, no new read or write
 +  ** transactions may now be opened. Nor can a checkpoint be run, for the
 +  ** same reason.
 +  */
 +  rc = fd->pMethods->xShmMap(fd, 0, 32*1024, 1, &p);
 +  if( rc!=SQLITE_OK ) return rc;
 +  memset((void *)p, 0, 32);
 +
 +  /* Obtain exclusive locks on all the "read-lock" slots. Once these locks
 +  ** are held, it is guaranteed that there are no active reader, writer or 
 +  ** checkpointer clients.
 +  */
 +  rc = superlockShmLock(fd, 3, SQLITE_SHM_NLOCK-3, pBusy);
 +  return rc;
 +}
 +
 +/*
 +** Release a superlock held on a database file. The argument passed to 
 +** this function must have been obtained from a successful call to
 +** sqlite3demo_superlock().
 +*/
 +static void sqlite3demo_superunlock(void *pLock){
 +  Superlock *p = (Superlock *)pLock;
 +  if( p->bWal ){
 +    int rc;                         /* Return code */
 +    int flags = SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE;
 +    sqlite3_file *fd = 0;
 +    rc = sqlite3_file_control(p->db, "main", SQLITE_FCNTL_FILE_POINTER,
 +                             (void *)&fd);
 +    if( rc==SQLITE_OK ){
 +      fd->pMethods->xShmLock(fd, 2, 1, flags);
 +      fd->pMethods->xShmLock(fd, 3, SQLITE_SHM_NLOCK-3, flags);
 +    }
 +  }
 +  sqlite3_close(p->db);
 +  sqlite3_free(p);
 +}
 +
 +/*
 +** Obtain a superlock on the database file identified by zPath, using the
 +** locking primitives provided by VFS zVfs. If successful, SQLITE_OK is
 +** returned and output variable *ppLock is populated with an opaque handle
 +** that may be used with sqlite3demo_superunlock() to release the lock.
 +**
 +** If an error occurs, *ppLock is set to 0 and an SQLite error code 
 +** (e.g. SQLITE_BUSY) is returned.
 +**
 +** If a required lock cannot be obtained immediately and the xBusy parameter
 +** to this function is not NULL, then xBusy is invoked in the same way
 +** as a busy-handler registered with SQLite (using sqlite3_busy_handler())
 +** until either the lock can be obtained or the busy-handler function returns
 +** 0 (indicating "give up").
 +*/
 +static int sqlite3demo_superlock(
 +  const char *zPath,              /* Path to database file to lock */
 +  const char *zVfs,               /* VFS to use to access database file */
 +  int flags,                   /* Additional flags to pass to sqlite3_open_v2 */
 +  int (*xBusy)(void*,int),        /* Busy handler callback */
 +  void *pBusyArg,                 /* Context arg for busy handler */
 +  void **ppLock                   /* OUT: Context to pass to superunlock() */
 +){
 +  SuperlockBusy busy = {0, 0, 0}; /* Busy handler wrapper object */
 +  int rc;                         /* Return code */
 +  Superlock *pLock;
 +
 +  pLock = sqlite3_malloc(sizeof(Superlock));
 +  if( !pLock ) return SQLITE_NOMEM;
 +  memset(pLock, 0, sizeof(Superlock));
 +
 +  /* Open a database handle on the file to superlock. */
 +  rc = sqlite3_open_v2(
 +      zPath, &pLock->db, SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|flags, zVfs
 +  );
 +
 +  /* Install a busy-handler and execute a BEGIN EXCLUSIVE. If this is not
 +  ** a WAL database, this is all we need to do.  
 +  **
 +  ** A wrapper function is used to invoke the busy-handler instead of
 +  ** registering the busy-handler function supplied by the user directly
 +  ** with SQLite. This is because the same busy-handler function may be
 +  ** invoked directly later on when attempting to obtain the extra locks
 +  ** required in WAL mode. By using the wrapper, we are able to guarantee
 +  ** that the "nBusy" integer parameter passed to the users busy-handler
 +  ** represents the total number of busy-handler invocations made within
 +  ** this call to sqlite3demo_superlock(), including any made during the
 +  ** "BEGIN EXCLUSIVE".
 +  */
 +  if( rc==SQLITE_OK ){
 +    busy.xBusy = xBusy;
 +    busy.pBusyArg = pBusyArg;
 +    sqlite3_busy_handler(pLock->db, superlockBusyHandler, (void *)&busy);
 +    rc = sqlite3_exec(pLock->db, "BEGIN EXCLUSIVE", 0, 0, 0);
 +  }
 +
 +  /* If the BEGIN EXCLUSIVE was executed successfully and this is a WAL
 +  ** database, call superlockWalLock() to obtain the extra locks required
 +  ** to prevent readers, writers and/or checkpointers from accessing the
 +  ** db while this process is holding the superlock.
 +  **
 +  ** Before attempting any WAL locks, commit the transaction started above
 +  ** to drop the WAL read and write locks currently held. Otherwise, the
 +  ** new WAL locks may conflict with the old.
 +  */
 +  if( rc==SQLITE_OK ){
 +    if( SQLITE_OK==(rc = superlockIsWal(pLock)) && pLock->bWal ){
 +      rc = sqlite3_exec(pLock->db, "COMMIT", 0, 0, 0);
 +      if( rc==SQLITE_OK ){
 +        rc = superlockWalLock(pLock->db, &busy);
 +      }
 +    }
 +  }
 +
 +  if( rc!=SQLITE_OK ){
 +    sqlite3demo_superunlock(pLock);
 +    *ppLock = 0;
 +  }else{
 +    *ppLock = pLock;
 +  }
 +
 +  return rc;
 +}
 +
 +/* A corrupt DB won't work with the sql-based locking attempt, grab an 
 +** exclusive lock and return SQLITE_OK or SQLITE_BUSY if the lock fails 
 +** returns the current lock level held on sqlite3_file
 +*/
 +static int sqlite3demo_superlock_corrupt(
 +  sqlite3_file *id,
 +  int eTargetFileLock,
 +  int *pFileLock
 +){
 +  unixFile *pFile = (unixFile*)id;
 +  int eFileLock = pFile->eFileLock;
 +  int rc = SQLITE_OK;
 +  
 +  if( eFileLock<eTargetFileLock ){
 +    rc = pFile->pMethod->xLock(id, SQLITE_LOCK_SHARED);
 +  }
 +  if( !rc && SQLITE_LOCK_SHARED<eTargetFileLock ){
 +    rc = pFile->pMethod->xLock(id, SQLITE_LOCK_EXCLUSIVE);
 +  }
 +  if( rc ){
 +    if( pFile->eFileLock > eFileLock ){
 +      pFile->pMethod->xUnlock(id, eFileLock);
 +    }
 +    return rc;
 +  }
 +  if (pFileLock) {
 +    *pFileLock = eFileLock;
 +  }
 +  return SQLITE_OK;
 +}
 +
 +static int sqlite3demo_superunlock_corrupt(sqlite3_file *id, int eFileLock) {
 +  unixFile *pFile = (unixFile*)id;
 +  int rc = SQLITE_OK;
 +  
 +  if( pFile->eFileLock > eFileLock ){
 +    rc = pFile->pMethod->xUnlock(id, SQLITE_LOCK_SHARED);
 +  }
 +  if( pFile->eFileLock > eFileLock ){
 +    int unlockRC = pFile->pMethod->xUnlock(id, SQLITE_LOCK_NONE);
 +    if (!rc) rc = unlockRC;
 +  }
 +  return rc;
 +}
 +
 +#endif /* SQLITE_ENABLE_SUPERLOCK */
 +
 +
+ /*
+ ** HAVE_MREMAP defaults to true on Linux and false everywhere else.
+ */
+ #if !defined(HAVE_MREMAP)
+ # if defined(__linux__) && defined(_GNU_SOURCE)
+ #  define HAVE_MREMAP 1
+ # else
+ #  define HAVE_MREMAP 0
+ # endif
+ #endif
  /*
  ** Different Unix systems declare open() in different ways.  Same use
  ** open(const char*,int,mode_t).  Others use open(const char*,int,...).
@@@ -3573,6 -3310,23 +3699,22 @@@ static int unixWrite
        }
      }
    }
 -#endif
+ #if SQLITE_MAX_MMAP_SIZE>0
+   /* Deal with as much of this write request as possible by transfering
+   ** data from the memory mapping using memcpy().  */
+   if( offset<pFile->mmapSize ){
+     if( offset+amt <= pFile->mmapSize ){
+       memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, amt);
+       return SQLITE_OK;
+     }else{
+       int nCopy = pFile->mmapSize - offset;
+       memcpy(&((u8 *)(pFile->pMapRegion))[offset], pBuf, nCopy);
+       pBuf = &((u8 *)pBuf)[nCopy];
+       amt -= nCopy;
+       offset += nCopy;
+     }
+   }
  #endif
  
    while( amt>0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt))>0 ){
@@@ -5086,415 -4664,226 +5429,634 @@@ static int unixShmUnmap
  # define unixShmUnmap   0
  #endif /* #ifndef SQLITE_OMIT_WAL */
  
 +#if (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__)
 +static const char *unixTempFileDir(void);
 +
 +static int unixInvalidateSupportFiles(unixFile *pFile, int skipWAL) {
 +  char jPath[MAXPATHLEN+9];
 +  int zLen = strlcpy(jPath, pFile->zPath, MAXPATHLEN+9);
 +  if( zLen<MAXPATHLEN ){
 +    size_t jLen;
 +    const char extensions[3][9] = { "-wal", "-journal", "-shm" };
 +    int j = (skipWAL ? 1 : 0);
 +    for( ; j<3; j++ ){
 +      
 +      /* Check to see if the shm file is already opened for this pFile */
 +      if( j==2 ){
 +        unixEnterMutex(); /* Because pFile->pInode is shared across threads */
 +        unixShmNode *pShmNode = pFile->pInode->pShmNode;
 +        if( pShmNode && !pShmNode->isReadonly ){
 +          struct stat sStat;
 +          sqlite3_mutex_enter(pShmNode->mutex);
 +          
 +          if( pShmNode->h>=0 && !osFstat(pShmNode->h, &sStat) ){
 +            unsigned long size = (sStat.st_size<4) ? sStat.st_size : 4;
 +            if( size>0 ){
 +              bzero(pShmNode->apRegion[0], size);
 +              sqlite3_mutex_leave(pShmNode->mutex);
 +              unixLeaveMutex();
 +              continue;
 +            }
 +          }
 +          sqlite3_mutex_leave(pShmNode->mutex);
 +        }
 +        unixLeaveMutex();
 +      }
 +      jLen = strlcpy(&jPath[zLen], extensions[j], 9);
 +      if( jLen < 9 ){
 +        int jflags = (j<2) ? O_TRUNC : O_RDWR;
 +        int jfd = open(jPath, jflags);
 +        if( jfd==(-1) ){
 +          if( errno!=ENOENT ){
 +            perror(jPath);
 +          }
 +        } else {
 +          if( j==2 ){
 +            struct stat sStat;
 +            if( !osFstat(jfd, &sStat) ){
 +              unsigned long size = (sStat.st_size<4) ? sStat.st_size : 4;
 +              if( size>0 ){
 +                uint32_t zero = 0;
 +                pwrite(jfd, &zero, (size_t)size, 0);
 +              }
 +            }
 +          }
 +          fsync(jfd);
 +          close(jfd);
 +        }
 +      }
 +    }
 +  }
 +  return SQLITE_OK;
 +}
 +
 +static int unixUnsafeTruncateDatabase(unixFile *pFile){
 +  /* this is nasty & bad.  destruction with prejudice.  we'll lose all the
 +  ** file locks in this process, however. sqlite3_file_control works properly.
 +  ** But if it fails, this works approximately
 +  */
 +  char journalPath[MAXPATHLEN];
 +  char walPath[MAXPATHLEN];
 +  int rc = SQLITE_OK;
 +  
 +#ifdef DEBUG
 +  fprintf(stderr, "Force truncating database %s\n", pFile->zPath);
 +#endif
 +  strlcpy(journalPath, pFile->zPath, MAXPATHLEN);
 +  strlcat(journalPath, "-journal", MAXPATHLEN);
 +  strlcpy(walPath, pFile->zPath, MAXPATHLEN);
 +  strlcat(walPath, "-wal", MAXPATHLEN);
 +  int fd1 = pFile->h;
 +  int result = 0;
 +  result = ftruncate(fd1, 0ll);
 +  if (result) {
 +    result = errno;
 +  }
 +  if (result) {
 +    rc = SQLITE_IOERR;
 +    storeLastErrno(pFile, result);
 +  }
 +  
 +  int fd2 = open(journalPath, O_RDWR);
 +  int result2 = 0;
 +  if (fd2 < 0) {
 +    if (errno != ENOENT) {
 +      result2 = errno;
 +    } else {
 +      result2 = 0;
 +    }
 +  } else {
 +    result2 = ftruncate(fd2, 0ll);
 +    if (result2) {
 +      result2 = errno;
 +    }
 +  }
 +  if (result2 && !result) {
 +    rc = SQLITE_IOERR;
 +    storeLastErrno(pFile, result2);
 +  }
 +  
 +  int fd3 = open(walPath, O_RDWR);
 +  int result3 = 0;
 +  if (fd3 < 0) {
 +    if (errno != ENOENT) {
 +      result3 = errno;
 +    } else {
 +      result3 = 0;
 +    }
 +  } else {
 +    result3 = ftruncate(fd3, 0ll);
 +    if (result3) {
 +      result3 = errno;
 +    }
 +  }
 +  if (result3 && !(result || result2)) {
 +    rc = SQLITE_IOERR;
 +    storeLastErrno(pFile, result2);
 +  }
 +  
 +  if (fd3 >= 0) {
 +    fsync(fd3);
 +    close(fd3);
 +  }
 +  if (fd2 >= 0) {
 +    fsync(fd2);
 +    close(fd2);
 +  }
 +  fsync(fd1);
 +      
 +  return rc;
 +}
 +
 +static int unixTruncateDatabase(unixFile *pFile, int bFlags) {
 +  sqlite3_file *id = (sqlite3_file *)pFile;
 +  int rc = SQLITE_OK;
 +  void *pLock = NULL;
 +  int flags = 0;
 +  int corruptFileLock = 0;
 +  int isCorrupt = 0;
 +  int force = (bFlags & SQLITE_TRUNCATE_FORCE);
 +  int safeFailed = 0;
 +
 +#if SQLITE_ENABLE_DATA_PROTECTION
 +  flags |= pFile->protFlags;
 +#endif
 +#if SQLITE_ENABLE_LOCKING_STYLE
 +  if( isProxyLockingMode(pFile) ){
 +    flags |= SQLITE_OPEN_AUTOPROXY;
 +  }
 +#endif
 +  
 +  rc = sqlite3demo_superlock(pFile->zPath, 0, flags, 0, 0, &pLock);
 +  if( rc ){
 +    if( rc==SQLITE_CORRUPT || rc==SQLITE_NOTADB ){
 +      isCorrupt = 1;
 +      rc = sqlite3demo_superlock_corrupt(id, SQLITE_LOCK_EXCLUSIVE,
 +                                         &corruptFileLock);
 +    }
 +    if( rc && !force ){
 +      return rc;
 +    }
 +    rc = SQLITE_OK; /* Ignore the locking failure if force is true */
 +  }
 +  if( (bFlags&SQLITE_TRUNCATE_INITIALIZE_HEADER_MASK)!=0 ){
 +    /* initialize a new database in TMPDIR and copy the contents over */
 +    const char *tDir = unixTempFileDir();
 +    int tDirLen = strlen(tDir);
 +    int tLen = sizeof(char) * (tDirLen + 12);
 +    char *tDbPath = (char *)malloc(tLen);
 +    int tFd = -1;
 +    
 +    strlcpy(tDbPath, tDir, tLen);
 +    if( tDbPath[(tDirLen-1)] != '/' ){
 +      strlcat(tDbPath, "/tmpdbXXXXX", tLen);
 +    } else {
 +      strlcat(tDbPath, "tmpdbXXXXX", tLen);
 +    }
 +    tFd = mkstemp(tDbPath);
 +    if( tFd==-1 ){
 +      storeLastErrno(pFile, errno);
 +      rc = SQLITE_IOERR;
 +      safeFailed = 1;
 +    }else{
 +      sqlite3 *tDb = NULL;
 +      copyfile_state_t s;
 +      int trc = sqlite3_open_v2(tDbPath, &tDb,
 +                   (SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE
 +                      | SQLITE_OPEN_AUTOPROXY), NULL);
 +      char *errmsg = NULL;
 +      const char *sql = "";
 +      if( !trc && (bFlags&SQLITE_TRUNCATE_PAGESIZE_MASK) ){
 +        const char pagesize_sql[4][22] = {
 +          "pragma page_size=1024",
 +          "pragma page_size=2048",
 +          "pragma page_size=4096",
 +          "pragma page_size=8192" 
 +        };
 +        int iPagesize = (((bFlags&SQLITE_TRUNCATE_PAGESIZE_MASK) >> 4) - 1);
 +        assert( iPagesize>=0 && iPagesize<=4 );
 +        sql = pagesize_sql[iPagesize];
 +        trc = sqlite3_exec(tDb, sql, 0, 0, &errmsg);
 +      }
 +      if( !trc ){
 +        const char autovacuum_sql[3][21] = {
 +          "pragma auto_vacuum=0",
 +          "pragma auto_vacuum=1",
 +          "pragma auto_vacuum=2"
 +        };
 +        int iAutovacuum = 2; /* default to incremental */
 +        if( (bFlags&SQLITE_TRUNCATE_AUTOVACUUM_MASK) ){
 +          iAutovacuum = (((bFlags&SQLITE_TRUNCATE_AUTOVACUUM_MASK) >> 2) - 1);
 +        }
 +        assert( iAutovacuum>=0 && iAutovacuum<=2 );
 +        sql = autovacuum_sql[iAutovacuum];
 +        trc = sqlite3_exec(tDb, sql, 0, 0, &errmsg);
 +      }
 +      if( !trc && (bFlags&SQLITE_TRUNCATE_JOURNALMODE_WAL) ){
 +        sql = "pragma journal_mode=wal";
 +        trc = sqlite3_exec(tDb, sql, 0, 0, &errmsg);
 +      }
 +      if( trc ){
 +        if( !tDb ){
 +          fprintf(stderr, "failed to open temp database '%s' to reset "
 +                          "truncated database %s with flags %x: %d\n",
 +                           tDbPath, pFile->zPath, bFlags, trc);
 +        }else{
 +          fprintf(stderr, "failed to set '%s' on truncated database %s, %d: "
 +                          "%s\n", sql, pFile->zPath, trc, errmsg);
 +        }
 +      }
 +      if( tDb ){
 +        int off = 0;
 +        /* merge the wal into the db */
 +        sqlite3_file_control(tDb, NULL, SQLITE_FCNTL_PERSIST_WAL, &off);
 +        sqlite3_close(tDb);
 +      }
 +      s = copyfile_state_alloc();
 +      lseek(tFd, 0, SEEK_SET);
 +      lseek(pFile->h, 0, SEEK_SET);
 +      if( fcopyfile(tFd, pFile->h, s, COPYFILE_DATA) ){
 +        int err=errno;
 +        switch(err) {
 +          case ENOMEM:
 +            trc = SQLITE_NOMEM;
 +            break;
 +          default:
 +            storeLastErrno(pFile, err);
 +            trc = SQLITE_IOERR;
 +        }
 +      }
 +      copyfile_state_free(s);
 +      fsync(pFile->h);
 +      close(tFd);
 +      unlink(tDbPath);
 +      if( trc!=SQLITE_OK ){
 +        safeFailed = 1;
 +        rc = trc;
 +      }
 +    }
 +    free(tDbPath);
 +  } else {
 +    rc = pFile->pMethod->xTruncate(id, 
 +           ((pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS) != 0) ? 1L : 0L);
 +    if( rc ){
 +      safeFailed = 1;
 +    }
 +  }
 +  if( rc==SQLITE_OK || force ){
 +    rc = unixInvalidateSupportFiles(pFile, 0);
 +    if( rc ){
 +      safeFailed = 1;
 +    }
 +  }
 +  pFile->pMethod->xSync(id, SQLITE_SYNC_FULL);
 +
 +
 +  if( isCorrupt ){
 +    sqlite3demo_superunlock_corrupt(id, corruptFileLock);
 +  }else if( pLock ){
 +    sqlite3demo_superunlock(pLock);
 +  }else{
 +    assert(force);
 +  }
 +  
 +  if( force && safeFailed){
 +    rc = unixUnsafeTruncateDatabase(pFile);
 +  }
 +  
 +  return rc;
 +}
 +
 +/*
 + ** Lock locations for shared-memory locks used by WAL mode.
 + */
 +#ifndef SHM_BASE
 +# define SHM_BASE          120
 +# define SHM_WRITE         SHM_BASE
 +# define SHM_CHECKPOINT    (SHM_BASE+1)
 +# define SHM_RECOVER       (SHM_BASE+2)
 +# define SHM_READ_FIRST    (SHM_BASE+3)
 +# define SHM_READ_SIZE     5
 +#endif /* SHM_BASE */
 +
 +/*
 +** This test only works for lock testing on unix/posix VFS.
 +** Adapted from tool/getlock.c f4c39b651370156cae979501a7b156bdba50e7ce
 +*/
 +static int unixLockstatePid(unixFile *pFile, pid_t pid, int *pLockstate){
 +  int hDb;        /* File descriptor for the open database file */
 +  int hShm = -1;  /* File descriptor for WAL shared-memory file */
 +  ssize_t got;    /* Bytes read from header */
 +  int isWal = 0;             /* True if in WAL mode */
 +  int nLock = 0;             /* Number of locks held */
 +  int noHdr = 0;             /* Zero byte DB has no header */
 +  unsigned char aHdr[100];   /* Database header */
 +  
 +  assert(pLockstate);
 +  
 +  /* make sure we are dealing with a database file */
 +  hDb = pFile->h;
 +  if( hDb<0 ){
 +    *pLockstate = SQLITE_LOCKSTATE_ERROR;
 +    return SQLITE_ERROR;
 +  }
 +  assert( (strlen(SQLITE_FILE_HEADER)+1)==SQLITE_FILE_HEADER_LEN );
 +  got = pread(hDb, aHdr, 100, 0);
 +  if( got<0 ){
 +    *pLockstate = SQLITE_LOCKSTATE_ERROR;
 +    return SQLITE_ERROR;
 +  }
 +  if( got==0 ){
 +    noHdr = 1;
 +  }else if( got!=100
 +         || memcmp(aHdr, SQLITE_FILE_HEADER, SQLITE_FILE_HEADER_LEN)!=0
 +  ){
 +    *pLockstate = SQLITE_LOCKSTATE_NOTADB;
 +    return SQLITE_NOTADB;
 +  }
 +  
 +  /* First check for an exclusive lock */
 +  nLock += unixIsLocked(pid, hDb, F_RDLCK, SHARED_FIRST, SHARED_SIZE,
 +                        "EXCLUSIVE");
 +  if (!noHdr) {
 +    isWal = aHdr[18]==2;
 +  }
 +  if( nLock==0 && isWal==0 ){
 +    /* Rollback mode */
 +    nLock += unixIsLocked(pid, hDb, F_WRLCK, PENDING_BYTE, SHARED_SIZE+2,
 +                          "PENDING|RESERVED|SHARED");
 +  }
 +  if( nLock==0 && isWal!=0 ){
 +    /* lookup the file descriptor for the shared memory file if we have it open
 +    ** in this process */
 +    unixEnterMutex(); /* Because pFile->pInode is shared across threads */
 +    unixShmNode *pShmNode = pFile->pInode->pShmNode;
 +    if( pShmNode ){
 +      sqlite3_mutex_enter(pShmNode->mutex);
 +      
 +      hShm = pShmNode->h;
 +      if( hShm >= 0){
 +        if( unixIsLocked(pid, hShm, F_RDLCK, SHM_RECOVER, 1, "WAL-RECOVERY") ||
 +           unixIsLocked(pid, hShm, F_RDLCK, SHM_WRITE, 1, "WAL-WRITE") ){
 +          nLock = 1;
 +        }
 +      }
 +      
 +      sqlite3_mutex_leave(pShmNode->mutex);
 +    } 
 +    
 +    if( hShm<0 ){
 +      /* the shared memory file isn't open in this process space, open our
 +      ** own FD */
 +      char zShm[MAXPATHLEN];
 +      
 +      /* WAL mode */
 +      strlcpy(zShm, pFile->zPath, MAXPATHLEN);
 +      strlcat(zShm, "-shm", MAXPATHLEN);
 +      hShm = open(zShm, O_RDONLY, 0);
 +      if( hShm<0 ){
 +        *pLockstate = SQLITE_LOCKSTATE_OFF;
 +        unixLeaveMutex();
 +        return SQLITE_OK;
 +      }
 +      if( unixIsLocked(pid, hShm, F_RDLCK, SHM_RECOVER, 1, "WAL-RECOVERY") ||
 +         unixIsLocked(pid, hShm, F_RDLCK, SHM_WRITE, 1, "WAL-WRITE") ){
 +        nLock = 1;
 +      }
 +      close(hShm);
 +    }
 +    unixLeaveMutex();
 +  }
 +  if( nLock>0 ){
 +    *pLockstate = SQLITE_LOCKSTATE_ON;
 +  } else {
 +    *pLockstate = SQLITE_LOCKSTATE_OFF;
 +  }
 +  return SQLITE_OK;
 +}
 +
 +#endif /* (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__) */
 +
+ #if SQLITE_MAX_MMAP_SIZE>0
+ /*
+ ** If it is currently memory mapped, unmap file pFd.
+ */
+ static void unixUnmapfile(unixFile *pFd){
+   assert( pFd->nFetchOut==0 );
+   if( pFd->pMapRegion ){
+     osMunmap(pFd->pMapRegion, pFd->mmapSizeActual);
+     pFd->pMapRegion = 0;
+     pFd->mmapSize = 0;
+     pFd->mmapSizeActual = 0;
+   }
+ }
+ /*
+ ** Attempt to set the size of the memory mapping maintained by file 
+ ** descriptor pFd to nNew bytes. Any existing mapping is discarded.
+ **
+ ** If successful, this function sets the following variables:
+ **
+ **       unixFile.pMapRegion
+ **       unixFile.mmapSize
+ **       unixFile.mmapSizeActual
+ **
+ ** If unsuccessful, an error message is logged via sqlite3_log() and
+ ** the three variables above are zeroed. In this case SQLite should
+ ** continue accessing the database using the xRead() and xWrite()
+ ** methods.
+ */
+ static void unixRemapfile(
+   unixFile *pFd,                  /* File descriptor object */
+   i64 nNew                        /* Required mapping size */
+ ){
+   const char *zErr = "mmap";
+   int h = pFd->h;                      /* File descriptor open on db file */
+   u8 *pOrig = (u8 *)pFd->pMapRegion;   /* Pointer to current file mapping */
+   i64 nOrig = pFd->mmapSizeActual;     /* Size of pOrig region in bytes */
+   u8 *pNew = 0;                        /* Location of new mapping */
+   int flags = PROT_READ;               /* Flags to pass to mmap() */
+   assert( pFd->nFetchOut==0 );
+   assert( nNew>pFd->mmapSize );
+   assert( nNew<=pFd->mmapSizeMax );
+   assert( nNew>0 );
+   assert( pFd->mmapSizeActual>=pFd->mmapSize );
+   assert( MAP_FAILED!=0 );
+   if( (pFd->ctrlFlags & UNIXFILE_RDONLY)==0 ) flags |= PROT_WRITE;
+   if( pOrig ){
+ #if HAVE_MREMAP
+     i64 nReuse = pFd->mmapSize;
+ #else
+     const int szSyspage = osGetpagesize();
+     i64 nReuse = (pFd->mmapSize & ~(szSyspage-1));
+ #endif
+     u8 *pReq = &pOrig[nReuse];
  
+     /* Unmap any pages of the existing mapping that cannot be reused. */
+     if( nReuse!=nOrig ){
+       osMunmap(pReq, nOrig-nReuse);
+     }
+ #if HAVE_MREMAP
+     pNew = osMremap(pOrig, nReuse, nNew, MREMAP_MAYMOVE);
+     zErr = "mremap";
+ #else
+     pNew = osMmap(pReq, nNew-nReuse, flags, MAP_SHARED, h, nReuse);
+     if( pNew!=MAP_FAILED ){
+       if( pNew!=pReq ){
+         osMunmap(pNew, nNew - nReuse);
+         pNew = 0;
+       }else{
+         pNew = pOrig;
+       }
+     }
+ #endif
+     /* The attempt to extend the existing mapping failed. Free it. */
+     if( pNew==MAP_FAILED || pNew==0 ){
+       osMunmap(pOrig, nReuse);
+     }
+   }
+   /* If pNew is still NULL, try to create an entirely new mapping. */
+   if( pNew==0 ){
+     pNew = osMmap(0, nNew, flags, MAP_SHARED, h, 0);
+   }
+   if( pNew==MAP_FAILED ){
+     pNew = 0;
+     nNew = 0;
+     unixLogError(SQLITE_OK, zErr, pFd->zPath);
+     /* If the mmap() above failed, assume that all subsequent mmap() calls
+     ** will probably fail too. Fall back to using xRead/xWrite exclusively
+     ** in this case.  */
+     pFd->mmapSizeMax = 0;
+   }
+   pFd->pMapRegion = (void *)pNew;
+   pFd->mmapSize = pFd->mmapSizeActual = nNew;
+ }
+ /*
+ ** Memory map or remap the file opened by file-descriptor pFd (if the file
+ ** is already mapped, the existing mapping is replaced by the new). Or, if 
+ ** there already exists a mapping for this file, and there are still 
+ ** outstanding xFetch() references to it, this function is a no-op.
+ **
+ ** If parameter nByte is non-negative, then it is the requested size of 
+ ** the mapping to create. Otherwise, if nByte is less than zero, then the 
+ ** requested size is the size of the file on disk. The actual size of the
+ ** created mapping is either the requested size or the value configured 
+ ** using SQLITE_FCNTL_MMAP_LIMIT, whichever is smaller.
+ **
+ ** SQLITE_OK is returned if no error occurs (even if the mapping is not
+ ** recreated as a result of outstanding references) or an SQLite error
+ ** code otherwise.
+ */
+ static int unixMapfile(unixFile *pFd, i64 nByte){
+   i64 nMap = nByte;
+   int rc;
+   assert( nMap>=0 || pFd->nFetchOut==0 );
+   if( pFd->nFetchOut>0 ) return SQLITE_OK;
+   if( nMap<0 ){
+     struct stat statbuf;          /* Low-level file information */
+     rc = osFstat(pFd->h, &statbuf);
+     if( rc!=SQLITE_OK ){
+       return SQLITE_IOERR_FSTAT;
+     }
+     nMap = statbuf.st_size;
+   }
+   if( nMap>pFd->mmapSizeMax ){
+     nMap = pFd->mmapSizeMax;
+   }
+   if( nMap!=pFd->mmapSize ){
+     if( nMap>0 ){
+       unixRemapfile(pFd, nMap);
+     }else{
+       unixUnmapfile(pFd);
+     }
+   }
+   return SQLITE_OK;
+ }
+ #endif /* SQLITE_MAX_MMAP_SIZE>0 */
+ /*
+ ** If possible, return a pointer to a mapping of file fd starting at offset
+ ** iOff. The mapping must be valid for at least nAmt bytes.
+ **
+ ** If such a pointer can be obtained, store it in *pp and return SQLITE_OK.
+ ** Or, if one cannot but no error occurs, set *pp to 0 and return SQLITE_OK.
+ ** Finally, if an error does occur, return an SQLite error code. The final
+ ** value of *pp is undefined in this case.
+ **
+ ** If this function does return a pointer, the caller must eventually 
+ ** release the reference by calling unixUnfetch().
+ */
+ static int unixFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
+ #if SQLITE_MAX_MMAP_SIZE>0
+   unixFile *pFd = (unixFile *)fd;   /* The underlying database file */
+ #endif
+   *pp = 0;
+ #if SQLITE_MAX_MMAP_SIZE>0
+   if( pFd->mmapSizeMax>0 ){
+     if( pFd->pMapRegion==0 ){
+       int rc = unixMapfile(pFd, -1);
+       if( rc!=SQLITE_OK ) return rc;
+     }
+     if( pFd->mmapSize >= iOff+nAmt ){
+       *pp = &((u8 *)pFd->pMapRegion)[iOff];
+       pFd->nFetchOut++;
+     }
+   }
+ #endif
+   return SQLITE_OK;
+ }
+ /*
+ ** If the third argument is non-NULL, then this function releases a 
+ ** reference obtained by an earlier call to unixFetch(). The second
+ ** argument passed to this function must be the same as the corresponding
+ ** argument that was passed to the unixFetch() invocation. 
+ **
+ ** Or, if the third argument is NULL, then this function is being called 
+ ** to inform the VFS layer that, according to POSIX, any existing mapping 
+ ** may now be invalid and should be unmapped.
+ */
+ static int unixUnfetch(sqlite3_file *fd, i64 iOff, void *p){
+ #if SQLITE_MAX_MMAP_SIZE>0
+   unixFile *pFd = (unixFile *)fd;   /* The underlying database file */
+   UNUSED_PARAMETER(iOff);
+   /* If p==0 (unmap the entire file) then there must be no outstanding 
+   ** xFetch references. Or, if p!=0 (meaning it is an xFetch reference),
+   ** then there must be at least one outstanding.  */
+   assert( (p==0)==(pFd->nFetchOut==0) );
+   /* If p!=0, it must match the iOff value. */
+   assert( p==0 || p==&((u8 *)pFd->pMapRegion)[iOff] );
+   if( p ){
+     pFd->nFetchOut--;
+   }else{
+     unixUnmapfile(pFd);
+   }
+   assert( pFd->nFetchOut>=0 );
+ #else
+   UNUSED_PARAMETER(fd);
+   UNUSED_PARAMETER(p);
+   UNUSED_PARAMETER(iOff);
+ #endif
+   return SQLITE_OK;
+ }
  
  /*
  ** Here ends the implementation of all sqlite3_file methods.
diff --cc src/os_win.c
index 202250ef32ff62cd3779cae1b8dbaa7406055a88,fcac665dff079c0923aed3696aeabbc87ce8b65f..ac158de7f7b03d37e4fef2e65cea46bf083f0671
@@@ -2668,21 -3133,15 +3133,24 @@@ static int winFileControl(sqlite3_file 
              SimulateIOErrorBenign(0);
            }
          }
+         OSTRACE(("FCNTL file=%p, rc=%s\n", pFile->h, sqlite3ErrName(rc)));
          return rc;
        }
+       OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
        return SQLITE_OK;
      }
 +    case SQLITE_FCNTL_PERSIST_WAL: {
 +      int bPersist = *(int*)pArg;
 +      if( bPersist<0 ){
 +        *(int*)pArg = pFile->bPersistWal;
 +      }else{
 +        pFile->bPersistWal = bPersist!=0;
 +      }
 +      return SQLITE_OK;
 +    }
      case SQLITE_FCNTL_PERSIST_WAL: {
        winModeBit(pFile, WINFILE_PERSIST_WAL, (int*)pArg);
+       OSTRACE(("FCNTL file=%p, rc=SQLITE_OK\n", pFile->h));
        return SQLITE_OK;
      }
      case SQLITE_FCNTL_POWERSAFE_OVERWRITE: {
diff --cc src/pager.c
index 2b362f4c771e64e719d0d89eb632256e7cea9366,a77dcecc4cfa2e949831bd48beabd9971b0e4288..51588a27e84661ef2ba82914605eb99e8149c42b
@@@ -6836,15 -7111,12 +7146,16 @@@ static int pagerOpenWal(Pager *pPager)
    ** (e.g. due to malloc() failure), return an error code.
    */
    if( rc==SQLITE_OK ){
 -    rc = sqlite3WalOpen(pPager->pVfs,
 -        pPager->fd, pPager->zWal, pPager->exclusiveMode,
 -        pPager->journalSizeLimit, &pPager->pWal
 -    );
 +#if SQLITE_ENABLE_DATA_PROTECTION
 +    rc = sqlite3WalOpen(pPager->pVfs, pPager->fd, pPager->zWal, pPager->exclusiveMode,
 +        pPager->journalSizeLimit, (pPager->vfsFlags & (SQLITE_OPEN_FILEPROTECTION_MASK | SQLITE_OPEN_READONLY)), 
 +        &pPager->pWal);
 +#else
 +    rc = sqlite3WalOpen(pPager->pVfs, pPager->fd, pPager->zWal, pPager->exclusiveMode,
 +        pPager->journalSizeLimit, (pPager->vfsFlags & SQLITE_OPEN_READONLY), &pPager->pWal);
 +#endif
    }
+   pagerFixMaplimit(pPager);
  
    return rc;
  }
@@@ -6935,12 -7207,7 +7246,13 @@@ int sqlite3PagerCloseWal(Pager *pPager)
        rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags,
                             pPager->pageSize, (u8*)pPager->pTmpSpace);
        pPager->pWal = 0;
+       pagerFixMaplimit(pPager);
 +
 +      /* Ensure that the WAL file is deleted even if the PERSIST_WAL
 +      ** hint is enabled. */
 +      if( rc==SQLITE_OK ){
 +        rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
 +      }
      }
    }
    return rc;
diff --cc src/pager.h
Simple merge
diff --cc src/pragma.c
index a13fdc79442fe3209b83e3475b6dbf50088eec21,4c69ceb4fd63a7e4609718e7e3c3ac0035a3d0a0..d84dca8ea8ed0f4c4dd8091ff197b22ea0833d21
@@@ -464,9 -895,9 +895,9 @@@ void sqlite3Pragma
    ** secure_delete flag.  The second form changes the secure_delete
    ** flag setting and reports thenew value.
    */
-   if( sqlite3StrICmp(zLeft,"secure_delete")==0 ){
+   case PragTyp_SECURE_DELETE: {
      Btree *pBt = pDb->pBt;
 -    int b = -1;
 +    sqlite3_int64 b = -1;
      assert( pBt!=0 );
      if( zRight ){
        b = sqlite3GetBoolean(zRight, 0);
      if( pId2->n==0 && b>=0 ){
        int ii;
        for(ii=0; ii<db->nDb; ii++){
 -        sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b);
 +        sqlite3BtreeSecureDelete(db->aDb[ii].pBt, (int)b);
        }
      }
 -    b = sqlite3BtreeSecureDelete(pBt, b);
 -    returnSingleInt(pParse, "secure_delete", b);
 +    b = (int)sqlite3BtreeSecureDelete(pBt, (int)b);
 +    returnSingleInt(pParse, "secure_delete", &b);
-   }else
+     break;
+   }
  
    /*
    **  PRAGMA [database.]max_page_count
        if( iLimit<-1 ) iLimit = -1;
      }
      iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit);
 -    returnSingleInt(pParse, "journal_size_limit", iLimit);
 +    returnSingleInt(pParse, "journal_size_limit", &iLimit);
-   }else
+     break;
+   }
  
  #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
  
    ** number of pages is adjusted so that the cache uses -N kibibytes
    ** of memory.
    */
-   if( sqlite3StrICmp(zLeft,"cache_size")==0 ){
-     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
+   case PragTyp_CACHE_SIZE: {
      assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
      if( !zRight ){
 -      returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
 +      i64 cacheSize = pDb->pSchema->cache_size;
 +      returnSingleInt(pParse, "cache_size", &cacheSize);
      }else{
        int size = sqlite3Atoi(zRight);
        pDb->pSchema->cache_size = size;
    ** Note that it is possible for the library compile-time options to
    ** override this setting
    */
-   if( sqlite3StrICmp(zLeft, "temp_store")==0 ){
+   case PragTyp_TEMP_STORE: {
      if( !zRight ){
 -      returnSingleInt(pParse, "temp_store", db->temp_store);
 +      i64 tempStore = db->temp_store;
 +      returnSingleInt(pParse, "temp_store", &tempStore);
      }else{
        changeTempStorage(pParse, zRight);
      }
    ** default value will be restored the next time the database is
    ** opened.
    */
-   if( sqlite3StrICmp(zLeft,"synchronous")==0 ){
-     if( sqlite3ReadSchema(pParse) ) goto pragma_out;
+   case PragTyp_SYNCHRONOUS: {
      if( !zRight ){
 -      returnSingleInt(pParse, "synchronous", pDb->safety_level-1);
 +      u8 level = pDb->safety_level;
 +      i64 safetyLevel = (i64)(SQLITE_DbSafetyLevelValue(level)-1);
 +      returnSingleInt(pParse, "synchronous", &safetyLevel);
      }else{
        if( !db->autoCommit ){
          sqlite3ErrorMsg(pParse, 
              "Safety level may not be changed inside a transaction");
        }else{
 -        pDb->safety_level = getSafetyLevel(zRight,0,1)+1;
 +        u8 level = getSafetyLevel(zRight,0,1)+1;
 +        pDb->safety_level = (level | SQLITE_SAFETYLEVEL_FIXED);
+         setAllPagerFlags(db);
        }
      }
-   }else
+     break;
+   }
  #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
  
  #ifndef SQLITE_OMIT_FLAG_PRAGMAS
    ** after accumulating N frames in the log. Or query for the current value
    ** of N.
    */
-   if( sqlite3StrICmp(zLeft, "wal_autocheckpoint")==0 ){
+   case PragTyp_WAL_AUTOCHECKPOINT: {
 +    i64 walArg = 0;
      if( zRight ){
        sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight));
      }
 -    returnSingleInt(pParse, "wal_autocheckpoint", 
 -       db->xWalCallback==sqlite3WalDefaultHook ? 
 -           SQLITE_PTR_TO_INT(db->pWalArg) : 0);
 +    if( db->xWalCallback==sqlite3WalDefaultHook ){
 +      walArg = SQLITE_PTR_TO_INT(db->pWalArg);
 +    }
 +    returnSingleInt(pParse, "wal_autocheckpoint", &walArg);
-   }else
+   }
+   break;
  #endif
  
    /*
      if( zRight ){
        sqlite3_busy_timeout(db, sqlite3Atoi(zRight));
      }
 -    returnSingleInt(pParse, "timeout",  db->busyTimeout);
 +    returnSingleInt(pParse, "timeout",  &db->busyTimeout);
-   }else
+     break;
+   }
+   /*
+   **   PRAGMA soft_heap_limit
+   **   PRAGMA soft_heap_limit = N
+   **
+   ** Call sqlite3_soft_heap_limit64(N).  Return the result.  If N is omitted,
+   ** use -1.
+   */
+   case PragTyp_SOFT_HEAP_LIMIT: {
+     sqlite3_int64 N;
+     if( zRight && sqlite3Atoi64(zRight, &N, 1000000, SQLITE_UTF8)==SQLITE_OK ){
+       sqlite3_soft_heap_limit64(N);
+     }
+     returnSingleInt(pParse, "soft_heap_limit",  sqlite3_soft_heap_limit64(-1));
+     break;
+   }
  
  #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
    /*
diff --cc src/prepare.c
Simple merge
diff --cc src/select.c
Simple merge
diff --cc src/sqlite.h.in
index 1b1ba5336721e0d2704222bf344b977736cfb93f,9be07fc1e687f9207086fb592b60ea2538132a5f..5b83da8af32093d3d22328daf32cafc9ec1f597e
@@@ -868,10 -958,13 +959,17 @@@ struct sqlite3_io_methods 
  #define SQLITE_FCNTL_VFSNAME                12
  #define SQLITE_FCNTL_POWERSAFE_OVERWRITE    13
  #define SQLITE_FCNTL_PRAGMA                 14
+ #define SQLITE_FCNTL_BUSYHANDLER            15
+ #define SQLITE_FCNTL_TEMPFILENAME           16
+ #define SQLITE_FCNTL_MMAP_SIZE              18
+ #define SQLITE_FCNTL_TRACE                  19
+ #define SQLITE_FCNTL_HAS_MOVED              20
+ #define SQLITE_FCNTL_SYNC                   21
+ #define SQLITE_FCNTL_COMMIT_PHASETWO        22
 +/* deprecated names */
 +#define SQLITE_GET_LOCKPROXYFILE      SQLITE_FCNTL_GET_LOCKPROXYFILE
 +#define SQLITE_SET_LOCKPROXYFILE      SQLITE_FCNTL_SET_LOCKPROXYFILE
 +#define SQLITE_LAST_ERRNO             SQLITE_FCNTL_LAST_ERRNO
  
  /*
  ** CAPI3REF: Mutex Handle
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/test1.c
index dcdbca531f3f9873da0c9c0d0334ed8e0f3c6cf3,44f56a6c84a8e5cd0d6b29726d38d0cc39e52e9e..2dedf01c97860992d89ac3ff0afe4e5fcccf4e6f
@@@ -6353,10 -6476,9 +6679,11 @@@ int Sqlitetest1_Init(Tcl_Interp *interp
       { "file_control_persist_wal",    file_control_persist_wal,     0   },
       { "file_control_powersafe_overwrite",file_control_powersafe_overwrite,0},
       { "file_control_vfsname",        file_control_vfsname,         0   },
+      { "file_control_tempfilename",   file_control_tempfilename,    0   },
       { "sqlite3_vfs_list",           vfs_list,     0   },
       { "sqlite3_create_function_v2", test_create_function_v2, 0 },
 +     { "path_is_local",              path_is_local,  0   },
 +     { "path_is_dos",                path_is_dos,  0   },
  
       /* Functions from os.h */
  #ifndef SQLITE_OMIT_UTF16
index 24133de011857252ebd40b40ce8301ff7c082f26,e967424a290f738aecfdac578e9b87a4c4ae8d7f..6b4d6b9b1ce063b52eb2fb0211d27bbbd34fa55c
  */
  
  #include "tcl.h"
 -#include <sqlite3.h>
 +#include "sqlite3.h"
  #include <assert.h>
  
+ /* These functions are implemented in main.c. */
+ extern const char *sqlite3ErrName(int);
  /* These functions are implemented in test1.c. */
- int getDbPointer(Tcl_Interp *, const char *, sqlite3 **);
- const char *sqlite3TestErrorName(int);
+ extern int getDbPointer(Tcl_Interp *, const char *, sqlite3 **);
  
  static int backupTestCmd(
    ClientData clientData, 
Simple merge
index 59a256ffbc39471b646a118fd382845154be9a3b,9d19fa0e2c86657b56dc4c8a22cd37e5485c8cbb..7beec664556fdd90a5e02a5b8020f9369cfcecb4
@@@ -13,7 -13,8 +13,8 @@@
  ** is not included in the SQLite library. 
  */
  
 -#include <sqlite3.h>
 +#include "sqlite3.h"
+ #include <tcl.h>
  
  /* Solely for the UNUSED_PARAMETER() macro. */
  #include "sqliteInt.h"
diff --cc src/vdbe.c
index f1e6f0892d5f2718c977949476d9c381cdfbf44d,a64e5bf5e19779f6c46652bb2afa89454b0bc0ae..44f2fcf0cdd964d5ffb13f1d4a2c1ad2181320ad
@@@ -579,8 -524,10 +524,10 @@@ int sqlite3VdbeExec
      ** sqlite3_column_text16() failed.  */
      goto no_mem;
    }
 -  assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
 +  assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || ((p->rc&0xFF) == SQLITE_LOCKED));
+   assert( p->bIsReader || p->readOnly!=0 );
    p->rc = SQLITE_OK;
+   p->iCurrentTime = 0;
    assert( p->explain==0 );
    p->pResultSet = 0;
    db->busyHandler.nBusy = 0;
diff --cc src/vdbeapi.c
Simple merge
diff --cc src/vdbeaux.c
Simple merge
diff --cc src/wal.c
Simple merge
diff --cc src/wal.h
Simple merge
Simple merge
diff --cc test/cache.test
Simple merge
index 77a1cbb98c06e68794c7afaf51768a15684daba1,2541a1a82312ed4035e1c78af7f475cf06ebab1b..7743136f255c5698382fd7c2aac22082e7c44c1d
@@@ -38,11 -38,9 +38,12 @@@ proc db_write {db {reset 0}} 
  }
  
  do_test 1.1 {
 +  ifcapable enable_persist_wal {
 +    file_control_persist_wal db 0
 +  }
    db close
    sqlite3 db test.db
+   execsql { PRAGMA mmap_size = 0 }
    expr {[file size test.db] / 1024}
  } 6
  
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc test/memdb.test
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc test/stat.test
Simple merge
diff --cc test/tester.tcl
Simple merge
Simple merge
index af2c2f9e05252c4fd1f061344e122f93cec392e7,04757413221c16d0143da057d438d3f68c905f1c..1d0ba11d6aaf12a4b5d95b47122d34672affcdd9
@@@ -62,27 -62,40 +62,41 @@@ do_test tkt3457-1.1 
    execsql COMMIT
  } {}
  
 -do_test tkt3457-1.2 {
 -  forcecopy bak.db-journal test.db-journal
 -  file attributes test.db-journal -permissions ---------
 -  catchsql { SELECT * FROM t1 }
 -} {1 {unable to open database file}}
 -do_test tkt3457-1.3 {
 -  forcecopy bak.db-journal test.db-journal
 -  file attributes test.db-journal -permissions -w--w--w-
 -  catchsql { SELECT * FROM t1 }
 -} {1 {unable to open database file}}
 -do_test tkt3457-1.4 {
 -  forcecopy bak.db-journal test.db-journal
 -  file attributes test.db-journal -permissions r--r--r--
 -  catchsql { SELECT * FROM t1 }
 -} {1 {unable to open database file}}
 -
 -do_test tkt3457-1.5 {
 -  forcecopy bak.db-journal test.db-journal
 -  file attributes test.db-journal -permissions rw-rw-rw-
 -  catchsql { SELECT * FROM t1 }
 -} {0 {1 2 3 4 5 6}}
+ # Disable fchmod to make sure SQLite itself does not try to change the
+ # permission bits on us
+ #
+ catch {
+   test_syscall install fchmod
+   test_syscall fault 1 1
+ }
 +if { ![path_is_dos "."] } {
 +  do_test tkt3457-1.2 {
 +    forcecopy bak.db-journal test.db-journal
 +    file attributes test.db-journal -permissions ---------
 +    catchsql { SELECT * FROM t1 }
 +  } {1 {unable to open database file}}
 +  do_test tkt3457-1.3 {
 +    forcecopy bak.db-journal test.db-journal
 +    file attributes test.db-journal -permissions -w--w--w-
 +    catchsql { SELECT * FROM t1 }
 +  } {1 {unable to open database file}}
 +  do_test tkt3457-1.4 {
 +    forcecopy bak.db-journal test.db-journal
 +    file attributes test.db-journal -permissions r--r--r--
 +    catchsql { SELECT * FROM t1 }
 +  } {1 {unable to open database file}}
 +  do_test tkt3457-1.5 {
 +    forcecopy bak.db-journal test.db-journal
 +    file attributes test.db-journal -permissions rw-rw-rw-
 +    catchsql { SELECT * FROM t1 }
 +  } {0 {1 2 3 4 5 6}}
 +}
  
+ # Reenable fchmod
+ catch {
+   test_syscall uninstall
+   test_syscall fault 0 0
+ }
  finish_test
diff --cc test/wal.test
index 237d1de3cb890dac8e5e24298d086a2c4616cc78,675be73791a7946c97f32de73dd154c8fb32ee2e..92f64fc8652d0d2aed4fc4b421330a6b2a7a2ab7
@@@ -743,9 -727,9 +743,12 @@@ do_test wal-11.9 
    list [expr [file size test.db]/1024] [log_deleted test.db-wal]
  } {37 1}
  sqlite3_wal db test.db
+ set nWal 39
+ if {[permutation]!="mmap"} {set nWal 37}
+ ifcapable !mmap {set nWal 37}
 +ifcapable enable_persist_wal {
 +  file_control_persist_wal db 0
 +}
  do_test wal-11.10 {
    execsql {
      PRAGMA cache_size = 10;
@@@ -874,11 -852,7 +877,10 @@@ do_test wal-13.1.2 
    sqlite3 db test.db
    execsql { SELECT * FROM t2 }
  } {B 2}
- breakpoint
  do_test wal-13.1.3 {
 +  ifcapable enable_persist_wal {
 +    file_control_persist_wal db 0
 +  }
    db close
    file exists test.db-wal
  } {0}
diff --cc test/wal2.test
Simple merge
diff --cc test/wal5.test
Simple merge
diff --cc test/wal6.test
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
diff --cc test/walro.test
index 170c2d8ad35168fe0f53e05170664e9ec2d9340e,6d920b1e2465f4b2d8aa87b56ecf69a3dc297dd9..e40b90a90a57ed506b81cd380305146def1312f0
@@@ -30,19 -30,8 +30,16 @@@ ifcapable !wal 
    finish_test
    return
  }
 +if ![wal_is_ok] { finish_test; return }
 +
 +set shmpath test.db-shm
 +if {[forced_proxy_locking]} {
 +  sqlite3 db test.db
 +  set shmpath [execsql { pragma lock_proxy_file }]-shm
 +  db close
 +}
  
  do_multiclient_test tn {
-   # Do not run tests with the connections in the same process.
-   #
-   if {$tn==2} continue
    
    # Close all connections and delete the database.
    #
Simple merge