diff options
author | drh <drh@noemail.net> | 2015-02-09 15:21:36 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2015-02-09 15:21:36 +0000 |
commit | 885a5b030ee3717b78bfb82d61e6ee38ef0892ea (patch) | |
tree | 83b3684c29d19c915596413505453176b0c9a9c0 /src/expr.c | |
parent | 63f845734e7de67fb04ad1e8990c41850547ce07 (diff) | |
download | sqlite-885a5b030ee3717b78bfb82d61e6ee38ef0892ea.tar.gz sqlite-885a5b030ee3717b78bfb82d61e6ee38ef0892ea.zip |
Disable the query flattener for aggregate subqueries if the parent query
uses other subqueries in its result set or WHERE clause or ORDER BY clause.
Preliminary fix for ticket [2f7170d73bf9abf8]. However it still contains
a defect similar to the COLLATE problem of [ca0d20b6cddd].
FossilOrigin-Name: 0b7d65e3fda676d193347cb782854c28a48252af
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c index 2f0fe4a58..2def950f2 100644 --- a/src/expr.c +++ b/src/expr.c @@ -490,11 +490,11 @@ void sqlite3ExprAttachSubtrees( }else{ if( pRight ){ pRoot->pRight = pRight; - pRoot->flags |= EP_Collate & pRight->flags; + pRoot->flags |= EP_Propagate & pRight->flags; } if( pLeft ){ pRoot->pLeft = pLeft; - pRoot->flags |= EP_Collate & pLeft->flags; + pRoot->flags |= EP_Propagate & pLeft->flags; } exprSetHeight(pRoot); } @@ -1210,6 +1210,19 @@ void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){ } /* +** Return TRUE if any expression in ExprList has any of the EP_* +** properties given by "m" +*/ +int sqlite3AnyExprListHasProperty(const ExprList *pList, u32 m){ + int i; + if( pList==0 ) return 0; + for(i=0; i<pList->nExpr; i++){ + if( ExprHasProperty(pList->a[i].pExpr, m) ) return 1; + } + return 0; +} + +/* ** These routines are Walker callbacks used to check expressions to ** see if they are "constant" for some definition of constant. The ** Walker.eCode value determines the type of "constant" we are looking |