diff options
author | larrybr <larrybr@noemail.net> | 2021-05-19 19:55:10 +0000 |
---|---|---|
committer | larrybr <larrybr@noemail.net> | 2021-05-19 19:55:10 +0000 |
commit | 4f878f33a981786a5bf3db3372a11cf690260de7 (patch) | |
tree | b8c05ad24cf1596c5b8db1c3b4ae28cfa40ed3d8 /src/window.c | |
parent | 3ec4861c000cc5b26520c248043c18299a749d99 (diff) | |
parent | 1f4f7c7a416801a4e195634b03650191a4a43c7a (diff) | |
download | sqlite-4f878f33a981786a5bf3db3372a11cf690260de7.tar.gz sqlite-4f878f33a981786a5bf3db3372a11cf690260de7.zip |
merge from trunk
FossilOrigin-Name: 19ffe3cfe278a4046f32df56f75080c2377e4c44ad40a02d39db8e7701526204
Diffstat (limited to 'src/window.c')
-rw-r--r-- | src/window.c | 15 |
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); |