1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-10 01:02:56 +03:00

Since the memory registers used by the columns and functions of an

AggInfo object are sequential, it is not neecessary to remember each register
separately.  We can simply remember the first one and do the math when
others are needed.

FossilOrigin-Name: dc5bd34963b761c819c565653156d0befbf65cc2cc5dc4113b0ce952450f0352
This commit is contained in:
drh
2022-11-22 15:43:16 +00:00
parent 89e5dfac01
commit 3c8e438583
5 changed files with 34 additions and 53 deletions

View File

@@ -4128,8 +4128,7 @@ expr_code_doover:
assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
pCol = &pAggInfo->aCol[pExpr->iAgg];
if( !pAggInfo->directMode ){
assert( pCol->iMem>0 );
return pCol->iMem;
return AggInfoColumnReg(pAggInfo, pExpr->iAgg);
}else if( pAggInfo->useSortingIdx ){
Table *pTab = pCol->pTab;
sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
@@ -4441,8 +4440,7 @@ expr_code_doover:
assert( !ExprHasProperty(pExpr, EP_IntValue) );
sqlite3ErrorMsg(pParse, "misuse of aggregate: %#T()", pExpr);
}else{
assert( pInfo->aFunc[pExpr->iAgg].iMem>0 );
return pInfo->aFunc[pExpr->iAgg].iMem;
return AggInfoFuncReg(pInfo, pExpr->iAgg);
}
break;
}
@@ -4731,8 +4729,7 @@ expr_code_doover:
if( pAggInfo ){
assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
if( !pAggInfo->directMode ){
assert( pAggInfo->aCol[pExpr->iAgg].iMem>0 );
inReg = pAggInfo->aCol[pExpr->iAgg].iMem;
inReg = AggInfoColumnReg(pAggInfo, pExpr->iAgg);
break;
}
if( pExpr->pAggInfo->useSortingIdx ){