-C Combine\stwo\smalloc\scalls\sin\svdbesort.c.
-D 2011-09-02T18:03:16.975
+C Remove\ssome\sdead\scode.\s\sFix\sa\sfaulty\sassert().\s\sImprove\ssome\svariable\snames.
+D 2011-09-02T21:42:33.425
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in d314143fa6be24828021d3f583ad37d9afdce505
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
F src/backup.c 28a4fe55327ff708bfaf9d4326d02686f7a553c3
F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
-F src/btree.c dc3f244447fd5aade08f66d475e2a6316bbef4e7
+F src/btree.c 4d46fe30b8bc920f68b7d58a5f45316fa5d023ec
F src/btree.h f5d775cd6cfc7ac32a2535b70e8d2af48ef5f2ce
F src/btreeInt.h 67978c014fa4f7cc874032dd3aacadd8db656bc3
F src/build.c dc367138cb3625e6d42b389e05d7267aece5753c
F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
F src/os_unix.c 10e0c4dcdbec8d4189890fdf3e71b32efae194e3
F src/os_win.c 45de13c6c3501cfd6469b2b34149b823060e39f4
-F src/pager.c 817f7f7140c9fa2641f28e6330e924708ddd870d
-F src/pager.h 2bab1b2ea4eac58663b5833e3522e36b5ff63447
+F src/pager.c 5545863e4e246e1744cfb6993821c6e4b63ffb64
+F src/pager.h 6bea8d1949db33768de1c5b4133b267b40845f8b
F src/parse.y 12b7ebd61ea54f0e1b1083ff69cc2c8ce9353d58
F src/pcache.c 49e718c095810c6b3334e3a6d89970aceaddefce
F src/pcache.h c683390d50f856d4cd8e24342ae62027d1bb6050
F src/vdbeaux.c e58acbc5ea3823922a0cd8fa21f94f39af51ee88
F src/vdbeblob.c f024f0bf420f36b070143c32b15cc7287341ffd3
F src/vdbemem.c 5e6effb96dd53d233361cbfaa3f0a43b9af689e9
-F src/vdbesort.c b56437b8b3a0a17a2b110d37633dc9217c72fd60
+F src/vdbesort.c 2ae618bec4bec5faa075e82078008763666c655d
F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114
F src/vtab.c 901791a47318c0562cd0c676a2c6ff1bc530e582
F src/wal.c 3154756177d6219e233d84291d5b05f4e06ff5e9
F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
F tool/warnings.sh b7fdb2cc525f5ef4fa43c80e771636dd3690f9d2
-P 065b0c9858da0ebb41722f3c56bdaf62f28b2f2c
-R 06bb7ef7ee2f3a8f904497ea31ee4edb
-U dan
-Z ad89820409358feeee63c15f85c9298f
+P cf48ad8353e28339d00f448bb729e10a7f2aad72
+R d2091eb5dd8da1e99612b5b3cd229b4c
+U drh
+Z e655a0d761c2ed1b9d5806522d72983b
-cf48ad8353e28339d00f448bb729e10a7f2aad72
\ No newline at end of file
+a9a64592cf88580cb254fb0aac65a2f2085976ec
\ No newline at end of file
return rc;
}
int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
- BtShared *pBt = p->pBt;
int rc;
sqlite3BtreeEnter(p);
rc = btreeDropTable(p, iTable, piMoved);
u8 readOnly; /* True for a read-only database */
u8 memDb; /* True to inhibit all file I/O */
u8 hasSeenStress; /* pagerStress() called one or more times */
- u8 isSorter; /* True for a PAGER_SORTER */
/**************************************************************************
** The following block contains those class members that change during
assert( pagerUseWal(p)==0 );
}
- /* A sorter is a temp file that never spills to disk and always has
- ** the doNotSpill flag set
- */
- if( p->isSorter ){
- assert( p->tempFile );
- assert( p->doNotSpill );
- assert( p->fd->pMethods==0 );
- }
-
/* If changeCountDone is set, a RESERVED lock or greater must be held
** on the file.
*/
/* pPager->pBusyHandlerArg = 0; */
pPager->xReiniter = xReinit;
/* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */
-#ifndef SQLITE_OMIT_MERGE_SORT
- if( flags & PAGER_SORTER ){
- pPager->doNotSpill = 1;
- pPager->isSorter = 1;
- }
-#endif
*ppPager = pPager;
return SQLITE_OK;
return MEMDB;
}
-#ifndef SQLITE_OMIT_MERGE_SORT
-/*
-** Return true if the pager has seen a pagerStress callback.
-*/
-int sqlite3PagerUnderStress(Pager *pPager){
- assert( pPager->isSorter );
- assert( pPager->doNotSpill );
- return pPager->hasSeenStress;
-}
-#endif
-
/*
** Check that there are at least nSavepoint savepoints open. If there are
** currently less than nSavepoints open, then open one or more savepoints
int sqlite3PagerNosync(Pager*);
void *sqlite3PagerTempSpace(Pager*);
int sqlite3PagerIsMemdb(Pager*);
-#ifndef SQLITE_OMIT_MERGE_SORT
-int sqlite3PagerUnderStress(Pager*);
-#endif
/* Functions used to truncate the database file. */
void sqlite3PagerTruncateImage(Pager*,Pgno);
sqlite3_file *pTemp1; /* PMA file 1 */
int nPMA; /* Number of PMAs stored in pTemp1 */
SorterRecord *pRecord; /* Head of in-memory record list */
- int nLimit1; /* Minimum PMA size, in bytes */
- int nLimit2; /* Maximum PMA size, in bytes */
+ int mnPmaSize; /* Minimum PMA size, in bytes */
+ int mxPmaSize; /* Maximum PMA size, in bytes. 0==no limit */
char *aSpace; /* Space for UnpackRecord() */
int nSpace; /* Size of aSpace in bytes */
};
*/
int sqlite3VdbeSorterInit(sqlite3 *db, VdbeCursor *pCsr){
int pgsz; /* Page size of main database */
+ int mxCache; /* Cache size */
+ VdbeSorter *pSorter; /* The new sorter */
assert( pCsr->pKeyInfo && pCsr->pBt==0 );
- pCsr->pSorter = sqlite3DbMallocZero(db, sizeof(VdbeSorter));
- if( pCsr->pSorter==0 ){
+ pCsr->pSorter = pSorter = sqlite3DbMallocZero(db, sizeof(VdbeSorter));
+ if( pSorter==0 ){
return SQLITE_NOMEM;
}
pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
- pCsr->pSorter->nLimit1 = 10 * pgsz;
- pCsr->pSorter->nLimit2 = db->aDb[0].pSchema->cache_size * pgsz;
+ pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
+ mxCache = db->aDb[0].pSchema->cache_size;
+ if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
+ pSorter->mxPmaSize = mxCache * pgsz;
return SQLITE_OK;
}
}
pSorter->pRecord = p;
-#if 0
- {
- SorterRecord *pTmp1 = 0;
- SorterRecord *pTmp2;
- for(pTmp2=pSorter->pRecord; pTmp2 && rc==SQLITE_OK; pTmp2=pTmp2->pNext){
- if( pTmp1 ){
- int res;
- rc = vdbeSorterCompare(pCsr,
- 0, pTmp1->pVal, pTmp1->nVal, pTmp2->pVal, pTmp2->nVal, &res
- );
- assert( rc!=SQLITE_OK || res<0 );
- }
- pTmp1 = pTmp2;
- }
- }
-#endif
-
- if( rc!=SQLITE_OK ){
- }
sqlite3_free(aSlot);
return rc;
}
** than (page-size * 10) and sqlite3HeapNearlyFull() returns true.
*/
if( rc==SQLITE_OK && (
- (pSorter->nInMemory>pSorter->nLimit2)
- || (pSorter->nInMemory>pSorter->nLimit1 && sqlite3HeapNearlyFull())
+ (pSorter->nInMemory>pSorter->mxPmaSize)
+ || (pSorter->nInMemory>pSorter->mnPmaSize && sqlite3HeapNearlyFull())
)){
rc = vdbeSorterListToPMA(db, pCsr);
pSorter->nInMemory = 0;
pKey = vdbeSorterRowkey(pSorter, &nKey);
rc = vdbeSorterCompare(pCsr, 1, pVal->z, pVal->n, pKey, nKey, pRes);
- assert( rc!=SQLITE_OK || *pRes<=0 );
+ assert( rc!=SQLITE_OK || pVal->db->mallocFailed || (*pRes)<=0 );
return rc;
}