From: drh Date: Thu, 27 Jan 2011 18:48:02 +0000 (+0000) Subject: Pull in all the changes from trunk up through the version 3.7.5 X-Git-Tag: mountain-lion~43 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e3a4e11bcc55829a2de89dab94360b37d89ad751;p=thirdparty%2Fsqlite.git Pull in all the changes from trunk up through the version 3.7.5 release candidate 1. FossilOrigin-Name: 09d6c91dcff0699daec02de0cfd1cdc4e61b4f6b --- e3a4e11bcc55829a2de89dab94360b37d89ad751 diff --cc manifest index f108f2d3a0,5a8fd8dea0..e074ad1553 --- a/manifest +++ b/manifest @@@ -1,10 -1,10 +1,10 @@@ -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 - C Merge\sin\sall\schanges\sto\sthe\strunk\sthrough\sversion\s3.7.4rc3. - D 2010-12-07T15:49:03 -C SQLite\sversion\s3.7.5\srelease\scandidate\s1 -D 2011-01-27T14:35:01.967 ++C Pull\sin\sall\sthe\schanges\sfrom\strunk\sup\sthrough\sthe\sversion\s3.7.5\s\nrelease\scandidate\s1. ++D 2011-01-27T18:48:02.799 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f - F Makefile.in dec697a7eb6ee9d6c04f77f4e46b1aff020d2662 -F Makefile.in de6498556d536ae60bb8bb10e8c1ba011448658c ++F Makefile.in 0df5f50f0d224a6265a2922f8922cda77b02c89a F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.vxworks c85ec1d8597fe2f7bc225af12ac1666e21379151 F README cd04a36fbc7ea56932a4052d7d0b7f09f27c33d6 @@@ -137,20 -134,20 +137,20 @@@ F src/delete.c 7ed8a8c8b5f748ece92df173 F src/expr.c 1810f3056b11de99cc10e24629edf00e5fbd3a75 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb F src/fkey.c 17950a28f28b23e8ad3feaac5fc88c324d2f600a - F src/func.c 3856c6899fa4a9cb2da7b00cf5796171d88e34ae -F src/func.c cb41f614edc43b00bfeb030f9768e80eaff47edd ++F src/func.c 343c0bd8579d42ce80915c4f258638c1cebc26ea F src/global.c 02335177cf6946fe5525c6f0755cf181140debf3 F src/hash.c 458488dcc159c301b8e7686280ab209f1fb915af F src/hash.h 2894c932d84d9f892d4b4023a75e501f83050970 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 F src/insert.c a4995747c062256582a90b4f87f716e11b067050 F src/journal.c 552839e54d1bf76fb8f7abe51868b66acacf6a0e -F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f +F src/legacy.c 015826a958f690302d27e096a68d50b3657e4201 F src/lempar.c 7f026423f4d71d989e719a743f98a1cbd4e6d99e F src/loadext.c 8af9fcc75708d60b88636ccba38b4a7b3c155c3e - F src/main.c 657885e071f21e601abb727bf4794e55c0722df8 - F src/malloc.c 3d7284cd9346ab6e3945535761e68c23c6cf40ef -F src/main.c 6653e46db7ecb5a7449d8a12900147192f748b97 ++F src/main.c de8fd6a086591cfcdf155a315e607509c293fad0 + F src/malloc.c 92d59a007d7a42857d4e9454aa25b6b703286be1 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 6fe00f46997bebb690397cb029719f711e7640e3 @@@ -165,32 -162,31 +165,32 @@@ F src/notify.c 976dd0f6171d4588e89e874f F src/os.c 22ac61d06e72a0dac900400147333b07b13d8e1d F src/os.h 9dbed8c2b9c1f2f2ebabc09e49829d4777c26bf9 F src/os_common.h a8f95b81eca8a1ab8593d23e94f8a35f35d4078f - F src/os_os2.c 72d0b2e562952a2464308c4ce5f7913ac10bef3e - F src/os_unix.c 49f8334f45bd3f44970e9afd8a70e8dd0f8a2282 - F src/os_win.c 2f90f7bdec714fad51cd31b4ecad3cc1b4bb5aad - F src/pager.c c0aca5c733c15a16fe158c3215d857841a4e5381 + F src/os_os2.c 2e452c9f2ca507623ad351c33a8a8b27849b1863 -F src/os_unix.c 1be46a35bad4bec5171e4de88aaff817260eb378 ++F src/os_unix.c 9b2e17514578abddb9b6577424de39577a3e48f0 + F src/os_win.c 9abdcdd925416d854eabb0996c96debd92abfef5 + F src/pager.c 37696d876b1c23aa95d8ad7e4afd72d8675984fa F src/pager.h 0ea59db2a33bc6c2c02cae34de33367e1effdf76 F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58 F src/pcache.c 09d38c44ab275db581f7a2f6ff8b9bc7f8c0faaa F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050 - F src/pcache1.c e9578a3beac26f229ee558a4e16c863f2498185f + F src/pcache1.c d548e31beafa792d1994b663a29a5303569efc4e -F src/pragma.c 8a6cd3c787f882fa44f6490d2411fc26839ce8f3 -F src/prepare.c 395b3fab1b93f45b6aa194b23ebc201221c47b99 +F src/pragma.c 3ff495d7f9c51c58d33269dfb8d5bd9f82c3d566 - F src/prepare.c 7f225d1bf1670fdfb37c9c63b342e4206a252c29 - F src/printf.c 8ae5082dd38a1b5456030c3755ec3a392cd51506 ++F src/prepare.c ce4af845101308f785087a7071758bc4449f25b2 + F src/printf.c df2ff3bb5409e8958136933342c46464fbd017e7 F src/random.c cd4a67b3953b88019f8cd4ccd81394a8ddfaba50 F src/resolve.c 1c0f32b64f8e3f555fe1f732f9d6f501a7f05706 F src/rowset.c 69afa95a97c524ba6faf3805e717b5b7ae85a697 F src/select.c 8a7ba246b0b4bb45df7fbc52681728a0e3deaaa7 - F src/shell.c 8517fc1f9c59ae4007e6cc8b9af91ab231ea2056 - F src/sqlite.h.in b7e8a4e4749cfae9c99e1fbe3f9f87763cbbf7a2 + F src/shell.c 83c6f0cc5a79a081c7b9ddfe4f557b47e0bad976 + F src/sqlite.h.in 76955fcd1c5371268ecc8afe0ce6c49ea750ae38 +F src/sqlite3_private.h 2a814d17913732831acf13e7e87860105a3416e4 F src/sqlite3ext.h c90bd5507099f62043832d73f6425d8d5c5da754 - F src/sqliteInt.h b96d5ddb8b419a2ed7cf69a7778b53872d73e8a7 + F src/sqliteInt.h 45926deaf59b1ce3f55d21d5f91a8cecb6a7eb4c F src/sqliteLimit.h a17dcd3fb775d63b64a43a55c54cb282f9726f44 - F src/status.c 496913d4e8441195f6f2a75b1c95993a45b9b30b + F src/status.c 4997380fbb915426fef9e500b4872e79c99267fc F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e - F src/tclsqlite.c 77c5c4b8ac7b2d94ee480e1ad626fbd921d948e4 - F src/test1.c 665cd9008b5e491e69076e4c58f540d29393ca76 + F src/tclsqlite.c 549859dc2c143f3deb6a92636a2d27973652c164 -F src/test1.c 771407a49ae199241f0efb7055634e4a1899c026 ++F src/test1.c ffc41da99a715c662cad62920106ac8d9aaf32ef F src/test2.c 80d323d11e909cf0eb1b6fbb4ac22276483bcf31 F src/test3.c 056093cfef69ff4227a6bdb9108564dc7f45e4bc F src/test4.c 0528360b5025688002a5feb6be906ddce52eaaee @@@ -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 c3ba770a9924181aeed1717efb724b5ff17ccf34 -F src/test_config.c 9f025a7f3686c94e82dc6d6bd3cbf0f89cd67487 ++F src/test_config.c 4c093dae195323e9b9a5482d48a34ba912cefd8e F src/test_demovfs.c 0aed671636735116fc872c5b03706fd5612488b5 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc F src/test_func.c 13b582345fb1185a93e46c53310fae8547dcce20 @@@ -235,19 -231,19 +235,19 @@@ F src/update.c 227e6cd512108b84f69421fc F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685 F src/util.c ab1c92426494f499f42b9e307537b03e923d75c1 F src/vacuum.c 924bd1bcee2dfb05376f79845bd3b4cec7b54b2f -F src/vdbe.c 5d310eaf1a4d8383602126fa82e01291ab7d3cf3 +F src/vdbe.c 624c618542806c2075588ee5d2bdf43d91e34c21 F src/vdbe.h 4de0efb4b0fdaaa900cf419b35c458933ef1c6d2 - F src/vdbeInt.h 1f2137b905969f4de0648256aeb73abdf88f9213 - F src/vdbeapi.c 09ebd299007972e9262dec825d8fc3baedf0d239 - F src/vdbeaux.c b810a66902ee40c71cdb9c64f43760da516c91df + F src/vdbeInt.h 6e6f28e9bccc6c703dca1372fd661c57b5c15fb0 -F src/vdbeapi.c 8e9324fd35eb70d0b5904bd1af40f2598744dc4d ++F src/vdbeapi.c 35553aa4e234c173858606665f28bafafea22ae1 + F src/vdbeaux.c 33448d23b857654dd69ed2103611f5c733606f68 F src/vdbeblob.c 18955f0ee6b133cd08e1592010cb9a6b11e9984c F src/vdbemem.c 411649a35686f54268ccabeda175322c4697f5a6 - F src/vdbetrace.c 864cef96919323482ebd9986f2132435115e9cc2 + F src/vdbetrace.c 3ba13bc32bdf16d2bdea523245fd16736bed67b5 F src/vtab.c b297e8fa656ab5e66244ab15680d68db0adbec30 - F src/wal.c f26b8d297bd11cb792e609917f9d4c6718ac8e0e + F src/wal.c dbca424f71678f663a286ab2a98f947af1d412a7 F src/wal.h c1aac6593a0b02b15dc625987e619edeab39292e F src/walker.c 3112bb3afe1d85dc52317cb1d752055e9a781f8f - F src/where.c fa22d45b2577c77146f2e894d58011d472d64103 + F src/where.c af069e6b53234118014dabfece96a9515b69d76b F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 51756962d522e474338e9b2ebb26e7364d4aa125 @@@ -379,11 -376,11 +380,11 @@@ F test/enc3.test 5c550d59ff31dccdba5d1a F test/enc4.test 4b575ef09e0eff896e73bd24076f96c2aa6a42de F test/eqp.test 69670e7919030f21de29fb99bf1d68f97aedcbdb F test/eval.test bc269c365ba877554948441e91ad5373f9f91be3 -F test/exclusive.test 53e1841b422e554cecf0160f937c473d6d0e3062 +F test/exclusive.test 897074dc6706b0c4f3b1dc4580ffddffe2a79206 - F test/exclusive2.test 76e63c05349cb70d09d60b99d2ae625525ff5155 + F test/exclusive2.test b65264c3e76e1db6c6eda15c02000a40743f6541 F test/exec.test e949714dc127eaa5ecc7d723efec1ec27118fdd7 F test/expr.test 620a636cf7b7d4e5834a0b9d83a4da372e24a7b7 -F test/fallocate.test 43dc34b8c24be6baffadc3b4401ee15710ce83c6 +F test/fallocate.test a9927b638567e2e776c112f54d701402a0e74023 F test/filectrl.test 97003734290887566e01dded09dc9e99cb937e9e F test/filefmt.test f77c92141960b7933bc6691631d2ad62257ef40a F test/fkey1.test 01c7de578e11747e720c2d9aeef27f239853c4da @@@ -512,10 -509,10 +513,10 @@@ F test/join5.test 86675fc2919269aa923c8 F test/join6.test bf82cf3f979e9eade83ad0d056a66c5ed71d1901 F test/journal1.test 36f2d1bb9bf03f790f43fbdb439e44c0657fab19 F test/journal2.test 50a3604768494d4a337f194f0a9480e7c57dcb72 -F test/journal3.test ff175219be1b02d2f7e54297ad7e491b7533edb6 +F test/journal3.test 7cfbd86429305c96c9d985665320db5364764d96 F test/jrnlmode.test e3fe6c4a2c3213d285650dc8e33aab7eaaa5ce53 F test/jrnlmode2.test a19e28de1a6ec898067e46a122f1b71c9323bf00 - F test/jrnlmode3.test cfcdb12b90e640a23b92785a002d96c0624c8710 + F test/jrnlmode3.test c6522b276ba315fd1416198de6fc1da9e72409fb F test/keyword1.test a2400977a2e4fde43bf33754c2929fda34dbca05 F test/lastinsert.test 474d519c68cb79d07ecae56a763aa7f322c72f51 F test/laststmtchanges.test ae613f53819206b3222771828d024154d51db200 @@@ -528,13 -525,12 +529,13 @@@ F test/lock.test db74fdf5a73bad29ab3d86 F test/lock2.test 5242d8ac4e2d59c403aebff606af449b455aceff F test/lock3.test f271375930711ae044080f4fe6d6eda930870d00 F test/lock4.test c82268c031d39345d05efa672f80b025481b3ae5 -F test/lock5.test b2abb5e711bc59b0eae00f6c97a36ec9f458fada -F test/lock6.test ad5b387a3a8096afd3c68a55b9535056431b0cf5 +F test/lock5.test d0d313f059ae5661726d3f197ba6ed8f69257d8e +F test/lock6.test 83434ae8ca1d1c5e2eaf74d4e44aa24ab62b291c F test/lock7.test 64006c84c1c616657e237c7ad6532b765611cf64 F test/lock_common.tcl d279887a0ab16cdb6d935c1203e64113c5a000e9 +F test/lock_proxy.test 95be9c32d79be25cf643b4e41a0aa0e53aa21621 - F test/lookaside.test 382e7bc2fab23d902c8eafb1b9ed7ababfff75a6 + F test/lookaside.test 93f07bac140c5bb1d49f3892d2684decafdc7af2 -F test/main.test 9d7bbfcc1b52c88ba7b2ba6554068ecf9939f252 +F test/main.test 753e2b772c041bd8dbd17c7e4132b3981378eaab F test/make-where7.tcl 05c16b5d4f5d6512881dfec560cb793915932ef9 F test/malloc.test 927e6c8668a1d48c23aa6189bda02aff5a1b83de F test/malloc3.test 4128b1e6ffa506103b278ad97af89174f310c7ca @@@ -556,11 -552,11 +557,11 @@@ 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 2c807f3ca596a1a41fc5d7131e12eed913f60824 -F test/malloc_common.tcl 660b82ab528521cc4a48ff6df05ca3b6a00d47c5 -F test/manydb.test b3d3bc4c25657e7f68d157f031eb4db7b3df0d3c -F test/memdb.test 0825155b2290e900264daaaf0334b6dfe69ea498 ++F test/malloc_common.tcl 4c63cf4e38cca5d1f21910e38a15ab78899678e8 +F test/manydb.test 7faa0df55bbab2b14c25f323801db336c4e7ce3a +F test/memdb.test f773146f66ee2c635854a8264317f39a6cc3e18c F test/memleak.test 10b9c6c57e19fc68c32941495e9ba1c50123f6e2 - F test/memsubsys1.test 6827c7d06d5d60eda7a23c8d0b75d6922bd539dc -F test/memsubsys1.test 679db68394a5692791737b150852173b3e2fea10 ++F test/memsubsys1.test 7abc5c90b20e25040e2c800e3d95703d59d843a2 F test/memsubsys2.test 72a731225997ad5e8df89fdbeae9224616b6aecc F test/minmax.test 722d80816f7e096bf2c04f4111f1a6c1ba65453d F test/minmax2.test 33504c01a03bd99226144e4b03f7631a274d66e0 @@@ -583,17 -579,17 +584,17 @@@ F test/notify3.test d60923e186e0900f481 F test/notnull.test cc7c78340328e6112a13c3e311a9ab3127114347 F test/null.test a8b09b8ed87852742343b33441a9240022108993 F test/openv2.test af02ed0a9cbc0d2a61b8f35171d4d117e588e4ec - F test/pager1.test e066fb2e2dc1ac1cd9ef2b44a28ae3cc79a9150f - F test/pager2.test 0fbb6b6dc40ce1fecfe758c555a748ad2e9beaa3 + F test/pager1.test 7006a8b5dd3df1fe0d51d7da014333d7dc099778 + 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/pageropt.test 8146bf448cf09e87bb1867c2217b921fb5857806 F test/pagesize.test 76aa9f23ecb0741a4ed9d2e16c5fa82671f28efb - F test/pcache.test 4118a183908ecaed343a06fcef3ba82e87e0129d + F test/pcache.test 065aa286e722ab24f2e51792c1f093bf60656b16 F test/pcache2.test 0d85f2ab6963aee28c671d4c71bec038c00a1d16 F test/permutations.test c0ce0f3b741dd92a6d4c2671dbacba4b92dd81eb -F test/pragma.test fdfc09067ea104a0c247a1a79d8093b56656f850 +F test/pragma.test 88048136eed6baa2097dd7ab5145d3288128ca70 F test/pragma2.test 5364893491b9231dd170e3459bfc2e2342658b47 F test/printf.test 05970cde31b1a9f54bd75af60597be75a5c54fea F test/progress.test 5b075c3c790c7b2a61419bc199db87aaf48b8301 @@@ -879,8 -877,8 +882,8 @@@ F tool/lempar.c 01ca97f87610d1dac6d8cd9 F tool/mkkeywordhash.c d2e6b4a5965e23afb80fbe74bb54648cd371f309 F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97 -F tool/mksqlite3c.tcl e0db70c2c52b0e3d0867ca931229e5b90ffe7837 +F tool/mksqlite3c.tcl 136c838dba145ad65296522ff27cdd792657eaa0 - F tool/mksqlite3h.tcl 03b6ca938c833814923674d8a160e91fcedb4571 + F tool/mksqlite3h.tcl d76c226a5e8e1f3b5f6593bcabe5e98b3b1ec9ff F tool/mksqlite3internalh.tcl 7b43894e21bcb1bb39e11547ce7e38a063357e87 F tool/omittest.tcl 27d6f6e3b1e95aeb26a1c140e6eb57771c6d794a F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c @@@ -902,14 -900,14 +905,14 @@@ F tool/speedtest2.tcl ee2149167303ba8e9 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f - P c8bc057c7def6bbbebd89ee52b582bad75fb0509 11c74c0dae0e302f248ec4af6dc8a9376203b034 - R f56fc98cc45db5c78ece2f3f120ef0e8 -P 6f2c72a0f6579db3f40c079436ca40e3e52bd6d9 -R 59a65e1de1a8ae7d9445e2c547dd8236 ++P d2ccf7fc0673e875ff7b84cd37b89c65df4bec7f 35ac78f55159705af140b949ee33852aedd62816 ++R 4156a032d04be89bfd81b2f0d3b7a3a1 U drh - Z 2f1441de3189b083ad6152c4d3e98a30 -Z 98b20f33ccda8aca8fd5329534c7e6b1 ++Z 3878aa782505f9e49d943ef2cef669a8 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) - iD8DBQFM/ldyoxKgR168RlERAlUOAJoCRDoVTFpbr6OE7/Ud5TIa2NWEOACeIlqf - qmpiDDfSfUooUtaCFjP2Gzg= - =y70I -iD8DBQFNQYKZoxKgR168RlERAoZXAJwJ1Csq9EFTXieXNgpSf4QMSqUs5QCfcNG/ -DEbh0HvWPBsaT4iBPcr+lKE= -=bDRk ++iD8DBQFNQb3moxKgR168RlERAqESAJ910BVGm3bFKLOAlkRsiysh65xHwQCeNSAx ++HeSBjjtzBA0KoGQfQkL0aKA= ++=epZr -----END PGP SIGNATURE----- diff --cc manifest.uuid index ece9d94229,dcf56e3c0c..2409795d44 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - d2ccf7fc0673e875ff7b84cd37b89c65df4bec7f -35ac78f55159705af140b949ee33852aedd62816 ++09d6c91dcff0699daec02de0cfd1cdc4e61b4f6b diff --cc src/os_unix.c index 355264ada4,fa200ae800..c5d0e26e84 --- a/src/os_unix.c +++ b/src/os_unix.c @@@ -3154,221 -3135,11 +3156,224 @@@ static int unixFileControl(sqlite3_fil return proxyFileControl(id,op,pArg); } #endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */ +#if (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__) + case SQLITE_TRUNCATE_DATABASE: { + unixFile *pFile = (unixFile*)id; + int trc = SQLITE_OK; + int eFileLock = pFile->eFileLock; + int rc = SQLITE_OK; + char jPath[MAXPATHLEN+9]; + size_t jLen; + + if( eFileLockpMethod->xLock(id, SQLITE_LOCK_SHARED); + } + if( !rc && eFileLockpMethod->xLock(id, SQLITE_LOCK_EXCLUSIVE); + } + if( rc ){ + if( pFile->eFileLock > eFileLock ){ + pFile->pMethod->xUnlock(id, eFileLock); + } + return rc; + } + rc = pFile->pMethod->xTruncate(id, ((pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS) != 0) ? 1L : 0L); + if( !rc && (SQLITE_OK==getDbPathForUnixFile(pFile, jPath)) ){ + jLen = strlcat(jPath, "-journal", MAXPATHLEN+9); + if( jLen < MAXPATHLEN+9 ){ + int jfd = open(jPath, O_TRUNC); + if( (jfd == -1) ){ + if ( errno!=ENOENT ){ + perror(jPath); + } + } else { + fsync(jfd); + close(jfd); + } + } + }else{ + trc=rc; + } + if( !trc ){ + trc = pFile->pMethod->xSync(id, SQLITE_SYNC_FULL); + } + if( pFile->eFileLock > eFileLock ){ + int unlockRC = pFile->pMethod->xUnlock(id, SQLITE_LOCK_SHARED); + if (!rc) rc = unlockRC; + } + if( pFile->eFileLock > eFileLock ){ + int unlockRC = pFile->pMethod->xUnlock(id, SQLITE_LOCK_NONE); + if (!rc) rc = unlockRC; + } + if( trc ){ + return trc; + } + return rc; + } + + case SQLITE_REPLACE_DATABASE: { + unixFile *pFile = (unixFile*)id; + int trc = SQLITE_OK; + int eFileLock = pFile->eFileLock; + int rc = SQLITE_OK; + char jPath[MAXPATHLEN+9]; + size_t jLen; + sqlite3 *srcdb = (sqlite3 *)pArg; + Btree *pSrcBtree = NULL; + int eSrcFileLock = SQLITE_LOCK_NONE; + int srcLockRC = -1; + sqlite3_file *src_file = NULL; + unixFile *pSrcFile = NULL; + + if( !sqlite3SafetyCheckOk(srcdb) ){ + return SQLITE_MISUSE; + } + if( eFileLockpMethod->xLock(id, SQLITE_LOCK_SHARED); + } + if( !rc && eFileLockpMethod->xLock(id, SQLITE_LOCK_EXCLUSIVE); + } + if( !rc ){ + /* get the src file descriptor adhering to the db struct access rules + ** this code is modeled after sqlite3_file_control() in main.c + */ + sqlite3_mutex_enter(srcdb->mutex); + if( srcdb->nDb>0 ){ + pSrcBtree = srcdb->aDb[0].pBt; + } + if( pSrcBtree ){ + Pager *pSrcPager; + sqlite3BtreeEnter(pSrcBtree); + pSrcPager = sqlite3BtreePager(pSrcBtree); + assert( pSrcPager!=0 ); + src_file = sqlite3PagerFile(pSrcPager); + assert( src_file!=0 ); + if( src_file->pMethods ){ + pSrcFile = (unixFile *)src_file; + eSrcFileLock = pSrcFile->eFileLock; + if( eSrcFileLockpMethod->xLock(src_file, SQLITE_LOCK_SHARED); + srcLockRC = rc; /* SQLITE_OK means we need to unlock later */ + } else if( eSrcFileLock==SQLITE_LOCK_EXCLUSIVE ){ + /* if the src database has an exclusive lock, verify that the + ** it doesn't have a journal file with open transactions + */ + if( getDbPathForUnixFile(pSrcFile, jPath) ){ + rc = SQLITE_INTERNAL; + }else{ + jLen = strlcat(jPath, "-journal", MAXPATHLEN+9); + if( jLen < MAXPATHLEN+9 ){ + int jfd = open(jPath, O_RDONLY); + if( jfd==-1 ){ + if( errno!=ENOENT ){ + pFile->lastErrno = errno; + rc = SQLITE_IOERR; + } + }else{ + /* if the journal exists ensure there's no pending + ** transaction by checking the journal header */ + char magic[8]; + ssize_t rlen = pread(jfd, magic, 8, 0); + if( rlen<0 ){ + pFile->lastErrno = errno; + rc = SQLITE_IOERR; + }else if( rlen==8 ){ + char test[8] = {'\0','\0','\0','\0','\0','\0','\0','\0'}; + if( memcmp(magic,test,8) ){ + rc = SQLITE_LOCKED; + } + }else if( rlen!=0 ){ + rc = SQLITE_INTERNAL; + } + close(jfd); + } + } + } + } + }else{ + rc = SQLITE_MISUSE; + } + if( rc ){ + if( srcLockRC==SQLITE_OK ){ + pSrcFile->pMethod->xUnlock(src_file, eSrcFileLock); + } + sqlite3BtreeLeave(pSrcBtree); + } + } + if( pSrcFile==NULL || (pSrcFile->h<0) ){ + rc = SQLITE_INTERNAL; + sqlite3_mutex_leave(srcdb->mutex); + } + } + if( rc ){ + /* unroll state changes and return error code */ + if( pFile->eFileLock > eFileLock ){ + pFile->pMethod->xUnlock(id, eFileLock); + } + return rc; + }else{ + /* both databases are locked appropriately, copy file data + ** and then unroll the locks we added. + */ + copyfile_state_t s; + + s = copyfile_state_alloc(); + if( fcopyfile(pSrcFile->h, pFile->h, s, COPYFILE_ALL) ){ + switch(errno) { + case ENOMEM: + rc = SQLITE_NOMEM; + break; + default: + rc = SQLITE_INTERNAL; + } + } + copyfile_state_free(s); + if( srcLockRC==SQLITE_OK ){ + pSrcFile->pMethod->xUnlock(src_file, eSrcFileLock); + } + sqlite3BtreeLeave(pSrcBtree); + sqlite3_mutex_leave(srcdb->mutex); + } + + if( !rc && (SQLITE_OK==getDbPathForUnixFile(pFile, jPath)) ){ + jLen = strlcat(jPath, "-journal", MAXPATHLEN+9); + if( jLen < MAXPATHLEN+9 ){ + int jfd = open(jPath, O_TRUNC); + if( (jfd == -1) ){ + if ( errno!=ENOENT ){ + perror(jPath); + } + } else { + fsync(jfd); + close(jfd); + } + } + }else{ + trc=rc; + } + if( !trc ){ + trc = pFile->pMethod->xSync(id, SQLITE_SYNC_FULL); + } + if( pFile->eFileLock > eFileLock ){ + int unlockRC = pFile->pMethod->xUnlock(id, SQLITE_LOCK_SHARED); + if (!rc) rc = unlockRC; + } + if( pFile->eFileLock > eFileLock ){ + int unlockRC = pFile->pMethod->xUnlock(id, SQLITE_LOCK_NONE); + if (!rc) rc = unlockRC; + } + if( trc ){ + return trc; + } + return rc; + } +#endif /* (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__) */ + case SQLITE_FCNTL_SYNC_OMITTED: { + return SQLITE_OK; /* A no-op */ + } } - return SQLITE_ERROR; + return SQLITE_NOTFOUND; } /*