Lines Matching refs:pAggInfo
5209 static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){ in isSimpleCount() argument
5219 || pAggInfo->nFunc!=1 in isSimpleCount()
5231 if( pExpr->pAggInfo!=pAggInfo ) return 0; in isSimpleCount()
5232 if( (pAggInfo->aFunc[0].pFunc->funcFlags&SQLITE_FUNC_COUNT)==0 ) return 0; in isSimpleCount()
5233 assert( pAggInfo->aFunc[0].pFExpr==pExpr ); in isSimpleCount()
6215 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ in resetAccumulator() argument
6219 int nReg = pAggInfo->nFunc + pAggInfo->nColumn; in resetAccumulator()
6227 assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 ); in resetAccumulator()
6228 for(i=0; i<pAggInfo->nColumn; i++){ in resetAccumulator()
6229 assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg in resetAccumulator()
6230 && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg ); in resetAccumulator()
6232 for(i=0; i<pAggInfo->nFunc; i++){ in resetAccumulator()
6233 assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg in resetAccumulator()
6234 && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg ); in resetAccumulator()
6237 sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg); in resetAccumulator()
6238 for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){ in resetAccumulator()
6261 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ in finalizeAggFunctions() argument
6265 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){ in finalizeAggFunctions()
6287 AggInfo *pAggInfo, in updateAccumulator() argument
6297 pAggInfo->directMode = 1; in updateAccumulator()
6298 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){ in updateAccumulator()
6308 if( pAggInfo->nAccumulator in updateAccumulator()
6354 if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem; in updateAccumulator()
6365 if( regHit==0 && pAggInfo->nAccumulator ){ in updateAccumulator()
6371 for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){ in updateAccumulator()
6375 pAggInfo->directMode = 0; in updateAccumulator()
6427 && pExpr->pAggInfo==0 in havingToWhereExprCb()
6659 AggInfo *pAggInfo = 0; /* Aggregate information */ in sqlite3Select() local
7378 pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) ); in sqlite3Select()
7379 if( pAggInfo ){ in sqlite3Select()
7381 (void(*)(sqlite3*,void*))agginfoFree, pAggInfo); in sqlite3Select()
7387 pAggInfo->selId = p->selId; in sqlite3Select()
7391 sNC.uNC.pAggInfo = pAggInfo; in sqlite3Select()
7393 pAggInfo->mnReg = pParse->nMem+1; in sqlite3Select()
7394 pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0; in sqlite3Select()
7395 pAggInfo->pGroupBy = pGroupBy; in sqlite3Select()
7408 pAggInfo->nAccumulator = pAggInfo->nColumn; in sqlite3Select()
7409 if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){ in sqlite3Select()
7410 minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pFExpr, &pMinMaxOrderBy); in sqlite3Select()
7414 for(i=0; i<pAggInfo->nFunc; i++){ in sqlite3Select()
7415 Expr *pExpr = pAggInfo->aFunc[i].pFExpr; in sqlite3Select()
7427 pAggInfo->mxReg = pParse->nMem; in sqlite3Select()
7432 SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo)); in sqlite3Select()
7438 for(ii=0; ii<pAggInfo->nColumn; ii++){ in sqlite3Select()
7439 struct AggInfo_col *pCol = &pAggInfo->aCol[ii]; in sqlite3Select()
7446 sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0); in sqlite3Select()
7448 for(ii=0; ii<pAggInfo->nFunc; ii++){ in sqlite3Select()
7450 ii, pAggInfo->aFunc[ii].iMem); in sqlite3Select()
7451 sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0); in sqlite3Select()
7474 if( pAggInfo->nFunc==1 in sqlite3Select()
7475 && pAggInfo->aFunc[0].iDistinct>=0 in sqlite3Select()
7476 && ALWAYS(pAggInfo->aFunc[0].pFExpr!=0) in sqlite3Select()
7477 && ALWAYS(ExprUseXList(pAggInfo->aFunc[0].pFExpr)) in sqlite3Select()
7478 && pAggInfo->aFunc[0].pFExpr->x.pList!=0 in sqlite3Select()
7480 Expr *pExpr = pAggInfo->aFunc[0].pFExpr->x.pList->a[0].pExpr; in sqlite3Select()
7492 pAggInfo->sortingIdx = pParse->nTab++; in sqlite3Select()
7494 0, pAggInfo->nColumn); in sqlite3Select()
7496 pAggInfo->sortingIdx, pAggInfo->nSortingColumn, in sqlite3Select()
7557 for(i=0; i<pAggInfo->nColumn; i++){ in sqlite3Select()
7558 if( pAggInfo->aCol[i].iSorterColumn>=j ){ in sqlite3Select()
7566 pAggInfo->directMode = 1; in sqlite3Select()
7567 for(i=0; i<pAggInfo->nColumn; i++){ in sqlite3Select()
7568 struct AggInfo_col *pCol = &pAggInfo->aCol[i]; in sqlite3Select()
7574 pAggInfo->directMode = 0; in sqlite3Select()
7577 sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord); in sqlite3Select()
7582 pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++; in sqlite3Select()
7585 sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd); in sqlite3Select()
7587 pAggInfo->useSortingIdx = 1; in sqlite3Select()
7611 sqlite3VdbeAddOp3(v, OP_SorterData, pAggInfo->sortingIdx, in sqlite3Select()
7618 pAggInfo->directMode = 1; in sqlite3Select()
7648 updateAccumulator(pParse, iUseFlag, pAggInfo, eDist); in sqlite3Select()
7655 sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop); in sqlite3Select()
7690 finalizeAggFunctions(pParse, pAggInfo); in sqlite3Select()
7701 resetAccumulator(pParse, pAggInfo); in sqlite3Select()
7707 struct AggInfo_func *pF = &pAggInfo->aFunc[0]; in sqlite3Select()
7713 if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){ in sqlite3Select()
7768 sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem); in sqlite3Select()
7786 if( pAggInfo->nAccumulator ){ in sqlite3Select()
7787 for(i=0; i<pAggInfo->nFunc; i++){ in sqlite3Select()
7788 if( ExprHasProperty(pAggInfo->aFunc[i].pFExpr, EP_WinFunc) ){ in sqlite3Select()
7791 if( pAggInfo->aFunc[i].pFunc->funcFlags&SQLITE_FUNC_NEEDCOLL ){ in sqlite3Select()
7795 if( i==pAggInfo->nFunc ){ in sqlite3Select()
7799 }else if( pAggInfo->nFunc==1 && pAggInfo->aFunc[0].iDistinct>=0 ){ in sqlite3Select()
7800 assert( ExprUseXList(pAggInfo->aFunc[0].pFExpr) ); in sqlite3Select()
7801 pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList; in sqlite3Select()
7810 resetAccumulator(pParse, pAggInfo); in sqlite3Select()
7828 updateAccumulator(pParse, regAcc, pAggInfo, eDist); in sqlite3Select()
7830 struct AggInfo_func *pF = pAggInfo->aFunc; in sqlite3Select()
7842 finalizeAggFunctions(pParse, pAggInfo); in sqlite3Select()
7884 if( pAggInfo && !db->mallocFailed ){ in sqlite3Select()
7885 for(i=0; i<pAggInfo->nColumn; i++){ in sqlite3Select()
7886 Expr *pExpr = pAggInfo->aCol[i].pCExpr; in sqlite3Select()
7888 assert( pExpr->pAggInfo==pAggInfo ); in sqlite3Select()
7891 for(i=0; i<pAggInfo->nFunc; i++){ in sqlite3Select()
7892 Expr *pExpr = pAggInfo->aFunc[i].pFExpr; in sqlite3Select()
7894 assert( pExpr->pAggInfo==pAggInfo ); in sqlite3Select()