From: dan Date: Mon, 19 Oct 2015 17:43:24 +0000 (+0000) Subject: Another tweak to improve performance of fts5 prefix queries. X-Git-Tag: version-3.10.0~210 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5e5b454cd818e226005ffd4ae6fabbc838e5411c;p=thirdparty%2Fsqlite.git Another tweak to improve performance of fts5 prefix queries. FossilOrigin-Name: 69be427c864dc3de804ca3c5f1c6addcd33cd188 --- diff --git a/ext/fts5/fts5_index.c b/ext/fts5/fts5_index.c index e006c9b36d..cf4f3d8bb3 100644 --- a/ext/fts5/fts5_index.c +++ b/ext/fts5/fts5_index.c @@ -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); + } } } } diff --git a/manifest b/manifest index 2671464cd0..84b919c298 100644 --- 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 diff --git a/manifest.uuid b/manifest.uuid index 0d152ea1ff..833def65e8 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -68ee426a6432ac63655909ff70cb22bde33cf28c \ No newline at end of file +69be427c864dc3de804ca3c5f1c6addcd33cd188 \ No newline at end of file