diff options
author | drh <> | 2021-11-08 23:24:00 +0000 |
---|---|---|
committer | drh <> | 2021-11-08 23:24:00 +0000 |
commit | 90cf38be6312247488930f1d28d72a50b0f3c3d2 (patch) | |
tree | d1bb11155230eabc6dea77d34801a361c1bf2459 /src/resolve.c | |
parent | a32536b498603ea7c69ffaca0f8b1a196377b793 (diff) | |
download | sqlite-90cf38be6312247488930f1d28d72a50b0f3c3d2.tar.gz sqlite-90cf38be6312247488930f1d28d72a50b0f3c3d2.zip |
Refactor the code that figures out which SELECT in a cascade of nested queries
a particular aggregate function belongs to. This fixes the problem
reported by [forum:/forumpost/c7cc2aa3546e39c1|forum post c7cc2aa3546e39c1].
New test cases in dbsqlfuzz and th3.
FossilOrigin-Name: 74aec5dd1df95b5635f4da1f13753f113ea1d61de3dc3a1523ba51089c1900e4
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/resolve.c b/src/resolve.c index c55fc514c..27b260e05 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1092,7 +1092,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ }else #endif /* SQLITE_OMIT_WINDOWFUNC */ { - NameContext *pNC2 = pNC; + NameContext *pNC2; /* For looping up thru outer contexts */ pExpr->op = TK_AGG_FUNCTION; pExpr->op2 = 0; #ifndef SQLITE_OMIT_WINDOWFUNC @@ -1100,7 +1100,10 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ sqlite3WalkExpr(pWalker, pExpr->y.pWin->pFilter); } #endif - while( pNC2 && !sqlite3FunctionUsesThisSrc(pExpr, pNC2->pSrcList) ){ + pNC2 = pNC; + while( pNC2 + && sqlite3ReferencesSrcList(pParse, pExpr, pNC2->pSrcList)==0 + ){ pExpr->op2++; pNC2 = pNC2->pNext; } |