Lines Matching refs:pWInfo

49 LogEst sqlite3WhereOutputRowCount(WhereInfo *pWInfo){  in sqlite3WhereOutputRowCount()  argument
50 return pWInfo->nRowOut; in sqlite3WhereOutputRowCount()
57 int sqlite3WhereIsDistinct(WhereInfo *pWInfo){ in sqlite3WhereIsDistinct() argument
58 return pWInfo->eDistinct; in sqlite3WhereIsDistinct()
69 int sqlite3WhereIsOrdered(WhereInfo *pWInfo){ in sqlite3WhereIsOrdered() argument
70 return pWInfo->nOBSat; in sqlite3WhereIsOrdered()
96 int sqlite3WhereOrderByLimitOptLabel(WhereInfo *pWInfo){ in sqlite3WhereOrderByLimitOptLabel() argument
98 if( !pWInfo->bOrderedInnerLoop ){ in sqlite3WhereOrderByLimitOptLabel()
101 return pWInfo->iContinue; in sqlite3WhereOrderByLimitOptLabel()
103 pInner = &pWInfo->a[pWInfo->nLevel-1]; in sqlite3WhereOrderByLimitOptLabel()
105 return pInner->pRJ ? pWInfo->iContinue : pInner->addrNxt; in sqlite3WhereOrderByLimitOptLabel()
119 void sqlite3WhereMinMaxOptEarlyOut(Vdbe *v, WhereInfo *pWInfo){ in sqlite3WhereMinMaxOptEarlyOut() argument
122 if( !pWInfo->bOrderedInnerLoop ) return; in sqlite3WhereMinMaxOptEarlyOut()
123 if( pWInfo->nOBSat==0 ) return; in sqlite3WhereMinMaxOptEarlyOut()
124 for(i=pWInfo->nLevel-1; i>=0; i--){ in sqlite3WhereMinMaxOptEarlyOut()
125 pInner = &pWInfo->a[i]; in sqlite3WhereMinMaxOptEarlyOut()
131 sqlite3VdbeGoto(v, pWInfo->iBreak); in sqlite3WhereMinMaxOptEarlyOut()
138 int sqlite3WhereContinueLabel(WhereInfo *pWInfo){ in sqlite3WhereContinueLabel() argument
139 assert( pWInfo->iContinue!=0 ); in sqlite3WhereContinueLabel()
140 return pWInfo->iContinue; in sqlite3WhereContinueLabel()
147 int sqlite3WhereBreakLabel(WhereInfo *pWInfo){ in sqlite3WhereBreakLabel() argument
148 return pWInfo->iBreak; in sqlite3WhereBreakLabel()
168 int sqlite3WhereOkOnePass(WhereInfo *pWInfo, int *aiCur){ in sqlite3WhereOkOnePass() argument
169 memcpy(aiCur, pWInfo->aiCurOnePass, sizeof(int)*2); in sqlite3WhereOkOnePass()
171 if( sqlite3WhereTrace && pWInfo->eOnePass!=ONEPASS_OFF ){ in sqlite3WhereOkOnePass()
173 pWInfo->eOnePass==ONEPASS_SINGLE ? "ONEPASS_SINGLE" : "ONEPASS_MULTI", in sqlite3WhereOkOnePass()
177 return pWInfo->eOnePass; in sqlite3WhereOkOnePass()
184 int sqlite3WhereUsesDeferredSeek(WhereInfo *pWInfo){ in sqlite3WhereUsesDeferredSeek() argument
185 return pWInfo->bDeferredSeek; in sqlite3WhereUsesDeferredSeek()
258 void *sqlite3WhereMalloc(WhereInfo *pWInfo, u64 nByte){ in sqlite3WhereMalloc() argument
260 pBlock = sqlite3DbMallocRawNN(pWInfo->pParse->db, nByte+sizeof(*pBlock)); in sqlite3WhereMalloc()
262 pBlock->pNext = pWInfo->pMemToFree; in sqlite3WhereMalloc()
264 pWInfo->pMemToFree = pBlock; in sqlite3WhereMalloc()
269 void *sqlite3WhereRealloc(WhereInfo *pWInfo, void *pOld, u64 nByte){ in sqlite3WhereRealloc() argument
270 void *pNew = sqlite3WhereMalloc(pWInfo, nByte); in sqlite3WhereRealloc()
356 Parse *pParse = pWC->pWInfo->pParse; in whereScanNext()
984 pTabItem = &pWC->pWInfo->pTabList->a[pLevel->iFrom]; in constructAutomaticIndex()
1055 WhereInfo *pWInfo, /* The WHERE clause */ in sqlite3ConstructBloomFilter() argument
1065 Parse *pParse = pWInfo->pParse; /* Parsing context */ in sqlite3ConstructBloomFilter()
1079 sqlite3WhereExplainBloomFilter(pParse, pWInfo, pLevel); in sqlite3ConstructBloomFilter()
1092 pItem = &pWInfo->pTabList->a[pLevel->iFrom]; in sqlite3ConstructBloomFilter()
1105 pWCEnd = &pWInfo->sWC.a[pWInfo->sWC.nTerm]; in sqlite3ConstructBloomFilter()
1106 for(pTerm=pWInfo->sWC.a; pTerm<pWCEnd; pTerm++){ in sqlite3ConstructBloomFilter()
1138 while( ++iLevel < pWInfo->nLevel ){ in sqlite3ConstructBloomFilter()
1140 pLevel = &pWInfo->a[iLevel]; in sqlite3ConstructBloomFilter()
1141 pTabItem = &pWInfo->pTabList->a[pLevel->iFrom]; in sqlite3ConstructBloomFilter()
1156 }while( iLevel < pWInfo->nLevel ); in sqlite3ConstructBloomFilter()
1168 WhereInfo *pWInfo, /* The WHERE clause */ in allocateIndexInfo() argument
1176 Parse *pParse = pWInfo->pParse; in allocateIndexInfo()
1187 ExprList *pOrderBy = pWInfo->pOrderBy; in allocateIndexInfo()
1269 if( (pWInfo->wctrlFlags & WHERE_DISTINCTBY) ){ in allocateIndexInfo()
1270 eDistinct = 2 + ((pWInfo->wctrlFlags & WHERE_SORTBYGROUP)!=0); in allocateIndexInfo()
1271 }else if( pWInfo->wctrlFlags & WHERE_GROUPBY ){ in allocateIndexInfo()
2142 WhereInfo *pWInfo = pWC->pWInfo; in sqlite3WhereLoopPrint() local
2143 int nb = 1+(pWInfo->pTabList->nSrc+3)/4; in sqlite3WhereLoopPrint()
2144 SrcItem *pItem = pWInfo->pTabList->a + p->iTab; in sqlite3WhereLoopPrint()
2281 static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ in whereInfoFree() argument
2282 assert( pWInfo!=0 ); in whereInfoFree()
2284 sqlite3WhereClauseClear(&pWInfo->sWC); in whereInfoFree()
2285 while( pWInfo->pLoops ){ in whereInfoFree()
2286 WhereLoop *p = pWInfo->pLoops; in whereInfoFree()
2287 pWInfo->pLoops = p->pNextLoop; in whereInfoFree()
2290 while( pWInfo->pMemToFree ){ in whereInfoFree()
2291 WhereMemBlock *pNext = pWInfo->pMemToFree->pNext; in whereInfoFree()
2292 sqlite3DbNNFreeNN(db, pWInfo->pMemToFree); in whereInfoFree()
2293 pWInfo->pMemToFree = pNext; in whereInfoFree()
2295 sqlite3DbNNFreeNN(db, pWInfo); in whereInfoFree()
2486 WhereInfo *pWInfo = pBuilder->pWInfo; in whereLoopInsert() local
2487 sqlite3 *db = pWInfo->pParse->db; in whereLoopInsert()
2498 whereLoopAdjustCost(pWInfo->pLoops, pTemplate); in whereLoopInsert()
2523 ppPrev = whereLoopFindLesser(&pWInfo->pLoops, pTemplate); in whereLoopInsert()
2655 || (pWC->pWInfo->pTabList->a[pLoop->iTab].fg.jointype in whereLoopOutputAdjust()
2790 WhereInfo *pWInfo = pBuilder->pWInfo; /* WHERE analyse context */ in whereLoopAddBtreeIndex() local
2791 Parse *pParse = pWInfo->pParse; /* Parsing context */ in whereLoopAddBtreeIndex()
3195 if( (pOB = pBuilder->pWInfo->pOrderBy)==0 ) return 0; in indexMightHelpWithOrderBy()
3230 pParse = pWC->pWInfo->pParse; in whereUsablePartialIndex()
3306 WhereInfo *pWInfo, /* The WHERE clause context */ in whereIsCoveringIndex() argument
3313 if( pWInfo->pSelect==0 ){ in whereIsCoveringIndex()
3334 sqlite3WalkSelect(&w, pWInfo->pSelect); in whereIsCoveringIndex()
3378 WhereInfo *pWInfo; /* WHERE analysis context */ in whereLoopAddBtree() local
3394 pWInfo = pBuilder->pWInfo; in whereLoopAddBtree()
3395 pTabList = pWInfo->pTabList; in whereLoopAddBtree()
3437 && (pWInfo->wctrlFlags & (WHERE_RIGHT_JOIN|WHERE_OR_SUBCLAUSE))==0 in whereLoopAddBtree()
3438 && (pWInfo->pParse->db->flags & SQLITE_AutoIndex)!=0 in whereLoopAddBtree()
3516 assert( (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || b==0 ); in whereLoopAddBtree()
3556 m = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor); in whereLoopAddBtree()
3569 && (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 in whereLoopAddBtree()
3571 && OptimizationEnabled(pWInfo->pParse->db, SQLITE_CoverIdxScan) in whereLoopAddBtree()
3589 WhereClause *pWC2 = &pWInfo->sWC; in whereLoopAddBtree()
3689 Parse *pParse = pBuilder->pWInfo->pParse; in whereLoopAddVirtualOne()
3690 SrcItem *pSrc = &pBuilder->pWInfo->pTabList->a[pNew->iTab]; in whereLoopAddVirtualOne()
4001 WhereInfo *pWInfo; /* WHERE analysis context */ in whereLoopAddVirtual() local
4014 pWInfo = pBuilder->pWInfo; in whereLoopAddVirtual()
4015 pParse = pWInfo->pParse; in whereLoopAddVirtual()
4018 pSrc = &pWInfo->pTabList->a[pNew->iTab]; in whereLoopAddVirtual()
4020 p = allocateIndexInfo(pWInfo, pWC, mUnusable, pSrc, &mNoOmit); in whereLoopAddVirtual()
4131 WhereInfo *pWInfo = pBuilder->pWInfo; in whereLoopAddOr() local
4146 pItem = pWInfo->pTabList->a + pNew->iTab; in whereLoopAddOr()
4170 tempWC.pWInfo = pWC->pWInfo; in whereLoopAddOr()
4256 WhereInfo *pWInfo = pBuilder->pWInfo; in whereLoopAddAll() local
4260 SrcList *pTabList = pWInfo->pTabList; in whereLoopAddAll()
4262 SrcItem *pEnd = &pTabList->a[pWInfo->nLevel]; in whereLoopAddAll()
4263 sqlite3 *db = pWInfo->pParse->db; in whereLoopAddAll()
4284 pNew->maskSelf = sqlite3WhereGetMask(&pWInfo->sMaskSet, pItem->iCursor); in whereLoopAddAll()
4309 mUnusable |= sqlite3WhereGetMask(&pWInfo->sMaskSet, p->iCursor); in whereLoopAddAll()
4355 WhereInfo *pWInfo, /* The WHERE clause */ in wherePathSatisfiesOrderBy() argument
4382 sqlite3 *db = pWInfo->pParse->db; /* Database connection */ in wherePathSatisfiesOrderBy()
4442 iCur = pWInfo->pTabList->a[pLoop->iTab].iCursor; in wherePathSatisfiesOrderBy()
4455 pTerm = sqlite3WhereFindTerm(&pWInfo->sWC, iCur, pOBExpr->iColumn, in wherePathSatisfiesOrderBy()
4468 Parse *pParse = pWInfo->pParse; in wherePathSatisfiesOrderBy()
4600 pColl = sqlite3ExprNNCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr); in wherePathSatisfiesOrderBy()
4660 mTerm = sqlite3WhereExprUsage(&pWInfo->sMaskSet,p); in wherePathSatisfiesOrderBy()
4703 int sqlite3WhereIsSorted(WhereInfo *pWInfo){ in sqlite3WhereIsSorted() argument
4704 assert( pWInfo->wctrlFlags & (WHERE_GROUPBY|WHERE_DISTINCTBY) ); in sqlite3WhereIsSorted()
4705 assert( pWInfo->wctrlFlags & WHERE_SORTBYGROUP ); in sqlite3WhereIsSorted()
4706 return pWInfo->sorted; in sqlite3WhereIsSorted()
4727 WhereInfo *pWInfo, in whereSortingCost() argument
4756 if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 && pWInfo->iLimit<nRow ){ in whereSortingCost()
4757 nRow = pWInfo->iLimit; in whereSortingCost()
4758 }else if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT) ){ in whereSortingCost()
4779 static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){ in wherePathSolver() argument
4800 pParse = pWInfo->pParse; in wherePathSolver()
4801 nLoop = pWInfo->nLevel; in wherePathSolver()
4806 assert( nLoop<=pWInfo->pTabList->nSrc ); in wherePathSolver()
4814 if( pWInfo->pOrderBy==0 || nRowEst==0 ){ in wherePathSolver()
4817 nOrderBy = pWInfo->pOrderBy->nExpr; in wherePathSolver()
4869 for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){ in wherePathSolver()
4897 isOrdered = wherePathSatisfiesOrderBy(pWInfo, in wherePathSolver()
4898 pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags, in wherePathSolver()
4906 pWInfo, nRowEst, nOrderBy, isOrdered in wherePathSolver()
5090 assert( pWInfo->nLevel==nLoop ); in wherePathSolver()
5093 WhereLevel *pLevel = pWInfo->a + iLoop; in wherePathSolver()
5096 pLevel->iTabCur = pWInfo->pTabList->a[pLevel->iFrom].iCursor; in wherePathSolver()
5098 if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)!=0 in wherePathSolver()
5099 && (pWInfo->wctrlFlags & WHERE_DISTINCTBY)==0 in wherePathSolver()
5100 && pWInfo->eDistinct==WHERE_DISTINCT_NOOP in wherePathSolver()
5104 int rc = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pResultSet, pFrom, in wherePathSolver()
5106 if( rc==pWInfo->pResultSet->nExpr ){ in wherePathSolver()
5107 pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; in wherePathSolver()
5110 pWInfo->bOrderedInnerLoop = 0; in wherePathSolver()
5111 if( pWInfo->pOrderBy ){ in wherePathSolver()
5112 pWInfo->nOBSat = pFrom->isOrdered; in wherePathSolver()
5113 if( pWInfo->wctrlFlags & WHERE_DISTINCTBY ){ in wherePathSolver()
5114 if( pFrom->isOrdered==pWInfo->pOrderBy->nExpr ){ in wherePathSolver()
5115 pWInfo->eDistinct = WHERE_DISTINCT_ORDERED; in wherePathSolver()
5118 pWInfo->revMask = pFrom->revLoop; in wherePathSolver()
5119 if( pWInfo->nOBSat<=0 ){ in wherePathSolver()
5120 pWInfo->nOBSat = 0; in wherePathSolver()
5127 int rc = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pOrderBy, pFrom, in wherePathSolver()
5131 if( rc==pWInfo->pOrderBy->nExpr ){ in wherePathSolver()
5132 pWInfo->bOrderedInnerLoop = 1; in wherePathSolver()
5133 pWInfo->revMask = m; in wherePathSolver()
5138 && pWInfo->nOBSat==1 in wherePathSolver()
5139 && (pWInfo->wctrlFlags & (WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX))!=0 in wherePathSolver()
5141 pWInfo->bOrderedInnerLoop = 1; in wherePathSolver()
5144 if( (pWInfo->wctrlFlags & WHERE_SORTBYGROUP) in wherePathSolver()
5145 && pWInfo->nOBSat==pWInfo->pOrderBy->nExpr && nLoop>0 in wherePathSolver()
5148 int nOrder = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pOrderBy, in wherePathSolver()
5151 assert( pWInfo->sorted==0 ); in wherePathSolver()
5152 if( nOrder==pWInfo->pOrderBy->nExpr ){ in wherePathSolver()
5153 pWInfo->sorted = 1; in wherePathSolver()
5154 pWInfo->revMask = revMask; in wherePathSolver()
5160 pWInfo->nRowOut = pFrom->nRow; in wherePathSolver()
5179 WhereInfo *pWInfo; in whereShortCut() local
5190 pWInfo = pBuilder->pWInfo; in whereShortCut()
5191 if( pWInfo->wctrlFlags & WHERE_OR_SUBCLAUSE ) return 0; in whereShortCut()
5192 assert( pWInfo->pTabList->nSrc>=1 ); in whereShortCut()
5193 pItem = pWInfo->pTabList->a; in whereShortCut()
5202 pWC = &pWInfo->sWC; in whereShortCut()
5247 pWInfo->a[0].pWLoop = pLoop; in whereShortCut()
5248 assert( pWInfo->sMaskSet.n==1 && iCur==pWInfo->sMaskSet.ix[0] ); in whereShortCut()
5250 pWInfo->a[0].iTabCur = iCur; in whereShortCut()
5251 pWInfo->nRowOut = 1; in whereShortCut()
5252 if( pWInfo->pOrderBy ) pWInfo->nOBSat = pWInfo->pOrderBy->nExpr; in whereShortCut()
5253 if( pWInfo->wctrlFlags & WHERE_WANT_DISTINCT ){ in whereShortCut()
5254 pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; in whereShortCut()
5301 static void showAllWhereLoops(WhereInfo *pWInfo, WhereClause *pWC){ in showAllWhereLoops() argument
5307 for(p=pWInfo->pLoops, i=0; p; p=p->pNextLoop, i++){ in showAllWhereLoops()
5348 WhereInfo *pWInfo, in whereOmitNoopJoin() argument
5355 assert( pWInfo->nLevel>=2 ); in whereOmitNoopJoin()
5356 assert( OptimizationEnabled(pWInfo->pParse->db, SQLITE_OmitNoopJoin) ); in whereOmitNoopJoin()
5360 assert( pWInfo->pResultSet!=0 ); in whereOmitNoopJoin()
5361 assert( 0==(pWInfo->wctrlFlags & WHERE_AGG_DISTINCT) ); in whereOmitNoopJoin()
5363 tabUsed = sqlite3WhereExprListUsage(&pWInfo->sMaskSet, pWInfo->pResultSet); in whereOmitNoopJoin()
5364 if( pWInfo->pOrderBy ){ in whereOmitNoopJoin()
5365 tabUsed |= sqlite3WhereExprListUsage(&pWInfo->sMaskSet, pWInfo->pOrderBy); in whereOmitNoopJoin()
5367 for(i=pWInfo->nLevel-1; i>=1; i--){ in whereOmitNoopJoin()
5371 pLoop = pWInfo->a[i].pWLoop; in whereOmitNoopJoin()
5372 pItem = &pWInfo->pTabList->a[pLoop->iTab]; in whereOmitNoopJoin()
5374 if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0 in whereOmitNoopJoin()
5380 pEnd = pWInfo->sWC.a + pWInfo->sWC.nTerm; in whereOmitNoopJoin()
5381 for(pTerm=pWInfo->sWC.a; pTerm<pEnd; pTerm++){ in whereOmitNoopJoin()
5393 for(pTerm=pWInfo->sWC.a; pTerm<pEnd; pTerm++){ in whereOmitNoopJoin()
5398 if( i!=pWInfo->nLevel-1 ){ in whereOmitNoopJoin()
5399 int nByte = (pWInfo->nLevel-1-i) * sizeof(WhereLevel); in whereOmitNoopJoin()
5400 memmove(&pWInfo->a[i], &pWInfo->a[i+1], nByte); in whereOmitNoopJoin()
5402 pWInfo->nLevel--; in whereOmitNoopJoin()
5403 assert( pWInfo->nLevel>0 ); in whereOmitNoopJoin()
5427 const WhereInfo *pWInfo in whereCheckIfBloomFilterIsUseful() argument
5432 assert( pWInfo->nLevel>=2 ); in whereCheckIfBloomFilterIsUseful()
5433 assert( OptimizationEnabled(pWInfo->pParse->db, SQLITE_BloomFilter) ); in whereCheckIfBloomFilterIsUseful()
5434 nSearch = pWInfo->a[0].pWLoop->nOut; in whereCheckIfBloomFilterIsUseful()
5435 for(i=1; i<pWInfo->nLevel; i++){ in whereCheckIfBloomFilterIsUseful()
5436 WhereLoop *pLoop = pWInfo->a[i].pWLoop; in whereCheckIfBloomFilterIsUseful()
5442 SrcItem *pItem = &pWInfo->pTabList->a[pLoop->iTab]; in whereCheckIfBloomFilterIsUseful()
5634 WhereInfo *pWInfo; /* Will become the return value of this function */ in sqlite3WhereBegin() local
5687 pWInfo = sqlite3DbMallocRawNN(db, nByteWInfo + sizeof(WhereLoop)); in sqlite3WhereBegin()
5689 sqlite3DbFree(db, pWInfo); in sqlite3WhereBegin()
5690 pWInfo = 0; in sqlite3WhereBegin()
5693 pWInfo->pParse = pParse; in sqlite3WhereBegin()
5694 pWInfo->pTabList = pTabList; in sqlite3WhereBegin()
5695 pWInfo->pOrderBy = pOrderBy; in sqlite3WhereBegin()
5697 pWInfo->pWhere = pWhere; in sqlite3WhereBegin()
5699 pWInfo->pResultSet = pResultSet; in sqlite3WhereBegin()
5700 pWInfo->aiCurOnePass[0] = pWInfo->aiCurOnePass[1] = -1; in sqlite3WhereBegin()
5701 pWInfo->nLevel = nTabList; in sqlite3WhereBegin()
5702 pWInfo->iBreak = pWInfo->iContinue = sqlite3VdbeMakeLabel(pParse); in sqlite3WhereBegin()
5703 pWInfo->wctrlFlags = wctrlFlags; in sqlite3WhereBegin()
5704 pWInfo->iLimit = iAuxArg; in sqlite3WhereBegin()
5705 pWInfo->savedNQueryLoop = pParse->nQueryLoop; in sqlite3WhereBegin()
5706 pWInfo->pSelect = pSelect; in sqlite3WhereBegin()
5707 memset(&pWInfo->nOBSat, 0, in sqlite3WhereBegin()
5709 memset(&pWInfo->a[0], 0, sizeof(WhereLoop)+nTabList*sizeof(WhereLevel)); in sqlite3WhereBegin()
5710 assert( pWInfo->eOnePass==ONEPASS_OFF ); /* ONEPASS defaults to OFF */ in sqlite3WhereBegin()
5711 pMaskSet = &pWInfo->sMaskSet; in sqlite3WhereBegin()
5716 sWLB.pWInfo = pWInfo; in sqlite3WhereBegin()
5717 sWLB.pWC = &pWInfo->sWC; in sqlite3WhereBegin()
5718 sWLB.pNew = (WhereLoop*)(((char*)pWInfo)+nByteWInfo); in sqlite3WhereBegin()
5728 sqlite3WhereClauseInit(&pWInfo->sWC, pWInfo); in sqlite3WhereBegin()
5729 sqlite3WhereSplit(&pWInfo->sWC, pWhere, TK_AND); in sqlite3WhereBegin()
5734 if( pOrderBy ) pWInfo->nOBSat = pOrderBy->nExpr; in sqlite3WhereBegin()
5738 pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; in sqlite3WhereBegin()
5759 sqlite3WhereTabFuncArgs(pParse, &pTabList->a[ii], &pWInfo->sWC); in sqlite3WhereBegin()
5774 sqlite3WhereExprAnalyze(pTabList, &pWInfo->sWC); in sqlite3WhereBegin()
5776 sqlite3WhereAddLimit(&pWInfo->sWC, pSelect); in sqlite3WhereBegin()
5795 sqlite3ExprIfFalse(pParse, pT->pExpr, pWInfo->iBreak, SQLITE_JUMPIFNULL); in sqlite3WhereBegin()
5805 pWInfo->wctrlFlags &= ~WHERE_WANT_DISTINCT; in sqlite3WhereBegin()
5806 }else if( isDistinctRedundant(pParse, pTabList, &pWInfo->sWC, pResultSet) ){ in sqlite3WhereBegin()
5808 pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE; in sqlite3WhereBegin()
5811 pWInfo->wctrlFlags |= WHERE_DISTINCTBY; in sqlite3WhereBegin()
5812 pWInfo->pOrderBy = pResultSet; in sqlite3WhereBegin()
5852 WHERETRACE_ALL_LOOPS(pWInfo, sWLB.pWC); in sqlite3WhereBegin()
5856 while( pWInfo->pLoops ){ in sqlite3WhereBegin()
5857 WhereLoop *p = pWInfo->pLoops; in sqlite3WhereBegin()
5858 pWInfo->pLoops = p->pNextLoop; in sqlite3WhereBegin()
5865 WHERETRACE_ALL_LOOPS(pWInfo, sWLB.pWC); in sqlite3WhereBegin()
5867 wherePathSolver(pWInfo, 0); in sqlite3WhereBegin()
5869 if( pWInfo->pOrderBy ){ in sqlite3WhereBegin()
5870 wherePathSolver(pWInfo, pWInfo->nRowOut+1); in sqlite3WhereBegin()
5874 if( pWInfo->pOrderBy==0 && (db->flags & SQLITE_ReverseOrder)!=0 ){ in sqlite3WhereBegin()
5875 pWInfo->revMask = ALLBITS; in sqlite3WhereBegin()
5883 sqlite3DebugPrintf("---- Solution nRow=%d", pWInfo->nRowOut); in sqlite3WhereBegin()
5884 if( pWInfo->nOBSat>0 ){ in sqlite3WhereBegin()
5885 sqlite3DebugPrintf(" ORDERBY=%d,0x%llx", pWInfo->nOBSat, pWInfo->revMask); in sqlite3WhereBegin()
5887 switch( pWInfo->eDistinct ){ in sqlite3WhereBegin()
5902 for(ii=0; ii<pWInfo->nLevel; ii++){ in sqlite3WhereBegin()
5903 sqlite3WhereLoopPrint(pWInfo->a[ii].pWLoop, sWLB.pWC); in sqlite3WhereBegin()
5919 if( pWInfo->nLevel>=2 in sqlite3WhereBegin()
5924 notReady = whereOmitNoopJoin(pWInfo, notReady); in sqlite3WhereBegin()
5925 nTabList = pWInfo->nLevel; in sqlite3WhereBegin()
5932 if( pWInfo->nLevel>=2 in sqlite3WhereBegin()
5935 whereCheckIfBloomFilterIsUseful(pWInfo); in sqlite3WhereBegin()
5945 pWInfo->pParse->nQueryLoop += pWInfo->nRowOut; in sqlite3WhereBegin()
5966 assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); in sqlite3WhereBegin()
5968 int wsFlags = pWInfo->a[0].pWLoop->wsFlags; in sqlite3WhereBegin()
5976 pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI; in sqlite3WhereBegin()
5981 pWInfo->a[0].pWLoop->wsFlags = (wsFlags & ~WHERE_IDX_ONLY); in sqlite3WhereBegin()
5989 for(ii=0, pLevel=pWInfo->a; ii<nTabList; ii++, pLevel++){ in sqlite3WhereBegin()
6015 if( pWInfo->eOnePass!=ONEPASS_OFF ){ in sqlite3WhereBegin()
6017 pWInfo->aiCurOnePass[0] = pTabItem->iCursor; in sqlite3WhereBegin()
6021 testcase( pWInfo->eOnePass==ONEPASS_OFF && pTab->nCol==BMS-1 ); in sqlite3WhereBegin()
6022 testcase( pWInfo->eOnePass==ONEPASS_OFF && pTab->nCol==BMS ); in sqlite3WhereBegin()
6023 if( pWInfo->eOnePass==ONEPASS_OFF in sqlite3WhereBegin()
6057 assert( iAuxArg!=0 || (pWInfo->wctrlFlags & WHERE_ONEPASS_DESIRED)==0 ); in sqlite3WhereBegin()
6065 }else if( pWInfo->eOnePass!=ONEPASS_OFF ){ in sqlite3WhereBegin()
6074 pWInfo->aiCurOnePass[1] = iIndexCur; in sqlite3WhereBegin()
6095 && (pWInfo->wctrlFlags&WHERE_ORDERBY_MIN)==0 in sqlite3WhereBegin()
6096 && pWInfo->eDistinct!=WHERE_DISTINCT_ORDERED in sqlite3WhereBegin()
6120 && (pLevel->pRJ = sqlite3WhereMalloc(pWInfo, sizeof(WhereRightJoin)))!=0 in sqlite3WhereBegin()
6147 pWInfo->nOBSat = 0; in sqlite3WhereBegin()
6148 pWInfo->eDistinct = WHERE_DISTINCT_UNORDERED; in sqlite3WhereBegin()
6151 pWInfo->iTop = sqlite3VdbeCurrentAddr(v); in sqlite3WhereBegin()
6163 pLevel = &pWInfo->a[ii]; in sqlite3WhereBegin()
6178 constructAutomaticIndex(pParse, &pWInfo->sWC, in sqlite3WhereBegin()
6182 sqlite3ConstructBloomFilter(pWInfo, ii, pLevel, notReady); in sqlite3WhereBegin()
6190 notReady = sqlite3WhereCodeOneLoopStart(pParse,v,pWInfo,ii,pLevel,notReady); in sqlite3WhereBegin()
6191 pWInfo->iContinue = pLevel->addrCont; in sqlite3WhereBegin()
6199 pWInfo->iEndWhere = sqlite3VdbeCurrentAddr(v); in sqlite3WhereBegin()
6200 return pWInfo; in sqlite3WhereBegin()
6204 if( pWInfo ){ in sqlite3WhereBegin()
6205 pParse->nQueryLoop = pWInfo->savedNQueryLoop; in sqlite3WhereBegin()
6206 whereInfoFree(db, pWInfo); in sqlite3WhereBegin()
6255 void sqlite3WhereEnd(WhereInfo *pWInfo){ in sqlite3WhereEnd() argument
6256 Parse *pParse = pWInfo->pParse; in sqlite3WhereEnd()
6261 SrcList *pTabList = pWInfo->pTabList; in sqlite3WhereEnd()
6269 for(i=pWInfo->nLevel-1; i>=0; i--){ in sqlite3WhereEnd()
6271 pLevel = &pWInfo->a[i]; in sqlite3WhereEnd()
6289 if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED in sqlite3WhereEnd()
6290 && i==pWInfo->nLevel-1 /* Ticket [ef9318757b152e3] 2017-10-21 */ in sqlite3WhereEnd()
6419 pWInfo->pTabList->a[pLevel->iFrom].pTab->zName)); in sqlite3WhereEnd()
6422 assert( pWInfo->nLevel<=pTabList->nSrc ); in sqlite3WhereEnd()
6423 for(i=0, pLevel=pWInfo->a; i<pWInfo->nLevel; i++, pLevel++){ in sqlite3WhereEnd()
6437 sqlite3WhereRightJoinLoop(pWInfo, i, pLevel); in sqlite3WhereEnd()
6471 if( pWInfo->eOnePass==ONEPASS_OFF || !HasRowid(pIdx->pTable) ){ in sqlite3WhereEnd()
6474 last = pWInfo->iEndWhere; in sqlite3WhereEnd()
6565 sqlite3VdbeResolveLabel(v, pWInfo->iBreak); in sqlite3WhereEnd()
6569 pParse->nQueryLoop = pWInfo->savedNQueryLoop; in sqlite3WhereEnd()
6570 whereInfoFree(db, pWInfo); in sqlite3WhereEnd()