]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Simplification and performance tweaks in vdbeSorterMerge(). merge-sort
authordrh <drh@noemail.net>
Sat, 3 Sep 2011 16:42:38 +0000 (16:42 +0000)
committerdrh <drh@noemail.net>
Sat, 3 Sep 2011 16:42:38 +0000 (16:42 +0000)
FossilOrigin-Name: 99e34bdce4ccca15b79159b03b96787e7a7ff85b

manifest
manifest.uuid
src/vdbesort.c

index dd25184f0e72896ae5df0db3a2547cfb350dde49..aa9396df26fd82ffe57204ce04a3195f9810c180 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Reduce\sthe\snumber\sof\sVdbeRecordUnpack()\scalls\smade\sin\svdbesort.c.
-D 2011-09-03T14:36:13.912
+C Simplification\sand\sperformance\stweaks\sin\svdbeSorterMerge().
+D 2011-09-03T16:42:38.728
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in d314143fa6be24828021d3f583ad37d9afdce505
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -245,7 +245,7 @@ F src/vdbeapi.c 11dc47987abacb76ad016dcf5abc0dc422482a98
 F src/vdbeaux.c e58acbc5ea3823922a0cd8fa21f94f39af51ee88
 F src/vdbeblob.c f024f0bf420f36b070143c32b15cc7287341ffd3
 F src/vdbemem.c 5e6effb96dd53d233361cbfaa3f0a43b9af689e9
-F src/vdbesort.c 5e38e7e1f5f6900b1b8bea49decd23c69221aed9
+F src/vdbesort.c e6d6f0c2aa003f7cbdea8c9be47a15a8e854fb97
 F src/vdbetrace.c 5d0dc3d5fd54878cc8d6d28eb41deb8d5885b114
 F src/vtab.c 901791a47318c0562cd0c676a2c6ff1bc530e582
 F src/wal.c 3154756177d6219e233d84291d5b05f4e06ff5e9
@@ -961,7 +961,7 @@ F tool/symbols.sh caaf6ccc7300fd43353318b44524853e222557d5
 F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings.sh b7fdb2cc525f5ef4fa43c80e771636dd3690f9d2
-P 68e26c4487696d194ee85370380e4b0e56d206ee
-R f6e37dce79fea0b74c498631cfb45ff1
-U dan
-Z cc6b7d2a23c219696518afb4690c5277
+P 666c2c3cff51dac2ba5689b75705d99c3705673b
+R cfceda33d1a4c239172824f11326438a
+U drh
+Z 0da609a19e6bdcd2176629a62a8129db
index af74b9885ac181ea009f0927a2117c9494710c49..f0c89b9c6dcdb463be80d715c6fe57ad814d2fdb 100644 (file)
@@ -1 +1 @@
-666c2c3cff51dac2ba5689b75705d99c3705673b
\ No newline at end of file
+99e34bdce4ccca15b79159b03b96787e7a7ff85b
\ No newline at end of file
index 9e169c3e3655ba2baee7a0e2bcb3061f89697975..6681aad52db04e0e753e045b7432c4b916cf5449 100644 (file)
@@ -490,44 +490,36 @@ static int vdbeSorterMerge(
   int rc = SQLITE_OK;
   SorterRecord *pFinal = 0;
   SorterRecord **pp = &pFinal;
-  int bKey2InSpace = 0;           /* True if pCsr->aSpace contains key2 */
+  void *pVal2 = p2 ? p2->pVal : 0;
 
-  while( p1 || p2 ){
-    if( p1==0 ){
-      *pp = p2;
-      p2 = 0;
-    }else if( p2==0 ){
+  while( p1 && p2 ){
+    int res;
+    rc = vdbeSorterCompare(pCsr, 0, p1->pVal, p1->nVal, pVal2, p2->nVal, &res);
+    if( rc!=SQLITE_OK ){
+      *pp = 0;
+      vdbeSorterRecordFree(db, p1);
+      vdbeSorterRecordFree(db, p2);
+      vdbeSorterRecordFree(db, pFinal);
+      *ppOut = 0;
+      return rc;
+    }
+    if( res<=0 ){
       *pp = p1;
-      p1 = 0;
+      pp = &p1->pNext;
+      p1 = p1->pNext;
+      pVal2 = 0;
     }else{
-      int res;
-      rc = vdbeSorterCompare(pCsr, 0, 
-          p1->pVal, p1->nVal, (bKey2InSpace ? 0 : p2->pVal), p2->nVal, &res
-      );
-      if( rc!=SQLITE_OK ){
-        vdbeSorterRecordFree(db, p1);
-        vdbeSorterRecordFree(db, p2);
-        vdbeSorterRecordFree(db, pFinal);
-        pFinal = 0;
-        break;
-      }
-      if( res<=0 ){
-        *pp = p1;
-        pp = &p1->pNext;
-        p1 = p1->pNext;
-        bKey2InSpace = 1;
-      }else{
-        *pp = p2;
-        pp = &p2->pNext;
-        p2 = p2->pNext;
-        bKey2InSpace = 0;
-      }
-      *pp = 0;
+      *pp = p2;
+       pp = &p2->pNext;
+      p2 = p2->pNext;
+      if( p2==0 ) break;
+      pVal2 = p2->pVal;
     }
   }
+  *pp = p1 ? p1 : p2;
 
   *ppOut = pFinal;
-  return rc;
+  return SQLITE_OK;
 }
 
 /*