aboutsummaryrefslogtreecommitdiff
path: root/src/window.c
diff options
context:
space:
mode:
authorlarrybr <larrybr@noemail.net>2021-05-19 19:55:10 +0000
committerlarrybr <larrybr@noemail.net>2021-05-19 19:55:10 +0000
commit4f878f33a981786a5bf3db3372a11cf690260de7 (patch)
treeb8c05ad24cf1596c5b8db1c3b4ae28cfa40ed3d8 /src/window.c
parent3ec4861c000cc5b26520c248043c18299a749d99 (diff)
parent1f4f7c7a416801a4e195634b03650191a4a43c7a (diff)
downloadsqlite-4f878f33a981786a5bf3db3372a11cf690260de7.tar.gz
sqlite-4f878f33a981786a5bf3db3372a11cf690260de7.zip
merge from trunk
FossilOrigin-Name: 19ffe3cfe278a4046f32df56f75080c2377e4c44ad40a02d39db8e7701526204
Diffstat (limited to 'src/window.c')
-rw-r--r--src/window.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/window.c b/src/window.c
index 61e57cf37..a997b9c6c 100644
--- a/src/window.c
+++ b/src/window.c
@@ -941,6 +941,14 @@ static int sqlite3WindowExtraAggFuncDepth(Walker *pWalker, Expr *pExpr){
return WRC_Continue;
}
+static int disallowAggregatesInOrderByCb(Walker *pWalker, Expr *pExpr){
+ if( pExpr->op==TK_AGG_FUNCTION && pExpr->pAggInfo==0 ){
+ sqlite3ErrorMsg(pWalker->pParse,
+ "misuse of aggregate: %s()", pExpr->u.zToken);
+ }
+ return WRC_Continue;
+}
+
/*
** If the SELECT statement passed as the second argument does not invoke
** any SQL window functions, this function is a no-op. Otherwise, it
@@ -974,6 +982,11 @@ int sqlite3WindowRewrite(Parse *pParse, Select *p){
}
sqlite3AggInfoPersistWalkerInit(&w, pParse);
sqlite3WalkSelect(&w, p);
+ if( (p->selFlags & SF_Aggregate)==0 ){
+ w.xExprCallback = disallowAggregatesInOrderByCb;
+ w.xSelectCallback = 0;
+ sqlite3WalkExprList(&w, p->pOrderBy);
+ }
p->pSrc = 0;
p->pWhere = 0;
@@ -2263,7 +2276,7 @@ static int windowCodeOp(
}else if( p->regRowid ){
sqlite3VdbeAddOp2(v, OP_Rowid, p->end.csr, regRowid1);
sqlite3VdbeAddOp3(v, OP_Ge, p->regRowid, lblDone, regRowid1);
- VdbeCoverage(v);
+ VdbeCoverageNeverNull(v);
}
sqlite3ReleaseTempReg(pParse, regRowid1);
sqlite3ReleaseTempReg(pParse, regRowid2);