diff options
author | drh <drh@noemail.net> | 2012-08-23 16:18:10 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2012-08-23 16:18:10 +0000 |
commit | 030796df8d36a781ce062fad3fcb7312b8ac6a47 (patch) | |
tree | be229e02e99b56c9d35e6d418921865d66cdcee7 /src/resolve.c | |
parent | 2f7d5d83946b7ccb14dff3b82375d9a25b34d76d (diff) | |
download | sqlite-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.c | 14 |
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 */ |