]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Another tweak to improve performance of fts5 prefix queries.
authordan <dan@noemail.net>
Mon, 19 Oct 2015 17:43:24 +0000 (17:43 +0000)
committerdan <dan@noemail.net>
Mon, 19 Oct 2015 17:43:24 +0000 (17:43 +0000)
FossilOrigin-Name: 69be427c864dc3de804ca3c5f1c6addcd33cd188

ext/fts5/fts5_index.c
manifest
manifest.uuid

index e006c9b36d1c67643a445d6eecf802ef368584ae..cf4f3d8bb3351cc70c66a5c079ae3160386a2c06 100644 (file)
@@ -4111,15 +4111,6 @@ static int fts5AppendPoslist(
       int iSv2;
       int iData;
 
-      /* Append iDelta */
-      iSv1 = pBuf->n;
-      fts5BufferSafeAppendVarint(pBuf, iDelta);
-
-      /* WRITEPOSLISTSIZE */
-      iSv2 = pBuf->n;
-      fts5BufferSafeAppendVarint(pBuf, pSeg->nPos*2);
-      iData = pBuf->n;
-
       if( pSeg->iLeafOffset+pSeg->nPos<=pSeg->pLeaf->szLeaf 
        && (pColset==0 || pColset->nCol==1)
       ){
@@ -4127,24 +4118,37 @@ static int fts5AppendPoslist(
         int nPos;
         if( pColset ){
           nPos = fts5IndexExtractCol(&pPos, pSeg->nPos, pColset->aiCol[0]);
+          if( nPos==0 ) return 1;
         }else{
           nPos = pSeg->nPos;
         }
+        assert( nPos>0 );
+        fts5BufferSafeAppendVarint(pBuf, iDelta);
+        fts5BufferSafeAppendVarint(pBuf, nPos*2);
         fts5BufferSafeAppendBlob(pBuf, pPos, nPos);
       }else{
+        /* Append iDelta */
+        iSv1 = pBuf->n;
+        fts5BufferSafeAppendVarint(pBuf, iDelta);
+
+        /* WRITEPOSLISTSIZE */
+        iSv2 = pBuf->n;
+        fts5BufferSafeAppendVarint(pBuf, pSeg->nPos*2);
+        iData = pBuf->n;
+
         fts5SegiterPoslist(p, pSeg, pColset, pBuf);
-      }
 
-      if( pColset ){
-        int nActual = pBuf->n - iData;
-        if( nActual!=pSeg->nPos ){
-          if( nActual==0 ){
-            pBuf->n = iSv1;
-            return 1;
-          }else{
-            int nReq = sqlite3Fts5GetVarintLen((u32)(nActual*2));
-            while( iSv2<(iData-nReq) ){ pBuf->p[iSv2++] = 0x80; }
-            sqlite3Fts5PutVarint(&pBuf->p[iSv2], nActual*2);
+        if( pColset ){
+          int nActual = pBuf->n - iData;
+          if( nActual!=pSeg->nPos ){
+            if( nActual==0 ){
+              pBuf->n = iSv1;
+              return 1;
+            }else{
+              int nReq = sqlite3Fts5GetVarintLen((u32)(nActual*2));
+              while( iSv2<(iData-nReq) ){ pBuf->p[iSv2++] = 0x80; }
+              sqlite3Fts5PutVarint(&pBuf->p[iSv2], nActual*2);
+            }
           }
         }
       }
index 2671464cd01aa20d9173948323ce555e15cd9af0..84b919c29883a4aabad6ade610d62a8642df6c70 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sa\sproblem\sin\sthe\sfts5txt2db.tcl\sscript\scausing\sit\sto\sfail\swhen\screating\stables\swith\smore\sthan\s8\scolumns.
-D 2015-10-19T15:59:08.318
+C Another\stweak\sto\simprove\sperformance\sof\sfts5\sprefix\squeries.
+D 2015-10-19T17:43:24.360
 F Makefile.in 2ea961bc09e441874eb3d1bf7398e04feb24f3ee
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 4eb750e0fdf52050a06d881e1b060f4bb116ed7e
@@ -109,7 +109,7 @@ F ext/fts5/fts5_buffer.c 9a3aa73a4e7b26b1c805b9c92c1344ba3d19d2a8
 F ext/fts5/fts5_config.c 88a77f5d5e4dfbb2355b8f6cc9969b7f02d94685
 F ext/fts5/fts5_expr.c 28b15c9ae296204bc0a2e5cf7a667d840a9d2900
 F ext/fts5/fts5_hash.c a9d4c1efebc2a91d26ad7ebdfcbf2678ceac405f
-F ext/fts5/fts5_index.c 632fdcb1971f6c9d7d6b2bd31f6c41e4189162bb
+F ext/fts5/fts5_index.c 8468e41855bba133107760badda415bc7f86c12c
 F ext/fts5/fts5_main.c 520a29136ba07448331f73bdc36d0ffa1e9dcfef
 F ext/fts5/fts5_storage.c 9b30115742b758706de70595a8d1d084e940c978
 F ext/fts5/fts5_tcl.c 3bf445e66de32137d4693694ff7b1fd6074e32bd
@@ -1391,7 +1391,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P cf618334a8a05a067e844236e4d461b2e5706da6
-R 30a0ced4e8757449657c5453f9890b65
+P 68ee426a6432ac63655909ff70cb22bde33cf28c
+R b1e8d85157aaa205dae46563b3080619
 U dan
-Z 120618455a1082447e4825d9f82b93ec
+Z e2816fa336eec46724399248fb4f473f
index 0d152ea1ff79be1e7240eca16c5d8151e81d578d..833def65e8c18be7499bd36ffc8ead111d3103dc 100644 (file)
@@ -1 +1 @@
-68ee426a6432ac63655909ff70cb22bde33cf28c
\ No newline at end of file
+69be427c864dc3de804ca3c5f1c6addcd33cd188
\ No newline at end of file