diff options
author | dan <dan@noemail.net> | 2019-07-13 16:39:38 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2019-07-13 16:39:38 +0000 |
commit | df9d32441a3d2abf62ecfec60f2605dc1630b76b (patch) | |
tree | 8f698360de0417d86e248a0c686b3e2aa7d87cf7 /src/walker.c | |
parent | 8616cff6c8541e2837ccb7a2bc5792de5aba962f (diff) | |
parent | 4f9adee289fcc8de83054332212c90f389609d4a (diff) | |
download | sqlite-df9d32441a3d2abf62ecfec60f2605dc1630b76b.tar.gz sqlite-df9d32441a3d2abf62ecfec60f2605dc1630b76b.zip |
Add support for attaching a FILTER clause to an aggregate function.
FossilOrigin-Name: ee293e5aeac0b05a8b809095610fd8b4fdaf8e68cd368de90ec0d45e3582ffe5
Diffstat (limited to 'src/walker.c')
-rw-r--r-- | src/walker.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/walker.c b/src/walker.c index eff358525..b976886c5 100644 --- a/src/walker.c +++ b/src/walker.c @@ -63,18 +63,22 @@ static SQLITE_NOINLINE int walkExpr(Walker *pWalker, Expr *pExpr){ if( pExpr->pLeft && walkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort; assert( pExpr->x.pList==0 || pExpr->pRight==0 ); if( pExpr->pRight ){ + assert( !ExprHasProperty(pExpr, EP_WinFunc) ); pExpr = pExpr->pRight; continue; }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){ + assert( !ExprHasProperty(pExpr, EP_WinFunc) ); if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort; - }else if( pExpr->x.pList ){ - if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; - } + }else{ + if( pExpr->x.pList ){ + if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort; + } #ifndef SQLITE_OMIT_WINDOWFUNC - if( ExprHasProperty(pExpr, EP_WinFunc) ){ - if( walkWindowList(pWalker, pExpr->y.pWin) ) return WRC_Abort; - } + if( ExprHasProperty(pExpr, EP_WinFunc) ){ + if( walkWindowList(pWalker, pExpr->y.pWin) ) return WRC_Abort; + } #endif + } } break; } |