From: drh Date: Sun, 21 Sep 2014 23:08:54 +0000 (+0000) Subject: Merge in all recent changes from trunk. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dde37a1cb09c86f7512bd8140807ce9db42e713e;p=thirdparty%2Fsqlite.git Merge in all recent changes from trunk. FossilOrigin-Name: 3967ebe83e7cbb1dde26e4c9a6713d5c70fefe46 --- dde37a1cb09c86f7512bd8140807ce9db42e713e diff --cc main.mk index 9d3a7628fa,4a7ac02710..f52137d470 --- a/main.mk +++ b/main.mk @@@ -214,9 -214,9 +214,11 @@@ SRC += $(TOP)/ext/rtree/sqlite3rtree.h \ $(TOP)/ext/rtree/rtree.h \ $(TOP)/ext/rtree/rtree.c +SRC += \ + $(TOP)/ext/sqlrr/sqlrr.c - + SRC += \ + $(TOP)/ext/userauth/userauth.c \ + $(TOP)/ext/userauth/sqlite3userauth.h # Generated source code files # @@@ -363,7 -363,24 +365,9 @@@ HDR = # Header files used by extensions # EXTHDR += \ - $(TOP)/ext/fts1/fts1.h \ - $(TOP)/ext/fts1/fts1_hash.h \ - $(TOP)/ext/fts1/fts1_tokenizer.h -EXTHDR += \ - $(TOP)/ext/fts2/fts2.h \ - $(TOP)/ext/fts2/fts2_hash.h \ - $(TOP)/ext/fts2/fts2_tokenizer.h -EXTHDR += \ - $(TOP)/ext/fts3/fts3.h \ - $(TOP)/ext/fts3/fts3Int.h \ - $(TOP)/ext/fts3/fts3_hash.h \ - $(TOP)/ext/fts3/fts3_tokenizer.h -EXTHDR += \ - $(TOP)/ext/rtree/rtree.h -EXTHDR += \ - $(TOP)/ext/icu/sqliteicu.h + $(TOP)/ext/sqlrr/sqlrr.h + EXTHDR += \ + $(TOP)/ext/userauth/sqlite3userauth.h # This is the default Makefile target. The objects listed here # are what get build when you type just "make" with no arguments. diff --cc manifest index c2ae14126d,ddf26d66a1..9db3214c75 --- a/manifest +++ b/manifest @@@ -1,7 -1,7 +1,7 @@@ - C Merge\sthe\slatest\strunk\schanges\sinto\sthe\sapple-osx\sbranch. - D 2014-09-02T15:57:35.887 -C Correctly\shandle\san\sORDER\sBY\sclause\son\san\souter\squery\swhen\sapplying\nthe\scompound-subquery\sflattening\soptimization.\s\sTicket\s[89398880bcfff].\nAlso\sadd\sthe\sSQLITE_ENABLE_SELECTTRACE\soption\sfor\sadditional\sdebugging\nand\sanalysis\sinformation\sabout\sselect\sstatement\sprocessing. -D 2014-09-21T22:31:52.593 ++C Merge\sin\sall\srecent\schanges\sfrom\strunk. ++D 2014-09-21T23:08:54.635 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f -F Makefile.in cf57f673d77606ab0f2d9627ca52a9ba1464146a +F Makefile.in bf041d20aeed250922fb1ba4bd13d34d3fa470e9 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.msc e31dee24038965fb6269d6d61073fd6b7e331dec F Makefile.vxworks 034289efa9d591b04b1a73598623119c306cbba0 @@@ -144,13 -145,13 +145,16 @@@ F ext/rtree/rtree_util.tcl 06aab2ed5b82 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 ext/userauth/sqlite3userauth.h 19cb6f0e31316d0ee4afdfb7a85ef9da3333a220 + F ext/userauth/user-auth.txt e6641021a9210364665fe625d067617d03f27b04 + F ext/userauth/userauth.c 5fa3bdb492f481bbc1709fc83c91ebd13460c69e F install-sh 9d4de14ab9fb0facae2f48780b874848cbf2f895 x F ltmain.sh 3ff0879076df340d2e23ae905484d8c15d5fdea8 F magic.txt 8273bf49ba3b0c8559cb2774495390c31fd61c60 - F main.mk a16b400916a463d2e563225a66df3e55b703d520 -F main.mk bbc8b6000ed143a1a8d31d3b4995c359a3188fa1 ++F main.mk 68ddbbceb1602d89d7132184bc25f9180a99eaba F mkopcodec.awk c2ff431854d702cdd2d779c9c0d1f58fa16fa4ea F mkopcodeh.awk c6b3fa301db6ef7ac916b14c60868aeaec1337b5 F mkso.sh fd21c06b063bb16a5d25deea1752c2da6ac3ed83 @@@ -164,80 -165,79 +168,80 @@@ F spec.template 86a4a43b99ebb3e75e6b9a7 F sqlite.pc.in 42b7bf0d02e08b9e77734a47798d1a55a9e0716b F sqlite3.1 3d8b83c91651f53472ca17599dae3457b8b89494 F sqlite3.pc.in 48fed132e7cb71ab676105d2a4dc77127d8c1f3a - F src/alter.c b00900877f766f116f9e16116f1ccacdc21d82f1 - F src/analyze.c f00f06e6ef66c61b41f154889fe7caf5ed55a0ce - F src/attach.c 3801129015ef59d76bf23c95ef9b0069d18a0c52 - F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34 + F src/alter.c ba266a779bc7ce10e52e59e7d3dc79fa342e8fdb + F src/analyze.c 6290a109be876daaa242cd7216f97240f5401776 + F src/attach.c f4e94df2d1826feda65eb0939f7f6f5f923a0ad9 + F src/auth.c d8abcde53426275dab6243b441256fcd8ccbebb2 F src/backup.c a31809c65623cc41849b94d368917f8bb66e6a7e F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb - F src/btmutex.c ec9d3f1295dafeb278c3830211cc5584132468f4 - F src/btree.c 1e5bb10be0676d206c2608ce81251df2d4952c63 + F src/btmutex.c 49ca66250c7dfa844a4d4cb8272b87420d27d3a5 -F src/btree.c 6aa61c0e3d20d1d1acc8fb33d8f0ebd675305d3c ++F src/btree.c 16c922112e23d2b0aac4fd407414860eed3ba6e7 F src/btree.h a79aa6a71e7f1055f01052b7f821bd1c2dce95c8 - F src/btreeInt.h cf180d86b2e9e418f638d65baa425c4c69c0e0e3 - F src/build.c c26b233dcdb1e2c8f468d49236c266f9f3de96d8 - F src/callback.c b97d0695ffcf6a8710ee445ffe56ee387d4d8a6f - F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac - F src/ctime.c 0231df905e2c4abba4483ee18ffc05adc321df2a - F src/date.c 593c744b2623971e45affd0bde347631bdfa4625 - F src/delete.c 5adcd322c6b08fc25d215d780ca62cebce66304d - F src/expr.c e1691ab0fe6be7247ef073b0038fb8ecd9944fad + F src/btreeInt.h e0ecb5dba292722039a7540beb3fc448103273cc + F src/build.c 8dbca25988045fbf2a33c9631c42706fa6449e60 + F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0 + F src/complete.c 535183afb3c75628b78ce82612931ac7cdf26f14 + F src/ctime.c 16cd19215d9fd849ee2b7509b092f2e0bbd6a958 + F src/date.c 57a7f9ba9f6b4d5268f5e411739066a611f99036 + F src/delete.c fae81cc2eb14b75267d4f47d3cfc9ae02aae726f + F src/expr.c 4f101c8ddc6d5a22303c88278069f5261562a9a8 F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb - F src/fkey.c 8d81a780ad78d16ec9082585758a8f1d6bf02ca3 - F src/func.c 7a252bf7a52b4229462d2d89639d0f4f134dca40 - F src/global.c 1e4bd956dc2f608f87d2a929abc4a20db65f30e4 + F src/fkey.c da985ae673efef2c712caef825a5d2edb087ead7 -F src/func.c 1629ccdd8ef3f19d7accc9d9287190489469ff81 ++F src/func.c 04210a80b03a477ae2426c75e935403e2e54e867 + F src/global.c 5110fa12e09729b84eee0191c984ec4008e21937 F src/hash.c 4263fbc955f26c2e8cdc0cf214bc42435aa4e4f5 F src/hash.h c8f3c31722cf3277d03713909761e152a5b81094 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 - F src/insert.c d1a104e67b33314d4cc5c1356147446086ab9fc8 + F src/insert.c 5b9243a33726008cc4132897d2be371db12a13be F src/journal.c b4124532212b6952f42eb2c12fa3c25701d8ba8d - F src/legacy.c 4d9ad7daba0d8a20fa3ecf5e54fe7ff53e2e0a49 - F src/lempar.c cdf0a000315332fc9b50b62f3b5e22e080a0952b - F src/loadext.c 31c2122b7dd05a179049bbf163fd4839f181cbab - F src/main.c b3d19f5a1a7341fac59fcdd5ddcdb0619fe98107 - F src/malloc.c 954de5f998c23237e04474a3f2159bf483bba65a -F src/legacy.c ba1863ea58c4c840335a84ec276fc2b25e22bc4e ++F src/legacy.c 9c17d86e06522c261307f0eb6bcb1254c8b04a59 + F src/lempar.c 7274c97d24bb46631e504332ccd3bd1b37841770 + F src/loadext.c de741e66e5ddc1598d904d7289239696e40ed994 -F src/main.c d15621461fb0c52675eba2b650492ed1beef69ab ++F src/main.c ed5dc24903c9fe1b6daea92d95e6d022f07ef8f7 + F src/malloc.c 5bb99ee1e08ad58e457063cf79ce521db0e24195 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645 - F src/mem1.c c0c990fcaddff810ea277b4fb5d9138603dd5d4b + F src/mem1.c faf615aafd8be74a71494dfa027c113ea5c6615f F src/mem2.c dce31758da87ec2cfa52ba4c5df1aed6e07d8e8f F src/mem3.c 61c9d47b792908c532ca3a62b999cf21795c6534 - F src/mem5.c 74670012946c4adc8a6ad84d03acc80959c3e529 - F src/memjournal.c 0683aac6cab6ec2b5374c0db37c0deb2436a3785 + F src/mem5.c 61eeb90134f9a5be6c2e68d8daae7628b25953fb + F src/memjournal.c 3eb2c0b51adbd869cb6a44780323f05fa904dc85 F src/mutex.c 84a073c9a23a8d7bdd2ea832522d1730df18812c - F src/mutex.h 5bc526e19dccc412b7ff04642f6fdad3fdfdabea + F src/mutex.h 779d588e3b7756ec3ecf7d78cde1d84aba414f85 F src/mutex_noop.c f3f09fd7a2eb4287cfc799753ffc30380e7b71a1 F src/mutex_unix.c 1b10d5413dfc794364a8adf3eb3a192926b43fa3 F src/mutex_w32.c 06bfff9a3a83b53389a51a967643db3967032e1e F src/notify.c 9711a7575036f0d3040ba61bc6e217f13a9888e7 -F src/os.c 1b147e4cf7cc39e618115c14a086aed44bc91ace +F src/os.c 25df79baf4bec87f75a2c4e995d63361b66b918a - F src/os.h 60d419395e32a8029fa380a80a3da2e9030f635e + F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa - F src/os_unix.c 187835e09c26c5070d563b7a73f14a86d33f0d8c - F src/os_win.c 07c936447222ab5333d300736265c929dd0930f3 -F src/os_unix.c 9096a1b1449182e67e759f59994eee04113bc587 -F src/os_win.c 0a4042ef35f322e86fa01f6c8884c5e645b911e7 ++F src/os_unix.c eb7b17fa6a57d9ca0e3879ccf42261430606473b ++F src/os_win.c 1f331fe64c399490a0603c64ab321ef600e57213 F src/os_win.h 09e751b20bbc107ffbd46e13555dc73576d88e21 - F src/pager.c 919d4e7eaf27646c290b45c9d6e0ae109f562b3d -F src/pager.c caab007743821d96752597c9cfd7351654697b06 -F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428 ++F src/pager.c 69e5a3f5f5fe2c82be4e17fe6344c8cfdb314b64 +F src/pager.h 8feb18f845951ab37e1f65a319b2da24185173ac - F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0 - F src/pcache.c 3b3791297e8977002e56b4a9b8916f2039abad9b + F src/parse.y b98772da2bb5415970085b707203f92569400aa8 + F src/pcache.c 4121a0571c18581ee9f82f086d5e2030051ebd6a F src/pcache.h 9b559127b83f84ff76d735c8262f04853be0c59a - F src/pcache1.c c5af6403a55178c9d1c09e4f77b0f9c88822762c - F src/pragma.c 4865f1a42ce4eee35a4f6de290387f2fd9bd8e50 - F src/prepare.c 8b6e247b5f574e35170ba6fa43b2f649b3add9a1 - F src/printf.c 00986c86ddfffefc2fd3c73667ff51b3b9709c74 + F src/pcache1.c dab8ab930d4a73b99768d881185994f34b80ecaa -F src/pragma.c 3f3e959390a10c0131676f0e307acce372777e0f -F src/prepare.c 6ef0cf2f9274982988ed6b7cab1be23147e94196 ++F src/pragma.c c63b5aa7b655801cf74b7f94fdb136f4d9626522 ++F src/prepare.c d0ab75c13fdcad7f54a385386c6b04408ef43615 + F src/printf.c 3a47f526b173813d9a7f4e7044007771ba68cde1 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece - F src/resolve.c 0ea356d32a5e884add23d1b9b4e8736681dd5697 - F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be - F src/select.c fa6b6845b09cf4407c1e5019c14a0dbfab54263f - F src/shell.c 713cef4d73c05fc8e12f4960072329d767a05d50 - F src/sqlite.h.in b31477789bbb5bcbfcecf0afcb334240c41ea6a6 + F src/resolve.c a3466128b52a86c466e47ac1a19e2174f7b5cf89 + F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e -F src/select.c a83ed8bc2a31c131e3addb6f0488b68334085e7b ++F src/select.c 66f96be20209432006b1c6dff73c3fbcee3426db + F src/shell.c dad23987c34faddb061a339da3e92e05ccc6935e -F src/sqlite.h.in 8b018219ce988913e5977d5de9ab4beb33be23b6 ++F src/sqlite.h.in a6f6314b0c65acae8268448241c202b8d376cd0e F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad +F src/sqlite3_private.h a81a9c5f97c095cc3e86914a05f8fabe0011f4a1 - F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc - F src/sqliteInt.h 439ad3b98d2342862ce11955ab35948a8e82a052 + F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d -F src/sqliteInt.h 5ecde2191721a94cdce0d5248e26a373e0b17a70 ++F src/sqliteInt.h f607f57c8bd4cad37d6dbd3ce4c72c3b64a8b9f7 F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158 - F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e - F src/tclsqlite.c 7d100e2e7aad614bb3d7026a41a0e3827dbaaebc - F src/test1.c b7d7add79fc86c113c2ed5f1ec1206476e680819 + F src/table.c 2e99ef7ef16187e17033d9398dc962ce22dab5cb + F src/tclsqlite.c c67d310c833046cccc192125d64ad422ab882684 -F src/test1.c 523cd70ded28db71af9a30ec184cbe0957de9575 ++F src/test1.c ba21c4d107695538c9ee78c7a1f548b460afc017 F src/test2.c 98049e51a17dc62606a99a9eb95ee477f9996712 F src/test3.c 1c0e5d6f080b8e33c1ce8b3078e7013fdbcd560c F src/test4.c 9b32d22f5f150abe23c1830e2057c4037c45b3df @@@ -248,9 -248,9 +252,9 @@@ F src/test8.c 54ccd7b1df5062f0ecbf50a8f F src/test9.c bea1e8cf52aa93695487badedd6e1886c321ea60 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 129629e3735088f58f275ca4d59a284ecc8cbb0b -F src/test_config.c 6f721f0337b96d58e81ff69bba101113c8168c2b ++F src/test_config.c 00e23428eaf3506b240e43dab98d9df9ad332452 F src/test_demovfs.c 69b2085076654ebc18014cbc6386f04409c959a9 F src/test_devsym.c e7498904e72ba7491d142d5c83b476c4e76993bc F src/test_fs.c ced436e3d4b8e4681328409b8081051ce614e28f @@@ -270,8 -270,8 +274,8 @@@ F src/test_osinst.c 3d0340bc31a9f3d8a35 F src/test_pcache.c a5cd24730cb43c5b18629043314548c9169abb00 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_schema.c 2bdba21b82f601da69793e1f1d11bf481a79b091 F src/test_server.c a2615049954cbb9cfb4a62e18e2f0616e4dc38fe F src/test_sqllog.c c1c1bbedbcaf82b93d83e4f9dd990e62476a680e F src/test_stat.c 9898687a6c2beca733b0dd6fe19163d987826d31 @@@ -283,30 -283,30 +287,30 @@@ F src/test_vfs.c f84075a388527892ff1849 F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 F src/threads.c 22dded4283dc4b25422f6444cdcb8d6b1ea0b5ff - F src/tokenize.c ae45399d6252b4d736af43bee1576ce7bff86aec - F src/trigger.c 4bddd12803275aa98f1c7ce0118fceb02b2167f6 - F src/update.c ea336ce7b8b3fc5e316ba8f082e6445babf81059 - F src/utf.c 77abb5e6d27f3d236e50f7c8fff1d00e15262359 - F src/util.c 068dcd26354a3898ccc64ad5c4bdb95a7a15d33a - F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 - F src/vdbe.c 0c353a885a413ce7239610587b637e7124b2ca48 - F src/vdbe.h c63fad052c9e7388d551e556e119c0bcf6bebdf8 - F src/vdbeInt.h cdc8e421f85beb1ac9b4669ec5beadab6faa15e0 - F src/vdbeapi.c b0122a0326a576a14350f7715873facee427acb3 - F src/vdbeaux.c 5ad6f1a20be8285c13ca15bc1a9af6679afa29db + F src/tokenize.c 3df63041994f55afeb168b463ec836e8f1c50e7c + F src/trigger.c 25571661fdeae8c7f975ff40ffec205520a3f92f + F src/update.c 729f6f18fc27740591d085e1172cebe311144bf0 + F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c + F src/util.c 4006c01772bd8d8ac4306d523bbcee41d3e392d8 + F src/vacuum.c 59f03f92bcff57faa6a8ca256eb29ccddfb0614a -F src/vdbe.c de1af1795bebdad20c23e82bafa2f531e9893198 ++F src/vdbe.c cdeb927323bcdad77a4071e54ff9bb8d4494521e + F src/vdbe.h 09f5b4e3719fa454f252322b1cdab5cf1f361327 + F src/vdbeInt.h f177bed1ec8d4eb5c7089f012aeb95f374745735 -F src/vdbeapi.c e9e33b59834e3edc8790209765e069874c269d9d -F src/vdbeaux.c a05adc3c96abdaf3db14768ddd63132fc9678060 ++F src/vdbeapi.c b7b086fc95b12b0d6694faa9150687e74158af69 ++F src/vdbeaux.c 2e927a7641eae94ca4583d1a809cb4441ca21a5a F src/vdbeblob.c 848238dc73e93e48432991bb5651bf87d865eca4 - F src/vdbemem.c 921d5468a68ac06f369810992e84ca22cc730a62 - F src/vdbesort.c 02646a9f86421776ae5d7594f620f9ed669d3698 - F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 + F src/vdbemem.c 1e105dacf5190fc85a8ec2107c0dcc1884e75099 + F src/vdbesort.c 5c1bacf90578d22b630fbf6ed98ccf60d83435ef + F src/vdbetrace.c 4f29b04edb0cec3d5fcd9b566d9f0e75c8984362 F src/vtab.c 019dbfd0406a7447c990e1f7bd1dfcdb8895697f - F src/wal.c 785b8a1fdd5600f2265b57691708329cae9acbad -F src/wal.c 10e7de7ce90865a68153f001a61f1d985cd17983 -F src/wal.h df01efe09c5cb8c8e391ff1715cca294f89668a4 ++F src/wal.c 1c4bcbbe80d5714e4ae349b9d94d05dcfb7804b7 +F src/wal.h 6b3a67ecd7172dcc9f18fc9cd4d76dc4c2166e68 - F src/walker.c 11edb74d587bc87b33ca96a5173e3ec1b8389e45 - F src/where.c d9eae96b2cbbe4842eac3ee156ccd1b933d802c4 - F src/whereInt.h 923820bee9726033a501a08d2fc69b9c1ee4feb3 + F src/walker.c c253b95b4ee44b21c406e2a1052636c31ea27804 + F src/where.c 0888567c0e01a41b6001647e333f8ccfd3ae7d36 + F src/whereInt.h 124d970450955a6982e174b07c320ae6d62a595c -F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2 +F test/8_3_names.test 05034aadccd2253ffe6cbefb06662b8aa4600f77 F test/aggerror.test a867e273ef9e3d7919f03ef4f0e8c0d2767944f2 - F test/aggnested.test 45c0201e28045ad38a530b5a144b73cd4aa2cfd6 + F test/aggnested.test b35b4cd69fc913f90d39a575e171e1116c3a4bb7 F test/alias.test 4529fbc152f190268a15f9384a5651bbbabc9d87 F test/all.test 6ff7b43c2b4b905c74dc4a813d201d0fa64c5783 F test/alter.test 547dc2d292644301ac9a7dda22b319b74f9c08d2 @@@ -332,14 -332,14 +336,14 @@@ F test/async3.test d73a062002376d7edc1f F test/async4.test 1787e3952128aa10238bf39945126de7ca23685a F test/async5.test 383ab533fdb9f7ad228cc99ee66e1acb34cc0dc0 F test/atof1.test 08a61df9365c341f334a65f4348897312d8f3db7 -F test/attach.test 0d112b7713611fdf0340260192749737135fda5f +F test/attach.test 63033baa59be42c811ef0d4e73ebd2d6dba4805c 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 5bdf154eb28c0e4bbc0473f335858c0d96171768 - F test/auth2.test c3b415b76c033bedb81292118fb7c01f5f10cbcd - F test/auth3.test a4755e6a2a2fea547ffe63c874eb569e60a28eb5 + F test/auth.test 855233ef26eb3601b6886567ea4e326c72959360 + F test/auth2.test 264c6af53cad9aba5218c68bbe18036e39007bfa + F test/auth3.test 5cfa94ed90c6617c42b7ba4b133fd79678b251c7 F test/autoinc.test c58912526998a39e11f66b533e23cfabea7f25b7 F test/autoindex1.test 762ff3f8e25d852aae55c6462ca166a80c0cde61 F test/autoindex2.test 60d2fc6f38364308ce73a9beb01b47ded38697de @@@ -859,13 -859,13 +864,13 @@@ F test/speed4p.test 0e51908951677de5a96 F test/speedtest1.c 83f6b3318f7ee60e52b978b5a5e5dd7e83dfb7ee F test/spellfix.test 24f676831acddd2f4056a598fd731a72c6311f49 F test/sqllimits1.test b1aae27cc98eceb845e7f7adf918561256e31298 -F test/stat.test 76fd746b85459e812a0193410fb599f0531f22de -F test/stmt.test 25d64e3dbf9a3ce89558667d7f39d966fe2a71b9 +F test/stat.test 1e5faf39649a0bb368770f780f926847520ea3f4 +F test/stmt.test 78a6764439cfa5abdcbf98d4d084739e81eeec4f F test/subquery.test 666fdecceac258f5fd84bed09a64e49d9f37edd9 - F test/subquery2.test 91e1e364072aeff431d1f9689b15147e421d88c7 + F test/subquery2.test 438f8a7da1457277b22e4176510f7659b286995f 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 d2fdaad713f103ac611fe7ef9b724c7b69f8149c F test/sysfault.test fa776e60bf46bdd3ae69f0b73e46ee3977a58ae6 @@@ -1198,7 -1199,8 +1204,7 @@@ F tool/vdbe_profile.tcl 67746953071a9f8 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f - P 5c273111058fcb3a1707ea0f3c7ac4b04525aeb0 9779c7a9eb1e2bd36e9286331a9314f064014d80 - R 912a9b080065865a0e00bf5ab38071d4 -P 59e2c9df02d7e988c5ad44c560ead1e5288b12e7 9683e001ed38b41979220eef0bdfcb54df5f3191 -R df45958fe8f93552efb788581c98f0f7 -T +closed 9683e001ed38b41979220eef0bdfcb54df5f3191 ++P 696dc935f78dc883faf98cf446f75ce4028e98f8 d5880abd63c83c88e135257373afa0a3fd88297e ++R 591ffab50f7f25d0fcbfd5e941acbbd0 U drh - Z d40b462fc9fb4d58e62829bccf3196e6 -Z d861c46be738b6f104b52fa4441ce204 ++Z 20cea348a8ee956bf4a047634dfa1828 diff --cc manifest.uuid index 212bfd8c97,7cf6d685c3..df48a59a0a --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 696dc935f78dc883faf98cf446f75ce4028e98f8 -d5880abd63c83c88e135257373afa0a3fd88297e ++3967ebe83e7cbb1dde26e4c9a6713d5c70fefe46 diff --cc src/legacy.c index b92f384e82,a10006e558..7842deb550 --- a/src/legacy.c +++ b/src/legacy.c @@@ -128,12 -123,9 +128,12 @@@ int sqlite3_exec exec_out: if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt); sqlite3DbFree(db, azCols); +#ifdef SQLITE_ENABLE_SQLRR + SRRecExecEnd(db); +#endif rc = sqlite3ApiExit(db, rc); - if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){ + if( rc!=SQLITE_OK && pzErrMsg ){ int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db)); *pzErrMsg = sqlite3Malloc(nErrMsg); if( *pzErrMsg ){ diff --cc src/os_unix.c index fb2752ed9c,fcd9e72d06..33d4e6bfd7 --- a/src/os_unix.c +++ b/src/os_unix.c @@@ -4005,9 -3616,9 +4026,9 @@@ static int unixTruncate(sqlite3_file *i nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk; } - rc = robust_ftruncate(pFile->h, (off_t)nByte); + rc = robust_ftruncate(pFile->h, nByte); if( rc ){ - pFile->lastErrno = errno; + storeLastErrno(pFile, errno); return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath); }else{ #ifdef SQLITE_DEBUG @@@ -4139,310 -3750,8 +4160,310 @@@ static int fcntlSizeHint(unixFile *pFil return SQLITE_OK; } + +#if (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__) +#include "sqlite3_private.h" +#include +static int getDbPathForUnixFile(unixFile *pFile, char *dbPath); +#endif + +#if SQLITE_ENABLE_LOCKING_STYLE +static int isProxyLockingMode(unixFile *); +#endif + +#if (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__) +static int unixTruncateDatabase(unixFile *, int); + +static int unixInvalidateSupportFiles(unixFile *, int); + +static int findCreateFileMode(const char *, int, mode_t*, uid_t *,gid_t *); + +/* opens a read/write connection to a file zName inheriting the appropriate +** user/perms from the database file if running as root. Returns the file +** descriptor by reference +*/ +static int unixOpenChildFile( + const char *zName, + int openFlags, + int dbOpenFlags, + int protFlags, + int *pFd +){ + int fd = -1; + mode_t openMode; /* Permissions to create file with */ + uid_t uid; /* Userid for the file */ + gid_t gid; /* Groupid for the file */ + int rc; + + assert(pFd!=NULL); + rc = findCreateFileMode(zName, dbOpenFlags, &openMode, &uid, &gid); + if( rc!=SQLITE_OK ){ + return rc; + } + fd = robust_open(zName, openFlags, openMode); + OSTRACE(("OPENX %-3d %s 0%o\n", fd, zName, openFlags)); + if( fd<0 ){ + rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName); + return rc; + } + /* if we're opening the wal or journal and running as root, set + ** the journal uid/gid */ + if( dbOpenFlags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){ + uid_t euid = geteuid(); + if( euid==0 && (euid!=uid || getegid()!=gid) ){ + if( fchown(fd, uid, gid) ){ + rc = SQLITE_CANTOPEN_BKPT; + } + } + } + if( rc==SQLITE_OK ){ + *pFd = fd; + } else { + *pFd = -1; + close(fd); + } + return rc; +} + +static int unixReplaceDatabase(unixFile *pFile, sqlite3 *srcdb) { + sqlite3_file *id = (sqlite3_file *)pFile; + Btree *pSrcBtree = NULL; + sqlite3_file *src_file = NULL; + unixFile *pSrcFile = NULL; + char srcWalPath[MAXPATHLEN+5]; + int srcWalFD = -1; + int rc = SQLITE_OK; + void *pLock = NULL; + int flags = 0; + sqlite3 *srcdb2 = NULL; + copyfile_state_t s; + int corruptSrcFileLock = 0; + int corruptDstFileLock = 0; + int isSrcCorrupt = 0; + int isDstCorrupt = 0; + + if( !sqlite3SafetyCheckOk(srcdb) ){ + return SQLITE_MISUSE; + } + +#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 ){ + isDstCorrupt = 1; + rc = sqlite3demo_superlock_corrupt(id, SQLITE_LOCK_EXCLUSIVE, + &corruptDstFileLock); + } + if( rc ){ + return 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 ){ + int srcFlags = 0; + pSrcFile = (unixFile *)src_file; +#if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__) + if ((pSrcFile->openFlags & O_RDWR) == O_RDWR) { + srcFlags = SQLITE_OPEN_READWRITE; + } else { + srcFlags = SQLITE_OPEN_READONLY; + } +#else + srcFlags = SQLITE_OPEN_READWRITE; +#endif +#if SQLITE_ENABLE_DATA_PROTECTION + srcFlags |= pSrcFile->protFlags; +#endif +#if SQLITE_ENABLE_LOCKING_STYLE + if( isProxyLockingMode(pSrcFile) ){ + srcFlags |= SQLITE_OPEN_AUTOPROXY; + } +#endif + rc = sqlite3_open_v2(pSrcFile->zPath, &srcdb2, srcFlags, 0); + if( rc==SQLITE_OK ){ + /* start a deferred transaction and read to establish a read lock */ + rc = sqlite3_exec(srcdb2, "BEGIN DEFERRED; PRAGMA schema_version", + 0, 0, 0); + if( rc==SQLITE_CORRUPT || rc==SQLITE_NOTADB ){ + isSrcCorrupt = 1; + rc = sqlite3demo_superlock_corrupt(src_file, SQLITE_LOCK_SHARED, + &corruptSrcFileLock); + } + } + } + } + if( !srcdb2 || pSrcFile==NULL || pSrcFile->h<0){ + rc = SQLITE_INTERNAL; + } + if( rc!=SQLITE_OK ){ + goto end_replace_database; + } + /* both databases are locked appropriately, copy the src wal journal if + ** one exists and then the actual database file + */ + strlcpy(srcWalPath, pSrcFile->zPath, MAXPATHLEN+5); + strlcat(srcWalPath, "-wal", MAXPATHLEN+5); + srcWalFD = open(srcWalPath, O_RDONLY); + if( !(srcWalFD<0) ){ + char dstWalPath[MAXPATHLEN+5]; + int dstWalFD = -1; + int protFlags = 0; + strlcpy(dstWalPath, pFile->zPath, MAXPATHLEN+5); + strlcat(dstWalPath, "-wal", MAXPATHLEN+5); + + rc = unixOpenChildFile(dstWalPath, O_RDWR|O_CREAT, SQLITE_OPEN_WAL, + protFlags, &dstWalFD); + if( rc==SQLITE_OK ){ + s = copyfile_state_alloc(); + lseek(srcWalFD, 0, SEEK_SET); + lseek(dstWalFD, 0, SEEK_SET); + if( fcopyfile(srcWalFD, dstWalFD, s, COPYFILE_DATA) ){ + int err=errno; + switch(err) { + case ENOMEM: + rc = SQLITE_NOMEM; + break; + default: + storeLastErrno(pFile, err); + rc = SQLITE_IOERR; + } + } + copyfile_state_free(s); + close(dstWalFD); + } + close(srcWalFD); + } + if( rc==SQLITE_OK ){ + /* before we copy, ensure that the file change counter will be modified */ + uint32_t srcChange = 0; + uint32_t dstChange = 0; + pread(pSrcFile->h, &srcChange, 4, 24); + pread(pFile->h, &dstChange, 4, 24); + + /* copy the actual database */ + s = copyfile_state_alloc(); + lseek(pSrcFile->h, 0, SEEK_SET); + lseek(pFile->h, 0, SEEK_SET); + if( fcopyfile(pSrcFile->h, pFile->h, s, COPYFILE_DATA) ){ + int err=errno; + switch(err) { + case ENOMEM: + rc = SQLITE_NOMEM; + break; + default: + storeLastErrno(pFile, err); + rc = SQLITE_IOERR; + } + } + copyfile_state_free(s); + + if (srcChange == dstChange) { + /* modify the change counter to force page zero to be reloaded */ + dstChange ++; + pwrite(pFile->h, &dstChange, 4, 24); + } + } + if( isSrcCorrupt ){ + sqlite3demo_superunlock_corrupt(src_file, corruptSrcFileLock); + }else{ + /* done with the source db so end the transaction */ + sqlite3_exec(srcdb2, "COMMIT", 0, 0, 0); + } + /* zero out any old journal clutter */ + if( rc==SQLITE_OK ){ + int skipWAL = (srcWalFD<0)?0:1; + unixInvalidateSupportFiles(pFile, skipWAL); + } + +end_replace_database: + if( pSrcBtree ){ + sqlite3_close(srcdb2); + sqlite3BtreeLeave(pSrcBtree); + } + sqlite3_mutex_leave(srcdb->mutex); + if( isDstCorrupt ){ + sqlite3demo_superunlock_corrupt(id, corruptDstFileLock); + }else{ + sqlite3demo_superunlock(pLock); + } + return rc; +} +#define SQLITE_FILE_HEADER_LEN 16 +/* Check for a conflicting lock. If one is found, print an this + ** on standard output using the format string given and return 1. + ** If there are no conflicting locks, return 0. + */ +static int unixIsLocked( + pid_t pid, /* PID to test for lock owner */ + int h, /* File descriptor to check */ + int type, /* F_RDLCK or F_WRLCK */ + unsigned int iOfst, /* First byte of the lock */ + unsigned int iCnt, /* Number of bytes in the lock range */ + const char *zType /* Type of lock */ +){ + struct flock lk; + int err; + + memset(&lk, 0, sizeof(lk)); + lk.l_type = type; + lk.l_whence = SEEK_SET; + lk.l_start = iOfst; + lk.l_len = iCnt; + + if( pid!=SQLITE_LOCKSTATE_ANYPID ){ +#ifndef F_GETLKPID +# warning F_GETLKPID undefined, _sqlite3_lockstate falling back to F_GETLK + err = fcntl(h, F_GETLK, &lk); +#else + lk.l_pid = pid; + err = fcntl(h, F_GETLKPID, &lk); +#endif + }else{ + err = fcntl(h, F_GETLK, &lk); + } + + if( err==(-1) ){ + fprintf(stderr, "fcntl(%d) failed: errno=%d\n", h, errno); + return -1; + } + + if( lk.l_type!=F_UNLCK && (pid==SQLITE_LOCKSTATE_ANYPID || lk.l_pid==pid) ){ +#ifdef SQLITE_DEBUG + fprintf(stderr, "%s lock held by %d\n", zType, (int)lk.l_pid); +#endif + return 1; + } + return 0; +} + +static int unixLockstatePid(unixFile *, pid_t, int *); + +#endif /* (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__) */ + + /* - ** If *pArg is inititially negative then this is a query. Set *pArg to + ** If *pArg is initially negative then this is a query. Set *pArg to ** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set. ** ** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags. diff --cc src/vdbeapi.c index 605fe6c8bd,dc38132382..da03e9bf6a --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@@ -1139,11 -1181,22 +1197,25 @@@ int sqlite3_bind_blob int nData, void (*xDel)(void*) ){ +#ifdef SQLITE_ENABLE_SQLRR + SRRecBindBlob(pStmt, i, zData, nData); +#endif return bindText(pStmt, i, zData, nData, xDel, 0); } + int sqlite3_bind_blob64( + sqlite3_stmt *pStmt, + int i, + const void *zData, + sqlite3_uint64 nData, + void (*xDel)(void*) + ){ + assert( xDel!=SQLITE_DYNAMIC ); + if( nData>0x7fffffff ){ + return invokeValueDestructor(zData, xDel, 0); + }else{ + return bindText(pStmt, i, zData, (int)nData, xDel, 0); + } + } int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){ int rc; Vdbe *p = (Vdbe *)pStmt; @@@ -1195,11 -1236,24 +1267,27 @@@ int sqlite3_bind_text int nData, void (*xDel)(void*) ){ +#ifdef SQLITE_ENABLE_SQLRR + SRRecBindText(pStmt, i, zData, nData); +#endif return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8); } + int sqlite3_bind_text64( + sqlite3_stmt *pStmt, + int i, + const char *zData, + sqlite3_uint64 nData, + void (*xDel)(void*), + unsigned char enc + ){ + assert( xDel!=SQLITE_DYNAMIC ); + if( nData>0x7fffffff ){ + return invokeValueDestructor(zData, xDel, 0); + }else{ + if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE; + return bindText(pStmt, i, zData, (int)nData, xDel, enc); + } + } #ifndef SQLITE_OMIT_UTF16 int sqlite3_bind_text16( sqlite3_stmt *pStmt,