diff options
author | drh <> | 2023-10-18 22:03:48 +0000 |
---|---|---|
committer | drh <> | 2023-10-18 22:03:48 +0000 |
commit | 20b95f8d3fc34d6fe8a049a3b2abebefce12eea1 (patch) | |
tree | 47c33c69ce9333c42eeff43e6af35ff2d5a3957e /src/select.c | |
parent | 49dc1be96f76ce01325cdb2d8b475f25a51f3605 (diff) | |
download | sqlite-20b95f8d3fc34d6fe8a049a3b2abebefce12eea1.tar.gz sqlite-20b95f8d3fc34d6fe8a049a3b2abebefce12eea1.zip |
Make sure all terms of the ORDER BY within an aggregate go through aggregate
analysis. Do not attach an aggregate ORDER BY to a window function.
FossilOrigin-Name: 16f3805514a741405f70e0ee3b5a6b67720bc75719372e82daa4136fe411ea2b
Diffstat (limited to 'src/select.c')
-rw-r--r-- | src/select.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/select.c b/src/select.c index 60583b20a..05aeb42e0 100644 --- a/src/select.c +++ b/src/select.c @@ -6490,8 +6490,14 @@ static void analyzeAggFuncArgs( pNC->ncFlags |= NC_InAggFunc; for(i=0; i<pAggInfo->nFunc; i++){ Expr *pExpr = pAggInfo->aFunc[i].pFExpr; + assert( pExpr->op==TK_FUNCTION || pExpr->op==TK_AGG_FUNCTION ); assert( ExprUseXList(pExpr) ); sqlite3ExprAnalyzeAggList(pNC, pExpr->x.pList); + if( pExpr->pLeft ){ + assert( pExpr->pLeft->op==TK_ORDER ); + assert( ExprUseXList(pExpr->pLeft) ); + sqlite3ExprAnalyzeAggList(pNC, pExpr->pLeft->x.pList); + } #ifndef SQLITE_OMIT_WINDOWFUNC assert( !IsWindowFunc(pExpr) ); if( ExprHasProperty(pExpr, EP_WinFunc) ){ |