]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Minor fixes to vdbesort.c code in preparation for a major rework.
authordan <dan@noemail.net>
Tue, 2 Aug 2011 10:56:22 +0000 (10:56 +0000)
committerdan <dan@noemail.net>
Tue, 2 Aug 2011 10:56:22 +0000 (10:56 +0000)
FossilOrigin-Name: 7f339c0e2655310d7530041c379b082d49ce8c7f

manifest
manifest.uuid
src/vdbeInt.h
src/vdbesort.c
tool/mksqlite3c.tcl

index cf17e497cecfb32161267982d2a237cb81ee8e55..55b28dc0171914746fefcd7728239a366844d043 100644 (file)
--- 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
index fcc2554fd055aca5fa892dfa00976bb937978a68..68c2b2a4f6db42b8cc0e0ab6186d2b5456b6a3f7 100644 (file)
@@ -1 +1 @@
-30dbf0feab0323250404e0741ac2716bcb6b0cbe
\ No newline at end of file
+7f339c0e2655310d7530041c379b082d49ce8c7f
\ No newline at end of file
index 4d404967b5714663ef67c71458509b22c825c5a7..7f53acde9d0a32758e8cc77df2ef60a916b6bff8 100644 (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*);
index fc6591789d23ada467c7fe89b7d50f67b5d998a4..4cabb526c5f6b90269fdb3f10a893e4db045e2a8 100644 (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;
index a834cab2f1a485c0d34bc9459fae8523dde84ad3..792905a501d3e85c3cdbb4305df1837d1bd273ac 100644 (file)
@@ -259,6 +259,7 @@ foreach file {
    vdbetrace.c
    vdbe.c
    vdbeblob.c
+   vdbesort.c
    journal.c
    memjournal.c