diff options
Diffstat (limited to 'src/select.c')
-rw-r--r-- | src/select.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/select.c b/src/select.c index 2b5a3dc54..93e55b680 100644 --- a/src/select.c +++ b/src/select.c @@ -5418,6 +5418,17 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ int rc = WRC_Continue; switch( pExpr->op ){ + + case TK_FUNCTION: + if( pExpr->pWin==0 ){ + break; + }else if( pExpr->pWin==p->pWin ){ + rc = WRC_Prune; + pExpr->pWin->pOwner = pExpr; + break; + } + /* Fall through. */ + case TK_COLUMN: { Expr *pDup = sqlite3ExprDup(pParse->db, pExpr, 0); p->pSub = sqlite3ExprListAppend(pParse, p->pSub, pDup); @@ -5436,13 +5447,6 @@ static int selectWindowRewriteExprCb(Walker *pWalker, Expr *pExpr){ break; } - case TK_FUNCTION: - if( pExpr->pWin ){ - rc = WRC_Prune; - pExpr->pWin->pOwner = pExpr; - } - break; - default: /* no-op */ break; } @@ -5530,9 +5534,6 @@ static int selectWindowRewrite(Parse *pParse, Select *p){ ExprList *pSublist = 0; /* Expression list for sub-query */ Window *pWin = p->pWin; - /* TODO: This is of course temporary requirements */ - assert( pWin->pNextWin==0 ); - p->pSrc = 0; p->pWhere = 0; p->pGroupBy = 0; @@ -5581,6 +5582,7 @@ static int selectWindowRewrite(Parse *pParse, Select *p){ }else{ pSub->selFlags |= SF_Expanded; } + pWin->pNextWin = 0; } #if SELECTTRACE_ENABLED |