aboutsummaryrefslogtreecommitdiff
path: root/src/select.c
diff options
context:
space:
mode:
authordrh <>2023-10-18 22:03:48 +0000
committerdrh <>2023-10-18 22:03:48 +0000
commit20b95f8d3fc34d6fe8a049a3b2abebefce12eea1 (patch)
tree47c33c69ce9333c42eeff43e6af35ff2d5a3957e /src/select.c
parent49dc1be96f76ce01325cdb2d8b475f25a51f3605 (diff)
downloadsqlite-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.c6
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) ){