diff options
author | drh <> | 2023-03-28 16:02:28 +0000 |
---|---|---|
committer | drh <> | 2023-03-28 16:02:28 +0000 |
commit | e1be2b7ad97e774aaeeee438ceb0b2ef2a138f6d (patch) | |
tree | 705528193b17267e0861bd7f557c7d2c5b21c37c /src/expr.c | |
parent | 3cbf38c7832e234aab1848e32c104fe345e19e4f (diff) | |
download | sqlite-e1be2b7ad97e774aaeeee438ceb0b2ef2a138f6d.tar.gz sqlite-e1be2b7ad97e774aaeeee438ceb0b2ef2a138f6d.zip |
Fix a weird corner case in aggregate function processing that results from the
recent addition of support for index expressions on aggregate queries.
[forum:/forumpost/bad532820c|Forum post bad532820c].
FossilOrigin-Name: c34fd9fe1b76e0a5943f014f46141cbe55d41bb1e6980adf9bcb6785a03e7883
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/expr.c b/src/expr.c index 564dfc7fb..80bfbadc3 100644 --- a/src/expr.c +++ b/src/expr.c @@ -6286,9 +6286,11 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ int iAgg = pExpr->iAgg; Parse *pParse = pWalker->pParse; sqlite3 *db = pParse->db; + assert( iAgg>=0 ); if( pExpr->op!=TK_AGG_FUNCTION ){ - assert( iAgg>=0 && iAgg<pAggInfo->nColumn ); - if( pAggInfo->aCol[iAgg].pCExpr==pExpr ){ + if( iAgg<pAggInfo->nColumn + && pAggInfo->aCol[iAgg].pCExpr==pExpr + ){ pExpr = sqlite3ExprDup(db, pExpr, 0); if( pExpr ){ pAggInfo->aCol[iAgg].pCExpr = pExpr; @@ -6297,8 +6299,9 @@ static int agginfoPersistExprCb(Walker *pWalker, Expr *pExpr){ } }else{ assert( pExpr->op==TK_AGG_FUNCTION ); - assert( iAgg>=0 && iAgg<pAggInfo->nFunc ); - if( pAggInfo->aFunc[iAgg].pFExpr==pExpr ){ + if( ALWAYS(iAgg<pAggInfo->nFunc) + && pAggInfo->aFunc[iAgg].pFExpr==pExpr + ){ pExpr = sqlite3ExprDup(db, pExpr, 0); if( pExpr ){ pAggInfo->aFunc[iAgg].pFExpr = pExpr; |