aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordrh <>2021-11-08 23:24:00 +0000
committerdrh <>2021-11-08 23:24:00 +0000
commit90cf38be6312247488930f1d28d72a50b0f3c3d2 (patch)
treed1bb11155230eabc6dea77d34801a361c1bf2459 /src/resolve.c
parenta32536b498603ea7c69ffaca0f8b1a196377b793 (diff)
downloadsqlite-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.c7
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;
}