Lines Matching refs:pPhrase

170102   Fts3Phrase *pPhrase;       /* Valid if eType==FTSQUERY_PHRASE */
174163 int nToken = pExpr->pPhrase->nToken;
174166 Fts3PhraseToken *pToken = &pExpr->pPhrase->aToken[i];
174175 assert( pExpr->pPhrase->iDoclistToken==0 );
174176 pExpr->pPhrase->iDoclistToken = -1;
174296 static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
174302 assert( pPhrase->doclist.bFreeList==0 );
174304 for(iToken=0; iToken<pPhrase->nToken; iToken++){
174305 Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
174316 pPhrase->doclist.pList = 0;
174317 pPhrase->doclist.nList = 0;
174336 pPhrase->doclist.pList = 0;
174337 pPhrase->doclist.nList = 0;
174346 int nMaxUndeferred = pPhrase->iDoclistToken;
174348 pPhrase->doclist.pList = aPoslist;
174349 pPhrase->doclist.nList = nPoslist;
174350 pPhrase->doclist.iDocid = pCsr->iPrevId;
174351 pPhrase->doclist.bFreeList = 1;
174360 p2 = pPhrase->doclist.pList;
174363 p1 = pPhrase->doclist.pList;
174374 pPhrase->doclist.pList = aOut;
174376 pPhrase->doclist.bFreeList = 1;
174377 pPhrase->doclist.nList = (int)(aOut - pPhrase->doclist.pList);
174380 pPhrase->doclist.pList = 0;
174381 pPhrase->doclist.nList = 0;
174625 Fts3Phrase *pPhrase, /* Phrase to advance token of */
174632 if( pPhrase->iDoclistToken==iToken ){
174634 assert( pPhrase->aToken[iToken].pSegcsr==0 );
174635 fts3EvalDlPhraseNext(pTab, &pPhrase->doclist, pbEof);
174636 p->pList = pPhrase->doclist.pList;
174637 p->nList = pPhrase->doclist.nList;
174638 p->iDocid = pPhrase->doclist.iDocid;
174640 Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
174642 assert( pToken->pSegcsr || pPhrase->iDoclistToken>=0 );
174822 int nToken = pExpr->pPhrase->nToken;
174826 if( pExpr->pPhrase->aToken[i].pDeferred==0 ) break;
174830 *pRc = fts3EvalPhraseStart(pCsr, 1, pExpr->pPhrase);
174853 Fts3Phrase *pPhrase; /* The phrase the token belongs to */
174878 Fts3Phrase *pPhrase = pExpr->pPhrase;
174880 for(i=0; *pRc==SQLITE_OK && i<pPhrase->nToken; i++){
174882 pTC->pPhrase = pPhrase;
174885 pTC->pToken = &pPhrase->aToken[i];
174886 pTC->iCol = pPhrase->iColumn;
175075 if( ii==0 || (pTC->pPhrase->nToken>1 && ii!=nToken-1) ){
175086 pTab, pTC->pPhrase, pTC->iToken,pList,nList
175092 pTC->pPhrase->doclist.aAll, pTC->pPhrase->doclist.nAll
175164 ** Invalidate the current position list for phrase pPhrase.
175166 static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhrase){
175167 if( pPhrase->doclist.bFreeList ){
175168 sqlite3_free(pPhrase->doclist.pList);
175170 pPhrase->doclist.pList = 0;
175171 pPhrase->doclist.nList = 0;
175172 pPhrase->doclist.bFreeList = 0;
175185 ** phrase on the other side of the NEAR operator to pPhrase. For example,
175186 ** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to
175189 ** All positions in the pPhrase position list that are not sufficiently
175194 ** associated with pPhrase. And *pnToken is set to the number of tokens in
175195 ** pPhrase.
175202 Fts3Phrase *pPhrase /* The phrase object to trim the doclist of */
175204 int nParam1 = nNear + pPhrase->nToken;
175211 assert( pPhrase->doclist.pList );
175213 p2 = pOut = pPhrase->doclist.pList;
175218 nNew = (int)(pOut - pPhrase->doclist.pList) - 1;
175219 assert_fts3_nc( nNew<=pPhrase->doclist.nList && nNew>0 );
175220 if( nNew>=0 && nNew<=pPhrase->doclist.nList ){
175221 assert( pPhrase->doclist.pList[nNew]=='\0' );
175222 memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew);
175223 pPhrase->doclist.nList = nNew;
175225 *paPoslist = pPhrase->doclist.pList;
175226 *pnToken = pPhrase->nToken;
175249 ** FTs3Expr.pPhrase->doclist.nList (length of pList in bytes)
175250 ** FTs3Expr.pPhrase->doclist.pList (pointer to position list)
175319 if( pRight->pPhrase->doclist.aAll ){
175320 Fts3Doclist *pDl = &pRight->pPhrase->doclist;
175326 if( pLeft->pPhrase && pLeft->pPhrase->doclist.aAll ){
175327 Fts3Doclist *pDl = &pLeft->pPhrase->doclist;
175391 Fts3Phrase *pPhrase = pExpr->pPhrase;
175392 fts3EvalInvalidatePoslist(pPhrase);
175393 *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof);
175394 pExpr->iDocid = pPhrase->doclist.iDocid;
175407 ** (Fts3Expr->pPhrase.doclist.pList/nList) for each phrase in the expression.
175449 assert( p->pRight->pPhrase->doclist.nList>0 );
175450 nTmp += p->pRight->pPhrase->doclist.nList;
175452 nTmp += p->pPhrase->doclist.nList;
175458 char *aPoslist = p->pPhrase->doclist.pList;
175459 int nToken = p->pPhrase->nToken;
175462 Fts3Phrase *pPhrase = p->pRight->pPhrase;
175464 res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
175467 aPoslist = pExpr->pRight->pPhrase->doclist.pList;
175468 nToken = pExpr->pRight->pPhrase->nToken;
175471 Fts3Phrase *pPhrase;
175474 pPhrase = (
175475 p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase
175477 res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
175534 for(p=pExpr; p->pPhrase==0; p=p->pLeft){
175536 fts3EvalInvalidatePoslist(p->pRight->pPhrase);
175540 fts3EvalInvalidatePoslist(p->pPhrase);
175565 Fts3Phrase *pPhrase = pExpr->pPhrase;
175566 assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 );
175568 fts3EvalInvalidatePoslist(pPhrase);
175570 *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
175571 bHit = (pPhrase->doclist.pList!=0);
175578 && pExpr->pPhrase->doclist.nList>0
175689 Fts3Phrase *pPhrase = pExpr->pPhrase;
175691 if( pPhrase ){
175692 fts3EvalInvalidatePoslist(pPhrase);
175693 if( pPhrase->bIncr ){
175695 for(i=0; i<pPhrase->nToken; i++){
175696 Fts3PhraseToken *pToken = &pPhrase->aToken[i];
175702 *pRc = fts3EvalPhraseStart(pCsr, 0, pPhrase);
175704 pPhrase->doclist.pNextDocid = 0;
175705 pPhrase->doclist.iDocid = 0;
175706 pPhrase->pOrPoslist = 0;
175723 ** found in Fts3Expr.pPhrase->doclist.pList for each of the phrase
175728 Fts3Phrase *pPhrase = pExpr->pPhrase;
175729 if( pPhrase && pPhrase->doclist.pList ){
175731 char *p = pPhrase->doclist.pList;
175934 Fts3Phrase *pPhrase = pExpr->pPhrase;
175944 if( (pPhrase->iColumn<pTab->nColumn && pPhrase->iColumn!=iCol) ){
175949 pIter = pPhrase->doclist.pList;
175975 if( pPhrase->bIncr ){
175982 assert( rc!=SQLITE_OK || pPhrase->bIncr==0 );
175999 pPh = pTest->pPhrase;
176028 pIter = pPhrase->pOrPoslist;
176059 ** * the contents of pPhrase->doclist, and
176062 SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){
176063 if( pPhrase ){
176065 sqlite3_free(pPhrase->doclist.aAll);
176066 fts3EvalInvalidatePoslist(pPhrase);
176067 memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist));
176068 for(i=0; i<pPhrase->nToken; i++){
176069 fts3SegReaderCursorFree(pPhrase->aToken[i].pSegcsr);
176070 pPhrase->aToken[i].pSegcsr = 0;
176870 pRet->pPhrase = (Fts3Phrase *)&pRet[1];
176871 pRet->pPhrase->nToken = 1;
176872 pRet->pPhrase->iColumn = iCol;
176873 pRet->pPhrase->aToken[0].n = nToken;
176874 pRet->pPhrase->aToken[0].z = (char *)&pRet->pPhrase[1];
176875 memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken);
176878 pRet->pPhrase->aToken[0].isPrefix = 1;
176889 pRet->pPhrase->aToken[0].bFirst = 1;
177012 p->pPhrase = (Fts3Phrase *)&p[1];
177013 p->pPhrase->iColumn = pParse->iDefaultCol;
177014 p->pPhrase->nToken = nToken;
177016 zBuf = (char *)&p->pPhrase->aToken[nToken];
177024 for(jj=0; jj<p->pPhrase->nToken; jj++){
177025 p->pPhrase->aToken[jj].z = zBuf;
177026 zBuf += p->pPhrase->aToken[jj].n;
177728 assert( p->eType==FTSQUERY_PHRASE || p->pPhrase==0 );
177729 sqlite3Fts3EvalPhraseCleanup(p->pPhrase);
177787 Fts3Phrase *pPhrase = pExpr->pPhrase;
177790 "%zPHRASE %d 0", zBuf, pPhrase->iColumn);
177791 for(i=0; zBuf && i<pPhrase->nToken; i++){
177793 pPhrase->aToken[i].n, pPhrase->aToken[i].z,
177794 (pPhrase->aToken[i].isPrefix?"+":"")
186320 Fts3Phrase *pPhrase = pExpr->pPhrase;
186326 p->nToken += pPhrase->nToken;
186407 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
186408 fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, pIter->nSnippet);
186415 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
186416 if( pPhrase->pHead && pPhrase->iHead<iEnd ){
186417 iEnd = pPhrase->iHead;
186426 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
186427 fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, iEnd+1);
186428 fts3SnippetAdvance(&pPhrase->pTail, &pPhrase->iTail, iStart);
186454 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
186455 if( pPhrase->pTail ){
186456 char *pCsr = pPhrase->pTail;
186457 int iCsr = pPhrase->iTail;
186472 for(j=0; j<pPhrase->nToken; j++){
186495 SnippetPhrase *pPhrase = &p->aPhrase[iPhrase];
186499 pPhrase->nToken = pExpr->pPhrase->nToken;
186504 pPhrase->pList = pCsr;
186509 pPhrase->pHead = pCsr;
186510 pPhrase->pTail = pCsr;
186511 pPhrase->iHead = iFirst;
186512 pPhrase->iTail = iFirst;
186516 pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0
186893 Fts3Phrase *pPhrase = pExpr->pPhrase;
186894 char *pIter = pPhrase->doclist.pList;
186906 if( (pPhrase->iColumn>=pTab->nColumn || pPhrase->iColumn==iCol) ){
187180 nToken -= pIter->pExpr->pPhrase->nToken;
187592 nTerm = pExpr->pPhrase->nToken;
212534 Fts5ExprPhrase *pPhrase,
216720 ** All individual term iterators in pPhrase are guaranteed to be valid and
216723 ** the pPhrase->poslist buffer accordingly. Output parameter *pbMatch
216731 Fts5ExprNode *pNode, /* Node pPhrase belongs to */
216732 Fts5ExprPhrase *pPhrase, /* Phrase object to initialize */
216740 int bFirst = pPhrase->aTerm[0].bFirst;
216742 fts5BufferZero(&pPhrase->poslist);
216746 if( pPhrase->nTerm>ArraySize(aStatic) ){
216747 sqlite3_int64 nByte = sizeof(Fts5PoslistReader) * pPhrase->nTerm;
216751 memset(aIter, 0, sizeof(Fts5PoslistReader) * pPhrase->nTerm);
216754 for(i=0; i<pPhrase->nTerm; i++){
216755 Fts5ExprTerm *pTerm = &pPhrase->aTerm[i];
216781 for(i=0; i<pPhrase->nTerm; i++){
216796 rc = sqlite3Fts5PoslistWriterAppend(&pPhrase->poslist, &writer, iPos);
216800 for(i=0; i<pPhrase->nTerm; i++){
216806 *pbMatch = (pPhrase->poslist.n>0);
216807 for(i=0; i<pPhrase->nTerm; i++){
217033 Fts5ExprPhrase *pPhrase = pNear->apPhrase[0];
217034 pPhrase->poslist.n = 0;
217035 for(pTerm=&pPhrase->aTerm[0]; pTerm; pTerm=pTerm->pSynonym){
217039 pPhrase->poslist.n = 1;
217043 return pPhrase->poslist.n;
217048 ** Populate the pPhrase->poslist buffers at the same time. If any
217051 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
217052 if( pPhrase->nTerm>1 || pPhrase->aTerm[0].pSynonym
217053 || pNear->pColset || pPhrase->aTerm[0].bFirst
217056 rc = fts5ExprPhraseIsMatch(pNode, pPhrase, &bMatch);
217059 Fts5IndexIter *pIter = pPhrase->aTerm[0].pIter;
217060 fts5BufferSet(&rc, &pPhrase->poslist, pIter->nData, pIter->pData);
217091 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
217092 if( pPhrase->nTerm==0 ){
217097 for(j=0; j<pPhrase->nTerm; j++){
217098 Fts5ExprTerm *pTerm = &pPhrase->aTerm[j];
217173 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
217174 pPhrase->poslist.n = 0;
217220 Fts5Expr *pExpr, /* Expression pPhrase belongs to */
217251 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
217252 for(j=0; j<pPhrase->nTerm; j++){
217253 Fts5ExprTerm *pTerm = &pPhrase->aTerm[j];
217264 Fts5IndexIter *pIter = pPhrase->aTerm[j].pIter;
217290 Fts5Expr *pExpr, /* Expression pPhrase belongs to */
217363 Fts5ExprPhrase *pPhrase = pNode->pNear->apPhrase[0];
217364 Fts5IndexIter *pIter = pPhrase->aTerm[0].pIter;
217367 assert( pNode->pNear->nPhrase==1 && pPhrase->nTerm==1 );
217368 assert( pPhrase->aTerm[0].pSynonym==0 );
217370 pPhrase->poslist.n = pIter->nData;
217372 pPhrase->poslist.p = (u8*)pIter->pData;
217375 pNode->bNomatch = (pPhrase->poslist.n==0);
217458 Fts5Expr *pExpr, /* Expression pPhrase belongs to */
217525 Fts5Expr *pExpr, /* Expression pPhrase belongs to */
217739 static void fts5ExprPhraseFree(Fts5ExprPhrase *pPhrase){
217740 if( pPhrase ){
217742 for(i=0; i<pPhrase->nTerm; i++){
217745 Fts5ExprTerm *pTerm = &pPhrase->aTerm[i];
217755 if( pPhrase->poslist.nSpace>0 ) fts5BufferFree(&pPhrase->poslist);
217756 sqlite3_free(pPhrase);
217764 static void sqlite3Fts5ParseSetCaret(Fts5ExprPhrase *pPhrase){
217765 if( pPhrase && pPhrase->nTerm ){
217766 pPhrase->aTerm[0].bFirst = 1;
217772 ** and populated with pPhrase. Or, if pNear is not NULL, phrase pPhrase is
217775 ** If an OOM error occurs, both the pNear and pPhrase objects are freed and
217781 Fts5ExprPhrase *pPhrase /* Recently parsed phrase */
217787 if( pPhrase==0 ){
217816 sqlite3Fts5ParsePhraseFree(pPhrase);
217821 if( pPhrase->nTerm==0 ){
217822 fts5ExprPhraseFree(pPhrase);
217825 pPhrase = pLast;
217828 pParse->apPhrase[pParse->nPhrase-2] = pPhrase;
217833 pRet->apPhrase[pRet->nPhrase++] = pPhrase;
217840 Fts5ExprPhrase *pPhrase;
217858 Fts5ExprPhrase *pPhrase = pCtx->pPhrase;
217866 if( pPhrase && pPhrase->nTerm>0 && (tflags & FTS5_TOKEN_COLOCATED) ){
217876 pSyn->pSynonym = pPhrase->aTerm[pPhrase->nTerm-1].pSynonym;
217877 pPhrase->aTerm[pPhrase->nTerm-1].pSynonym = pSyn;
217881 if( pPhrase==0 || (pPhrase->nTerm % SZALLOC)==0 ){
217883 int nNew = SZALLOC + (pPhrase ? pPhrase->nTerm : 0);
217885 pNew = (Fts5ExprPhrase*)sqlite3_realloc64(pPhrase,
217891 if( pPhrase==0 ) memset(pNew, 0, sizeof(Fts5ExprPhrase));
217892 pCtx->pPhrase = pPhrase = pNew;
217898 pTerm = &pPhrase->aTerm[pPhrase->nTerm++];
217912 static void sqlite3Fts5ParsePhraseFree(Fts5ExprPhrase *pPhrase){
217913 fts5ExprPhraseFree(pPhrase);
217966 sCtx.pPhrase = pAppend;
217979 fts5ExprPhraseFree(sCtx.pPhrase);
217980 sCtx.pPhrase = 0;
217985 fts5ExprPhraseFree(sCtx.pPhrase);
217991 if( sCtx.pPhrase==0 ){
217994 sCtx.pPhrase = sqlite3Fts5MallocZero(&pParse->rc, sizeof(Fts5ExprPhrase));
217995 }else if( sCtx.pPhrase->nTerm ){
217996 sCtx.pPhrase->aTerm[sCtx.pPhrase->nTerm-1].bPrefix = (u8)bPrefix;
217998 pParse->apPhrase[pParse->nPhrase-1] = sCtx.pPhrase;
218001 return sCtx.pPhrase;
218058 sCtx.pPhrase->aTerm[i].bPrefix = pOrig->aTerm[i].bPrefix;
218059 sCtx.pPhrase->aTerm[i].bFirst = pOrig->aTerm[i].bFirst;
218065 sCtx.pPhrase = sqlite3Fts5MallocZero(&rc, sizeof(Fts5ExprPhrase));
218073 pNew->apExprPhrase[0] = sCtx.pPhrase;
218074 pNew->pRoot->pNear->apPhrase[0] = sCtx.pPhrase;
218076 sCtx.pPhrase->pNode = pNew->pRoot;
218090 fts5ExprPhraseFree(sCtx.pPhrase);
218424 Fts5ExprPhrase *pPhrase = (Fts5ExprPhrase*)sqlite3Fts5MallocZero(
218427 if( pPhrase ){
218429 fts5ExprPhraseFree(pPhrase);
218431 pParse->apPhrase[pParse->nPhrase++] = pPhrase;
218432 pPhrase->nTerm = 1;
218433 pPhrase->aTerm[0].zTerm = sqlite3Fts5Strndup(
218437 0, 0, sqlite3Fts5ParseNearset(pParse, 0, pPhrase)
218510 Fts5ExprPhrase *pPhrase = pNear->apPhrase[0];
218512 || pPhrase->nTerm>1
218513 || (pPhrase->nTerm>0 && pPhrase->aTerm[0].bFirst)
218697 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
218700 for(iTerm=0; zRet && iTerm<pPhrase->nTerm; iTerm++){
218701 char *zTerm = pPhrase->aTerm[iTerm].zTerm;
218703 if( pPhrase->aTerm[iTerm].bPrefix ){
218770 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
218775 for(iTerm=0; iTerm<pPhrase->nTerm; iTerm++){
218776 char *zTerm = fts5ExprTermPrint(&pPhrase->aTerm[iTerm]);
219028 Fts5ExprPhrase *pPhrase = pExpr->apExprPhrase[iPhrase];
219029 Fts5ExprNode *pNode = pPhrase->pNode;
219031 *pa = pPhrase->poslist.p;
219032 nRet = pPhrase->poslist.n;
219219 Fts5ExprPhrase *pPhrase = pExpr->apExprPhrase[iPhrase];
219220 Fts5ExprNode *pNode = pPhrase->pNode;
219228 && pPhrase->poslist.n>0
219230 Fts5ExprTerm *pTerm = &pPhrase->aTerm[0];
219237 *ppCollist = pPhrase->aTerm[0].pIter->pData;
219238 *pnCollist = pPhrase->aTerm[0].pIter->nData;