Minor fixes to vdbesort.c code in preparation for a major rework.

FossilOrigin-Name: 7f339c0e2655310d7530041c379b082d49ce8c7f
This commit is contained in:
dan 2011-08-02 10:56:22 +00:00
parent a20fde64eb
commit 7fe6270b4d
5 changed files with 22 additions and 18 deletions

View File

@ -1,5 +1,5 @@
C Experimental\ssupport\sfor\sspeeding\sup\sCREATE\sINDEX\scommands\susing\san\soffline\smerge\ssort.
D 2011-07-12T14:28:05.335
C Minor\sfixes\sto\svdbesort.c\scode\sin\spreparation\sfor\sa\smajor\srework.
D 2011-08-02T10:56:22.688
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in c1d7a7f4fd8da6b1815032efca950e3d5125407e
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@ -240,12 +240,12 @@ F src/util.c 0f33bbbdfcc4a2d8cf20c3b2a16ffc3b57c58a70
F src/vacuum.c 05513dca036a1e7848fe18d5ed1265ac0b32365e
F src/vdbe.c 88a7068472bafb29db500a167eef533d5f709cdc
F src/vdbe.h 5cf09e7ee8a3f7d93bc51f196a96550786afe7a1
F src/vdbeInt.h fb6c86006de1c0f249ea9dc14263ad0c357cfc24
F src/vdbeInt.h 9e38e4f866faa9b25e30a1712c3ec1f489097ca1
F src/vdbeapi.c 11dc47987abacb76ad016dcf5abc0dc422482a98
F src/vdbeaux.c 8fb978eb73a97b34d352dd3ef3bff35b1b3fa7e9
F src/vdbeblob.c f024f0bf420f36b070143c32b15cc7287341ffd3
F src/vdbemem.c 0498796b6ffbe45e32960d6a1f5adfb6e419883b
F src/vdbesort.c f07d526dfb0606e51f7588b26c9d401092318c39
F src/vdbesort.c 40bb17d3616272dc5597b55ea7be74a2f15368ba
F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114
F src/vtab.c 901791a47318c0562cd0c676a2c6ff1bc530e582
F src/wal.c 0c70ad7b1cac6005fa5e2cbefd23ee05e391c290
@ -926,7 +926,7 @@ F tool/lempar.c 01ca97f87610d1dac6d8cd96ab109ab1130e76dc
F tool/mkkeywordhash.c d2e6b4a5965e23afb80fbe74bb54648cd371f309
F tool/mkopts.tcl 66ac10d240cc6e86abd37dc908d50382f84ff46e
F tool/mkspeedsql.tcl a1a334d288f7adfe6e996f2e712becf076745c97
F tool/mksqlite3c.tcl 1fa0ed9cfdc768bf5de7e65fda8d97a46dd2a7e6
F tool/mksqlite3c.tcl d8c0d3065bc23fd9e27d59bfebd34df203fe6b08
F tool/mksqlite3h.tcl 78013ad79a5e492e5f764f3c7a8ef834255061f8
F tool/mksqlite3internalh.tcl 7b43894e21bcb1bb39e11547ce7e38a063357e87
F tool/omittest.tcl 8086c014cbae90f1f2b564d59d05a5e4ac1783c9
@ -954,10 +954,7 @@ F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5
F tool/tostr.awk 11760e1b94a5d3dcd42378f3cc18544c06cfa576
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
F tool/warnings.sh 2ebae31e1eb352696f3c2f7706a34c084b28c262
P 03af4c175c6ba303ec0a5be25fd42771e38f7347
R 55fa78a5c4888948b8391ce686e6076d
T *branch * experimental
T *sym-experimental *
T -sym-trunk *
P 30dbf0feab0323250404e0741ac2716bcb6b0cbe
R 337aa1934af3c59a8870d01bcb4375d6
U dan
Z 97a803d50902eb873dfd6c6b8aa1a07e
Z 9845e6e6f92471215969af52d2a4b78a

View File

@ -1 +1 @@
30dbf0feab0323250404e0741ac2716bcb6b0cbe
7f339c0e2655310d7530041c379b082d49ce8c7f

View File

@ -396,6 +396,10 @@ int sqlite3VdbeSorterInit(sqlite3 *, VdbeCursor *);
int sqlite3VdbeSorterWrite(sqlite3 *, VdbeCursor *);
void sqlite3VdbeSorterClose(sqlite3 *, VdbeCursor *);
int sqlite3VdbeSorterRowkey(sqlite3 *, VdbeCursor *, Mem *);
int sqlite3VdbeSorterRewind(sqlite3 *, VdbeCursor *, int *);
int sqlite3VdbeSorterNext(sqlite3 *, VdbeCursor *, int *);
#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
void sqlite3VdbeEnter(Vdbe*);
void sqlite3VdbeLeave(Vdbe*);

View File

@ -111,6 +111,9 @@ struct VdbeSorterIter {
/* Minimum allowable value for the VdbeSorter.nWorking variable */
#define SORTER_MIN_SEGMENT_SIZE 10
/* Maximum number of segments to merge in a single go */
#define SORTER_MAX_MERGE_COUNT 256
/*
** Append integer iRoot to the VdbeSorter.aRoot[] array of the sorter object
** passed as the second argument. SQLITE_NOMEM is returned if an OOM error
@ -188,7 +191,6 @@ static int vdbeSorterIterInit(
int iRoot, /* Root page of b-tree to iterate */
VdbeSorterIter *pIter /* Pointer to iterator to initialize */
){
VdbeSorter *pSorter = pCsr->pSorter;
int rc;
pIter->pCsr = (BtCursor *)sqlite3DbMallocZero(db, sqlite3BtreeCursorSize());
@ -218,7 +220,6 @@ static int vdbeSorterIterNext(
){
int rc;
int bDummy;
VdbeSorter *pSorter = pCsr->pSorter;
rc = sqlite3BtreeNext(pIter->pCsr, &bDummy);
if( rc==SQLITE_OK ){
@ -411,7 +412,10 @@ static int vdbeSorterInitMerge(
int N = 2;
/* Initialize as many iterators as possible. */
for(i=iFirst; rc==SQLITE_OK && i<pSorter->nRoot; i++){
for(i=iFirst;
rc==SQLITE_OK && i<pSorter->nRoot && (i-iFirst)<SORTER_MAX_MERGE_COUNT;
i++
){
int iIter = i - iFirst;
assert( iIter<=pSorter->nAlloc );
@ -450,8 +454,6 @@ static int vdbeSorterInitMerge(
*/
int sqlite3VdbeSorterRewind(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
int rc = SQLITE_OK; /* Return code */
int N;
int i;
VdbeSorter *pSorter = pCsr->pSorter;
BtCursor *p = pCsr->pCursor; /* Cursor structure */
@ -485,7 +487,7 @@ int sqlite3VdbeSorterRewind(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
sqlite3BtreeCloseCursor(p);
iRoot++;
}
} while( rc==SQLITE_OK && iNext<pSorter->nRoot );
}while( rc==SQLITE_OK && iNext<pSorter->nRoot );
if( iRoot==0 ) break;
pSorter->nRoot = iRoot;

View File

@ -259,6 +259,7 @@ foreach file {
vdbetrace.c
vdbe.c
vdbeblob.c
vdbesort.c
journal.c
memjournal.c