]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Merge all fixes and enhancements from trunk.
authordrh <drh@noemail.net>
Tue, 25 Mar 2014 13:17:41 +0000 (13:17 +0000)
committerdrh <drh@noemail.net>
Tue, 25 Mar 2014 13:17:41 +0000 (13:17 +0000)
FossilOrigin-Name: b415dfb6cb0df0c69992ca2bb700c15664f158e6

1  2 
manifest
manifest.uuid
src/sqliteInt.h
src/vdbesort.c

diff --cc manifest
index 2de90048c0178d21edcb6fe82e88163170244b61,e6372d66996000f484675998e20591ef91174682..7ccdd5b9a5fb457e92a80835d783f302728d8c32
+++ b/manifest
@@@ -1,12 -1,12 +1,12 @@@
- C Add\san\sexperimental\smulti-threaded\scapability\sto\svdbesorter.c.
- D 2014-03-17T15:43:05.543
 -C Detect\swhen\sa\sVdbeCursor\sis\sstill\spointing\sat\sa\svalid\srow\sbut\sthat\srow\shas\nmoved,\sand\sinvalidated\sthe\sreturn\sfrom\sprior\ssqlite3BtreeDataFetch()\sor\nsqlite3BtreeKeyFetch()\scalls.
 -D 2014-03-25T11:00:21.320
++C Merge\sall\sfixes\sand\senhancements\sfrom\strunk.
++D 2014-03-25T13:17:41.050
  F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 -F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
 +F Makefile.in ad0921c4b2780d01868cf69b419a4f102308d125
  F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
 -F Makefile.msc fdacba6fb574868c71fde6db6b77789a383a4c19
 +F Makefile.msc 153eb9b9725bc7b8e4dbe963219298e0c4a644b0
  F Makefile.vxworks db21ed42a01d5740e656b16f92cb5d8d5e5dd315
  F README.md 64f270c43c38c46de749e419c22f0ae2f4499fe8
- F VERSION c3b0d47c3c5cf25c5bd4ff9e6f3af2f9d7934ea6
+ F VERSION 9f823c026c6a32fc5f84d212a8aae0a221dba45c
  F aclocal.m4 a5c22d164aff7ed549d53a90fa56d56955281f50
  F addopcodes.awk 9eb448a552d5c0185cf62c463f9c173cedae3811
  F art/sqlite370.eps aa97a671332b432a54e1d74ff5e8775be34200c2
@@@ -203,11 -203,11 +203,11 @@@ F src/notify.c 976dd0f6171d4588e89e874f
  F src/os.c 1b147e4cf7cc39e618115c14a086aed44bc91ace
  F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
  F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
- F src/os_unix.c 18f7f95dc6bcb9cf4d4a238d8e2de96611bc2ae5
+ F src/os_unix.c ae4b5240af4619d711301d7992396e182585269f
 -F src/os_win.c e71678ac927d0a0fb11d993db20a9748eabf808e
 +F src/os_win.c 8245fe9184300e641d02e29a8ca95cefe0cb0fd0
  F src/pager.c 97a8908bf4e6e7c3adea09d3597cfa48ae33ab4e
  F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
- F src/parse.y 2613ca5d609c2f3d71dd297351f010bcec16e1e0
+ F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0
  F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2
  F src/pcache.h a5e4f5d9f5d592051d91212c5949517971ae6222
  F src/pcache1.c 102e6f5a2fbc646154463eb856d1fd716867b64c
@@@ -222,7 -222,7 +222,7 @@@ F src/shell.c cee9f46f2688a261601b1fd3d
  F src/sqlite.h.in a2ef671f92747a5a1c8a47bad5c585a8dd9eca80
  F src/sqlite3.rc 11094cc6a157a028b301a9f06b3d03089ea37c3e
  F src/sqlite3ext.h 886f5a34de171002ad46fae8c36a7d8051c190fc
- F src/sqliteInt.h 5b4df32250dd7bd94569ef36d2a667c1e91247d6
 -F src/sqliteInt.h afbf39e96736ceb85e1d896b281ba2406dd70aa0
++F src/sqliteInt.h fb667a3d602d405be6abf0fb21246aac7bb23e76
  F src/sqliteLimit.h 164b0e6749d31e0daa1a4589a169d31c0dec7b3d
  F src/status.c 7ac05a5c7017d0b9f0b4bcd701228b784f987158
  F src/table.c 2cd62736f845d82200acfa1287e33feb3c15d62e
@@@ -279,14 -278,14 +279,14 @@@ F src/update.c 5b3e74a03b3811e586b4f2b4
  F src/utf.c 6dc9ec9f1b3db43ae8ba0365377f11df1ee4c01c
  F src/util.c c46c90459ef9bdc0c6c73803cf4c55425b4771cf
  F src/vacuum.c 3728d74919d4fb1356f9e9a13e27773db60b7179
- F src/vdbe.c 5f0fffa9bf49a90c05dc3d46d8217603fd0ee00e
+ F src/vdbe.c 74c7386e83eee56f921a17bb4a0396c9551f5bc7
  F src/vdbe.h fb2c48c198300a7c632f09fc940011d2ad2fc2ae
- F src/vdbeInt.h e54fc4f289fce48e81b3371128446033d097733b
+ F src/vdbeInt.h 2b9a6849166d0014c843ae3fd83a062be4efa325
  F src/vdbeapi.c 0ed6053f947edd0b30f64ce5aeb811872a3450a4
- F src/vdbeaux.c e45e3f9daf38c5be3fd39e9aacc1c9066af57a06
+ F src/vdbeaux.c 68dbdc77cdc008eeabc088b8b8a60aa743ba8d2a
  F src/vdbeblob.c 15377abfb59251bccedd5a9c7d014a895f0c04aa
  F src/vdbemem.c 6fc77594c60f6155404f3f8d71bf36d1fdeb4447
- F src/vdbesort.c 1d973fcd0e00c77836e9d505e7c45df02601ffc2
 -F src/vdbesort.c 4abb7c0f8f19b7d7d82f4558d5da1a30fdf9ea38
++F src/vdbesort.c 0fbaf5b3ec3e779d81c4db4eb2f0ae5f44fbb02c
  F src/vdbetrace.c 6f52bc0c51e144b7efdcfb2a8f771167a8816767
  F src/vtab.c 21b932841e51ebd7d075e2d0ad1415dce8d2d5fd
  F src/wal.c 76e7fc6de229bea8b30bb2539110f03a494dc3a8
@@@ -1157,7 -1159,7 +1160,7 @@@ F tool/vdbe_profile.tcl 67746953071a9f8
  F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
  F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
  F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
- P d17231b63d48c1f9c4dee109c90cec112e2f0fd4
- R 3c79acd4eecb6926efd889b756a27898
- U dan
- Z 226b72b7faaae8e6d7b6586f32d5c5a0
 -P 4d7551ce464c8038147e81667368924f2a7485a6
 -R 8613a90c52863cb0b93f254b2d121d4b
++P ff0b5c851ba7d04d1836d7c6a3222713e7d8d357 e6798871ce94961135762669af418cd78540c121
++R 5887d7b59f581a1221f99e7d95aac2b8
+ U drh
 -Z f61d5d3cf5132dbd8d9ed764bc0739f9
++Z 5e51466328d6bc63d3b26ee7aec599ce
diff --cc manifest.uuid
index bf397f3d56acd86231fb817deb4c281360098bbf,b106017e8399f86555f0a005c02b38b541a84854..628a8f1b85bb84d064a3809f08d71796ddc0ef38
@@@ -1,1 -1,1 +1,1 @@@
- ff0b5c851ba7d04d1836d7c6a3222713e7d8d357
 -e6798871ce94961135762669af418cd78540c121
++b415dfb6cb0df0c69992ca2bb700c15664f158e6
diff --cc src/sqliteInt.h
Simple merge
diff --cc src/vdbesort.c
index e84a33fccc215ff816407431f409ebb6fab1367d,d1b726b727a0711b1577f3a49e0f0506ed89916d..3c8e91d9871b18ae7b04fdeeecbbbc534690d708
@@@ -592,88 -505,40 +592,107 @@@ static void vdbeSorterRecordFree(sqlite
  }
  
  /*
 -** Reset a sorting cursor back to its original empty state.
 +** Free all resources owned by the object indicated by argument pThread. All 
 +** fields of *pThread are zeroed before returning.
  */
 -void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSorter){
 -  if( pSorter->aIter ){
 -    int i;
 -    for(i=0; i<pSorter->nTree; i++){
 -      vdbeSorterIterZero(db, &pSorter->aIter[i]);
 +static void vdbeSorterThreadCleanup(sqlite3 *db, SorterThread *pThread){
 +  sqlite3DbFree(db, pThread->pUnpacked);
++  pThread->pUnpacked = 0;
 +  vdbeSorterRecordFree(0, pThread->pList);
++  pThread->pList = 0;
 +  if( pThread->pTemp1 ){
 +    sqlite3OsCloseFree(pThread->pTemp1);
++    pThread->pTemp1 = 0;
 +  }
-   memset(pThread, 0, sizeof(SorterThread));
 +}
 +
 +/*
 +** Join all threads.  
 +*/
 +static int vdbeSorterJoinAll(VdbeSorter *pSorter, int rcin){
 +  int rc = rcin;
 +  int i;
 +  for(i=0; i<SQLITE_MAX_SORTER_THREAD; i++){
 +    SorterThread *pThread = &pSorter->aThread[i];
 +    if( pThread->pThread ){
 +      void *pRet;
 +      int rc2 = sqlite3ThreadJoin(pThread->pThread, &pRet);
 +      pThread->pThread = 0;
 +      pThread->bDone = 0;
 +      if( rc==SQLITE_OK ) rc = rc2;
 +      if( rc==SQLITE_OK ) rc = SQLITE_PTR_TO_INT(pRet);
 +    }
 +  }
 +  return rc;
 +}
 +
 +/*
 +** Allocate a new SorterMerger object with space for nIter iterators.
 +*/
 +static SorterMerger *vdbeSorterMergerNew(int nIter){
 +  int N = 2;                      /* Smallest power of two >= nIter */
 +  int nByte;                      /* Total bytes of space to allocate */
 +  SorterMerger *pNew;             /* Pointer to allocated object to return */
 +
 +  assert( nIter<=SORTER_MAX_MERGE_COUNT );
 +  while( N<nIter ) N += N;
 +  nByte = sizeof(SorterMerger) + N * (sizeof(int) + sizeof(VdbeSorterIter));
 +
 +  pNew = (SorterMerger*)sqlite3MallocZero(nByte);
 +  if( pNew ){
 +    pNew->nTree = N;
 +    pNew->aIter = (VdbeSorterIter*)&pNew[1];
 +    pNew->aTree = (int*)&pNew->aIter[N];
 +  }
 +  return pNew;
 +}
 +
 +/*
- ** Free the SorterMerger object passed as the only argument.
++** Reset a merger
 +*/
- static void vdbeSorterMergerFree(SorterMerger *pMerger){
++static void vdbeSorterMergerReset(SorterMerger *pMerger){
++  int i;
 +  if( pMerger ){
-     int i;
 +    for(i=0; i<pMerger->nTree; i++){
 +      vdbeSorterIterZero(&pMerger->aIter[i]);
      }
-     sqlite3_free(pMerger);
 -    sqlite3DbFree(db, pSorter->aIter);
 -    pSorter->aIter = 0;
    }
 -  if( pSorter->pTemp1 ){
 -    sqlite3OsCloseFree(pSorter->pTemp1);
 -    pSorter->pTemp1 = 0;
 +}
 +
++
++/*
++** Free the SorterMerger object passed as the only argument.
++*/
++static void vdbeSorterMergerFree(SorterMerger *pMerger){
++  vdbeSorterMergerReset(pMerger);
++  sqlite3_free(pMerger);
++}
++
++/*
++** Reset a sorting cursor back to its original empty state.
++*/
++void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSorter){
++  int i;
++  vdbeSorterJoinAll(pSorter, SQLITE_OK);
++  for(i=0; i<SQLITE_MAX_SORTER_THREAD; i++){
++    SorterThread *pThread = &pSorter->aThread[i];
++    vdbeSorterThreadCleanup(db, pThread);
+   }
 -  vdbeSorterRecordFree(db, pSorter->pRecord);
++  vdbeSorterRecordFree(0, pSorter->pRecord);
++  vdbeSorterMergerReset(pSorter->pMerger);
+   pSorter->pRecord = 0;
 -  pSorter->iWriteOff = 0;
 -  pSorter->iReadOff = 0;
+   pSorter->nInMemory = 0;
 -  pSorter->nTree = 0;
 -  pSorter->nPMA = 0;
 -  pSorter->aTree = 0;
++  pSorter->bUsePMA = 0;
+ }
 -
  /*
  ** Free any cursor components allocated by sqlite3VdbeSorterXXX routines.
  */
  void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){
    VdbeSorter *pSorter = pCsr->pSorter;
    if( pSorter ){
-     int i;
-     vdbeSorterJoinAll(pSorter, SQLITE_OK);
-     for(i=0; i<SQLITE_MAX_SORTER_THREAD; i++){
-       SorterThread *pThread = &pSorter->aThread[i];
-       vdbeSorterThreadCleanup(db, pThread);
-     }
-     vdbeSorterRecordFree(0, pSorter->pRecord);
+     sqlite3VdbeSorterReset(db, pSorter);
 -    sqlite3DbFree(db, pSorter->pUnpacked);
 +    vdbeSorterMergerFree(pSorter->pMerger);
      sqlite3DbFree(db, pSorter);
      pCsr->pSorter = 0;
    }