Lines Matching refs:pLoop
130424 Index *pLoop; local
130425 for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
163775 static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop){ argument
163776 Index *pIndex = pLoop->u.btree.pIndex;
163777 u16 nEq = pLoop->u.btree.nEq;
163778 u16 nSkip = pLoop->nSkip;
163781 if( nEq==0 && (pLoop->wsFlags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ) return;
163790 if( pLoop->wsFlags&WHERE_BTM_LIMIT ){
163791 explainAppendTerm(pStr, pIndex, pLoop->u.btree.nBtm, j, i, ">");
163794 if( pLoop->wsFlags&WHERE_TOP_LIMIT ){
163795 explainAppendTerm(pStr, pIndex, pLoop->u.btree.nTop, j, i, "<");
163820 WhereLoop *pLoop; /* The controlling WhereLoop object */ local
163830 pLoop = pLevel->pWLoop;
163831 flags = pLoop->wsFlags;
163834 || ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0))
163847 assert( pLoop->u.btree.pIndex!=0 );
163848 pIdx = pLoop->u.btree.pIndex;
163866 explainIndexRange(&str, pLoop);
163895 pLoop->u.vtab.bIdxNumHex ? "0x%x:%s" : "%d:%s",
163896 pLoop->u.vtab.idxNum, pLoop->u.vtab.idxStr);
163903 if( pLoop->nOut>=10 ){
163905 sqlite3LogEstToInt(pLoop->nOut));
163979 WhereLoop *pLoop; /* The where loop */ local
163986 pLoop = pLevel->pWLoop;
163987 if( pLoop->wsFlags & WHERE_IPK ){
163995 for(i=pLoop->nSkip; i<pLoop->u.btree.nEq; i++){
163996 const char *z = explainIndexColumnName(pLoop->u.btree.pIndex, i);
163997 if( i>pLoop->nSkip ) sqlite3_str_append(&str, " AND ", 5);
164029 WhereLoop *pLoop = pLvl->pWLoop; local
164030 int wsFlags = pLoop->wsFlags;
164033 if( (wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){
164034 zObj = pLoop->u.btree.pIndex->zName;
164040 v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj
164264 WhereLoop *pLoop, /* The current loop */ argument
164286 for(i=iEq; i<pLoop->nLTerm; i++){
164287 if( pLoop->aLTerm[i]->pExpr==pX ){
164289 assert( (pLoop->aLTerm[i]->eOperator & (WO_OR|WO_AND))==0 );
164290 iField = pLoop->aLTerm[i]->u.x.iField - 1;
164368 WhereLoop *pLoop = pLevel->pWLoop; local
164374 if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0
164375 && pLoop->u.btree.pIndex!=0
164376 && pLoop->u.btree.pIndex->aSortOrder[iEq]
164385 if( pLoop->aLTerm[i] && pLoop->aLTerm[i]->pExpr==pX ){
164390 for(i=iEq; i<pLoop->nLTerm; i++){
164391 assert( pLoop->aLTerm[i]!=0 );
164392 if( pLoop->aLTerm[i]->pExpr==pX ) nEq++;
164400 Expr *pXMod = removeUnindexableInClauseTerms(pParse, iEq, pLoop, pX);
164416 assert( (pLoop->wsFlags & WHERE_MULTI_OR)==0 );
164417 pLoop->wsFlags |= WHERE_IN_ABLE;
164421 if( iEq>0 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0 ){
164422 pLoop->wsFlags |= WHERE_IN_EARLYOUT;
164435 for(i=iEq; i<pLoop->nLTerm; i++){
164436 if( pLoop->aLTerm[i]->pExpr==pX ){
164461 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0
164462 && (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 );
164464 && (pLoop->wsFlags & (WHERE_IN_SEEKSCAN|WHERE_VIRTUALTABLE))==0
164592 WhereLoop *pLoop; /* The WhereLoop object */ local
164599 pLoop = pLevel->pWLoop;
164600 assert( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 );
164601 nEq = pLoop->u.btree.nEq;
164602 nSkip = pLoop->nSkip;
164603 pIdx = pLoop->u.btree.pIndex;
164641 pTerm = pLoop->aLTerm[j];
164844 WhereLoop *pLoop = pLevel->pWLoop; local
164857 sHint.pIdx = pLoop->u.btree.pIndex;
164906 if( pLoop->u.btree.nEq==0 && pTerm!=pEndRange ){
164907 for(j=0; j<pLoop->nLTerm && pLoop->aLTerm[j]!=pTerm; j++){}
164908 if( j<pLoop->nLTerm ) continue;
165089 WhereLoop *pLoop = pLevel->pWLoop; local
165094 if( NEVER(pLoop->prereq & notReady) ) continue;
165097 if( pLoop->wsFlags & WHERE_IPK ){
165098 WhereTerm *pTerm = pLoop->aLTerm[0];
165111 u16 nEq = pLoop->u.btree.nEq;
165115 assert( pLoop->wsFlags & WHERE_INDEXED );
165116 assert( (pLoop->wsFlags & WHERE_COLUMN_IN)==0 );
165134 static int whereLoopIsOneRow(WhereLoop *pLoop){ argument
165135 if( pLoop->u.btree.pIndex->onError
165136 && pLoop->nSkip==0
165137 && pLoop->u.btree.nEq==pLoop->u.btree.pIndex->nKeyCol
165140 for(ii=0; ii<pLoop->u.btree.nEq; ii++){
165141 if( pLoop->aLTerm[ii]->eOperator & (WO_IS|WO_ISNULL) ){
165166 WhereLoop *pLoop; /* The WhereLoop object being coded */ local
165180 pLoop = pLevel->pWLoop;
165192 sqlite3WhereLoopPrint(pLoop, pWC);
165246 if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ){
165252 int nConstraint = pLoop->nLTerm;
165258 pTerm = pLoop->aLTerm[j];
165261 if( SMASKBIT32(j) & pLoop->u.vtab.mHandleIn ){
165274 && pLoop->u.vtab.bOmitOffset
165284 sqlite3VdbeAddOp2(v, OP_Integer, pLoop->u.vtab.idxNum, iReg);
165290 pLoop->u.vtab.idxStr,
165291 pLoop->u.vtab.needFree ? P4_DYNAMIC : P4_STATIC);
165293 pLoop->u.vtab.needFree = 0;
165296 if( db->mallocFailed ) pLoop->u.vtab.idxStr = 0;
165300 assert( (pLoop->wsFlags & WHERE_MULTI_OR)==0 );
165303 pTerm = pLoop->aLTerm[j];
165304 if( j<16 && (pLoop->u.vtab.omitMask>>j)&1 ){
165309 && (SMASKBIT32(j) & pLoop->u.vtab.mHandleIn)==0
165372 if( (pLoop->wsFlags & WHERE_IPK)!=0
165373 && (pLoop->wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_EQ))!=0
165380 assert( pLoop->u.btree.nEq==1 );
165381 pTerm = pLoop->aLTerm[0];
165400 }else if( (pLoop->wsFlags & WHERE_IPK)!=0
165401 && (pLoop->wsFlags & WHERE_COLUMN_RANGE)!=0
165412 if( pLoop->wsFlags & WHERE_BTM_LIMIT ) pStart = pLoop->aLTerm[j++];
165413 if( pLoop->wsFlags & WHERE_TOP_LIMIT ) pEnd = pLoop->aLTerm[j++];
165508 }else if( pLoop->wsFlags & WHERE_INDEXED ){
165556 u16 nEq = pLoop->u.btree.nEq; /* Number of == or IN terms */
165557 u16 nBtm = pLoop->u.btree.nBtm; /* Length of BTM vector */
165558 u16 nTop = pLoop->u.btree.nTop; /* Length of TOP vector */
165577 pIdx = pLoop->u.btree.pIndex;
165579 assert( nEq>=pLoop->nSkip );
165585 if( pLoop->wsFlags & WHERE_BTM_LIMIT ){
165586 pRangeStart = pLoop->aLTerm[j++];
165587 nExtraReg = MAX(nExtraReg, pLoop->u.btree.nBtm);
165590 (pLoop->wsFlags & WHERE_TOP_LIMIT)!=0 );
165592 if( pLoop->wsFlags & WHERE_TOP_LIMIT ){
165593 pRangeEnd = pLoop->aLTerm[j++];
165594 nExtraReg = MAX(nExtraReg, pLoop->u.btree.nTop);
165628 if( (pLoop->wsFlags & (WHERE_TOP_LIMIT|WHERE_BTM_LIMIT))==0
165629 && (pLoop->wsFlags & WHERE_BIGNULL_SORT)!=0
165633 testcase( pLoop->nSkip>0 );
165653 if( iLevel>0 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 ){
165713 if( pLoop->nSkip>0 && nConstraint==pLoop->nSkip ){
165731 if( (pLoop->wsFlags & WHERE_IN_SEEKSCAN)!=0 && op==OP_SeekGE ){
165854 if( (pLoop->wsFlags & WHERE_IN_EARLYOUT)!=0 ){
165859 omitTable = (pLoop->wsFlags & WHERE_IDX_ONLY)!=0
165897 if( (pLoop->wsFlags & WHERE_ONEROW)
165898 || (pLevel->u.in.nIn && regBignull==0 && whereLoopIsOneRow(pLoop))
165907 pLevel->p3 = (pLoop->wsFlags&WHERE_UNQ_WANTED)!=0 ? 1:0;
165908 if( (pLoop->wsFlags & WHERE_CONSTRAINT)==0 ){
165917 if( pLoop->wsFlags & WHERE_MULTI_OR ){
165976 pTerm = pLoop->aLTerm[0];
166230 assert( pLevel->pWLoop==pLoop );
166231 assert( (pLoop->wsFlags & WHERE_MULTI_OR)!=0 );
166232 assert( (pLoop->wsFlags & WHERE_IN_ABLE)==0 );
166540 WhereLoop *pLoop = pLevel->pWLoop; local
166576 mAll |= pLoop->maskSelf;
169595 WhereLoop *pLoop; /* The Loop object */ local
169624 pLoop = pLevel->pWLoop;
169652 if( whereLoopResize(pParse->db, pLoop, nKeyCol+1) ){
169655 pLoop->aLTerm[nKeyCol++] = pTerm;
169661 pLoop->u.btree.nEq = pLoop->nLTerm = nKeyCol;
169662 pLoop->wsFlags = WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WHERE_INDEXED
169707 pLoop->u.btree.pIndex = pIdx;
169742 assert( (u32)n==pLoop->u.btree.nEq );
169801 pLoop->wsFlags |= WHERE_PARTIALIDX;
169809 regBase, pLoop->u.btree.nEq);
169876 WhereLoop *pLoop = pLevel->pWLoop; /* The loop being coded */ local
169886 assert( pLoop!=0 );
169888 assert( pLoop->wsFlags & WHERE_BLOOMFILTER );
169889 assert( (pLoop->wsFlags & WHERE_IDX_ONLY)==0 );
169935 if( pLoop->wsFlags & WHERE_IPK ){
169941 Index *pIdx = pLoop->u.btree.pIndex;
169942 int n = pLoop->u.btree.nEq;
169956 pLoop->wsFlags &= ~WHERE_BLOOMFILTER;
169963 pLoop = pLevel->pWLoop;
169964 if( NEVER(pLoop==0) ) continue;
169965 if( pLoop->prereq & notReady ) continue;
169966 if( (pLoop->wsFlags & (WHERE_BLOOMFILTER|WHERE_COLUMN_IN))
170574 WhereLoop *pLoop, /* Update the .nOut value of this loop */ argument
170577 Index *p = pLoop->u.btree.pIndex;
170578 int nEq = pLoop->u.btree.nEq;
170624 pLoop->nOut -= nAdjust;
170627 nLower, nUpper, nAdjust*-1, pLoop->nOut));
170687 WhereLoop *pLoop /* Modify the .nOut and maybe .rRun fields */ argument
170690 int nOut = pLoop->nOut;
170694 Index *p = pLoop->u.btree.pIndex;
170695 int nEq = pLoop->u.btree.nEq;
170703 int nBtm = pLoop->u.btree.nBtm;
170704 int nTop = pLoop->u.btree.nTop;
170810 rc = whereRangeSkipScanEst(pParse, pLower, pUpper, pLoop, &bDone);
170837 if( pLoop->nOut>nOut ){
170839 pLoop->nOut, nOut));
170842 pLoop->nOut = (LogEst)nOut;
171629 WhereLoop *pLoop, /* The loop to adjust downward */ argument
171633 Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf);
171637 assert( (pLoop->wsFlags & WHERE_AUTO_INDEX)==0 );
171641 if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue;
171643 for(j=pLoop->nLTerm-1; j>=0; j--){
171644 pX = pLoop->aLTerm[j];
171651 if( pLoop->maskSelf==pTerm->prereqAll ){
171662 || (pWC->pWInfo->pTabList->a[pLoop->iTab].fg.jointype
171665 pLoop->wsFlags |= WHERE_SELFCULL;
171671 pLoop->nOut += pTerm->truthProb;
171676 pLoop->nOut--;
171706 pLoop->nOut -= szPattern*2;
171713 if( pLoop->nOut > nRow-iReduce ){
171714 pLoop->nOut = nRow - iReduce;
173669 WhereLoop *pLoop, /* The nested loop term that is a subquery */ argument
173683 pSubOB = pLoop->u.btree.pOrderBy;
173706 if( (pLoop->wsFlags & WHERE_COROUTINE)!=0 ){
173759 WhereLoop *pLoop = 0; /* Current WhereLoop being processed. */ local
173807 if( iLoop>0 ) ready |= pLoop->maskSelf;
173809 pLoop = pPath->aLoop[iLoop];
173812 pLoop = pLast;
173814 if( pLoop->wsFlags & WHERE_VIRTUALTABLE ){
173815 if( pLoop->u.vtab.isOrdered && pWInfo->pOrderBy==pOrderBy ){
173824 iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor;
173846 for(j=0; j<pLoop->nLTerm && pTerm!=pLoop->aLTerm[j]; j++){}
173847 if( j>=pLoop->nLTerm ) continue;
173862 if( (pLoop->wsFlags & WHERE_ONEROW)==0 ){
173863 if( pLoop->wsFlags & WHERE_IPK ){
173864 if( pLoop->u.btree.pOrderBy
173866 && wherePathMatchSubqueryOB(pWInfo,pLoop,iLoop,iCur,
173876 }else if( (pIndex = pLoop->u.btree.pIndex)==0 || pIndex->bUnordered ){
173889 && (pLoop->wsFlags & WHERE_SKIPSCAN)==0;
173900 assert( j>=pLoop->u.btree.nEq
173901 || (pLoop->aLTerm[j]==0)==(j<pLoop->nSkip)
173903 if( j<pLoop->u.btree.nEq && j>=pLoop->nSkip ){
173904 u16 eOp = pLoop->aLTerm[j]->eOperator;
173931 Expr *pX = pLoop->aLTerm[j]->pExpr;
173932 for(i=j+1; i<pLoop->u.btree.nEq; i++){
173933 if( pLoop->aLTerm[i]->pExpr==pX ){
173934 assert( (pLoop->aLTerm[i]->eOperator & WO_IN) );
173959 && j>=pLoop->u.btree.nEq
173995 pLoop->u.btree.nDistinctCol = j+1;
174016 if( j==pLoop->u.btree.nEq ){
174017 pLoop->wsFlags |= WHERE_BIGNULL_SORT;
174045 orderDistinctMask |= pLoop->maskSelf;
174905 WhereLoop *pLoop; local
174906 for(pLoop=pWInfo->pLoops; pLoop; pLoop=pLoop->pNextLoop){
174907 if( pLoop->iTab!=iTab ) continue;
174908 if( (pLoop->wsFlags & (WHERE_CONSTRAINT|WHERE_AUTO_INDEX))!=0 ){
174918 sqlite3WhereLoopPrint(pLoop, &pWInfo->sWC);
174921 pLoop->prereq = ALLBITS; /* Prevent 2nd solver() from using this one */
174945 WhereLoop *pLoop; local
174965 pLoop = pBuilder->pNew;
174966 pLoop->wsFlags = 0;
174967 pLoop->nSkip = 0;
174972 pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_IPK|WHERE_ONEROW;
174973 pLoop->aLTerm[0] = pTerm;
174974 pLoop->nLTerm = 1;
174975 pLoop->u.btree.nEq = 1;
174977 pLoop->rRun = 33; /* 33==sqlite3LogEst(10) */
174981 assert( pLoop->aLTermSpace==pLoop->aLTerm );
174984 || pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace)
174992 pLoop->aLTerm[j] = pTerm;
174995 pLoop->wsFlags = WHERE_COLUMN_EQ|WHERE_ONEROW|WHERE_INDEXED;
174997 pLoop->wsFlags |= WHERE_IDX_ONLY;
174999 pLoop->nLTerm = j;
175000 pLoop->u.btree.nEq = j;
175001 pLoop->u.btree.pIndex = pIdx;
175003 pLoop->rRun = 39; /* 39==sqlite3LogEst(15) */
175007 if( pLoop->wsFlags ){
175008 pLoop->nOut = (LogEst)1;
175009 pWInfo->a[0].pWLoop = pLoop;
175011 pLoop->maskSelf = 1; /* sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur); */
175018 if( scan.iEquiv>1 ) pLoop->wsFlags |= WHERE_TRANSCONS;
175020 pLoop->cId = '0';
175145 WhereLoop *pLoop; local
175147 pLoop = pWInfo->a[i].pWLoop;
175148 pItem = &pWInfo->pTabList->a[pLoop->iTab];
175151 && (pLoop->wsFlags & WHERE_ONEROW)==0
175155 if( (tabUsed & pLoop->maskSelf)!=0 ) continue;
175158 if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
175173 WHERETRACE(0xffffffff,("-> omit unused FROM-clause term %c\n",pLoop->cId));
175177 notReady &= ~pLoop->maskSelf;
175179 if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
175221 WhereLoop *pLoop = pWInfo->a[i].pWLoop; local
175223 SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab];
175228 && (pLoop->wsFlags & reqFlags)==reqFlags
175230 && ALWAYS((pLoop->wsFlags & (WHERE_IPK|WHERE_INDEXED))!=0)
175234 pLoop->wsFlags |= WHERE_BLOOMFILTER;
175235 pLoop->wsFlags &= ~WHERE_IDX_ONLY;
175239 pLoop->cId, (double)sqlite3LogEstToInt(nSearch), pTab->zName,
175243 nSearch += pLoop->nOut;
175437 WhereLoop *pLoop; /* Pointer to a single WhereLoop object */ local
175840 pLoop = pLevel->pWLoop;
175853 if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)!=0 ){
175861 if( ((pLoop->wsFlags & WHERE_IDX_ONLY)==0
175877 && (pLoop->wsFlags & (WHERE_AUTO_INDEX|WHERE_BLOOMFILTER))==0
175889 if( pLoop->u.btree.pIndex!=0 && (pTab->tabFlags & TF_WithoutRowid)==0 ){
175910 if( pLoop->wsFlags & WHERE_INDEXED ){
175911 Index *pIx = pLoop->u.btree.pIndex;
175954 if( (pLoop->wsFlags & WHERE_CONSTRAINT)!=0
175955 && (pLoop->wsFlags & (WHERE_COLUMN_RANGE|WHERE_SKIPSCAN))==0
175956 && (pLoop->wsFlags & WHERE_BIGNULL_SORT)==0
175957 && (pLoop->wsFlags & WHERE_IN_SEEKSCAN)==0
176006 pLoop->wsFlags &= ~WHERE_IDX_ONLY;
176114 WhereLoop *pLoop; local
176143 pLoop = pLevel->pWLoop;
176150 && (pLoop->wsFlags & WHERE_INDEXED)!=0
176151 && (pIdx = pLoop->u.btree.pIndex)->hasStat1
176152 && (n = pLoop->u.btree.nDistinctCol)>0
176202 if( (pLoop->wsFlags & WHERE_IN_ABLE)!=0 && pLevel->u.in.nIn>0 ){
176213 (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0
176214 && (pLoop->wsFlags & WHERE_IN_EARLYOUT)!=0;
176255 VdbeComment((v, "next skip-scan on %s", pLoop->u.btree.pIndex->zName));
176267 int ws = pLoop->wsFlags;
176313 pLoop = pLevel->pWLoop;
176348 if( pLoop->wsFlags & (WHERE_INDEXED|WHERE_IDX_ONLY) ){
176349 pIdx = pLoop->u.btree.pIndex;
176350 }else if( pLoop->wsFlags & WHERE_MULTI_OR ){
176421 }else if( pLoop->wsFlags & (WHERE_IDX_ONLY|WHERE_EXPRIDX) ){
176422 if( pLoop->wsFlags & WHERE_IDX_ONLY ){
176436 pLoop->wsFlags &= ~WHERE_EXPRIDX;
179724 Select *pNext = 0, *pLoop = p; local
179727 pLoop->pNext = pNext;
179728 pLoop->selFlags |= SF_Compound;
179729 pNext = pLoop;
179730 pLoop = pLoop->pPrior;
179731 if( pLoop==0 ) break;
179733 if( pLoop->pOrderBy || pLoop->pLimit ){
179735 pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT",