- 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
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
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
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
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
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
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
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;