From: drh Date: Thu, 29 May 2014 20:24:20 +0000 (+0000) Subject: Merge changes from the trunk into the threads branch. X-Git-Tag: version-3.8.7~132^2~34 X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=ff14013496b17cb697d34b21574a9898a38bbd2c;p=thirdparty%2Fsqlite.git Merge changes from the trunk into the threads branch. FossilOrigin-Name: 416cb091267de91b9cadee9f7453b8627570b7d3 --- ff14013496b17cb697d34b21574a9898a38bbd2c diff --cc manifest index fa9f74befe,5ca3da5016..a2e0dec014 --- a/manifest +++ b/manifest @@@ -1,9 -1,9 +1,9 @@@ - C Merge\srecent\strunk\schanges\sinto\sthe\sthreads\sbranch. - D 2014-05-26T20:15:21.073 -C Fix\sto\sthe\sEXPLAIN\sindentation\slogic\sin\sthe\scommand-line\sshell. -D 2014-05-29T20:17:57.027 ++C Merge\schanges\sfrom\sthe\strunk\sinto\sthe\sthreads\sbranch. ++D 2014-05-29T20:24:20.500 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f -F Makefile.in dd2b1aba364ff9b05de41086f74407f285c57670 +F Makefile.in de92112472618cb869d27249966bad1783e4a853 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 -F Makefile.msc 52911c6bfeaf9b40f47ef4615ab66d98ab0f2b3d +F Makefile.msc f64754550a1272b7f840e8594a8b40c0b46792b4 F Makefile.vxworks 034289efa9d591b04b1a73598623119c306cbba0 F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8 F VERSION 9f823c026c6a32fc5f84d212a8aae0a221dba45c @@@ -165,10 -165,10 +165,10 @@@ F src/auth.c 523da7fb4979469955d822ff92 F src/backup.c a729e63cf5cd1829507cb7b8e89f99b95141bb53 F src/bitvec.c 19a4ba637bd85f8f63fc8c9bae5ade9fb05ec1cb F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 - F src/btree.c 34172d28ad9866c70ec6d64a0b39abf0fa923bdc -F src/btree.c 70c60a3807b2072982f184d9614e020d2953f89c ++F src/btree.c 32b552d5388fa27adf99b9d7e09f4746a08da4e7 F src/btree.h 4245a349bfe09611d7ff887dbc3a80cee8b7955a F src/btreeInt.h cf180d86b2e9e418f638d65baa425c4c69c0e0e3 - F src/build.c c68e0391dbd1f16a29767a176fa71729765bfd24 -F src/build.c 927e39b6aaf872c7b28f154f6acfeb9a05a72442 ++F src/build.c ac8dc0b8b6d49001eac19a46dce94357bddc15b5 F src/callback.c 174e3c8656bc29f91d710ab61550d16eea34be98 F src/complete.c dc1d136c0feee03c2f7550bafc0d29075e36deac F src/ctime.c 0231df905e2c4abba4483ee18ffc05adc321df2a @@@ -176,9 -176,9 +176,9 @@@ F src/date.c 593c744b2623971e45affd0bde F src/delete.c bcf8f72126cea80fc3d5bc5494cf19b3f8935aaf F src/expr.c 4f9e497c66e2f25a4d139357a778c84d5713207c F src/fault.c 160a0c015b6c2629d3899ed2daf63d75754a32bb - F src/fkey.c 5269ef07b100763134f71b889327c333bd0989cf + F src/fkey.c a549cff9fe8b736cdae21650ea0af6de29b77619 F src/func.c 2e16316ec3a6365a0dc3e553c586f91b20f7f6c8 -F src/global.c 1e4bd956dc2f608f87d2a929abc4a20db65f30e4 +F src/global.c 77ec119d6f6453039c2820336af8e8f804f20acf F src/hash.c d139319967164f139c8d1bb8a11b14db9c4ba3cd F src/hash.h 8890a25af81fb85a9ad7790d32eedab4b994da22 F src/hwtime.h d32741c8f4df852c7d959236615444e2b1063b08 @@@ -206,7 -206,7 +206,7 @@@ F src/os.h 60d419395e32a8029fa380a80a3d F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04 F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c ae4b5240af4619d711301d7992396e182585269f - F src/os_win.c b8c28abae3ddb3c52800a461bda257dfedf5c6ae -F src/os_win.c 648f842876e25391b7c454c8e49f7db1fd981d65 ++F src/os_win.c cf4f35cd6cac5ab8327ffd32e6495326d88ec65e F src/os_win.h 057344a6720b4c8405d9bd98f58cb37a6ee46c25 F src/pager.c f6bb1fa6cdf2062f2d8aec3e64db302bca519ab8 F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428 @@@ -220,12 -220,12 +220,12 @@@ F src/printf.c e5a0005f8b3de21f85da6a70 F src/random.c d10c1f85b6709ca97278428fd5db5bbb9c74eece F src/resolve.c 273d5f47c4e2c05b2d3d2bffeda939551ab59e66 F src/rowset.c a9c9aae3234b44a6d7c6f5a3cadf90dce1e627be - F src/select.c b6a17082e897dfa18974e7538f68f61ffba3ff0f - F src/shell.c 4b976f0461be5b9bdf0e406c04ac5f233044e792 -F src/select.c 7df17ec5506c2427576d412bee0e6ea740e12563 -F src/shell.c 33f6c0bc0e32eae099f7c2b79cfa7515b4b4702c -F src/sqlite.h.in 564fc23db33870b5096b20d72df7491ce0b8b74f ++F src/select.c 2657f35be771d14f56402e4aa8a7e26562415ae6 ++F src/shell.c 3d2cdb8d6a5ec11212d727d07ff41c9706084de7 +F src/sqlite.h.in 53858ef439c84d794719901226447e8b5defb1b2 F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc - F src/sqliteInt.h 7bda339d2422f20ec23c8a77d9ae7dfbe9ccc0b3 -F src/sqliteInt.h fccdc735c27b3dc12322fec7cdad8bc76be8d00b ++F src/sqliteInt.h 00cd3cf7be9ea28b963773de165eeb800c94d17c F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158 F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e @@@ -275,21 -275,20 +275,21 @@@ F src/test_thread.c 1e133a40b50e9c035b0 F src/test_vfs.c f84075a388527892ff184988f43b69ce69b8083c F src/test_vfstrace.c bab9594adc976cbe696ff3970728830b4c5ed698 F src/test_wsd.c 41cadfd9d97fe8e3e4e44f61a4a8ccd6f7ca8fe9 +F src/threads.c 3c63f60ce0aae4c40ed4b8dc745490ff42a05308 F src/tokenize.c 6da2de6e12218ccb0aea5184b56727d011f4bee7 F src/trigger.c 66f3470b03b52b395e839155786966e3e037fddb - F src/update.c 5b3e74a03b3811e586b4f2b4cbd7c49f01c93115 + F src/update.c 01564b3c430f6c7b0a35afaf7aba7987206fa3a5 F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c F src/util.c 049fe1d3c0e2209c1bee107aec2fcff6285f909f F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179 - F src/vdbe.c d4f57833c3cdc202d97fd924408b316b45cb4e1e -F src/vdbe.c 9bfe6becfc094382ae213656fbe511055ad83a54 ++F src/vdbe.c 1dff86d8a861b24a7636a2f586953ceb483b445f F src/vdbe.h 394464909ed682334aa3d5831aae0c2fe2abef94 -F src/vdbeInt.h e6d83e5bfd62fc6685ba1ed6153f7099f82de9f7 +F src/vdbeInt.h c78ace64dc37495806dd50596eded1f6cd2b5a64 F src/vdbeapi.c 0ed6053f947edd0b30f64ce5aeb811872a3450a4 -F src/vdbeaux.c e493f38758c4b8f4ca2007cf6a700bd405d192f3 +F src/vdbeaux.c 44d4d1f5711f71eaf0d624de5c3e4976fe4e180b F src/vdbeblob.c 9205ce9d3b064d9600f8418a897fc88b5687d9ac F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447 - F src/vdbesort.c a8b8798f23baa4b293804597532a94470e44f248 -F src/vdbesort.c 44441d73b08b3a638dcdb725afffb87c6574ad27 ++F src/vdbesort.c e2784e2e1f1819a55ce6f22c6ab22eca576ae6d8 F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767 F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd F src/wal.c 76e7fc6de229bea8b30bb2539110f03a494dc3a8 @@@ -1175,9 -1171,9 +1176,9 @@@ F tool/tostr.awk e75472c2f98dd76e06b8c9 F tool/vdbe-compress.tcl 0cf56e9263a152b84da86e75a5c0cdcdb7a47891 F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 - F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01 + F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f - P 386e088868b44b02646e452147838d2e97b093ee 856d44a206d82e96265103556dedda39ca3602b1 - R 4f55a610bf3d15f7ef06a03a46e29034 -P 48dce821a07ac29da6ce05e92cf3f6e52b6eb388 -R f3f6ddac33e05ba165213ff981b802f2 ++P 8215202759dbd863edf20aa26ff21da20bc35d73 8f916ed1e185ac728e00624d90e1d7bd2dda4469 ++R 93affc38efdff0f238968fb6f1ed7e17 U drh - Z 312c26c727a59647516cffebae558cf0 -Z 830218d29106127a2f4cf14b2b59a5e2 ++Z f0e22f612bd7c7522e7f5c332e9f43cb diff --cc manifest.uuid index 8540623713,16ffe06ff6..a6ec05a37d --- a/manifest.uuid +++ b/manifest.uuid @@@ -1,1 -1,1 +1,1 @@@ - 8215202759dbd863edf20aa26ff21da20bc35d73 -8f916ed1e185ac728e00624d90e1d7bd2dda4469 ++416cb091267de91b9cadee9f7453b8627570b7d3 diff --cc src/vdbesort.c index e9776914c2,d3690244c4..8065f6d982 --- a/src/vdbesort.c +++ b/src/vdbesort.c @@@ -581,104 -281,28 +581,103 @@@ static int vdbePmaReadVarint(PmaReader return SQLITE_OK; } +/* +** Attempt to memory map file pFile. If successful, set *pp to point to the +** new mapping and return SQLITE_OK. If the mapping is not attempted +** (because the file is too large or the VFS layer is configured not to use +** mmap), return SQLITE_OK and set *pp to NULL. +** +** Or, if an error occurs, return an SQLite error code. The final value of +** *pp is undefined in this case. +*/ +static int vdbeSorterMapFile(SortSubtask *pTask, SorterFile *pFile, u8 **pp){ + int rc = SQLITE_OK; + if( pFile->iEof<=(i64)(pTask->pSorter->db->nMaxSorterMmap) ){ + rc = sqlite3OsFetch(pFile->pFd, 0, (int)pFile->iEof, (void**)pp); + } + return rc; +} /* -** Advance iterator pIter to the next key in its PMA. Return SQLITE_OK if -** no error occurs, or an SQLite error code if one does. +** Seek PmaReader pReadr to offset iOff within file pFile. Return SQLITE_OK +** if successful, or an SQLite error code if an error occurs. */ -static int vdbeSorterIterNext( - sqlite3 *db, /* Database handle (for sqlite3DbMalloc() ) */ - VdbeSorterIter *pIter /* Iterator to advance */ +static int vdbePmaReaderSeek( + SortSubtask *pTask, /* Task context */ + PmaReader *pReadr, /* Iterate to populate */ + SorterFile *pFile, /* Sorter file to read from */ + i64 iOff /* Offset in pFile */ ){ - int rc; /* Return Code */ + int rc = SQLITE_OK; + + assert( pReadr->pIncr==0 || pReadr->pIncr->bEof==0 ); + + if( pReadr->aMap ){ + sqlite3OsUnfetch(pReadr->pFile, 0, pReadr->aMap); + pReadr->aMap = 0; + } + pReadr->iReadOff = iOff; + pReadr->iEof = pFile->iEof; + pReadr->pFile = pFile->pFd; + + rc = vdbeSorterMapFile(pTask, pFile, &pReadr->aMap); + if( rc==SQLITE_OK && pReadr->aMap==0 ){ + int pgsz = pTask->pSorter->pgsz; + int iBuf = pReadr->iReadOff % pgsz; + if( pReadr->aBuffer==0 ){ + pReadr->aBuffer = (u8*)sqlite3Malloc(pgsz); + if( pReadr->aBuffer==0 ) rc = SQLITE_NOMEM; + pReadr->nBuffer = pgsz; + } + if( rc==SQLITE_OK && iBuf ){ + int nRead = pgsz - iBuf; + if( (pReadr->iReadOff + nRead) > pReadr->iEof ){ + nRead = (int)(pReadr->iEof - pReadr->iReadOff); + } + rc = sqlite3OsRead( + pReadr->pFile, &pReadr->aBuffer[iBuf], nRead, pReadr->iReadOff + ); - assert( rc!=SQLITE_IOERR_SHORT_READ ); + } + } + + return rc; +} + +/* +** Advance PmaReader pReadr to the next key in its PMA. Return SQLITE_OK if +** no error occurs, or an SQLite error code if one does. +*/ +static int vdbePmaReaderNext(PmaReader *pReadr){ + int rc = SQLITE_OK; /* Return Code */ u64 nRec = 0; /* Size of record in bytes */ - if( pIter->iReadOff>=pIter->iEof ){ - /* This is an EOF condition */ - vdbeSorterIterZero(db, pIter); - return SQLITE_OK; + + if( pReadr->iReadOff>=pReadr->iEof ){ + IncrMerger *pIncr = pReadr->pIncr; + int bEof = 1; + if( pIncr ){ + rc = vdbeIncrSwap(pIncr); + if( rc==SQLITE_OK && pIncr->bEof==0 ){ + rc = vdbePmaReaderSeek( + pIncr->pTask, pReadr, &pIncr->aFile[0], pIncr->iStartOff + ); + bEof = 0; + } + } + + if( bEof ){ + /* This is an EOF condition */ + vdbePmaReaderClear(pReadr); + return rc; + } } - rc = vdbeSorterIterVarint(db, pIter, &nRec); if( rc==SQLITE_OK ){ - pIter->nKey = (int)nRec; - rc = vdbeSorterIterRead(db, pIter, (int)nRec, &pIter->aKey); + rc = vdbePmaReadVarint(pReadr, &nRec); + } + if( rc==SQLITE_OK ){ + pReadr->nKey = (int)nRec; + rc = vdbePmaReadBlob(pReadr, (int)nRec, &pReadr->aKey); } return rc;