Lines Matching refs:pTerm
315 WhereTerm *pTerm; /* The term being tested */ in whereScanNext() local
326 for(pTerm=pWC->a+k; k<pWC->nTerm; k++, pTerm++){ in whereScanNext()
327 assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 || pTerm->leftCursor<0 ); in whereScanNext()
328 if( pTerm->leftCursor==iCur in whereScanNext()
329 && pTerm->u.x.leftColumn==iColumn in whereScanNext()
331 || sqlite3ExprCompareSkip(pTerm->pExpr->pLeft, in whereScanNext()
333 && (pScan->iEquiv<=1 || !ExprHasProperty(pTerm->pExpr, EP_OuterON)) in whereScanNext()
335 if( (pTerm->eOperator & WO_EQUIV)!=0 in whereScanNext()
337 && (pX = whereRightSubexprIsColumn(pTerm->pExpr))!=0 in whereScanNext()
352 if( (pTerm->eOperator & pScan->opMask)!=0 ){ in whereScanNext()
354 if( pScan->zCollName && (pTerm->eOperator & WO_ISNULL)==0 ){ in whereScanNext()
357 pX = pTerm->pExpr; in whereScanNext()
368 if( (pTerm->eOperator & (WO_EQ|WO_IS))!=0 in whereScanNext()
369 && (pX = pTerm->pExpr->pRight, ALWAYS(pX!=0)) in whereScanNext()
374 testcase( pTerm->eOperator & WO_IS ); in whereScanNext()
383 pTerm, pScan->nEquiv); in whereScanNext()
391 return pTerm; in whereScanNext()
760 const WhereTerm *pTerm, /* WHERE clause term to check */ in constraintCompatibleWithOuterJoin() argument
766 testcase( ExprHasProperty(pTerm->pExpr, EP_OuterON) ) in constraintCompatibleWithOuterJoin()
767 testcase( ExprHasProperty(pTerm->pExpr, EP_InnerON) ); in constraintCompatibleWithOuterJoin()
768 if( !ExprHasProperty(pTerm->pExpr, EP_OuterON|EP_InnerON) in constraintCompatibleWithOuterJoin()
769 || pTerm->pExpr->w.iJoin != pSrc->iCursor in constraintCompatibleWithOuterJoin()
774 && ExprHasProperty(pTerm->pExpr, EP_InnerON) in constraintCompatibleWithOuterJoin()
790 const WhereTerm *pTerm, /* WHERE clause term to check */ in termCanDriveIndex() argument
795 if( pTerm->leftCursor!=pSrc->iCursor ) return 0; in termCanDriveIndex()
796 if( (pTerm->eOperator & (WO_EQ|WO_IS))==0 ) return 0; in termCanDriveIndex()
799 && !constraintCompatibleWithOuterJoin(pTerm,pSrc) in termCanDriveIndex()
803 if( (pTerm->prereqRight & notReady)!=0 ) return 0; in termCanDriveIndex()
804 assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); in termCanDriveIndex()
805 if( pTerm->u.x.leftColumn<0 ) return 0; in termCanDriveIndex()
806 aff = pSrc->pTab->aCol[pTerm->u.x.leftColumn].affinity; in termCanDriveIndex()
807 if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0; in termCanDriveIndex()
808 testcase( pTerm->pExpr->op==TK_IS ); in termCanDriveIndex()
828 WhereTerm *pTerm; /* A single term of the WHERE clause */ in constructAutomaticIndex() local
864 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){ in constructAutomaticIndex()
865 Expr *pExpr = pTerm->pExpr; in constructAutomaticIndex()
869 if( (pTerm->wtFlags & TERM_VIRTUAL)==0 in constructAutomaticIndex()
875 if( termCanDriveIndex(pTerm, pSrc, notReady) ){ in constructAutomaticIndex()
878 assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); in constructAutomaticIndex()
879 iCol = pTerm->u.x.leftColumn; in constructAutomaticIndex()
893 pLoop->aLTerm[nKeyCol++] = pTerm; in constructAutomaticIndex()
930 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){ in constructAutomaticIndex()
931 if( termCanDriveIndex(pTerm, pSrc, notReady) ){ in constructAutomaticIndex()
934 assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); in constructAutomaticIndex()
935 iCol = pTerm->u.x.leftColumn; in constructAutomaticIndex()
940 Expr *pX = pTerm->pExpr; in constructAutomaticIndex()
942 pIdx->aiColumn[n] = pTerm->u.x.leftColumn; in constructAutomaticIndex()
1063 const WhereTerm *pTerm; /* For looping over WHERE clause terms */ in sqlite3ConstructBloomFilter() local
1106 for(pTerm=pWInfo->sWC.a; pTerm<pWCEnd; pTerm++){ in sqlite3ConstructBloomFilter()
1107 Expr *pExpr = pTerm->pExpr; in sqlite3ConstructBloomFilter()
1108 if( (pTerm->wtFlags & TERM_VIRTUAL)==0 in sqlite3ConstructBloomFilter()
1111 sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL); in sqlite3ConstructBloomFilter()
1181 WhereTerm *pTerm; in allocateIndexInfo() local
1198 for(i=nTerm=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){ in allocateIndexInfo()
1199 pTerm->wtFlags &= ~TERM_OK; in allocateIndexInfo()
1200 if( pTerm->leftCursor != pSrc->iCursor ) continue; in allocateIndexInfo()
1201 if( pTerm->prereqRight & mUnusable ) continue; in allocateIndexInfo()
1202 assert( IsPowerOfTwo(pTerm->eOperator & ~WO_EQUIV) ); in allocateIndexInfo()
1203 testcase( pTerm->eOperator & WO_IN ); in allocateIndexInfo()
1204 testcase( pTerm->eOperator & WO_ISNULL ); in allocateIndexInfo()
1205 testcase( pTerm->eOperator & WO_IS ); in allocateIndexInfo()
1206 testcase( pTerm->eOperator & WO_ALL ); in allocateIndexInfo()
1207 if( (pTerm->eOperator & ~(WO_EQUIV))==0 ) continue; in allocateIndexInfo()
1208 if( pTerm->wtFlags & TERM_VNULL ) continue; in allocateIndexInfo()
1210 assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); in allocateIndexInfo()
1211 assert( pTerm->u.x.leftColumn>=XN_ROWID ); in allocateIndexInfo()
1212 assert( pTerm->u.x.leftColumn<pTab->nCol ); in allocateIndexInfo()
1214 && !constraintCompatibleWithOuterJoin(pTerm,pSrc) in allocateIndexInfo()
1219 pTerm->wtFlags |= TERM_OK; in allocateIndexInfo()
1298 for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){ in allocateIndexInfo()
1300 if( (pTerm->wtFlags & TERM_OK)==0 ) continue; in allocateIndexInfo()
1301 pIdxCons[j].iColumn = pTerm->u.x.leftColumn; in allocateIndexInfo()
1303 op = pTerm->eOperator & WO_ALL; in allocateIndexInfo()
1305 if( (pTerm->wtFlags & TERM_SLICE)==0 ){ in allocateIndexInfo()
1311 pIdxCons[j].op = pTerm->eMatchOp; in allocateIndexInfo()
1328 assert( pTerm->eOperator&(WO_IN|WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_AUX) ); in allocateIndexInfo()
1331 && sqlite3ExprIsVector(pTerm->pExpr->pRight) in allocateIndexInfo()
1625 static LogEst whereRangeAdjust(WhereTerm *pTerm, LogEst nNew){ in whereRangeAdjust() argument
1627 if( pTerm ){ in whereRangeAdjust()
1628 if( pTerm->truthProb<=0 ){ in whereRangeAdjust()
1629 nRet += pTerm->truthProb; in whereRangeAdjust()
1630 }else if( (pTerm->wtFlags & TERM_VNULL)==0 ){ in whereRangeAdjust()
2083 void sqlite3WhereTermPrint(WhereTerm *pTerm, int iTerm){ in sqlite3WhereTermPrint() argument
2084 if( pTerm==0 ){ in sqlite3WhereTermPrint()
2090 if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V'; in sqlite3WhereTermPrint()
2091 if( pTerm->eOperator & WO_EQUIV ) zType[1] = 'E'; in sqlite3WhereTermPrint()
2092 if( ExprHasProperty(pTerm->pExpr, EP_OuterON) ) zType[2] = 'L'; in sqlite3WhereTermPrint()
2093 if( pTerm->wtFlags & TERM_CODED ) zType[3] = 'C'; in sqlite3WhereTermPrint()
2094 if( pTerm->eOperator & WO_SINGLE ){ in sqlite3WhereTermPrint()
2095 assert( (pTerm->eOperator & (WO_OR|WO_AND))==0 ); in sqlite3WhereTermPrint()
2097 pTerm->leftCursor, pTerm->u.x.leftColumn); in sqlite3WhereTermPrint()
2098 }else if( (pTerm->eOperator & WO_OR)!=0 && pTerm->u.pOrInfo!=0 ){ in sqlite3WhereTermPrint()
2100 pTerm->u.pOrInfo->indexable); in sqlite3WhereTermPrint()
2102 sqlite3_snprintf(sizeof(zLeft),zLeft,"left=%d", pTerm->leftCursor); in sqlite3WhereTermPrint()
2106 iTerm, pTerm, zType, zLeft, pTerm->eOperator, pTerm->wtFlags); in sqlite3WhereTermPrint()
2111 pTerm->truthProb, (u64)pTerm->prereqAll, (u64)pTerm->prereqRight); in sqlite3WhereTermPrint()
2113 if( (pTerm->eOperator & (WO_OR|WO_AND))==0 && pTerm->u.x.iField ){ in sqlite3WhereTermPrint()
2114 sqlite3DebugPrintf(" iField=%d", pTerm->u.x.iField); in sqlite3WhereTermPrint()
2116 if( pTerm->iParent>=0 ){ in sqlite3WhereTermPrint()
2117 sqlite3DebugPrintf(" iParent=%d", pTerm->iParent); in sqlite3WhereTermPrint()
2120 sqlite3TreeViewExpr(0, pTerm->pExpr, 0); in sqlite3WhereTermPrint()
2626 WhereTerm *pTerm, *pX; in whereLoopOutputAdjust() local
2632 for(i=pWC->nBase, pTerm=pWC->a; i>0; i--, pTerm++){ in whereLoopOutputAdjust()
2633 assert( pTerm!=0 ); in whereLoopOutputAdjust()
2634 if( (pTerm->prereqAll & notAllowed)!=0 ) continue; in whereLoopOutputAdjust()
2635 if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue; in whereLoopOutputAdjust()
2636 if( (pTerm->wtFlags & TERM_VIRTUAL)!=0 ) continue; in whereLoopOutputAdjust()
2640 if( pX==pTerm ) break; in whereLoopOutputAdjust()
2641 if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break; in whereLoopOutputAdjust()
2644 if( pLoop->maskSelf==pTerm->prereqAll ){ in whereLoopOutputAdjust()
2654 if( (pTerm->eOperator & 0x3f)!=0 in whereLoopOutputAdjust()
2661 if( pTerm->truthProb<=0 ){ in whereLoopOutputAdjust()
2664 pLoop->nOut += pTerm->truthProb; in whereLoopOutputAdjust()
2669 if( (pTerm->eOperator&(WO_EQ|WO_IS))!=0 in whereLoopOutputAdjust()
2670 && (pTerm->wtFlags & TERM_HIGHTRUTH)==0 /* tag-20200224-1 */ in whereLoopOutputAdjust()
2672 Expr *pRight = pTerm->pExpr->pRight; in whereLoopOutputAdjust()
2674 testcase( pTerm->pExpr->op==TK_IS ); in whereLoopOutputAdjust()
2681 pTerm->wtFlags |= TERM_HEURTRUTH; in whereLoopOutputAdjust()
2715 WhereTerm *pTerm /* The vector inequality constraint */ in whereRangeVectorLen() argument
2717 int nCmp = sqlite3ExprVectorSize(pTerm->pExpr->pLeft); in whereRangeVectorLen()
2729 assert( ExprUseXList(pTerm->pExpr->pLeft) ); in whereRangeVectorLen()
2730 pLhs = pTerm->pExpr->pLeft->x.pList->a[i].pExpr; in whereRangeVectorLen()
2731 pRhs = pTerm->pExpr->pRight; in whereRangeVectorLen()
2794 WhereTerm *pTerm; /* A WhereTerm under consideration */ in whereLoopAddBtreeIndex() local
2838 pTerm = whereScanInit(&scan, pBuilder->pWC, pSrc->iCursor, saved_nEq, in whereLoopAddBtreeIndex()
2843 for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){ in whereLoopAddBtreeIndex()
2844 u16 eOp = pTerm->eOperator; /* Shorthand for pTerm->eOperator */ in whereLoopAddBtreeIndex()
2851 if( (eOp==WO_ISNULL || (pTerm->wtFlags&TERM_VNULL)!=0) in whereLoopAddBtreeIndex()
2856 if( pTerm->prereqRight & pNew->maskSelf ) continue; in whereLoopAddBtreeIndex()
2860 if( pTerm->wtFlags & TERM_LIKEOPT && pTerm->eOperator==WO_LT ) continue; in whereLoopAddBtreeIndex()
2863 && !constraintCompatibleWithOuterJoin(pTerm,pSrc) in whereLoopAddBtreeIndex()
2882 pNew->aLTerm[pNew->nLTerm++] = pTerm; in whereLoopAddBtreeIndex()
2883 pNew->prereq = (saved_prereq | pTerm->prereqRight) & ~pNew->maskSelf; in whereLoopAddBtreeIndex()
2892 Expr *pExpr = pTerm->pExpr; in whereLoopAddBtreeIndex()
2976 pParse, pSrc->iCursor, pProbe, saved_nEq, pTerm in whereLoopAddBtreeIndex()
2983 pBtm = pTerm; in whereLoopAddBtreeIndex()
2985 if( pTerm->wtFlags & TERM_LIKEOPT ){ in whereLoopAddBtreeIndex()
2988 pTop = &pTerm[1]; in whereLoopAddBtreeIndex()
2989 assert( (pTop-(pTerm->pWC->a))<pTerm->pWC->nTerm ); in whereLoopAddBtreeIndex()
3003 pTop = pTerm; in whereLoopAddBtreeIndex()
3024 if( pTerm->truthProb<=0 && pProbe->aiColumn[saved_nEq]>=0 ){ in whereLoopAddBtreeIndex()
3027 pNew->nOut += pTerm->truthProb; in whereLoopAddBtreeIndex()
3035 && ((eOp & WO_IN)==0 || ExprUseXList(pTerm->pExpr)) in whereLoopAddBtreeIndex()
3038 Expr *pExpr = pTerm->pExpr; in whereLoopAddBtreeIndex()
3061 sqlite3WhereTermPrint(pTerm, 999); in whereLoopAddBtreeIndex()
3064 pTerm->wtFlags |= TERM_HIGHTRUTH; in whereLoopAddBtreeIndex()
3065 if( pTerm->wtFlags & TERM_HEURTRUTH ){ in whereLoopAddBtreeIndex()
3226 WhereTerm *pTerm; in whereUsablePartialIndex() local
3236 for(i=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){ in whereUsablePartialIndex()
3238 pExpr = pTerm->pExpr; in whereUsablePartialIndex()
3242 && (pTerm->wtFlags & TERM_VNULL)==0 in whereUsablePartialIndex()
3448 WhereTerm *pTerm; in whereLoopAddBtree() local
3451 for(pTerm=pWC->a; rc==SQLITE_OK && pTerm<pWCEnd; pTerm++){ in whereLoopAddBtree()
3452 if( pTerm->prereqRight & pNew->maskSelf ) continue; in whereLoopAddBtree()
3453 if( termCanDriveIndex(pTerm, pSrc, 0) ){ in whereLoopAddBtree()
3458 pNew->aLTerm[0] = pTerm; in whereLoopAddBtree()
3482 pNew->prereq = mPrereq | pTerm->prereqRight; in whereLoopAddBtree()
3591 WhereTerm *pTerm = &pWC2->a[ii]; in whereLoopAddBtree() local
3592 if( !sqlite3ExprCoveredByIndex(pTerm->pExpr, iCur, pProbe) ){ in whereLoopAddBtree()
3597 if( pTerm->truthProb<=0 ){ in whereLoopAddBtree()
3598 nLookup += pTerm->truthProb; in whereLoopAddBtree()
3601 if( pTerm->eOperator & (WO_EQ|WO_IS) ) nLookup -= 19; in whereLoopAddBtree()
3645 static int isLimitTerm(WhereTerm *pTerm){ in isLimitTerm() argument
3646 assert( pTerm->eOperator==WO_AUX || pTerm->eMatchOp==0 ); in isLimitTerm()
3647 return pTerm->eMatchOp>=SQLITE_INDEX_CONSTRAINT_LIMIT in isLimitTerm()
3648 && pTerm->eMatchOp<=SQLITE_INDEX_CONSTRAINT_OFFSET; in isLimitTerm()
3701 WhereTerm *pTerm = &pWC->a[pIdxCons->iTermOffset]; in whereLoopAddVirtualOne() local
3703 if( (pTerm->prereqRight & mUsable)==pTerm->prereqRight in whereLoopAddVirtualOne()
3704 && (pTerm->eOperator & mExclude)==0 in whereLoopAddVirtualOne()
3705 && (pbRetryLimit || !isLimitTerm(pTerm)) in whereLoopAddVirtualOne()
3745 WhereTerm *pTerm; in whereLoopAddVirtualOne() local
3760 pTerm = &pWC->a[j]; in whereLoopAddVirtualOne()
3761 pNew->prereq |= pTerm->prereqRight; in whereLoopAddVirtualOne()
3763 pNew->aLTerm[iTerm] = pTerm; in whereLoopAddVirtualOne()
3774 if( pTerm->eMatchOp==SQLITE_INDEX_CONSTRAINT_OFFSET ){ in whereLoopAddVirtualOne()
3780 }else if( (pTerm->eOperator & WO_IN)!=0 ){ in whereLoopAddVirtualOne()
3791 assert( pbRetryLimit || !isLimitTerm(pTerm) ); in whereLoopAddVirtualOne()
3792 if( isLimitTerm(pTerm) && *pbIn ){ in whereLoopAddVirtualOne()
3916 WhereTerm *pTerm = &pH->pWC->a[pIdxInfo->aConstraint[iCons].iTermOffset]; in sqlite3_vtab_rhs_value() local
3918 pH->pParse->db, pTerm->pExpr->pRight, ENC(pH->pParse->db), in sqlite3_vtab_rhs_value()
4134 WhereTerm *pTerm, *pWCEnd; in whereLoopAddOr() local
4152 for(pTerm=pWC->a; pTerm<pWCEnd && rc==SQLITE_OK; pTerm++){ in whereLoopAddOr()
4153 if( (pTerm->eOperator & WO_OR)!=0 in whereLoopAddOr()
4154 && (pTerm->u.pOrInfo->indexable & pNew->maskSelf)!=0 in whereLoopAddOr()
4156 WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc; in whereLoopAddOr()
4165 WHERETRACE(0x200, ("Begin processing OR-clause %p\n", pTerm)); in whereLoopAddOr()
4183 (int)(pOrTerm-pOrWC->a), pTerm, sSubBuild.pWC->nTerm)); in whereLoopAddOr()
4223 pNew->aLTerm[0] = pTerm; in whereLoopAddOr()
4246 WHERETRACE(0x200, ("End processing OR-clause %p\n", pTerm)); in whereLoopAddOr()
4378 WhereTerm *pTerm; /* A single term of the WHERE clause */ in wherePathSatisfiesOrderBy() local
4455 pTerm = sqlite3WhereFindTerm(&pWInfo->sWC, iCur, pOBExpr->iColumn, in wherePathSatisfiesOrderBy()
4457 if( pTerm==0 ) continue; in wherePathSatisfiesOrderBy()
4458 if( pTerm->eOperator==WO_IN ){ in wherePathSatisfiesOrderBy()
4464 for(j=0; j<pLoop->nLTerm && pTerm!=pLoop->aLTerm[j]; j++){} in wherePathSatisfiesOrderBy()
4467 if( (pTerm->eOperator&(WO_EQ|WO_IS))!=0 && pOBExpr->iColumn>=0 ){ in wherePathSatisfiesOrderBy()
4470 CollSeq *pColl2 = sqlite3ExprCompareCollSeq(pParse, pTerm->pExpr); in wherePathSatisfiesOrderBy()
4475 testcase( pTerm->pExpr->op==TK_IS ); in wherePathSatisfiesOrderBy()
5182 WhereTerm *pTerm; in whereShortCut() local
5206 pTerm = whereScanInit(&scan, pWC, iCur, -1, WO_EQ|WO_IS, 0); in whereShortCut()
5207 while( pTerm && pTerm->prereqRight ) pTerm = whereScanNext(&scan); in whereShortCut()
5208 if( pTerm ){ in whereShortCut()
5209 testcase( pTerm->eOperator & WO_IS ); in whereShortCut()
5211 pLoop->aLTerm[0] = pTerm; in whereShortCut()
5226 pTerm = whereScanInit(&scan, pWC, iCur, j, opMask, pIdx); in whereShortCut()
5227 while( pTerm && pTerm->prereqRight ) pTerm = whereScanNext(&scan); in whereShortCut()
5228 if( pTerm==0 ) break; in whereShortCut()
5229 testcase( pTerm->eOperator & WO_IS ); in whereShortCut()
5230 pLoop->aLTerm[j] = pTerm; in whereShortCut()
5368 WhereTerm *pTerm, *pEnd; in whereOmitNoopJoin() local
5381 for(pTerm=pWInfo->sWC.a; pTerm<pEnd; pTerm++){ in whereOmitNoopJoin()
5382 if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){ in whereOmitNoopJoin()
5383 if( !ExprHasProperty(pTerm->pExpr, EP_OuterON) in whereOmitNoopJoin()
5384 || pTerm->pExpr->w.iJoin!=pItem->iCursor in whereOmitNoopJoin()
5390 if( pTerm<pEnd ) continue; in whereOmitNoopJoin()
5393 for(pTerm=pWInfo->sWC.a; pTerm<pEnd; pTerm++){ in whereOmitNoopJoin()
5394 if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){ in whereOmitNoopJoin()
5395 pTerm->wtFlags |= TERM_CODED; in whereOmitNoopJoin()