From: dan Date: Thu, 14 Jan 2016 15:46:31 +0000 (+0000) Subject: Merge the latest enhancements and fixes from trunk. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f687ba597f0015480c97555efe40d4c5626bb745;p=thirdparty%2Fsqlite.git Merge the latest enhancements and fixes from trunk. FossilOrigin-Name: fccc5f20c360fa17c3692a9f1fc1d16612632a7f --- f687ba597f0015480c97555efe40d4c5626bb745 diff --cc manifest index 8143778f77,1354db7a40..2c574e7290 --- a/manifest +++ b/manifest @@@ -1,10 -1,10 +1,10 @@@ - C Merge\schanges\sfor\sversion\s3.10.0. - D 2016-01-06T15:49:19.937 - F Makefile.in 7c8cc4c2f0179efc6fa9492141d1fb65f4807054 -C Yet\sanother\schange\sto\sFTS5\strying\sto\sget\sit\sto\smerge\ssuccessfully\sinto\ssessions. -D 2016-01-14T14:33:36.733 ++C Merge\sthe\slatest\senhancements\sand\sfixes\sfrom\strunk. ++D 2016-01-14T15:46:31.755 + F Makefile.in cfa1ac03c4b414992fd53f24d978b45b0c21de55 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 - F Makefile.msc e45d8b9b56dfa3f2cd860b2c28bd9d304513b042 + F Makefile.msc 1dc36cfd3c047c9685e539257e158485f16ef035 F README.md 8ecc12493ff9f820cdea6520a9016001cb2e59b7 - F VERSION 8b9d3ac6f1962f94e06ba05462422a544f9c4e36 + F VERSION 866588d1edf0ccb5b0d33896974338f97564f719 F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50 F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2 F art/sqlite370.ico af56c1d00fee7cd4753e8631ed60703ed0fc6e90 @@@ -275,11 -280,11 +280,11 @@@ F src/attach.c e944d0052b577703b9b83aac F src/auth.c b56c78ebe40a2110fd361379f7e8162d23f92240 F src/backup.c 2869a76c03eb393ee795416e2387005553df72bc F src/bitvec.c 1a78d450a17c5016710eec900bedfc5729bf9bdf - F src/btmutex.c 45a968cc85afed9b5e6cf55bf1f42f8d18107f79 - F src/btree.c 90fda80e91d132e617da87eded024079a00e7825 - F src/btree.h beef31274289a103fa811a7d7adc2dcedbcf2077 - F src/btreeInt.h 2a56cce8bd48f745ab5a767dd9fad8b95a1b0827 - F src/build.c 7fcb454e802c35f2b50be9b977dc9168367380e3 + F src/btmutex.c bc87dd3b062cc26edfe79918de2200ccb8d41e73 -F src/btree.c 5d93e2477acb99d50a8b045f2e26a0be3d7751fe -F src/btree.h 68ef301795e00cdf1d3ab93abc44a43b7fe771e0 -F src/btreeInt.h c18b7d2a3494695133e4e60ee36061d37f45d9a5 -F src/build.c 9d497ff4bf3c82cecb520436e0e9963785627583 ++F src/btree.c 04dccbd580639509b927da2a3f926fc70973205e ++F src/btree.h 8b91bee00ad110e0ae1645ca51d52d23db529380 ++F src/btreeInt.h ca40607c2c9d4b4b7ded98e3d707b15c2f17f1bf ++F src/build.c fd8be668b4171f033790566019c0b80ad9c8d17f F src/callback.c 7b44ce59674338ad48b0e84e7b72f935ea4f68b0 F src/complete.c addcd8160b081131005d5bc2d34adf20c1c5c92f F src/ctime.c 60e135af364d777a9ab41c97e5e89cd224da6198 @@@ -317,14 -322,14 +322,14 @@@ F src/os.c 8fd25588eeba74068d41102d2681 F src/os.h 3e57a24e2794a94d3cf2342c6d9a884888cd96bf F src/os_common.h abdb9a191a367793268fe553d25bab894e986a0e F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa - F src/os_unix.c 0ca6d8710366fbb01a275160f018334cd347cbda + F src/os_unix.c b509b49b40a269e7b75ab511b6e92b2dc9444359 F src/os_win.c 386fba30419e8458b13209781c2af5590eab2811 F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca - F src/pager.c e290899d28c063a66029f813b39c61eb07018420 - F src/pager.h d72d174e10f8ed64dbfb8172279c042c1d046f2e - F src/parse.y b0ad024157be717d43f9e1eb4f377873574153a3 -F src/pager.c f4e9ac39fbb1e0fde97af85c0f4e00eb90764b67 -F src/pager.h 1c2a49143dfba9e69cc8159ef019f472ed8d260b -F src/parse.y caad1e98edeca6960493d0c60d31b76820dd7776 ++F src/pager.c d718fb21839adc7b7e1e7f568c06d5d3323bf957 ++F src/pager.h 4a489a631d6f6dfcd52f629dd22e9932e58efcaf ++F src/parse.y 2a2b07ab26adc58878bc9c6091e16b87b89c40cc F src/pcache.c 73895411fa6b7bd6f0091212feabbe833b358d23 - F src/pcache.h 1ff11adce609ba7de139b6abfabaf9a2bac947b5 + F src/pcache.h 4d0ccaad264d360981ec5e6a2b596d6e85242545 F src/pcache1.c 72f644dc9e1468c72922eff5904048427b817051 F src/pragma.c f3e7147299ca05ef4304a36f1fd6e002729c72c6 F src/pragma.h 64c78a648751b9f4f297276c4eb7507b14b4628c @@@ -333,12 -338,12 +338,12 @@@ F src/printf.c af589a27b7d40f6f4f704e9e F src/random.c ba2679f80ec82c4190062d756f22d0c358180696 F src/resolve.c a83b41104e6ff69855d03cd0aaa09e93927ec39f F src/rowset.c eccf6af6d620aaa4579bd3b72c1b6395d9e9fa1e - F src/select.c f8fded11fc443a9f5a73cc5db069d06b34460e2f - F src/shell.c ed71dc7679e6f087a3f1ea3f9dae4b0fae7209c3 - F src/sqlite.h.in 7d87d71b9a4689c51fa092f48f16590ff71558e3 + F src/select.c 5b0f2aa9f73ec7b65d1711d485471854d5bad23c + F src/shell.c dcd7a83645ef2a58ee9c6d0ea4714d877d7835c4 + F src/sqlite.h.in 214476a62012e578f42133a9a3b4f97a9aa421a3 F src/sqlite3.rc 992c9f5fb8285ae285d6be28240a7e8d3a7f2bad F src/sqlite3ext.h dfbe62ffd95b99afe2140d8c35b180d11924072d - F src/sqliteInt.h 17f1f082e4f5e0af76ab027034079b153fcad22a -F src/sqliteInt.h b8ccd34a919e4b6bab8c4164046330002aa9a27a ++F src/sqliteInt.h 98ad874dbea2fef13f200baa6dc9df9b6b75c422 F src/sqliteLimit.h 216557999cb45f2e3578ed53ebefe228d779cb46 F src/status.c 70912d7be68e9e2dbc4010c93d344af61d4c59ba F src/table.c 51b46b2a62d1b3a959633d593b89bab5e2c9155e @@@ -397,22 -402,22 +402,22 @@@ F src/trigger.c de3ed31ad3218a20d7d7e18 F src/update.c 17332f9fe818cbc0444c36a811800af8498af4c3 F src/utf.c 32d7f82aa921322f3e1c956f4b58f019ebd2c6b3 F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70 -F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701 -F src/vdbe.c 6572d00eefeaa0b14b325fdf3a409920ec3fee82 +F src/vacuum.c 983cc3754718ef169a6ea9aef86798bd28106f21 - F src/vdbe.c 83c09bc78d03c3bc7f596c2698858bc3b7615fd1 ++F src/vdbe.c fd831237035c6d25d89ca131420d1bf8ae3bcbb3 F src/vdbe.h efb7a8c1459e31f3ea4377824c6a7e4cb5068637 - F src/vdbeInt.h 75c2e82ee3357e9210c06474f8d9bdf12c81105d + F src/vdbeInt.h 42eefa4f9e7432b9968d321b44e48821ec13b189 F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca - F src/vdbeaux.c 83120486af1eb23c9889c0a80572051fa3b8cd00 -F src/vdbeaux.c f2e6b4fae037db04323be8de7bcd266375746471 ++F src/vdbeaux.c a05ffe92f6c8edc523b28ef1a4a5947145f0380e F src/vdbeblob.c fdc4a81605ae7a35ae94a55bd768b66d6be16f15 F src/vdbemem.c fdd1578e47bea61390d472de53c565781d81e045 - F src/vdbesort.c a7ec02da4494c59dfd071126dd3726be5a11459d + F src/vdbesort.c 0971557e5d3c289e46f56a52aed2197c13251de7 F src/vdbetrace.c 8befe829faff6d9e6f6e4dee5a7d3f85cc85f1a0 F src/vtab.c 2a8b44aa372c33f6154208e7a7f6c44254549806 - F src/vxworks.h c18586c8edc1bddbc15c004fa16aeb1e1342b4fb - F src/wal.c 773ba7c089be217dabc9c7e91941345d2b26d30d - F src/wal.h e3ae126b25817dd1e5d779a1aaaa742218de5139 - F src/walker.c 2e14d17f592d176b6dc879c33fbdec4fbccaa2ba - F src/where.c c6d3d2f6af57d574a7365ee2b225a5024f2a6bec + F src/vxworks.h 974e7d9a98f602d6310d563e1dc4e08f9fc48e47 -F src/wal.c d21b99fd1458159d0b1ecdccc8ee6ada4fdc4c54 -F src/wal.h 2f7c831cf3b071fa548bf2d5cac640846a7ff19c ++F src/wal.c 2390cb2e5cc8529ab4dee92ee8292db1a4f824d8 ++F src/wal.h 327e94c3e366154f52a8d9be9be0ea790cc4e08c + F src/walker.c 0f142b5bd3ed2041fc52d773880748b212e63354 + F src/where.c bb69654f841ae7af0a20cc6fb8f0ac57901c31be F src/whereInt.h 78b6b4de94db84aecbdc07fe3e38f648eb391e9a F src/wherecode.c dfbfe198e418b01f208b489e088edd230c91a4e7 F src/whereexpr.c eebba8340c90de73b3d3bbe8c43b84559b8e6e2c @@@ -1282,8 -1284,8 +1287,8 @@@ F test/vtabI.test 751b07636700dbdea328e F test/vtab_alter.test 9e374885248f69e251bdaacf480b04a197f125e5 F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8 F test/vtab_shared.test ea8778d5b0df200adef2ca7c00c3c37d4375f772 - F test/wal.test dbfc482e10c7263298833bb1fc60b3ac9d6340a1 + F test/wal.test 65bfc68f3f09dcbc62cee9f794e560428d96cec7 -F test/wal2.test 1f841d2048080d32f552942e333fd99ce541dada +F test/wal2.test dc801f6d3f8f39d1534ffbd15a715b0b287508db F test/wal3.test b1d425f68a1f61d12563f0fa1ee6fca7d5afabf4 F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c F test/wal5.test 88b5d9a6a3d1532497ee9f4296f010d66f07e33c @@@ -1409,7 -1412,7 +1415,7 @@@ F tool/vdbe_profile.tcl 246d0da094856d7 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f - P 6bea792c3d71be34ccb9c14a0df8a5244d2d3678 fd0a50f0797d154fefff724624f00548b5320566 - R fa29b06decacdf51ca71abe2a91cec92 -P f791fc7009d68941c60d7bf953bab19d86112133 -R 52083946c40dd4f44744cbc0b447540f --U drh - Z 7c114826f0fefe126dc2832b00c1f66c -Z 9b36451b3b0b6d81cfd6f7c438e3b3aa ++P e1d2ffc06d47b550ca9447a71443dea08b98d1ad 8dedff3b9ac3e6bf9c131fee19f7d26dc1ebd61f ++R 51a8de6fb41bec6ffe9c6c29c20306b1 ++U dan ++Z 6037bb30250c5bc4a0c6399b67d0df45 diff --cc manifest.uuid index 846f1bec7b,92616336df..2d84e3fb02 --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - e1d2ffc06d47b550ca9447a71443dea08b98d1ad -8dedff3b9ac3e6bf9c131fee19f7d26dc1ebd61f ++fccc5f20c360fa17c3692a9f1fc1d16612632a7f diff --cc src/btree.c index 174204f5c9,b5a1ee3b2c..209685cb87 --- a/src/btree.c +++ b/src/btree.c @@@ -3329,10 -3122,8 +3325,9 @@@ int sqlite3BtreeNewDb(Btree *p) ** proceed. */ int sqlite3BtreeBeginTrans(Btree *p, int wrflag){ - sqlite3 *pBlock = 0; BtShared *pBt = p->pBt; int rc = SQLITE_OK; + int bConcurrent = (p->db->bConcurrent && !ISAUTOVACUUM); sqlite3BtreeEnter(p); btreeIntegrity(p); @@@ -10078,29 -9670,11 +10076,38 @@@ int sqlite3BtreeIsReadonly(Btree *p) */ int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(MemPage)); } +/* +** This function is called to ensure that all locks required to commit the +** current write-transaction to the database file are held. If the db is +** in rollback mode, this means the EXCLUSIVE lock on the database file. +** +** Or, if this is an CONCURRENT transaction on a wal-mode database, the WRITER +** lock on the wal file. In this case this function also checks that the +** CONCURRENT transaction can be safely committed (does not commit with any +** other transaction committed since it was opened). +** +** SQLITE_OK is returned if successful. SQLITE_BUSY if the required locks +** cannot be obtained due to a conflicting lock. If the locks cannot be +** obtained for an CONCURRENT transaction due to a conflict with an already +** committed transaction, SQLITE_BUSY_SNAPSHOT is returned. Otherwise, if +** some other error (OOM, IO, etc.) occurs, the relevant SQLite error code +** is returned. +*/ +int sqlite3BtreeExclusiveLock(Btree *p){ + int rc; + BtShared *pBt = p->pBt; + assert( p->inTrans==TRANS_WRITE && pBt->pPage1 ); + sqlite3BtreeEnter(p); + rc = sqlite3PagerExclusiveLock(pBt->pPager, pBt->pPage1->pDbPage); + sqlite3BtreeLeave(p); + return rc; +} ++ + #if !defined(SQLITE_OMIT_SHARED_CACHE) + /* + ** Return true if the Btree passed as the only argument is sharable. + */ + int sqlite3BtreeSharable(Btree *p){ + return p->sharable; + } + #endif diff --cc src/wal.c index bab055a02f,7cf2cabffb..12856bb956 --- a/src/wal.c +++ b/src/wal.c @@@ -2646,34 -2617,6 +2651,35 @@@ Pgno sqlite3WalDbsize(Wal *pWal) return 0; } +/* +** Take the WRITER lock on the WAL file. Return SQLITE_OK if successful, +** or an SQLite error code otherwise. This routine does not invoke any +** busy-handler callbacks, that is done at a higher level. +*/ +static int walWriteLock(Wal *pWal){ + int rc; + + /* Cannot start a write transaction without first holding a read lock */ + assert( pWal->readLock>=0 ); + assert( pWal->writeLock==0 ); ++ assert( pWal->iReCksum==0 ); + + /* If this is a read-only connection, obtaining a write-lock is not + ** possible. In this case return SQLITE_READONLY. Otherwise, attempt + ** to grab the WRITER lock. Set Wal.writeLock to true and return + ** SQLITE_OK if successful, or leave Wal.writeLock clear and return + ** an SQLite error code (possibly SQLITE_BUSY) otherwise. */ + if( pWal->readOnly ){ + rc = SQLITE_READONLY; + }else{ + rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1); + if( rc==SQLITE_OK ){ + pWal->writeLock = 1; + } + } + + return rc; +} /* ** This function starts a write transaction on the WAL. @@@ -3214,6 -3079,13 +3302,14 @@@ int sqlite3WalFrames if( rc ) return rc; pLast = p; iOffset += szFrame; + p->flags |= PGHDR_WAL_APPEND; + } + ++ + /* Recalculate checksums within the wal file if required. */ + if( isCommit && pWal->iReCksum ){ + rc = walRewriteChecksums(pWal, iFrame); + if( rc ) return rc; } /* If this is the end of a transaction, then we might need to pad