aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2012-08-23 16:18:10 +0000
committerdrh <drh@noemail.net>2012-08-23 16:18:10 +0000
commit030796df8d36a781ce062fad3fcb7312b8ac6a47 (patch)
treebe229e02e99b56c9d35e6d418921865d66cdcee7 /src/resolve.c
parent2f7d5d83946b7ccb14dff3b82375d9a25b34d76d (diff)
downloadsqlite-030796df8d36a781ce062fad3fcb7312b8ac6a47.tar.gz
sqlite-030796df8d36a781ce062fad3fcb7312b8ac6a47.zip
Further improvements to the processing of nested aggregate queries.
FossilOrigin-Name: 3c3ffa901f5ce8a523028ff15563ce3e0f55a641
Diffstat (limited to 'src/resolve.c')
-rw-r--r--src/resolve.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/resolve.c b/src/resolve.c
index a66f88fdc..bfbcd2041 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -568,13 +568,19 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
nId, zId);
pNC->nErr++;
}
+ if( is_agg ) pNC->ncFlags &= ~NC_AllowAgg;
+ sqlite3WalkExprList(pWalker, pList);
if( is_agg ){
+ NameContext *pNC2 = pNC;
pExpr->op = TK_AGG_FUNCTION;
- pNC->ncFlags |= NC_HasAgg;
+ pExpr->op2 = 0;
+ while( pNC2 && !sqlite3FunctionUsesThisSrc(pExpr, pNC2->pSrcList) ){
+ pExpr->op2++;
+ pNC2 = pNC2->pNext;
+ }
+ if( pNC2 ) pNC2->ncFlags |= NC_HasAgg;
+ pNC->ncFlags |= NC_AllowAgg;
}
- if( is_agg ) pNC->ncFlags &= ~NC_AllowAgg;
- sqlite3WalkExprList(pWalker, pList);
- if( is_agg ) pNC->ncFlags |= NC_AllowAgg;
/* FIX ME: Compute pExpr->affinity based on the expected return
** type of the function
*/