From: drh Date: Thu, 19 May 2011 01:51:25 +0000 (+0000) Subject: Pull all the latest trunk changes, and especially the fix for WAL cache X-Git-Tag: mountain-lion~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d736884f3db0cd5bdd92035bc695129a56d2cc1c;p=thirdparty%2Fsqlite.git Pull all the latest trunk changes, and especially the fix for WAL cache spills causing transactions to disappear, into the apple-osx branch. FossilOrigin-Name: 8d1a6bb002a7817fa7df932f7cab7220c1d62c0e --- d736884f3db0cd5bdd92035bc695129a56d2cc1c diff --cc manifest index dcadcba214,a2fbca16d7..48162ba249 --- a/manifest +++ 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 d405da1617,ad5e538784..880cb5a1ac --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - f9b149e53815235aaf92f722e37c4819503d72b3 -67bf1c9a888b0d84d252d6c4c754c2c51994d208 ++8d1a6bb002a7817fa7df932f7cab7220c1d62c0e diff --cc src/main.c index 8fe1e7f39e,c99d396546..b5888a0da1 --- a/src/main.c +++ b/src/main.c @@@ -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=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 9fed1c6c20,c768dcfa76..a37f158005 --- a/src/os_unix.c +++ b/src/os_unix.c @@@ -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 63da5e73c4,799805c40b..349de01b36 --- a/src/pragma.c +++ b/src/pragma.c @@@ -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;