]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Pull all the latest trunk changes, and especially the fix for WAL cache
authordrh <drh@noemail.net>
Thu, 19 May 2011 01:51:25 +0000 (01:51 +0000)
committerdrh <drh@noemail.net>
Thu, 19 May 2011 01:51:25 +0000 (01:51 +0000)
spills causing transactions to disappear, into the apple-osx branch.

FossilOrigin-Name: 8d1a6bb002a7817fa7df932f7cab7220c1d62c0e

12 files changed:
1  2 
Makefile.in
ext/rtree/rtree.c
main.mk
manifest
manifest.uuid
src/main.c
src/os_unix.c
src/pragma.c
src/test1.c
src/test_config.c
src/vdbe.c
test/tester.tcl

diff --cc Makefile.in
Simple merge
Simple merge
diff --cc main.mk
Simple merge
diff --cc manifest
index dcadcba214056fb7aef8ec72facd0960ef5eb02f,a2fbca16d75c5e183155053362fe3d233bd31a7e..48162ba2498dc306a2dc063c5dd634fd6f86cf4f
+++ b/manifest
@@@ -1,7 -1,7 +1,7 @@@
- C Merge\sthe\slatest\strunk\schanges\sinto\sthe\sapple-osx\sbranch.
- D 2011-05-05T15:52:46.864
 -C When\scommitting\sa\sWAL\stransaction,\smake\ssure\sat\sleast\sone\spage\sis\nwritten\sto\sthe\sWAL\sfile\sso\sthat\sthe\sWAL\ssubsystem\swill\shave\sa\spage\non\swhich\sto\sset\sthe\scommit\sflag.\nTicket\s[2d1a5c67dfc236].
 -D 2011-05-19T01:21:42.431
++C Pull\sall\sthe\slatest\strunk\schanges,\sand\sespecially\sthe\sfix\sfor\sWAL\scache\nspills\scausing\stransactions\sto\sdisappear,\sinto\sthe\sapple-osx\sbranch.
++D 2011-05-19T01:51:25.453
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
- F Makefile.in 46b5d5017359f89b1aa89ca3581d6ec577738d96
 -F Makefile.in 11dcc00a8d0e5202def00e81732784fb0cc4fe1d
++F Makefile.in a38f09acc876beec6b103a6e12a33795c6b1df9c
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
  F Makefile.vxworks c85ec1d8597fe2f7bc225af12ac1666e21379151
  F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6
@@@ -82,7 -82,7 +82,7 @@@ F ext/icu/README.txt bf8461d8cdc6b8f514
  F ext/icu/icu.c eb9ae1d79046bd7871aa97ee6da51eb770134b5a
  F ext/icu/sqliteicu.h 728867a802baa5a96de7495e9689a8e01715ef37
  F ext/rtree/README 6315c0d73ebf0ec40dedb5aa0e942bc8b54e3761
- F ext/rtree/rtree.c 15361dc28c9d5ff7635a382e85a2b7a2c7a124aa
 -F ext/rtree/rtree.c 2445bec932f58f8f4fe9de49a63bd6bf24db82d6
++F ext/rtree/rtree.c d3741cde910b659fd66ca4289eed430e90bdbbb0
  F ext/rtree/rtree.h 834dbcb82dc85b2481cde6a07cdadfddc99e9b9e
  F ext/rtree/rtree1.test 28e1b8da4da98093ce3210187434dd760a8d89d8
  F ext/rtree/rtree2.test acbb3a4ce0f4fbc2c304d2b4b784cfa161856bba
@@@ -100,12 -100,9 +100,12 @@@ F ext/rtree/rtree_util.tcl 06aab2ed5b82
  F ext/rtree/sqlite3rtree.h 1af0899c63a688e272d69d8e746f24e76f10a3f0
  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 93d79977abc0bcbb431c84a13a64322edf620fd5
 -F main.mk 6111163d4e9720e4212ef288e967b4aa2c2ce379
++F main.mk 3c7e0f21e531b58cfe398964a464411543462eec
  F mkdll.sh 7d09b23c05d56532e9d44a50868eb4b12ff4f74a
  F mkextu.sh 416f9b7089d80e5590a29692c9d9280a10dbad9f
  F mkextw.sh 4123480947681d9b434a5e7b1ee08135abe409ac
@@@ -137,20 -134,20 +137,20 @@@ F src/delete.c 7a24fcc9a31664d145acb97c
  F src/expr.c e3cf0957c6b8faaaf7386a3bc69e53c0dc9705be
  F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb
  F src/fkey.c a43ba8a005fb5efd1deeee06853e3a6120d46a91
 -F src/func.c b9117e40975245b8504cf3625d7e321d8d4b63dc
 +F src/func.c c02fda657f2366c493198c3e480695fc69972c5f
- F src/global.c 02335177cf6946fe5525c6f0755cf181140debf3
+ F src/global.c 29bfb85611dd816b04f10fba0ca910366e128d38
  F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af
  F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970
  F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08
  F src/insert.c 3eea5a53d2644116fb865afaa4699fabe62b441c
  F src/journal.c 552839e54d1bf76fb8f7abe51868b66acacf6a0e
 -F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f
 +F src/legacy.c 015826a958f690302d27e096a68d50b3657e4201
  F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e
  F src/loadext.c 3ae0d52da013a6326310655be6473fd472347b85
- F src/main.c 3f1e9329c1e689375adf143d4303077d4c14aade
- F src/malloc.c 74c740e8ba22b806cfb980c8c0ddea1cbd54a20e
 -F src/main.c 059daeed5876b3604f0192f838faf5f4db138901
++F src/main.c 1b6edc1d61b466bb273dad8af31e3919aa750726
+ F src/malloc.c 591aedb20ae40813f1045f2ef253438a334775d9
  F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
 -F src/mem1.c 00bd8265c81abb665c48fea1e0c234eb3b922206
 +F src/mem1.c 46095d62b241466ef51970e592aa3a7a87e443e1
  F src/mem2.c e307323e86b5da1853d7111b68fd6b84ad6f09cf
  F src/mem3.c 9b237d911ba9904142a804be727cc6664873f8a3
  F src/mem5.c c2c63b7067570b00bf33d751c39af24182316f7f
@@@ -166,33 -163,32 +166,33 @@@ F src/os.c 22ac61d06e72a0dac90040014733
  F src/os.h 9dbed8c2b9c1f2f2ebabc09e49829d4777c26bf9
  F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f
  F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
- F src/os_unix.c b206f9d56b6e3021f195914b63f394d28f23e1cd
- F src/os_win.c 4271f0bf733c0b45635ddcfb41c935573de8284c
- F src/pager.c 055239dcdfe12b3f5d97f6f01f85da01e2d6d912
 -F src/os_unix.c 6d4a58d81ad4b782406519f3790202f330e89bb7
++F src/os_unix.c e911e44f3d4db4b1c10e5152b09888cd2ac961e6
+ F src/os_win.c 218b899469e570d46eb8147c2383075f7c026230
+ F src/pager.c 4b2358556c88660a94a4560de95dd728911e00fd
  F src/pager.h 3f8c783de1d4706b40b1ac15b64f5f896bcc78d1
  F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58
  F src/pcache.c 09d38c44ab275db581f7a2f6ff8b9bc7f8c0faaa
  F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
  F src/pcache1.c d548e31beafa792d1994b663a29a5303569efc4e
- F src/pragma.c 1785e42ea5242aa47cbb7e73aad242d8a4198142
 -F src/pragma.c 9e778decc3ee9bcaf88904b4a3b0a4360aaf0eab
 -F src/prepare.c e64261559a3187698a3e7e6c8b001a4f4f98dab4
++F src/pragma.c 8756649386a4eb7192915fb44e177d30e19f723c
 +F src/prepare.c 9d7403fe75fefa134351b41400d09ba1b189134b
  F src/printf.c 585a36b6a963df832cfb69505afa3a34ed5ef8a1
  F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50
  F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706
  F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697
  F src/select.c d9d440809025a58547e39f4f268c2a296bfb56ff
- F src/shell.c 72e7e176bf46d5c6518d15ac4ad6847c4bb5df79
- F src/sqlite.h.in 9bf19a5dcf6317b0f091c255edaed0b1fc01dcd0
+ F src/shell.c decd04236a7ef26be5ef46d4ea963044bfad9a48
+ F src/sqlite.h.in 8bbf8d9bc5f1a9474a633a2de7014506f1f06b90
 +F src/sqlite3_private.h 2a814d17913732831acf13e7e87860105a3416e4
  F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754
- F src/sqliteInt.h e70a03bb66d209e279b3edeb57d4fdc42a1d9fda
+ F src/sqliteInt.h 771087591052966d36ac1fcd3c8bb7a8c6cf9a38
  F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
  F src/status.c 7ac64842c86cec2fc1a1d0e5c16d3beb8ad332bf
  F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
  F src/tclsqlite.c 501c9a200fd998a268be475be5858febc90b725b
- F src/test1.c 89bc831e1d3ecae3d17eac49e9f59e5f84f6f66b
 -F src/test1.c 4a1171af201be90c21d64a872e686b1333d9a2cf
++F src/test1.c d98ecaada53b5e4dbf37ea3ba339ac0d0926fda6
  F src/test2.c 80d323d11e909cf0eb1b6fbb4ac22276483bcf31
- F src/test3.c 056093cfef69ff4227a6bdb9108564dc7f45e4bc
+ F src/test3.c 124ff9735fb6bb7d41de180d6bac90e7b1509432
  F src/test4.c d1e5a5e904d4b444cf572391fdcb017638e36ff7
  F src/test5.c e1a19845625144caf038031234a12185e40d315c
  F src/test6.c c7256cc21d2409486d094277d5b017e8eced44ba
@@@ -201,9 -197,9 +201,9 @@@ F src/test8.c 6b1d12912a04fe6fca8c45bb9
  F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60
  F src/test_async.c 0612a752896fad42d55c3999a5122af10dcf22ad
  F src/test_autoext.c 30e7bd98ab6d70a62bb9ba572e4c7df347fe645e
 -F src/test_backup.c c129c91127e9b46e335715ae2e75756e25ba27de
 +F src/test_backup.c 64fd6173ad99daade1227aa17c3ca0d18fa5e5fa
  F src/test_btree.c 47cd771250f09cdc6e12dda5bc71bc0b3abc96e2
- F src/test_config.c 06c91d432a0ecca3c0ff291d16472f74458f74ce
 -F src/test_config.c 9a6aa8301a56906612b5e70f5b38e80cfb8af8e7
++F src/test_config.c 308a99163bd821efa84f0ada99bc61fbbf44b613
  F src/test_demovfs.c 938d0f595f8bd310076e1c06cf7885a01ce7ce01
  F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc
  F src/test_func.c cbdec5cededa0761daedde5baf06004a9bf416b5
@@@ -238,13 -234,13 +238,13 @@@ F src/tokenize.c 604607d6813e9551cf5189
  F src/trigger.c 144cc18bb701f3286484aae4292a9531f09278c8
  F src/update.c 5bcb56e5c7380a2eecb0e71891dbd4ad7437748f
  F src/utf.c d83650c3ea08f7407bd9d0839d9885241c209c60
- F src/util.c 465fe10aabf0ca7d7826a156dab919b0b65c525a
+ F src/util.c 0f33bbbdfcc4a2d8cf20c3b2a16ffc3b57c58a70
  F src/vacuum.c 05513dca036a1e7848fe18d5ed1265ac0b32365e
- F src/vdbe.c bf969a63096ebf3209963ddf76e085f5465a7dae
 -F src/vdbe.c 343a068e8daeb8475e66776feb9f2974046e95c5
++F src/vdbe.c f997c49fa6745bce83e23ae7863a328f8cb9d448
  F src/vdbe.h 8a675fefdf7119441fe817c800a9a52440c2e797
  F src/vdbeInt.h fe8f58d305e629fff02f61f655aca1d299f1f6ae
 -F src/vdbeapi.c e0e2672e0a96ae3f8575c8ecd02912a3e8a554a1
 +F src/vdbeapi.c 34b6686d9079264bc715f63e41bc2f0d9b98de89
- F src/vdbeaux.c 25aa5ba7d46b4fe7c8f33dc132d474242d5f9726
+ F src/vdbeaux.c 535851211df61d83213c83d5ffd3c6ce9ecbdc18
  F src/vdbeblob.c c3ccb7c8732858c680f442932e66ad06bb036562
  F src/vdbemem.c 0498796b6ffbe45e32960d6a1f5adfb6e419883b
  F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114
@@@ -394,8 -392,8 +396,8 @@@ F test/exclusive.test 897074dc6706b0c4f
  F test/exclusive2.test 343d55130c12c67b8bf10407acec043a6c26c86b
  F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7
  F test/exists.test 5e2d64b4eb5a9d08876599bdae2e1213d2d12e2a
- F test/expr.test 19e8ac40313e2282a47b586d11c4892040990d3a
+ F test/expr.test 67c9fd6f8f829e239dc8b0f4a08a73c08b09196d
 -F test/fallocate.test 43dc34b8c24be6baffadc3b4401ee15710ce83c6
 +F test/fallocate.test a9927b638567e2e776c112f54d701402a0e74023
  F test/filectrl.test 97003734290887566e01dded09dc9e99cb937e9e
  F test/filefmt.test f178cfc29501a14565954c961b226e61877dd32c
  F test/fkey1.test 01c7de578e11747e720c2d9aeef27f239853c4da
@@@ -604,10 -601,10 +606,10 @@@ F test/notnull.test cc7c78340328e6112a1
  F test/null.test a8b09b8ed87852742343b33441a9240022108993
  F test/openv2.test af02ed0a9cbc0d2a61b8f35171d4d117e588e4ec
  F test/oserror.test 498d8337e9d15543eb7b004fef8594bf204ff43c
- F test/pager1.test d8672fd0af5f4f9b99b06283d00f01547809bebe
+ F test/pager1.test 8baf4470b29511503abcaf1f17d16b16462e4d54
  F test/pager2.test 745b911dde3d1f24ae0870bd433dfa83d7c658c1
  F test/pager3.test 3856d9c80839be0668efee1b74811b1b7f7fc95f
 -F test/pagerfault.test 9de4d3e0c59970b4c6cb8dac511fa242f335d8a7
 +F test/pagerfault.test bea066b9162e1ab6843c2c1524ebb0965715e956
  F test/pagerfault2.test 1f79ea40d1133b2683a2f811b00f2399f7ec2401
  F test/pagerfault3.test f16e2efcb5fc9996d1356f7cbc44c998318ae1d7
  F test/pageropt.test 8146bf448cf09e87bb1867c2217b921fb5857806
@@@ -691,10 -688,10 +693,10 @@@ F test/sysfault.test c79441d88d23696fbe
  F test/table.test 04ba066432430657712d167ebf28080fe878d305
  F test/tableapi.test 2674633fa95d80da917571ebdd759a14d9819126
  F test/tclsqlite.test 8c154101e704170c2be10f137a5499ac2c6da8d3
 -F test/tempdb.test 19d0f66e2e3eeffd68661a11c83ba5e6ace9128c
 +F test/tempdb.test 3263e5c3f0604e54d307481e8587327c54544d18
  F test/temptable.test f42121a0d29a62f00f93274464164177ab1cc24a
  F test/temptrigger.test b0273db072ce5f37cf19140ceb1f0d524bbe9f05
- F test/tester.tcl 7fb83d5dd1eff130a0a020d1746f1ccd723c414b
 -F test/tester.tcl a791ee74cb6b8f8613079ccc018bf2c8b952a26c
++F test/tester.tcl 51d761878d9934e19fc0eda3c9c5dbc39d02522d
  F test/thread001.test a3e6a7254d1cb057836cb3145b60c10bf5b7e60f
  F test/thread002.test afd20095e6e845b405df4f2c920cb93301ca69db
  F test/thread003.test b824d4f52b870ae39fc5bae4d8070eca73085dca
@@@ -870,25 -869,26 +874,26 @@@ F test/vtabE.test 7c4693638d7797ce2eda1
  F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5
  F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
  F test/vtab_shared.test 0eff9ce4f19facbe0a3e693f6c14b80711a4222d
 -F test/wal.test 5617ad308bfdb8a8885220d8a261a6096a8d7e57
 -F test/wal2.test aa0fb2314b3235be4503c06873e41ebfc0757782
 -F test/wal3.test 5c396cc22497244d627306f4c1d360167353f8dd
 -F test/wal4.test 3404b048fa5e10605facaf70384e6d2943412e30
 +F test/wal.test 3ff610479cd005117f54a8c003a8d86432e6f2ac
 +F test/wal2.test 24239bb8cd8ca5e47c9ab4ac705f7343d2f9b5a2
 +F test/wal3.test 34c65b1cb78e1da5d24c9ab74534c376784f96ea
 +F test/wal4.test 6a68c45bc1ca24a3592ec449ddcb92b29d0e0e87
  F test/wal5.test 1bbfaa316dc2a1d0d1fac3f4500c38a90055a41b
  F test/wal6.test 07aa31ca8892d0527f2c5c5a9a2a87aa421dfaa8
+ F test/wal7.test 09bc8de3d11949571d6f7a4188b308059cec27e5
  F test/wal_common.tcl a98f17fba96206122eff624db0ab13ec377be4fe
 -F test/walbak.test 4df1c7369da0301caeb9a48fa45997fd592380e4
 -F test/walbig.test e882bc1d014afffbfa2b6ba36e0f07d30a633ad0
 -F test/walcksum.test a37b36375c595e61bdb7e1ec49b5f0979b6fc7ce
 -F test/walcrash.test e763841551d6b23677ccb419797c1589dcbdbaf5
 -F test/walcrash2.test 019d60b89d96c1937adb2b30b850ac7e86e5a142
 -F test/walfault.test 58fce626359c9376fe35101b5c0f2df8040aa839
 -F test/walhook.test ed00a40ba7255da22d6b66433ab61fab16a63483
 -F test/walmode.test 22ddccd073c817ac9ead62b88ac446e8dedc7d2c
 +F test/walbak.test 767e1c9e0ea0cfb907873b332883e66e187fa4bc
 +F test/walbig.test 78ac493db2abdb65b9c6cace5b851cc32df1d449
 +F test/walcksum.test cf6787f2ee1a6a3da6f0c2b20b9ede5153e4e03f
 +F test/walcrash.test 80c1cc3173a0ef09d8303fa556cb0187a36d82ea
 +F test/walcrash2.test 929c99d14ee2e3e3ef82585058968a8b12f72706
 +F test/walfault.test 7db81f3dac64ce8897196f199c2909078bcabf8d
 +F test/walhook.test c934ac5219fee2b4e7653d291db9107b8dc73bba
 +F test/walmode.test feb39956ec6f415fbb9dcb12d91243391c2c4715
  F test/walnoshm.test a074428046408f4eb5c6a00e09df8cc97ff93317
 -F test/walshared.test 6dda2293880c300baf5d791c307f653094585761
 -F test/walslow.test d21625e2e99e11c032ce949e8a94661576548933
 -F test/walthread.test a25a393c068a2b42b44333fa3fdaae9072f1617c
 +F test/walshared.test 0befc811dcf0b287efae21612304d15576e35417
 +F test/walslow.test 989854bc5c214700a9f2d545bb158643813b8881
 +F test/walthread.test e6e32e93ccebfa401dfc0dd930c79daa3472b0ae
  F test/where.test de337a3fe0a459ec7c93db16a519657a90552330
  F test/where2.test 43d4becaf5a5df854e6c21d624a1cb84c6904554
  F test/where3.test 8e1175c7ef710c70502858fc4fb08d784b3620b9
@@@ -938,7 -938,7 +943,7 @@@ F tool/speedtest8.c 2902c46588c40b55661
  F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
  F tool/split-sqlite3c.tcl d9be87f1c340285a3e081eb19b4a247981ed290c
  F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
- P 289194d68e891e4977407d07e452e48844777a36 930be6a1bdec8c150caafd790973f7a401fc1970
- R f9953bf7534b463a52ab1fb53587971d
 -P de58cb28387f44c35b1a81bdab853cafd938c1a6
 -R e623b89a5e0b9474dd0884ecf24382fc
++P f9b149e53815235aaf92f722e37c4819503d72b3 67bf1c9a888b0d84d252d6c4c754c2c51994d208
++R 3a925f20d37f60844aff7e1475163b7b
  U drh
- Z 363d2e190ed85f758bd8ad149ca95188
 -Z 83669a82fd950b01af57955dbca1c918
++Z bf0a7d24e91a5e532c4b622c64110df0
diff --cc manifest.uuid
index d405da16174508d88412fc7d576340904713e7d3,ad5e5387847228a7588ff6dc44d9333d51ca5ca9..880cb5a1ac488611fd2cb7738df3c30f6250eca9
@@@ -1,1 -1,1 +1,1 @@@
- f9b149e53815235aaf92f722e37c4819503d72b3
 -67bf1c9a888b0d84d252d6c4c754c2c51994d208
++8d1a6bb002a7817fa7df932f7cab7220c1d62c0e
diff --cc src/main.c
index 8fe1e7f39e4d0af6e0acb0297f8070a12220c3ca,c99d3965468527533e46635a2ee3854f81375d6e..b5888a0da1b771bd54bbb547c0a8345abb34fcee
@@@ -1791,13 -1789,237 +1796,243 @@@ int sqlite3_limit(sqlite3 *db, int limi
    }
    return oldLimit;                     /* IMP: R-53341-35419 */
  }
 +#if defined(SQLITE_ENABLE_AUTO_PROFILE)
 +static void profile_sql(void *aux, const char *sql, u64 ns) {
 +#pragma unused(aux)
 +      fprintf(stderr, "Query: %s\n Execution Time: %llu ms\n", sql, ns / 1000000);
 +}
 +#endif
  
+ /*
+ ** This function is used to parse both URIs and non-URI filenames passed by the
+ ** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database
+ ** URIs specified as part of ATTACH statements.
+ **
+ ** The first argument to this function is the name of the VFS to use (or
+ ** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx"
+ ** query parameter. The second argument contains the URI (or non-URI filename)
+ ** itself. When this function is called the *pFlags variable should contain
+ ** the default flags to open the database handle with. The value stored in
+ ** *pFlags may be updated before returning if the URI filename contains 
+ ** "cache=xxx" or "mode=xxx" query parameters.
+ **
+ ** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to
+ ** the VFS that should be used to open the database file. *pzFile is set to
+ ** point to a buffer containing the name of the file to open. It is the 
+ ** responsibility of the caller to eventually call sqlite3_free() to release
+ ** this buffer.
+ **
+ ** If an error occurs, then an SQLite error code is returned and *pzErrMsg
+ ** may be set to point to a buffer containing an English language error 
+ ** message. It is the responsibility of the caller to eventually release
+ ** this buffer by calling sqlite3_free().
+ */
+ int sqlite3ParseUri(
+   const char *zDefaultVfs,        /* VFS to use if no "vfs=xxx" query option */
+   const char *zUri,               /* Nul-terminated URI to parse */
+   unsigned int *pFlags,           /* IN/OUT: SQLITE_OPEN_XXX flags */
+   sqlite3_vfs **ppVfs,            /* OUT: VFS to use */ 
+   char **pzFile,                  /* OUT: Filename component of URI */
+   char **pzErrMsg                 /* OUT: Error message (if rc!=SQLITE_OK) */
+ ){
+   int rc = SQLITE_OK;
+   unsigned int flags = *pFlags;
+   const char *zVfs = zDefaultVfs;
+   char *zFile;
+   char c;
+   int nUri = sqlite3Strlen30(zUri);
+   assert( *pzErrMsg==0 );
+   if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri) 
+    && nUri>=5 && memcmp(zUri, "file:", 5)==0 
+   ){
+     char *zOpt;
+     int eState;                   /* Parser state when parsing URI */
+     int iIn;                      /* Input character index */
+     int iOut = 0;                 /* Output character index */
+     int nByte = nUri+2;           /* Bytes of space to allocate */
+     /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen 
+     ** method that there may be extra parameters following the file-name.  */
+     flags |= SQLITE_OPEN_URI;
+     for(iIn=0; iIn<nUri; iIn++) nByte += (zUri[iIn]=='&');
+     zFile = sqlite3_malloc(nByte);
+     if( !zFile ) return SQLITE_NOMEM;
+     /* Discard the scheme and authority segments of the URI. */
+     if( zUri[5]=='/' && zUri[6]=='/' ){
+       iIn = 7;
+       while( zUri[iIn] && zUri[iIn]!='/' ) iIn++;
+       if( iIn!=7 && (iIn!=16 || memcmp("localhost", &zUri[7], 9)) ){
+         *pzErrMsg = sqlite3_mprintf("invalid uri authority: %.*s", 
+             iIn-7, &zUri[7]);
+         rc = SQLITE_ERROR;
+         goto parse_uri_out;
+       }
+     }else{
+       iIn = 5;
+     }
+     /* Copy the filename and any query parameters into the zFile buffer. 
+     ** Decode %HH escape codes along the way. 
+     **
+     ** Within this loop, variable eState may be set to 0, 1 or 2, depending
+     ** on the parsing context. As follows:
+     **
+     **   0: Parsing file-name.
+     **   1: Parsing name section of a name=value query parameter.
+     **   2: Parsing value section of a name=value query parameter.
+     */
+     eState = 0;
+     while( (c = zUri[iIn])!=0 && c!='#' ){
+       iIn++;
+       if( c=='%' 
+        && sqlite3Isxdigit(zUri[iIn]) 
+        && sqlite3Isxdigit(zUri[iIn+1]) 
+       ){
+         int octet = (sqlite3HexToInt(zUri[iIn++]) << 4);
+         octet += sqlite3HexToInt(zUri[iIn++]);
+         assert( octet>=0 && octet<256 );
+         if( octet==0 ){
+           /* This branch is taken when "%00" appears within the URI. In this
+           ** case we ignore all text in the remainder of the path, name or
+           ** value currently being parsed. So ignore the current character
+           ** and skip to the next "?", "=" or "&", as appropriate. */
+           while( (c = zUri[iIn])!=0 && c!='#' 
+               && (eState!=0 || c!='?')
+               && (eState!=1 || (c!='=' && c!='&'))
+               && (eState!=2 || c!='&')
+           ){
+             iIn++;
+           }
+           continue;
+         }
+         c = octet;
+       }else if( eState==1 && (c=='&' || c=='=') ){
+         if( zFile[iOut-1]==0 ){
+           /* An empty option name. Ignore this option altogether. */
+           while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++;
+           continue;
+         }
+         if( c=='&' ){
+           zFile[iOut++] = '\0';
+         }else{
+           eState = 2;
+         }
+         c = 0;
+       }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){
+         c = 0;
+         eState = 1;
+       }
+       zFile[iOut++] = c;
+     }
+     if( eState==1 ) zFile[iOut++] = '\0';
+     zFile[iOut++] = '\0';
+     zFile[iOut++] = '\0';
+     /* Check if there were any options specified that should be interpreted 
+     ** here. Options that are interpreted here include "vfs" and those that
+     ** correspond to flags that may be passed to the sqlite3_open_v2()
+     ** method. */
+     zOpt = &zFile[sqlite3Strlen30(zFile)+1];
+     while( zOpt[0] ){
+       int nOpt = sqlite3Strlen30(zOpt);
+       char *zVal = &zOpt[nOpt+1];
+       int nVal = sqlite3Strlen30(zVal);
+       if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){
+         zVfs = zVal;
+       }else{
+         struct OpenMode {
+           const char *z;
+           int mode;
+         } *aMode = 0;
+         char *zModeType;
+         int mask;
+         int limit;
+         if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){
+           static struct OpenMode aCacheMode[] = {
+             { "shared",  SQLITE_OPEN_SHAREDCACHE },
+             { "private", SQLITE_OPEN_PRIVATECACHE },
+             { 0, 0 }
+           };
+           mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE;
+           aMode = aCacheMode;
+           limit = mask;
+           zModeType = "cache";
+         }
+         if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){
+           static struct OpenMode aOpenMode[] = {
+             { "ro",  SQLITE_OPEN_READONLY },
+             { "rw",  SQLITE_OPEN_READWRITE }, 
+             { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE },
+             { 0, 0 }
+           };
+           mask = SQLITE_OPEN_READONLY|SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
+           aMode = aOpenMode;
+           limit = mask & flags;
+           zModeType = "access";
+         }
+         if( aMode ){
+           int i;
+           int mode = 0;
+           for(i=0; aMode[i].z; i++){
+             const char *z = aMode[i].z;
+             if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){
+               mode = aMode[i].mode;
+               break;
+             }
+           }
+           if( mode==0 ){
+             *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal);
+             rc = SQLITE_ERROR;
+             goto parse_uri_out;
+           }
+           if( mode>limit ){
+             *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s",
+                                         zModeType, zVal);
+             rc = SQLITE_PERM;
+             goto parse_uri_out;
+           }
+           flags = (flags & ~mask) | mode;
+         }
+       }
+       zOpt = &zVal[nVal+1];
+     }
+   }else{
+     zFile = sqlite3_malloc(nUri+2);
+     if( !zFile ) return SQLITE_NOMEM;
+     memcpy(zFile, zUri, nUri);
+     zFile[nUri] = '\0';
+     zFile[nUri+1] = '\0';
+   }
+   *ppVfs = sqlite3_vfs_find(zVfs);
+   if( *ppVfs==0 ){
+     *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs);
+     rc = SQLITE_ERROR;
+   }
+  parse_uri_out:
+   if( rc!=SQLITE_OK ){
+     sqlite3_free(zFile);
+     zFile = 0;
+   }
+   *pFlags = flags;
+   *pzFile = zFile;
+   return rc;
+ }
  /*
  ** This routine does the work of opening a database on behalf of
  ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"  
diff --cc src/os_unix.c
index 9fed1c6c2095038bb868157d24b58ab6b44f3f2a,c768dcfa7607644c2b6327673e5fbc7ac9e31573..a37f1580056278d517b9ca4ab4fd6192d9fc3305
@@@ -4019,7 -3768,8 +4019,8 @@@ static int unixOpenSharedMemory(unixFil
                       SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x",
                       (u32)sStat.st_ino, (u32)sStat.st_dev);
  #else
 -    sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", pDbFd->zPath);
 +    sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", zBasePath);
+     sqlite3FileSuffix3(pDbFd->zPath, zShmFilename);
  #endif
      pShmNode->h = -1;
      pDbFd->pInode->pShmNode = pShmNode;
diff --cc src/pragma.c
index 63da5e73c48044a6cca2b81acc998fc36c7d1083,799805c40b851961378dd03b7edd986d708a5e20..349de01b36e4997625abead60a3c58482ca970d3
@@@ -431,10 -430,10 +431,10 @@@ void sqlite3Pragma
    */
    if( sqlite3StrICmp(zLeft,"secure_delete")==0 ){
      Btree *pBt = pDb->pBt;
 -    int b = -1;
 +    sqlite3_int64 b = -1;
      assert( pBt!=0 );
      if( zRight ){
-       b = getBoolean(zRight);
+       b = sqlite3GetBoolean(zRight);
      }
      if( pId2->n==0 && b>=0 ){
        int ii;
diff --cc src/test1.c
Simple merge
Simple merge
diff --cc src/vdbe.c
Simple merge
diff --cc test/tester.tcl
Simple merge