Lines Matching defs:pNear
185608 Fts3Expr *pNear; /* Most senior NEAR ancestor (or pExpr) */
185616 pNear = pExpr;
185619 if( p->eType==FTSQUERY_NEAR ) pNear = p;
185628 int bEofSave = pNear->bEof;
185629 fts3EvalRestart(pCsr, pNear, &rc);
185630 while( rc==SQLITE_OK && !pNear->bEof ){
185631 fts3EvalNextRow(pCsr, pNear, &rc);
185632 if( bEofSave==0 && pNear->iDocid==iDocid ) break;
185635 if( rc==SQLITE_OK && pNear->bEof!=bEofSave ){
185640 while( rc==SQLITE_OK && !pNear->bEof ){
185641 fts3EvalNextRow(pCsr, pNear, &rc);
185647 for(p=pNear; p; p=p->pLeft){
222694 Fts5ExprNearset *pNear
226430 ** FTS5_STRING (pNear valid)
226431 ** FTS5_TERM (pNear valid)
226442 Fts5ExprNearset *pNear; /* For FTS5_STRING - cluster of phrases */
226748 sqlite3Fts5ParseNearsetFree(p->pNear);
227050 static int fts5ExprNearIsMatch(int *pRc, Fts5ExprNearset *pNear){
227053 Fts5ExprPhrase **apPhrase = pNear->apPhrase;
227059 assert( pNear->nPhrase>1 );
227063 if( pNear->nPhrase>ArraySize(aStatic) ){
227064 sqlite3_int64 nByte = sizeof(Fts5NearTrimmer) * pNear->nPhrase;
227082 for(i=0; i<pNear->nPhrase; i++){
227099 for(i=0; i<pNear->nPhrase; i++){
227101 iMin = iMax - pNear->apPhrase[i]->nTerm - pNear->nNear;
227113 for(i=0; i<pNear->nPhrase; i++){
227123 for(i=0; i<pNear->nPhrase; i++){
227207 Fts5Expr *pExpr, /* Expression that pNear is a part of */
227210 Fts5ExprNearset *pNear = pNode->pNear;
227215 Fts5ExprPhrase *pPhrase = pNear->apPhrase[0];
227232 for(i=0; rc==SQLITE_OK && i<pNear->nPhrase; i++){
227233 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
227235 || pNear->pColset || pPhrase->aTerm[0].bFirst
227247 if( i==pNear->nPhrase && (i==1 || fts5ExprNearIsMatch(pRc, pNear)) ){
227256 ** Initialize all term iterators in the pNear object. If any term is found
227268 Fts5ExprNearset *pNear = pNode->pNear;
227272 for(i=0; i<pNear->nPhrase; i++){
227273 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
227294 pNear->pColset,
227352 Fts5ExprNearset *pNear = pNode->pNear;
227354 for(i=0; i<pNear->nPhrase; i++){
227355 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
227391 ** All individual term iterators in pNear are guaranteed to be valid when
227405 Fts5ExprNearset *pNear = pNode->pNear;
227406 Fts5ExprPhrase *pLeft = pNear->apPhrase[0];
227414 assert( pNear->nPhrase>1
227415 || pNear->apPhrase[0]->nTerm>1
227416 || pNear->apPhrase[0]->aTerm[0].pSynonym
227417 || pNear->apPhrase[0]->aTerm[0].bFirst
227432 for(i=0; i<pNear->nPhrase; i++){
227433 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
227465 ** Advance the first term iterator in the first phrase of pNear. Set output
227477 Fts5ExprTerm *pTerm = &pNode->pNear->apPhrase[0]->aTerm[0];
227537 Fts5Expr *pExpr, /* Expression that pNear is a part of */
227545 Fts5ExprPhrase *pPhrase = pNode->pNear->apPhrase[0];
227549 assert( pNode->pNear->nPhrase==1 && pPhrase->nTerm==1 );
227571 Fts5IndexIter *pIter = pNode->pNear->apPhrase[0]->aTerm[0].pIter;
227953 ** If argument pNear is NULL, then a new Fts5ExprNearset object is allocated
227954 ** and populated with pPhrase. Or, if pNear is not NULL, phrase pPhrase is
227957 ** If an OOM error occurs, both the pNear and pPhrase objects are freed and
227962 Fts5ExprNearset *pNear, /* Existing nearset, or NULL */
227970 return pNear;
227972 if( pNear==0 ){
227981 }else if( (pNear->nPhrase % SZALLOC)==0 ){
227982 int nNew = pNear->nPhrase + SZALLOC;
227986 pRet = (Fts5ExprNearset*)sqlite3_realloc64(pNear, nByte);
227991 pRet = pNear;
227997 sqlite3Fts5ParseNearsetFree(pNear);
228104 static void sqlite3Fts5ParseNearsetFree(Fts5ExprNearset *pNear){
228105 if( pNear ){
228107 for(i=0; i<pNear->nPhrase; i++){
228108 fts5ExprPhraseFree(pNear->apPhrase[i]);
228110 sqlite3_free(pNear->pColset);
228111 sqlite3_free(pNear);
228214 pNew->pRoot->pNear = (Fts5ExprNearset*)sqlite3Fts5MallocZero(&rc,
228218 Fts5Colset *pColsetOrig = pOrig->pNode->pNear->pColset;
228227 pNew->pRoot->pNear->pColset = pColset;
228259 pNew->pRoot->pNear->apPhrase[0] = sCtx.pPhrase;
228260 pNew->pRoot->pNear->nPhrase = 1;
228299 Fts5ExprNearset *pNear,
228302 if( pNear ){
228319 pNear->nNear = nNear;
228491 Fts5ExprNearset *pNear = pNode->pNear;
228492 if( pNear->pColset ){
228493 fts5MergeColset(pNear->pColset, pColset);
228494 if( pNear->pColset->nCol==0 ){
228499 pNear->pColset = pColset;
228502 pNear->pColset = fts5CloneColset(&pParse->rc, pColset);
228536 Fts5ExprNearset *pNear = pNode->pNear;
228537 if( pNear->nPhrase==1 && pNear->apPhrase[0]->nTerm==1
228538 && pNear->apPhrase[0]->aTerm[0].pSynonym==0
228539 && pNear->apPhrase[0]->aTerm[0].bFirst==0
228590 Fts5ExprNearset *pNear
228592 int nTerm = pNear->apPhrase[0]->nTerm;
228597 assert( pNear->nPhrase==1 );
228618 &pParse->rc, pNear->apPhrase[0]->aTerm[ii].zTerm, -1
228631 sqlite3Fts5ParseNearsetFree(pNear);
228647 Fts5ExprNearset *pNear /* For STRING expressions, the near cluster */
228655 assert( (eType!=FTS5_STRING && !pNear)
228658 if( eType==FTS5_STRING && pNear==0 ) return 0;
228664 && pNear->apPhrase[0]->nTerm>1
228666 pRet = fts5ParsePhraseToAnd(pParse, pNear);
228681 pRet->pNear = pNear;
228685 for(iPhrase=0; iPhrase<pNear->nPhrase; iPhrase++){
228686 pNear->apPhrase[iPhrase]->pNode = pRet;
228687 if( pNear->apPhrase[iPhrase]->nTerm==0 ){
228694 Fts5ExprPhrase *pPhrase = pNear->apPhrase[0];
228695 if( pNear->nPhrase!=1
228701 pNear->nPhrase==1 ? "phrase": "NEAR"
228719 sqlite3Fts5ParseNearsetFree(pNear);
228758 assert( pParse->apPhrase[pParse->nPhrase-1]==pRight->pNear->apPhrase[0] );
228773 ap = &pParse->apPhrase[pParse->nPhrase-1-pRight->pNear->nPhrase];
228774 assert( ap[0]==pPrev->pNear->apPhrase[0] );
228775 memmove(ap, &ap[1], sizeof(Fts5ExprPhrase*)*pRight->pNear->nPhrase);
228849 Fts5ExprNearset *pNear = pExpr->pNear;
228855 if( pNear->pColset ){
228856 int *aiCol = pNear->pColset->aiCol;
228857 int nCol = pNear->pColset->nCol;
228862 for(i=1; i<pNear->pColset->nCol; i++){
228870 if( pNear->nPhrase>1 ){
228871 zRet = fts5PrintfAppend(zRet, "-near %d ", pNear->nNear);
228878 for(i=0; i<pNear->nPhrase; i++){
228879 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
228927 Fts5ExprNearset *pNear = pExpr->pNear;
228931 if( pNear->pColset ){
228933 Fts5Colset *pColset = pNear->pColset;
228946 if( pNear->nPhrase>1 ){
228951 for(i=0; i<pNear->nPhrase; i++){
228952 Fts5ExprPhrase *pPhrase = pNear->apPhrase[i];
228970 if( pNear->nPhrase>1 ){
228971 zRet = fts5PrintfAppend(zRet, ", %d)", pNear->nNear);
229333 Fts5Colset *pColset = pNode->pNear->pColset;
229350 pNode->pNear->apPhrase[0]->poslist.n = 0;
229365 return (pNode->pNear->apPhrase[0]->poslist.n>0);