Lines Matching refs:pAggInfo
20078 AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */ member
20499 AggInfo *pAggInfo; /* Information about aggregates at this level */ member
34500 if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags || pExpr->pAggInfo ){ in sqlite3TreeViewExpr()
34517 if( pExpr->pAggInfo!=0 ){ in sqlite3TreeViewExpr()
34697 pExpr->pAggInfo ? pExpr->pAggInfo->selId : 0, in sqlite3TreeViewExpr()
34698 pExpr->iAgg, pExpr->pAggInfo); in sqlite3TreeViewExpr()
110408 if( pExpr->pAggInfo ) return;
117605 AggInfo *pAggInfo = pExpr->pAggInfo; local
117607 assert( pAggInfo!=0 );
117609 if( pExpr->iAgg>=pAggInfo->nColumn ){
117621 pCol = &pAggInfo->aCol[pExpr->iAgg];
117622 if( !pAggInfo->directMode ){
117623 return AggInfoColumnReg(pAggInfo, pExpr->iAgg);
117624 }else if( pAggInfo->useSortingIdx ){
117626 sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
117961 AggInfo *pInfo = pExpr->pAggInfo;
118258 AggInfo *pAggInfo = pExpr->pAggInfo; local
118259 if( pAggInfo ){
118260 assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
118261 if( !pAggInfo->directMode ){
118262 inReg = AggInfoColumnReg(pAggInfo, pExpr->iAgg);
118265 if( pExpr->pAggInfo->useSortingIdx ){
118266 sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
118267 pAggInfo->aCol[pExpr->iAgg].iSorterColumn,
119876 && pExpr->pAggInfo!=0
119878 AggInfo *pAggInfo = pExpr->pAggInfo; local
119884 if( iAgg<pAggInfo->nColumn
119885 && pAggInfo->aCol[iAgg].pCExpr==pExpr
119889 pAggInfo->aCol[iAgg].pCExpr = pExpr;
119894 if( ALWAYS(iAgg<pAggInfo->nFunc)
119895 && pAggInfo->aFunc[iAgg].pFExpr==pExpr
119899 pAggInfo->aFunc[iAgg].pFExpr = pExpr;
119959 AggInfo *pAggInfo, /* The AggInfo object to search and/or modify */ argument
119967 assert( pAggInfo->iFirstReg==0 );
119968 pCol = pAggInfo->aCol;
119969 for(k=0; k<pAggInfo->nColumn; k++, pCol++){
119978 k = addAggInfoColumn(pParse->db, pAggInfo);
119988 pCol = &pAggInfo->aCol[k];
119995 if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
119997 ExprList *pGB = pAggInfo->pGroupBy;
120012 pCol->iSorterColumn = pAggInfo->nSortingColumn++;
120016 assert( pExpr->pAggInfo==0 || pExpr->pAggInfo==pAggInfo );
120017 pExpr->pAggInfo = pAggInfo;
120035 AggInfo *pAggInfo = pNC->uNC.pAggInfo; local
120038 assert( pAggInfo->iFirstReg==0 );
120060 if( NEVER(pExpr->pAggInfo!=0) ) break; /* Resolved by outer context */
120071 findOrCreateAggInfoColumn(pParse, pAggInfo, &tmp);
120073 assert( pAggInfo->aCol!=0 );
120074 assert( tmp.iAgg<pAggInfo->nColumn );
120075 pAggInfo->aCol[tmp.iAgg].pCExpr = pExpr;
120076 pExpr->pAggInfo = pAggInfo;
120093 findOrCreateAggInfoColumn(pParse, pAggInfo, pExpr);
120103 && pExpr->pAggInfo==0
120108 struct AggInfo_func *pItem = pAggInfo->aFunc;
120111 for(i=0; i<pAggInfo->nFunc; i++, pItem++){
120120 assert( i<pAggInfo->nFunc );
120121 }else if( i>=pAggInfo->nFunc ){
120125 i = addAggInfoFunc(pParse->db, pAggInfo);
120129 pItem = &pAggInfo->aFunc[i];
120177 pExpr->pAggInfo = pAggInfo;
154204 static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){ argument
154214 || pAggInfo->nFunc!=1
154226 if( pExpr->pAggInfo!=pAggInfo ) return 0;
154227 if( (pAggInfo->aFunc[0].pFunc->funcFlags&SQLITE_FUNC_COUNT)==0 ) return 0;
154228 assert( pAggInfo->aFunc[0].pFExpr==pExpr );
155246 static void printAggInfo(AggInfo *pAggInfo){ argument
155249 pAggInfo->selId, pAggInfo);
155250 for(ii=0; ii<pAggInfo->nColumn; ii++){
155251 struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
155256 pCol->iTable, pCol->iColumn, pAggInfo->iFirstReg+ii,
155258 ii>=pAggInfo->nAccumulator ? "" : " Accumulator");
155259 sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
155261 for(ii=0; ii<pAggInfo->nFunc; ii++){
155263 ii, pAggInfo->iFirstReg+pAggInfo->nColumn+ii);
155264 sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0);
155287 AggInfo *pAggInfo, argument
155291 assert( pAggInfo!=0 );
155292 assert( pAggInfo->iFirstReg==0 );
155294 for(i=0; i<pAggInfo->nFunc; i++){
155295 Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
155324 AggInfo *pAggInfo, /* The aggregate info */ argument
155327 assert( pAggInfo->iFirstReg==0 );
155330 pAggInfo->nColumn = pAggInfo->nAccumulator;
155331 if( ALWAYS(pAggInfo->nSortingColumn>0) ){
155334 for(j=0; j<pAggInfo->nColumn; j++){
155335 k = pAggInfo->aCol[j].iSorterColumn;
155338 pAggInfo->nSortingColumn = mx+1;
155340 analyzeAggFuncArgs(pAggInfo, pNC);
155352 printAggInfo(pAggInfo);
155364 AggInfo *pAggInfo; local
155367 if( pExpr->pAggInfo==0 ) return WRC_Continue;
155371 pAggInfo = pExpr->pAggInfo;
155372 if( NEVER(pExpr->iAgg>=pAggInfo->nColumn) ) return WRC_Continue;
155374 pCol = &pAggInfo->aCol[pExpr->iAgg];
155387 static void aggregateConvertIndexedExprRefToColumn(AggInfo *pAggInfo){ argument
155392 for(i=0; i<pAggInfo->nFunc; i++){
155393 sqlite3WalkExpr(&w, pAggInfo->aFunc[i].pFExpr);
155415 static void assignAggregateRegisters(Parse *pParse, AggInfo *pAggInfo){ argument
155416 assert( pAggInfo!=0 );
155417 assert( pAggInfo->iFirstReg==0 );
155418 pAggInfo->iFirstReg = pParse->nMem + 1;
155419 pParse->nMem += pAggInfo->nColumn + pAggInfo->nFunc;
155430 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){ argument
155434 int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
155435 assert( pAggInfo->iFirstReg>0 );
155440 sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->iFirstReg,
155441 pAggInfo->iFirstReg+nReg-1);
155442 for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
155496 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){ argument
155500 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
155542 sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i));
155549 sqlite3VdbeAddOp2(v, OP_AggFinal, AggInfoFuncReg(pAggInfo,i),
155574 AggInfo *pAggInfo, argument
155584 assert( pAggInfo->iFirstReg>0 );
155586 pAggInfo->directMode = 1;
155587 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
155600 if( pAggInfo->nAccumulator
155701 if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem;
155705 sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i));
155715 if( regHit==0 && pAggInfo->nAccumulator ){
155721 for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
155722 sqlite3ExprCode(pParse, pC->pCExpr, AggInfoColumnReg(pAggInfo,i));
155726 pAggInfo->directMode = 0;
155778 && pExpr->pAggInfo==0
156364 AggInfo *pAggInfo = 0; /* Aggregate information */ local
157173 pAggInfo = sqlite3DbMallocZero(db, sizeof(*pAggInfo) );
157174 if( pAggInfo ){
157175 sqlite3ParserAddCleanup(pParse, agginfoFree, pAggInfo);
157181 pAggInfo->selId = p->selId;
157183 pAggInfo->pSelect = p;
157188 sNC.uNC.pAggInfo = pAggInfo;
157190 pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0;
157191 pAggInfo->pGroupBy = pGroupBy;
157204 pAggInfo->nAccumulator = pAggInfo->nColumn;
157205 if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){
157206 minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pFExpr, &pMinMaxOrderBy);
157210 analyzeAggFuncArgs(pAggInfo, &sNC);
157214 TREETRACE(0x20,pParse,p,("After aggregate analysis %p:\n", pAggInfo));
157220 printAggInfo(pAggInfo);
157242 if( pAggInfo->nFunc==1
157243 && pAggInfo->aFunc[0].iDistinct>=0
157244 && ALWAYS(pAggInfo->aFunc[0].pFExpr!=0)
157245 && ALWAYS(ExprUseXList(pAggInfo->aFunc[0].pFExpr))
157246 && pAggInfo->aFunc[0].pFExpr->x.pList!=0
157248 Expr *pExpr = pAggInfo->aFunc[0].pFExpr->x.pList->a[0].pExpr;
157260 pAggInfo->sortingIdx = pParse->nTab++;
157262 0, pAggInfo->nColumn);
157264 pAggInfo->sortingIdx, pAggInfo->nSortingColumn,
157300 optimizeAggregateUseOfIndexedExpr(pParse, p, pAggInfo, &sNC);
157302 assignAggregateRegisters(pParse, pAggInfo);
157334 for(i=0; i<pAggInfo->nColumn; i++){
157335 if( pAggInfo->aCol[i].iSorterColumn>=j ){
157343 pAggInfo->directMode = 1;
157344 for(i=0; i<pAggInfo->nColumn; i++){
157345 struct AggInfo_col *pCol = &pAggInfo->aCol[i];
157351 pAggInfo->directMode = 0;
157355 sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
157361 pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++;
157365 sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd);
157367 pAggInfo->useSortingIdx = 1;
157369 sqlite3VdbeScanStatusRange(v, addrExp, -1, pAggInfo->sortingIdx);
157378 aggregateConvertIndexedExprRefToColumn(pAggInfo);
157384 printAggInfo(pAggInfo);
157410 sqlite3VdbeAddOp3(v, OP_SorterData, pAggInfo->sortingIdx,
157419 pAggInfo->directMode = 1;
157464 updateAccumulator(pParse, iUseFlag, pAggInfo, eDist);
157471 sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop);
157506 finalizeAggFunctions(pParse, pAggInfo);
157517 resetAccumulator(pParse, pAggInfo);
157523 struct AggInfo_func *pF = &pAggInfo->aFunc[0];
157530 if( (pTab = isSimpleCount(p, pAggInfo))!=0 ){
157587 assignAggregateRegisters(pParse, pAggInfo);
157588 sqlite3VdbeAddOp2(v, OP_Count, iCsr, AggInfoFuncReg(pAggInfo,0));
157608 if( pAggInfo->nAccumulator ){
157609 for(i=0; i<pAggInfo->nFunc; i++){
157610 if( ExprHasProperty(pAggInfo->aFunc[i].pFExpr, EP_WinFunc) ){
157613 if( pAggInfo->aFunc[i].pFunc->funcFlags&SQLITE_FUNC_NEEDCOLL ){
157617 if( i==pAggInfo->nFunc ){
157621 }else if( pAggInfo->nFunc==1 && pAggInfo->aFunc[0].iDistinct>=0 ){
157622 assert( ExprUseXList(pAggInfo->aFunc[0].pFExpr) );
157623 pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList;
157626 assignAggregateRegisters(pParse, pAggInfo);
157633 resetAccumulator(pParse, pAggInfo);
157651 updateAccumulator(pParse, regAcc, pAggInfo, eDist);
157653 struct AggInfo_func *pF = pAggInfo->aFunc;
157665 finalizeAggFunctions(pParse, pAggInfo);
157706 if( pAggInfo && !db->mallocFailed ){
157710 printAggInfo(pAggInfo);
157713 for(i=0; i<pAggInfo->nColumn; i++){
157714 Expr *pExpr = pAggInfo->aCol[i].pCExpr;
157716 assert( pExpr->pAggInfo==pAggInfo );
157719 for(i=0; i<pAggInfo->nFunc; i++){
157720 Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
157722 assert( pExpr->pAggInfo==pAggInfo );
164818 }else if( pExpr->pAggInfo ){
177420 if( pExpr->op==TK_AGG_FUNCTION && pExpr->pAggInfo==0 ){
179797 p->pAggInfo = 0;