aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <>2022-11-22 15:43:16 +0000
committerdrh <>2022-11-22 15:43:16 +0000
commit3c8e438583c617eea850ff52bec56f5db5a8d099 (patch)
tree5cbb282955471f4c99c326725696fbc44200d1e8 /src/expr.c
parent89e5dfac01904ef55be9f2e5c007b25d57bc0263 (diff)
downloadsqlite-3c8e438583c617eea850ff52bec56f5db5a8d099.tar.gz
sqlite-3c8e438583c617eea850ff52bec56f5db5a8d099.zip
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
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/expr.c b/src/expr.c
index f6b065208..42099536e 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -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 ){