1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-12 23:22:53 +03:00

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
This commit is contained in:
drh
2015-02-09 15:21:36 +00:00
parent 63f845734e
commit 885a5b030e
6 changed files with 54 additions and 19 deletions

View File

@@ -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);
}
@@ -1209,6 +1209,19 @@ void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
sqlite3DbFree(db, 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