diff options
author | drh <drh@noemail.net> | 2012-05-21 21:26:17 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2012-05-21 21:26:17 +0000 |
commit | 5677e102bcaabcd6940ce3e08a22b8dcc6c9ecbb (patch) | |
tree | 78614c1d390bfe61c22e72e552c3fd8e592f0d35 /src/expr.c | |
parent | 3608f177babb73cf58166f4c529a8bdb00fb3a41 (diff) | |
parent | bbabe197674b3f0fb33326259b7f96f8c43ddf65 (diff) | |
download | sqlite-5677e102bcaabcd6940ce3e08a22b8dcc6c9ecbb.tar.gz sqlite-5677e102bcaabcd6940ce3e08a22b8dcc6c9ecbb.zip |
Merge the nested aggregate query fix (ticket [c2ad16f997ee9c8ed]) unto trunk.
FossilOrigin-Name: e459c3360ba2543e52b5736d7a84f1ce67388d5c
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/expr.c b/src/expr.c index 10d9f775d..1e46596a2 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3778,7 +3778,7 @@ int sqlite3ExprCompare(Expr *pA, Expr *pB){ if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){ return 2; } - }else if( pA->op!=TK_COLUMN && pA->op!=TK_AGG_COLUMN && pA->u.zToken ){ + }else if( pA->op!=TK_COLUMN && ALWAYS(pA->op!=TK_AGG_COLUMN) && pA->u.zToken){ if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2; if( strcmp(pA->u.zToken,pB->u.zToken)!=0 ){ return 2; @@ -3965,7 +3965,9 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ return WRC_Prune; } case TK_AGG_FUNCTION: { - if( !sqlite3FunctionUsesOtherSrc(pExpr, pSrcList) ){ + if( (pNC->ncFlags & NC_InAggFunc)==0 + && !sqlite3FunctionUsesOtherSrc(pExpr, pSrcList) + ){ /* Check to see if pExpr is a duplicate of another aggregate ** function that is already in the pAggInfo structure */ @@ -4002,8 +4004,8 @@ static int analyzeAggregate(Walker *pWalker, Expr *pExpr){ ExprSetIrreducible(pExpr); pExpr->iAgg = (i16)i; pExpr->pAggInfo = pAggInfo; - return WRC_Prune; } + return WRC_Prune; } } return WRC_Continue; |