aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2012-05-21 21:26:17 +0000
committerdrh <drh@noemail.net>2012-05-21 21:26:17 +0000
commit5677e102bcaabcd6940ce3e08a22b8dcc6c9ecbb (patch)
tree78614c1d390bfe61c22e72e552c3fd8e592f0d35 /src/expr.c
parent3608f177babb73cf58166f4c529a8bdb00fb3a41 (diff)
parentbbabe197674b3f0fb33326259b7f96f8c43ddf65 (diff)
downloadsqlite-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.c8
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;