From 7fe6270b4d7122edf840ba5dea293141585f09f5 Mon Sep 17 00:00:00 2001 From: dan Date: Tue, 2 Aug 2011 10:56:22 +0000 Subject: [PATCH] Minor fixes to vdbesort.c code in preparation for a major rework. FossilOrigin-Name: 7f339c0e2655310d7530041c379b082d49ce8c7f --- manifest | 19 ++++++++----------- manifest.uuid | 2 +- src/vdbeInt.h | 4 ++++ src/vdbesort.c | 14 ++++++++------ tool/mksqlite3c.tcl | 1 + 5 files changed, 22 insertions(+), 18 deletions(-) diff --git a/manifest b/manifest index cf17e497ce..55b28dc017 100644 --- a/manifest +++ b/manifest @@ -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 diff --git a/manifest.uuid b/manifest.uuid index fcc2554fd0..68c2b2a4f6 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -30dbf0feab0323250404e0741ac2716bcb6b0cbe \ No newline at end of file +7f339c0e2655310d7530041c379b082d49ce8c7f \ No newline at end of file diff --git a/src/vdbeInt.h b/src/vdbeInt.h index 4d404967b5..7f53acde9d 100644 --- a/src/vdbeInt.h +++ b/src/vdbeInt.h @@ -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*); diff --git a/src/vdbesort.c b/src/vdbesort.c index fc6591789d..4cabb526c5 100644 --- a/src/vdbesort.c +++ b/src/vdbesort.c @@ -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 && inRoot; i++){ + for(i=iFirst; + rc==SQLITE_OK && inRoot && (i-iFirst)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 && iNextnRoot ); + }while( rc==SQLITE_OK && iNextnRoot ); if( iRoot==0 ) break; pSorter->nRoot = iRoot; diff --git a/tool/mksqlite3c.tcl b/tool/mksqlite3c.tcl index a834cab2f1..792905a501 100644 --- a/tool/mksqlite3c.tcl +++ b/tool/mksqlite3c.tcl @@ -259,6 +259,7 @@ foreach file { vdbetrace.c vdbe.c vdbeblob.c + vdbesort.c journal.c memjournal.c -- 2.47.2