Lines Matching refs:pLevel
163581 WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */
163587 const WhereLevel *pLevel /* Bloom filter on this level */
163593 WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */
163616 WhereLevel *pLevel, /* The current level pointer */
163622 WhereLevel *pLevel
163809 WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ argument
163817 SrcItem *pItem = &pTabList->a[pLevel->iFrom];
163830 pLoop = pLevel->pWLoop;
163936 WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */ argument
163944 if( (pLevel->pWLoop->wsFlags & WHERE_MULTI_OR)==0
163950 v, OP_Explain, addr, pParse->addrExplain, pLevel->pWLoop->rRun
163952 sqlite3WhereAddExplainText(pParse, addr, pTabList, pLevel, wctrlFlags);
163971 const WhereLevel *pLevel /* Bloom filter on this level */ argument
163974 SrcItem *pItem = &pWInfo->pTabList->a[pLevel->iFrom];
163986 pLoop = pLevel->pWLoop;
164107 static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ argument
164111 && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_OuterON))
164112 && (pLevel->notReady & pTerm->prereqAll)==0
164359 WhereLevel *pLevel, /* The level of the FROM clause we are working on */ argument
164368 WhereLoop *pLoop = pLevel->pWLoop;
164386 disableTerm(pLevel, pTerm);
164418 if( pLevel->u.in.nIn==0 ){
164419 pLevel->addrNxt = sqlite3VdbeMakeLabel(pParse);
164425 i = pLevel->u.in.nIn;
164426 pLevel->u.in.nIn += nEq;
164427 pLevel->u.in.aInLoop =
164429 pLevel->u.in.aInLoop,
164430 sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn);
164431 pIn = pLevel->u.in.aInLoop;
164466 sqlite3VdbeAddOp3(v, OP_SeekHit, pLevel->iIdxCur, 0, iEq);
164469 pLevel->u.in.nIn = 0;
164494 WhereLevel *pLevel, /* The level of the FROM clause we are working on */ argument
164502 assert( pLevel->pWLoop->aLTerm[iEq]==pTerm );
164513 codeINTerm(pParse, pTerm, pLevel, iEq, bRev, iTarget);
164526 if( (pLevel->pWLoop->wsFlags & WHERE_TRANSCONS)==0
164529 disableTerm(pLevel, pTerm);
164582 WhereLevel *pLevel, /* Which nested loop of the FROM we are coding */ argument
164599 pLoop = pLevel->pWLoop;
164616 int iIdxCur = pLevel->iIdxCur;
164623 assert( pLevel->addrSkip==0 );
164624 pLevel->addrSkip = sqlite3VdbeAddOp4Int(v, (bRev?OP_SeekLT:OP_SeekGT),
164647 r1 = codeEqualityTerm(pParse, pTerm, pLevel, j, bRev, regBase+j);
164667 sqlite3VdbeAddOp2(v, OP_IsNull, regBase+j, pLevel->addrBrk);
164705 WhereLevel *pLevel, /* The loop that contains the LIKE operator */ argument
164710 assert( pLevel->iLikeRepCntr>0 );
164715 pOp->p3 = (int)(pLevel->iLikeRepCntr>>1); /* Register holding counter */
164716 pOp->p5 = (u8)(pLevel->iLikeRepCntr&1); /* ASC or DESC */
164837 WhereLevel *pLevel, /* Which loop to provide hints for */ argument
164844 WhereLoop *pLoop = pLevel->pWLoop;
164853 iCur = pLevel->iTabCur;
164854 assert( iCur==pWInfo->pTabList->a[pLevel->iFrom].iCursor );
164856 sHint.iIdxCur = pLevel->iIdxCur;
164865 if( pTerm->prereqAll & pLevel->notReady ) continue;
165088 WhereLevel *pLevel = &pWInfo->a[iLevel]; local
165089 WhereLoop *pLoop = pLevel->pWLoop;
165090 if( pLevel->regFilter==0 ) continue;
165091 if( pLevel->pWLoop->nSkip ) continue;
165095 saved_addrBrk = pLevel->addrBrk;
165096 pLevel->addrBrk = addrNxt;
165104 regRowid = codeEqualityTerm(pParse, pTerm, pLevel, 0, 0, regRowid);
165107 sqlite3VdbeAddOp4Int(pParse->pVdbe, OP_Filter, pLevel->regFilter,
165117 r1 = codeAllEqualityTerms(pParse,pLevel,0,0,&zStartAff);
165120 sqlite3VdbeAddOp4Int(pParse->pVdbe, OP_Filter, pLevel->regFilter,
165124 pLevel->regFilter = 0;
165125 pLevel->addrBrk = saved_addrBrk;
165159 WhereLevel *pLevel, /* The current level pointer */ argument
165180 pLoop = pLevel->pWLoop;
165181 pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
165183 pLevel->notReady = notReady & ~sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur);
165190 iLevel, pWInfo->nLevel, (u64)notReady, pLevel->iFrom);
165215 addrBrk = pLevel->addrNxt = pLevel->addrBrk;
165216 addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(pParse);
165223 || pLevel->iFrom>0 || (pTabItem[0].fg.jointype & JT_LEFT)==0
165225 if( pLevel->iFrom>0 && (pTabItem[0].fg.jointype & JT_LEFT)!=0 ){
165226 pLevel->iLeftJoin = ++pParse->nMem;
165227 sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
165239 pLevel->p2 = sqlite3VdbeAddOp2(v, OP_Yield, regYield, addrBrk);
165242 pLevel->op = OP_Goto;
165255 addrNotFound = pLevel->addrBrk;
165267 codeEqualityTerm(pParse, pTerm, pLevel, j, bRev, iTarget);
165268 addrNotFound = pLevel->addrNxt;
165297 pLevel->p1 = iCur;
165298 pLevel->op = pWInfo->eOnePass ? OP_Noop : OP_VNext;
165299 pLevel->p2 = sqlite3VdbeCurrentAddr(v);
165305 disableTerm(pLevel, pTerm);
165322 for(iIn=0; ALWAYS(iIn<pLevel->u.in.nIn); iIn++){
165323 pOp = sqlite3VdbeGetOp(v, pLevel->u.in.aInLoop[iIn].addrInTop);
165353 pParse, pCompare, pLevel->addrCont, SQLITE_JUMPIFNULL
165386 iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, 0, bRev, iReleaseReg);
165388 addrNxt = pLevel->addrNxt;
165389 if( pLevel->regFilter ){
165392 sqlite3VdbeAddOp4Int(v, OP_Filter, pLevel->regFilter, addrNxt,
165399 pLevel->op = OP_Noop;
165420 codeCursorHint(pTabItem, pWInfo, pLevel, pEnd);
165458 disableTerm(pLevel, pStart);
165469 sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, pLevel->addrHalt);
165490 disableTerm(pLevel, pEnd);
165494 pLevel->op = bRev ? OP_Prev : OP_Next;
165495 pLevel->p1 = iCur;
165496 pLevel->p2 = start;
165497 assert( pLevel->p5==0 );
165578 iIdxCur = pLevel->iIdxCur;
165599 pLevel->iLikeRepCntr = (u32)++pParse->nMem;
165600 sqlite3VdbeAddOp2(v, OP_Integer, 1, (int)pLevel->iLikeRepCntr);
165602 pLevel->addrLikeRep = sqlite3VdbeCurrentAddr(v);
165608 pLevel->iLikeRepCntr <<=1;
165609 pLevel->iLikeRepCntr |= bRev ^ (pIdx->aSortOrder[nEq]==SQLITE_SO_DESC);
165636 pLevel->regBignull = regBignull = ++pParse->nMem;
165637 if( pLevel->iLeftJoin ){
165640 pLevel->addrBignull = sqlite3VdbeMakeLabel(pParse);
165663 codeCursorHint(pTabItem, pWInfo, pLevel, pRangeEnd);
165664 regBase = codeAllEqualityTerms(pParse,pLevel,bRev,nExtraReg,&zStartAff);
165669 addrNxt = (regBignull ? pLevel->addrBignull : pLevel->addrNxt);
165684 whereLikeOptimizationStringFixup(v, pLevel, pRangeStart);
165697 disableTerm(pLevel, pRangeStart);
165722 if( pLevel->regFilter ){
165723 sqlite3VdbeAddOp4Int(v, OP_Filter, pLevel->regFilter, addrNxt,
165781 assert( pLevel->p2==0 );
165786 whereLikeOptimizationStringFixup(v, pLevel, pRangeEnd);
165803 disableTerm(pLevel, pRangeEnd);
165818 pLevel->p2 = sqlite3VdbeCurrentAddr(v);
165876 if( pLevel->iLeftJoin==0 ){
165885 if( pIdx->pPartIdxWhere && pLevel->pRJ==0 ){
165898 || (pLevel->u.in.nIn && regBignull==0 && whereLoopIsOneRow(pLoop))
165900 pLevel->op = OP_Noop;
165902 pLevel->op = OP_Prev;
165904 pLevel->op = OP_Next;
165906 pLevel->p1 = iIdxCur;
165907 pLevel->p3 = (pLoop->wsFlags&WHERE_UNQ_WANTED)!=0 ? 1:0;
165909 pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
165911 assert( pLevel->p5==0 );
165981 pLevel->op = OP_Return;
165982 pLevel->p1 = regReturn;
165999 memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k]));
166230 assert( pLevel->pWLoop==pLoop );
166233 pLevel->u.pCoveringIdx = pCov;
166234 if( pCov ) pLevel->iIdxCur = iCovCur;
166240 sqlite3VdbeGoto(v, pLevel->addrBrk);
166248 assert( pLevel->op==OP_Return );
166249 pLevel->p2 = sqlite3VdbeCurrentAddr(v);
166252 if( !untestedTerms ) disableTerm(pLevel, pTerm);
166266 pLevel->op = OP_Noop;
166268 codeCursorHint(pTabItem, pWInfo, pLevel, 0);
166269 pLevel->op = aStep[bRev];
166270 pLevel->p1 = iCur;
166271 pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev],iCur,pLevel->addrHalt);
166274 pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
166279 pLevel->addrVisit = sqlite3VdbeCurrentAddr(v);
166311 if( (pTerm->prereqAll & pLevel->notReady)!=0 ){
166329 if( m & pLevel->notReady ){
166335 if( iLoop==1 && !sqlite3ExprCoveredByIndex(pE, pLevel->iTabCur, pIdx) ){
166353 u32 x = pLevel->iLikeRepCntr;
166402 assert( (pTerm->prereqRight & pLevel->notReady)!=0 );
166427 if( pLevel->pRJ ){
166432 WhereRightJoin *pRJ = pLevel->pRJ;
166439 pTab = pWInfo->pTabList->a[pLevel->iFrom].pSTab;
166442 sqlite3ExprCodeGetColumnOfTable(v, pTab, pLevel->iTabCur, -1, r+1);
166468 if( pLevel->iLeftJoin ){
166469 pLevel->addrFirst = sqlite3VdbeCurrentAddr(v);
166470 sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin);
166472 if( pLevel->pRJ==0 ){
166477 if( pLevel->pRJ ){
166484 WhereRightJoin *pRJ = pLevel->pRJ;
166500 if( (pTerm->prereqAll & pLevel->notReady)!=0 ){
166519 iLevel, (u64)pLevel->notReady);
166522 return pLevel->notReady;
166532 WhereLevel *pLevel argument
166536 WhereRightJoin *pRJ = pLevel->pRJ;
166540 WhereLoop *pLoop = pLevel->pWLoop;
166541 SrcItem *pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
166590 if( pLevel->iIdxCur ){
166597 sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
166609 int iCur = pLevel->iTabCur;
169580 WhereLevel *pLevel /* Write new index here */ argument
169621 pSrc = &pTabList->a[pLevel->iFrom];
169624 pLoop = pLevel->pWLoop;
169632 && sqlite3ExprIsSingleTableConstraint(pExpr, pTabList, pLevel->iFrom, 0)
169768 assert( pLevel->iIdxCur>=0 );
169769 pLevel->iIdxCur = pParse->nTab++;
169770 sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1);
169774 sqlite3WhereExplainBloomFilter(pParse, pWC->pWInfo, pLevel);
169775 pLevel->regFilter = ++pParse->nMem;
169776 sqlite3VdbeAddOp2(v, OP_Blob, 10000, pLevel->regFilter);
169780 assert( pSrc == &pWC->pWInfo->pTabList->a[pLevel->iFrom] );
169794 assert( pLevel->addrHalt );
169795 addrTop = sqlite3VdbeAddOp2(v, OP_Rewind,pLevel->iTabCur,pLevel->addrHalt);
169805 pParse, pIdx, pLevel->iTabCur, regRecord, 0, 0, 0, 0
169807 if( pLevel->regFilter ){
169808 sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0,
169812 sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
169819 assert( pLevel->iIdxCur>0 );
169820 translateColumnToCopy(pParse, addrTop, pLevel->iTabCur,
169821 pSrc->u4.pSubq->regResult, pLevel->iIdxCur);
169826 sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1); VdbeCoverage(v);
169866 WhereLevel *pLevel, /* Make a Bloom filter for this FROM term */ argument
169876 WhereLoop *pLoop = pLevel->pWLoop; /* The loop being coded */
169898 sqlite3WhereExplainBloomFilter(pParse, pWInfo, pLevel);
169900 iCur = pLevel->iTabCur;
169901 pLevel->regFilter = ++pParse->nMem;
169912 iSrc = pLevel->iFrom;
169923 sqlite3VdbeAddOp2(v, OP_Blob, (int)sz, pLevel->regFilter);
169938 sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, 1);
169949 sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0, r1, n);
169953 sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1);
169960 pLevel = &pWInfo->a[iLevel];
169961 pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
169963 pLoop = pLevel->pWLoop;
174770 WhereLevel *pLevel = pWInfo->a + iLoop; local
174771 pLevel->pWLoop = pWLoop = pFrom->aLoop[iLoop];
174772 pLevel->iFrom = pWLoop->iTab;
174773 pLevel->iTabCur = pWInfo->pTabList->a[pLevel->iFrom].iCursor;
175436 WhereLevel *pLevel; /* A single level in pWInfo->a[] */ local
175832 for(ii=0, pLevel=pWInfo->a; ii<nTabList; ii++, pLevel++){
175837 pTabItem = &pTabList->a[pLevel->iFrom];
175840 pLoop = pLevel->pWLoop;
175841 pLevel->addrBrk = sqlite3VdbeMakeLabel(pParse);
175843 pLevel->addrHalt = pLevel->addrBrk;
175845 pLevel->addrHalt = pWInfo->a[ii-1].addrBrk;
175847 pLevel->addrHalt = pWInfo->a[ii-1].addrHalt;
175871 assert( pTabItem->iCursor==pLevel->iTabCur );
175902 && pLevel->addrHalt==pWInfo->a[0].addrHalt
175921 iIndexCur = pLevel->iTabCur;
175947 pLevel->iIdxCur = iIndexCur;
175983 && (pLevel->pRJ = sqlite3WhereMalloc(pWInfo, sizeof(WhereRightJoin)))!=0
175985 WhereRightJoin *pRJ = pLevel->pRJ;
176026 pLevel = &pWInfo->a[ii];
176027 wsFlags = pLevel->pWLoop->wsFlags;
176028 pSrc = &pTabList->a[pLevel->iFrom];
176047 constructAutomaticIndex(pParse, &pWInfo->sWC, notReady, pLevel);
176050 sqlite3ConstructBloomFilter(pWInfo, ii, pLevel, notReady);
176055 pParse, pTabList, pLevel, wctrlFlags
176057 pLevel->addrBody = sqlite3VdbeCurrentAddr(v);
176058 notReady = sqlite3WhereCodeOneLoopStart(pParse,v,pWInfo,ii,pLevel,notReady);
176059 pWInfo->iContinue = pLevel->addrCont;
176061 sqlite3WhereAddScanStatus(v, pTabList, pLevel, addrExplain);
176113 WhereLevel *pLevel; local
176128 pLevel = &pWInfo->a[i];
176129 if( pLevel->pRJ ){
176132 WhereRightJoin *pRJ = pLevel->pRJ;
176133 sqlite3VdbeResolveLabel(v, pLevel->addrCont);
176137 pLevel->addrCont = sqlite3VdbeMakeLabel(pParse);
176143 pLoop = pLevel->pWLoop;
176144 if( pLevel->op!=OP_Noop ){
176158 if( pLevel->iLeftJoin ){
176159 addrIfNull = sqlite3VdbeAddOp2(v, OP_IfNullRow, pLevel->iIdxCur, r1);
176162 sqlite3VdbeAddOp3(v, OP_Column, pLevel->iIdxCur, j, r1+j);
176165 op = pLevel->op==OP_Prev ? OP_SeekLT : OP_SeekGT;
176166 addrSeek = sqlite3VdbeAddOp4Int(v, op, pLevel->iIdxCur, 0, r1, n);
176169 sqlite3VdbeAddOp2(v, OP_Goto, 1, pLevel->p2);
176170 if( pLevel->iLeftJoin ){
176176 if( pTabList->a[pLevel->iFrom].fg.fromExists ){
176179 sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk);
176182 sqlite3VdbeResolveLabel(v, pLevel->addrCont);
176183 if( pLevel->op!=OP_Noop ){
176184 sqlite3VdbeAddOp3(v, pLevel->op, pLevel->p1, pLevel->p2, pLevel->p3);
176185 sqlite3VdbeChangeP5(v, pLevel->p5);
176187 VdbeCoverageIf(v, pLevel->op==OP_Next);
176188 VdbeCoverageIf(v, pLevel->op==OP_Prev);
176189 VdbeCoverageIf(v, pLevel->op==OP_VNext);
176190 if( pLevel->regBignull ){
176191 sqlite3VdbeResolveLabel(v, pLevel->addrBignull);
176192 sqlite3VdbeAddOp2(v, OP_DecrJumpZero, pLevel->regBignull, pLevel->p2-1);
176202 if( (pLoop->wsFlags & WHERE_IN_ABLE)!=0 && pLevel->u.in.nIn>0 ){
176205 sqlite3VdbeResolveLabel(v, pLevel->addrNxt);
176206 for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){
176215 if( pLevel->iLeftJoin ){
176229 sqlite3VdbeAddOp4Int(v, OP_IfNoHope, pLevel->iIdxCur,
176248 sqlite3VdbeResolveLabel(v, pLevel->addrBrk);
176249 if( pLevel->pRJ ){
176250 sqlite3VdbeAddOp3(v, OP_Return, pLevel->pRJ->regReturn, 0, 1);
176253 if( pLevel->addrSkip ){
176254 sqlite3VdbeGoto(v, pLevel->addrSkip);
176256 sqlite3VdbeJumpHere(v, pLevel->addrSkip);
176257 sqlite3VdbeJumpHere(v, pLevel->addrSkip-2);
176260 if( pLevel->addrLikeRep ){
176261 sqlite3VdbeAddOp2(v, OP_DecrJumpZero, (int)(pLevel->iLikeRepCntr>>1),
176262 pLevel->addrLikeRep);
176266 if( pLevel->iLeftJoin ){
176268 addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v);
176271 SrcItem *pSrc = &pTabList->a[pLevel->iFrom];
176272 assert( pLevel->iTabCur==pSrc->iCursor );
176281 sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur);
176284 || ((ws & WHERE_MULTI_OR) && pLevel->u.pCoveringIdx)
176287 Index *pIx = pLevel->u.pCoveringIdx;
176289 sqlite3VdbeAddOp3(v, OP_ReopenIdx, pLevel->iIdxCur, pIx->tnum, iDb);
176292 sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
176294 if( pLevel->op==OP_Return ){
176295 sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst);
176297 sqlite3VdbeGoto(v, pLevel->addrFirst);
176302 pWInfo->pTabList->a[pLevel->iFrom].pSTab->zName));
176306 for(i=0, pLevel=pWInfo->a; i<pWInfo->nLevel; i++, pLevel++){
176310 SrcItem *pTabItem = &pTabList->a[pLevel->iFrom];
176313 pLoop = pLevel->pWLoop;
176319 if( pLevel->pRJ ){
176320 sqlite3WhereRightJoinLoop(pWInfo, i, pLevel);
176332 translateColumnToCopy(pParse, pLevel->addrBody, pLevel->iTabCur,
176351 pIdx = pLevel->u.pCoveringIdx;
176364 if( p->iIdxCur==pLevel->iIdxCur ){
176378 k = pLevel->addrBody + 1;
176382 pLevel->iTabCur, pLevel->iIdxCur, k, last-1);
176386 assert( pOp->opcode!=OP_Column || pOp->p1!=pLevel->iTabCur );
176387 assert( pOp->opcode!=OP_Rowid || pOp->p1!=pLevel->iTabCur );
176388 assert( pOp->opcode!=OP_IfNullRow || pOp->p1!=pLevel->iTabCur );
176394 if( pOp->p1!=pLevel->iTabCur ){
176419 pOp->p1 = pLevel->iIdxCur;
176438 pLevel->addrBody-1,
176440 pLevel,
176446 pOp->p1 = pLevel->iIdxCur;
176450 pOp->p1 = pLevel->iIdxCur;