diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/attach.c | 1 | ||||
-rw-r--r-- | src/sqliteInt.h | 1 | ||||
-rw-r--r-- | src/walker.c | 10 |
3 files changed, 8 insertions, 4 deletions
diff --git a/src/attach.c b/src/attach.c index 8eb4486e5..8fcfb0438 100644 --- a/src/attach.c +++ b/src/attach.c @@ -514,6 +514,7 @@ void sqlite3FixInit( pFix->w.xSelectCallback2 = 0; pFix->w.walkerDepth = 0; pFix->w.eCode = 0; + pFix->w.bWalkWinDefn = 1; pFix->w.u.pFix = pFix; } diff --git a/src/sqliteInt.h b/src/sqliteInt.h index f4944c2ed..69d9b4912 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -3833,6 +3833,7 @@ struct Walker { void (*xSelectCallback2)(Walker*,Select*);/* Second callback for SELECTs */ int walkerDepth; /* Number of subqueries */ u16 eCode; /* A small processing code */ + unsigned bWalkWinDefn : 1; /* True to walk pWinDefn */ union { /* Extra data for callback */ NameContext *pNC; /* Naming context */ int n; /* A counter */ diff --git a/src/walker.c b/src/walker.c index 927f7e52d..648363881 100644 --- a/src/walker.c +++ b/src/walker.c @@ -130,10 +130,12 @@ int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){ if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort; if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort; if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort; -#if !defined(SQLITE_OMIT_WINDOWFUNC) && !defined(SQLITE_OMIT_ALTERTABLE) - { - Parse *pParse = pWalker->pParse; - if( pParse && IN_RENAME_OBJECT ){ +#if !defined(SQLITE_OMIT_WINDOWFUNC) + if( p->pWinDefn ){ + Parse *pParse; + if( pWalker->bWalkWinDefn + || ((pParse = pWalker->pParse)!=0 && IN_RENAME_OBJECT) + ){ /* The following may return WRC_Abort if there are unresolvable ** symbols (e.g. a table that does not exist) in a window definition. */ int rc = walkWindowList(pWalker, p->pWinDefn, 0); |