- 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
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
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/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
- F src/sqliteInt.h 439ad3b98d2342862ce11955ab35948a8e82a052
+F src/sqlite3_private.h a81a9c5f97c095cc3e86914a05f8fabe0011f4a1
-F src/sqliteInt.h 5ecde2191721a94cdce0d5248e26a373e0b17a70
+ F src/sqlite3ext.h 17d487c3c91b0b8c584a32fbeb393f6f795eea7d
++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
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
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
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
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
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
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
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
return SQLITE_OK;
}
+
+#if (SQLITE_ENABLE_APPLE_SPI>0) && defined(__APPLE__)
+#include "sqlite3_private.h"
+#include <copyfile.h>
+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.