aboutsummaryrefslogtreecommitdiff
path: root/ext/fts3/fts3_snippet.c
diff options
context:
space:
mode:
authordan <dan@noemail.net>2011-06-08 18:39:07 +0000
committerdan <dan@noemail.net>2011-06-08 18:39:07 +0000
commitabf2545ed9c058bd62502b858adbdddcdabef446 (patch)
treecca6f6253a6a794341f09a5b77bfedc978a8ca26 /ext/fts3/fts3_snippet.c
parent3eabcf5f4686047b82cf31c11c90f462cd7c346f (diff)
downloadsqlite-abf2545ed9c058bd62502b858adbdddcdabef446.tar.gz
sqlite-abf2545ed9c058bd62502b858adbdddcdabef446.zip
Fix various issues to do with deferred tokens, NEAR expressions and matchinfo().
FossilOrigin-Name: 3972a787df5ec253b99b148385655e7b68d851fa
Diffstat (limited to 'ext/fts3/fts3_snippet.c')
-rw-r--r--ext/fts3/fts3_snippet.c49
1 files changed, 3 insertions, 46 deletions
diff --git a/ext/fts3/fts3_snippet.c b/ext/fts3/fts3_snippet.c
index 45e3c32f0..5ae3a16fc 100644
--- a/ext/fts3/fts3_snippet.c
+++ b/ext/fts3/fts3_snippet.c
@@ -720,26 +720,6 @@ static int fts3ColumnlistCount(char **ppCollist){
return nEntry;
}
-static void fts3LoadColumnlistCounts(char **pp, u32 *aOut, int isGlobal){
- char *pCsr = *pp;
- while( *pCsr ){
- int nHit;
- sqlite3_int64 iCol = 0;
- if( *pCsr==0x01 ){
- pCsr++;
- pCsr += sqlite3Fts3GetVarint(pCsr, &iCol);
- }
- nHit = fts3ColumnlistCount(&pCsr);
- assert( nHit>0 );
- if( isGlobal ){
- aOut[iCol*3+1]++;
- }
- aOut[iCol*3] += nHit;
- }
- pCsr++;
- *pp = pCsr;
-}
-
/*
** fts3ExprIterate() callback used to collect the "global" matchinfo stats
** for a single query.
@@ -773,32 +753,9 @@ static int fts3ExprGlobalHitsCb(
void *pCtx /* Pointer to MatchInfo structure */
){
MatchInfo *p = (MatchInfo *)pCtx;
- u32 *aOut = &p->aMatchinfo[3*iPhrase*p->nCol];
-
- if( pExpr->bDeferred ){
- int iCol; /* Column index */
- for(iCol=0; iCol<p->nCol; iCol++){
- aOut[iCol*3 + 1] = (u32)p->nDoc;
- aOut[iCol*3 + 2] = (u32)p->nDoc;
- }
- }else{
- char *pIter;
- char *pEnd;
- int n;
- int rc = sqlite3Fts3EvalPhraseDoclist(
- p->pCursor, pExpr, (const char **)&pIter, &n
- );
- if( rc!=SQLITE_OK ) return rc;
- pEnd = &pIter[n];
-
- /* Fill in the global hit count matrix row for this phrase. */
- while( pIter<pEnd ){
- while( *pIter++ & 0x80 ); /* Skip past docid. */
- fts3LoadColumnlistCounts(&pIter, &aOut[1], 1);
- }
- }
-
- return SQLITE_OK;
+ return sqlite3Fts3EvalPhraseStats(
+ p->pCursor, pExpr, &p->aMatchinfo[3*iPhrase*p->nCol]
+ );
}
/*