Lines Matching refs:pLoop
117080 Index *pLoop;
117081 for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
136257 Select *pLoop; /* For looping through SELECT statements */
136276 for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
136278 int addr = pLoop->addrOpenEphm[i];
136282 assert( pLoop->addrOpenEphm[1]<0 );
136288 pLoop->addrOpenEphm[i] = -1;
146519 static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop){
146520 Index *pIndex = pLoop->u.btree.pIndex;
146521 u16 nEq = pLoop->u.btree.nEq;
146522 u16 nSkip = pLoop->nSkip;
146525 if( nEq==0 && (pLoop->wsFlags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ) return;
146534 if( pLoop->wsFlags&WHERE_BTM_LIMIT ){
146535 explainAppendTerm(pStr, pIndex, pLoop->u.btree.nBtm, j, i, ">");
146538 if( pLoop->wsFlags&WHERE_TOP_LIMIT ){
146539 explainAppendTerm(pStr, pIndex, pLoop->u.btree.nTop, j, i, "<");
146568 WhereLoop *pLoop; /* The controlling WhereLoop object */
146574 pLoop = pLevel->pWLoop;
146575 flags = pLoop->wsFlags;
146579 || ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0))
146589 assert( pLoop->u.btree.pIndex!=0 );
146590 pIdx = pLoop->u.btree.pIndex;
146608 explainIndexRange(&str, pLoop);
146628 pLoop->u.vtab.idxNum, pLoop->u.vtab.idxStr);
146632 if( pLoop->nOut>=10 ){
146634 sqlite3LogEstToInt(pLoop->nOut));
146665 WhereLoop *pLoop = pLvl->pWLoop;
146666 if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){
146667 zObj = pLoop->u.btree.pIndex->zName;
146672 v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj
146844 WhereLoop *pLoop, /* The current loop */
146863 for(i=iEq; i<pLoop->nLTerm; i++){
146864 if( pLoop->aLTerm[i]->pExpr==pX ){
146866 assert( (pLoop->aLTerm[i]->eOperator & (WO_OR|WO_AND))==0 );
146867 iField = pLoop->aLTerm[i]->u.x.iField - 1;
146954 WhereLoop *pLoop = pLevel->pWLoop;
146959 if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0
146960 && pLoop->u.btree.pIndex!=0
146961 && pLoop->u.btree.pIndex->aSortOrder[iEq]
146971 if( pLoop->aLTerm[i] && pLoop->aLTerm[i]->pExpr==pX ){
146976 for(i=iEq;i<pLoop->nLTerm; i++){
146977 assert( pLoop->aLTerm[i]!=0 );
146978 if( pLoop->aLTerm[i]->pExpr==pX ) nEq++;
146986 pX = removeUnindexableInClauseTerms(pParse, iEq, pLoop, pX);
147005 assert( (pLoop->wsFlags & WHERE_MULTI_OR)==0 );
147006 pLoop->wsFlags |= WHERE_IN_ABLE;
147010 if( iEq>0 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0 ){
147011 pLoop->wsFlags |= WHERE_IN_EARLYOUT;
147023 for(i=iEq;i<pLoop->nLTerm; i++){
147024 if( pLoop->aLTerm[i]->pExpr==pX ){
147049 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0
147050 && (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 );
147052 && (pLoop->wsFlags & (WHERE_IN_SEEKSCAN|WHERE_VIRTUALTABLE))==0
147138 WhereLoop *pLoop; /* The WhereLoop object */
147145 pLoop = pLevel->pWLoop;
147146 assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 );
147147 nEq = pLoop->u.btree.nEq;
147148 nSkip = pLoop->nSkip;
147149 pIdx = pLoop->u.btree.pIndex;
147155 nReg = pLoop->u.btree.nEq + nExtraReg;
147186 pTerm = pLoop->aLTerm[j];
147387 WhereLoop *pLoop = pLevel->pWLoop;
147400 sHint.pIdx = pLoop->u.btree.pIndex;
147449 if( pLoop->u.btree.nEq==0 && pTerm!=pEndRange ){
147450 for(j=0; j<pLoop->nLTerm && pLoop->aLTerm[j]!=pTerm; j++){}
147451 if( j<pLoop->nLTerm ) continue;
147752 WhereLoop *pLoop; /* The WhereLoop object being coded */
147767 pLoop = pLevel->pWLoop;
147777 sqlite3WhereLoopPrint(pLoop, pWC);
147831 if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ){
147837 int nConstraint = pLoop->nLTerm;
147844 pTerm = pLoop->aLTerm[j];
147854 sqlite3VdbeAddOp2(v, OP_Integer, pLoop->u.vtab.idxNum, iReg);
147857 pLoop->u.vtab.idxStr,
147858 pLoop->u.vtab.needFree ? P4_DYNAMIC : P4_STATIC);
147860 pLoop->u.vtab.needFree = 0;
147863 if( db->mallocFailed ) pLoop->u.vtab.idxStr = 0;
147867 assert( (pLoop->wsFlags & WHERE_MULTI_OR)==0 );
147868 if( pLoop->wsFlags & WHERE_IN_ABLE ){
147874 pTerm = pLoop->aLTerm[j];
147876 if( j<16 && (pLoop->u.vtab.omitMask>>j)&1 ){
147929 if( (pLoop->wsFlags & WHERE_IPK)!=0
147930 && (pLoop->wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_EQ))!=0
147937 assert( pLoop->u.btree.nEq==1 );
147938 pTerm = pLoop->aLTerm[0];
147949 }else if( (pLoop->wsFlags & WHERE_IPK)!=0
147950 && (pLoop->wsFlags & WHERE_COLUMN_RANGE)!=0
147961 if( pLoop->wsFlags & WHERE_BTM_LIMIT ) pStart = pLoop->aLTerm[j++];
147962 if( pLoop->wsFlags & WHERE_TOP_LIMIT ) pEnd = pLoop->aLTerm[j++];
148057 }else if( pLoop->wsFlags & WHERE_INDEXED ){
148105 u16 nEq = pLoop->u.btree.nEq; /* Number of == or IN terms */
148106 u16 nBtm = pLoop->u.btree.nBtm; /* Length of BTM vector */
148107 u16 nTop = pLoop->u.btree.nTop; /* Length of TOP vector */
148126 pIdx = pLoop->u.btree.pIndex;
148128 assert( nEq>=pLoop->nSkip );
148134 if( pLoop->wsFlags & WHERE_BTM_LIMIT ){
148135 pRangeStart = pLoop->aLTerm[j++];
148136 nExtraReg = MAX(nExtraReg, pLoop->u.btree.nBtm);
148139 (pLoop->wsFlags & WHERE_TOP_LIMIT)!=0 );
148141 if( pLoop->wsFlags & WHERE_TOP_LIMIT ){
148142 pRangeEnd = pLoop->aLTerm[j++];
148143 nExtraReg = MAX(nExtraReg, pLoop->u.btree.nTop);
148177 if( (pLoop->wsFlags & (WHERE_TOP_LIMIT|WHERE_BTM_LIMIT))==0
148178 && (pLoop->wsFlags & WHERE_BIGNULL_SORT)!=0
148182 testcase( pLoop->nSkip>0 );
148202 if( iLevel>0 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 ){
148262 if( pLoop->nSkip>0 && nConstraint==pLoop->nSkip ){
148274 if( (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 && op==OP_SeekGE ){
148401 if( (pLoop->wsFlags & WHERE_IN_EARLYOUT)!=0 ){
148406 omitTable = (pLoop->wsFlags & WHERE_IDX_ONLY)!=0
148464 if( pLoop->wsFlags & WHERE_ONEROW ){
148472 pLevel->p3 = (pLoop->wsFlags&WHERE_UNQ_WANTED)!=0 ? 1:0;
148473 if( (pLoop->wsFlags & WHERE_CONSTRAINT)==0 ){
148482 if( pLoop->wsFlags & WHERE_MULTI_OR ){
148541 pTerm = pLoop->aLTerm[0];
148772 assert( pLevel->pWLoop==pLoop );
148773 assert( (pLoop->wsFlags & WHERE_MULTI_OR)!=0 );
148774 assert( (pLoop->wsFlags & WHERE_IN_ABLE)==0 );
151405 WhereLoop *pLoop; /* The Loop object */
151427 pLoop = pLevel->pWLoop;
151433 || pLoop->prereq!=0 ); /* table of a LEFT JOIN */
151434 if( pLoop->prereq==0
151456 if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ){
151459 pLoop->aLTerm[nKeyCol++] = pTerm;
151465 pLoop->u.btree.nEq = pLoop->nLTerm = nKeyCol;
151466 pLoop->wsFlags = WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WHERE_INDEXED
151491 pLoop->u.btree.pIndex = pIdx;
151516 assert( (u32)n==pLoop->u.btree.nEq );
151560 pLoop->wsFlags |= WHERE_PARTIALIDX;
152052 WhereLoop *pLoop, /* Update the .nOut value of this loop */
152055 Index *p = pLoop->u.btree.pIndex;
152056 int nEq = pLoop->u.btree.nEq;
152102 pLoop->nOut -= nAdjust;
152105 nLower, nUpper, nAdjust*-1, pLoop->nOut));
152165 WhereLoop *pLoop /* Modify the .nOut and maybe .rRun fields */
152168 int nOut = pLoop->nOut;
152172 Index *p = pLoop->u.btree.pIndex;
152173 int nEq = pLoop->u.btree.nEq;
152181 int nBtm = pLoop->u.btree.nBtm;
152182 int nTop = pLoop->u.btree.nTop;
152287 rc = whereRangeSkipScanEst(pParse, pLower, pUpper, pLoop, &bDone);
152314 if( pLoop->nOut>nOut ){
152316 pLoop->nOut, nOut));
152319 pLoop->nOut = (LogEst)nOut;
152987 WhereLoop *pLoop, /* The loop to adjust downward */
152991 Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf);
152995 assert( (pLoop->wsFlags & WHERE_AUTO_INDEX)==0 );
152999 if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue;
153001 for(j=pLoop->nLTerm-1; j>=0; j--){
153002 pX = pLoop->aLTerm[j];
153011 pLoop->nOut += pTerm->truthProb;
153015 pLoop->nOut--;
153035 if( pLoop->nOut > nRow-iReduce ) pLoop->nOut = nRow - iReduce;
154452 WhereLoop *pLoop = 0; /* Current WhereLoop being processed. */
154500 if( iLoop>0 ) ready |= pLoop->maskSelf;
154502 pLoop = pPath->aLoop[iLoop];
154505 pLoop = pLast;
154507 if( pLoop->wsFlags & WHERE_VIRTUALTABLE ){
154508 if( pLoop->u.vtab.isOrdered && (wctrlFlags & WHERE_DISTINCTBY)==0 ){
154513 pLoop->u.btree.nDistinctCol = 0;
154515 iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor;
154537 for(j=0; j<pLoop->nLTerm && pTerm!=pLoop->aLTerm[j]; j++){}
154538 if( j>=pLoop->nLTerm ) continue;
154553 if( (pLoop->wsFlags & WHERE_ONEROW)==0 ){
154554 if( pLoop->wsFlags & WHERE_IPK ){
154558 }else if( (pIndex = pLoop->u.btree.pIndex)==0 || pIndex->bUnordered ){
154571 && (pLoop->wsFlags & WHERE_SKIPSCAN)==0;
154582 assert( j>=pLoop->u.btree.nEq
154583 || (pLoop->aLTerm[j]==0)==(j<pLoop->nSkip)
154585 if( j<pLoop->u.btree.nEq && j>=pLoop->nSkip ){
154586 u16 eOp = pLoop->aLTerm[j]->eOperator;
154613 Expr *pX = pLoop->aLTerm[j]->pExpr;
154614 for(i=j+1; i<pLoop->u.btree.nEq; i++){
154615 if( pLoop->aLTerm[i]->pExpr==pX ){
154616 assert( (pLoop->aLTerm[i]->eOperator & WO_IN) );
154641 && j>=pLoop->u.btree.nEq
154677 pLoop->u.btree.nDistinctCol = j+1;
154696 if( j==pLoop->u.btree.nEq ){
154697 pLoop->wsFlags |= WHERE_BIGNULL_SORT;
154725 orderDistinctMask |= pLoop->maskSelf;
155247 WhereLoop *pLoop;
155263 pLoop = pBuilder->pNew;
155264 pLoop->wsFlags = 0;
155265 pLoop->nSkip = 0;
155270 pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW;
155271 pLoop->aLTerm[0] = pTerm;
155272 pLoop->nLTerm = 1;
155273 pLoop->u.btree.nEq = 1;
155275 pLoop->rRun = 33; /* 33==sqlite3LogEst(10) */
155279 assert( pLoop->aLTermSpace==pLoop->aLTerm );
155282 || pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace)
155290 pLoop->aLTerm[j] = pTerm;
155293 pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_ONEROW|WHERE_INDEXED;
155295 pLoop->wsFlags |= WHERE_IDX_ONLY;
155297 pLoop->nLTerm = j;
155298 pLoop->u.btree.nEq = j;
155299 pLoop->u.btree.pIndex = pIdx;
155301 pLoop->rRun = 39; /* 39==sqlite3LogEst(15) */
155305 if( pLoop->wsFlags ){
155306 pLoop->nOut = (LogEst)1;
155307 pWInfo->a[0].pWLoop = pLoop;
155309 pLoop->maskSelf = 1; /* sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur); */
155316 if( scan.iEquiv>1 ) pLoop->wsFlags |= WHERE_TRANSCONS;
155318 pLoop->cId = '0';
155484 WhereLoop *pLoop; /* Pointer to a single WhereLoop object */
155785 pLoop = pWInfo->a[i].pWLoop;
155786 pItem = &pWInfo->pTabList->a[pLoop->iTab];
155789 && (pLoop->wsFlags & WHERE_ONEROW)==0
155793 if( (tabUsed & pLoop->maskSelf)!=0 ) continue;
155796 if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
155805 WHERETRACE(0xffff, ("-> drop loop %c not used\n", pLoop->cId));
155806 notReady &= ~pLoop->maskSelf;
155808 if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
155879 pLoop = pLevel->pWLoop;
155884 if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ){
155892 if( (pLoop->wsFlags & WHERE_IDX_ONLY)==0
155917 if( pLoop->u.btree.pIndex!=0 ){
155931 if( pLoop->wsFlags & WHERE_INDEXED ){
155932 Index *pIx = pLoop->u.btree.pIndex;
155966 if( (pLoop->wsFlags & WHERE_CONSTRAINT)!=0
155967 && (pLoop->wsFlags & (WHERE_COLUMN_RANGE|WHERE_SKIPSCAN))==0
155968 && (pLoop->wsFlags & WHERE_BIGNULL_SORT)==0
155969 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0
156071 WhereLoop *pLoop;
156082 pLoop = pLevel->pWLoop;
156090 && (pLoop->wsFlags & WHERE_INDEXED)!=0
156091 && (pIdx = pLoop->u.btree.pIndex)->hasStat1
156092 && (n = pLoop->u.btree.nDistinctCol)>0
156127 if( (pLoop->wsFlags & WHERE_IN_ABLE)!=0 && pLevel->u.in.nIn>0 ){
156138 (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0
156139 && (pLoop->wsFlags & WHERE_IN_EARLYOUT)!=0;
156176 VdbeComment((v, "next skip-scan on %s", pLoop->u.btree.pIndex->zName));
156188 int ws = pLoop->wsFlags;
156230 pLoop = pLevel->pWLoop;
156253 int ws = pLoop->wsFlags;
156277 if( pLoop->wsFlags & (WHERE_INDEXED|WHERE_IDX_ONLY) ){
156278 pIdx = pLoop->u.btree.pIndex;
156279 }else if( pLoop->wsFlags & WHERE_MULTI_OR ){
156328 assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 || x>=0
159580 Select *pNext = 0, *pLoop = p;
159583 pLoop->pNext = pNext;
159584 pLoop->selFlags |= SF_Compound;
159585 pNext = pLoop;
159586 pLoop = pLoop->pPrior;
159587 if( pLoop==0 ) break;
159589 if( pLoop->pOrderBy || pLoop->pLimit ){
159591 pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT",