]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Combine two malloc calls in vdbesort.c.
authordan <dan@noemail.net>
Fri, 2 Sep 2011 18:03:16 +0000 (18:03 +0000)
committerdan <dan@noemail.net>
Fri, 2 Sep 2011 18:03:16 +0000 (18:03 +0000)
FossilOrigin-Name: cf48ad8353e28339d00f448bb729e10a7f2aad72

manifest
manifest.uuid
src/btree.c
src/vdbesort.c

index 3c9140975fe56c8f527e3bedfa1dc19226357f7f..b71aeffabea138df931ef7aa4cd2ee7c087d2b8d 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Reduce\sthe\snumber\sof\smalloc()\scalls\smade\swhen\screating\san\sindex\son\smore\sthan\s2\scolumns.
-D 2011-09-02T15:41:33.781
+C Combine\stwo\smalloc\scalls\sin\svdbesort.c.
+D 2011-09-02T18:03:16.975
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in d314143fa6be24828021d3f583ad37d9afdce505
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -124,7 +124,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
 F src/backup.c 28a4fe55327ff708bfaf9d4326d02686f7a553c3
 F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef
 F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
-F src/btree.c bc2099e7d3c22c52b2c54349b9c07c04f2a810d0
+F src/btree.c dc3f244447fd5aade08f66d475e2a6316bbef4e7
 F src/btree.h f5d775cd6cfc7ac32a2535b70e8d2af48ef5f2ce
 F src/btreeInt.h 67978c014fa4f7cc874032dd3aacadd8db656bc3
 F src/build.c dc367138cb3625e6d42b389e05d7267aece5753c
@@ -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 a49d44498cc19af9bdbdc8e9fa882dd26cc17066
+F src/vdbesort.c b56437b8b3a0a17a2b110d37633dc9217c72fd60
 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 71075673c625f243969c3f34c73f28f378924007
-R 16433222f8a97f40a1aa6bc60c6c3db0
+P 065b0c9858da0ebb41722f3c56bdaf62f28b2f2c
+R 06bb7ef7ee2f3a8f904497ea31ee4edb
 U dan
-Z 8c008bdf93f87673bd214d386e7f6cf5
+Z ad89820409358feeee63c15f85c9298f
index c870d49dd3c15dc979baddeaa7bbf9ee230dc942..4ac5f7ba986ed05ca67968f87339d0b1d02581db 100644 (file)
@@ -1 +1 @@
-065b0c9858da0ebb41722f3c56bdaf62f28b2f2c
\ No newline at end of file
+cf48ad8353e28339d00f448bb729e10a7f2aad72
\ No newline at end of file
index b335579bd08c81c5dea353106c9ff7facc8f7e6d..f20afb6bf3f6fd66211201971eb86115eaf033e2 100644 (file)
@@ -7288,13 +7288,7 @@ int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
   BtShared *pBt = p->pBt;
   int rc;
   sqlite3BtreeEnter(p);
-  if( (pBt->openFlags&BTREE_SINGLE) ){
-    pBt->nPage = 0;
-    sqlite3PagerTruncateImage(pBt->pPager, 1);
-    rc = newDatabase(pBt);
-  }else{
-    rc = btreeDropTable(p, iTable, piMoved);
-  }
+  rc = btreeDropTable(p, iTable, piMoved);
   sqlite3BtreeLeave(p);
   return rc;
 }
index 63c6f543b8986504dca99634a2f4017fa44ab6f9..74399edf5d89d6005eca6616fd10360a190f50d6 100644 (file)
@@ -93,7 +93,7 @@ typedef struct SorterRecord SorterRecord;
 ** being merged (rounded up to the next power of 2).
 */
 struct VdbeSorter {
-  int nInMemory;                  /* Current size of b-tree contents as PMA */
+  int nInMemory;                  /* Current size of pRecord list as PMA */
   int nTree;                      /* Used size of aTree/aIter (power of 2) */
   VdbeSorterIter *aIter;          /* Array of iterators to merge */
   int *aTree;                     /* Current state of incremental merge */
@@ -422,7 +422,6 @@ static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){
   SorterRecord *pNext;
   for(p=pRecord; p; p=pNext){
     pNext = p->pNext;
-    sqlite3DbFree(db, p->pVal);
     sqlite3DbFree(db, p);
   }
 }
@@ -630,7 +629,6 @@ static int vdbeSorterListToPMA(sqlite3 *db, VdbeCursor *pCsr){
         iOff += p->nVal;
       }
 
-      sqlite3DbFree(db, p->pVal);
       sqlite3DbFree(db, p);
     }
 
@@ -657,28 +655,21 @@ int sqlite3VdbeSorterWrite(
   Mem *pVal                       /* Memory cell containing record */
 ){
   VdbeSorter *pSorter = pCsr->pSorter;
-  int rc;
-  SorterRecord *pNew;
+  int rc = SQLITE_OK;             /* Return Code */
+  SorterRecord *pNew;             /* New list element */
 
   assert( pSorter );
   pSorter->nInMemory += sqlite3VarintLen(pVal->n) + pVal->n;
 
-  pNew = (SorterRecord *)sqlite3DbMallocZero(db, sizeof(SorterRecord));
+  pNew = (SorterRecord *)sqlite3DbMallocRaw(db, pVal->n + sizeof(SorterRecord));
   if( pNew==0 ){
     rc = SQLITE_NOMEM;
   }else{
-    rc = sqlite3VdbeMemMakeWriteable(pVal);
-    if( rc==SQLITE_OK ){
-      pNew->pVal = pVal->z;
-      pNew->nVal = pVal->n;
-      pVal->zMalloc = 0;
-      sqlite3VdbeMemSetNull(pVal);
-      pNew->pNext = pSorter->pRecord;
-      pSorter->pRecord = pNew;
-    }else{
-      sqlite3DbFree(db, pNew);
-      rc = SQLITE_NOMEM;
-    }
+    pNew->pVal = (void *)&pNew[1];
+    memcpy(pNew->pVal, pVal->z, pVal->n);
+    pNew->nVal = pVal->n;
+    pNew->pNext = pSorter->pRecord;
+    pSorter->pRecord = pNew;
   }
 
   /* See if the contents of the sorter should now be written out. They