diff options
author | drh <drh@noemail.net> | 2012-12-18 16:07:08 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2012-12-18 16:07:08 +0000 |
commit | 92689d28698dca60d04e62a5080afac923dfd4de (patch) | |
tree | 7cb1eeb886ee59832811e8fa9ab9186f1f400245 /src/resolve.c | |
parent | e924041846ac140c7940e23aaa3d026bed2a2dcf (diff) | |
download | sqlite-92689d28698dca60d04e62a5080afac923dfd4de.tar.gz sqlite-92689d28698dca60d04e62a5080afac923dfd4de.zip |
Resolve names in FROM-clause subqueries prior to resolving names in the
result set expressions of a SELECT statement.
FossilOrigin-Name: 9b67c633d932f3e566f521ee6a9cf3be193436fa
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/src/resolve.c b/src/resolve.c index 51aab7792..eb594d159 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -1033,23 +1033,6 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ return WRC_Abort; } - /* Set up the local name-context to pass to sqlite3ResolveExprNames() to - ** resolve the result-set expression list. - */ - sNC.ncFlags = NC_AllowAgg; - sNC.pSrcList = p->pSrc; - sNC.pNext = pOuterNC; - - /* Resolve names in the result set. */ - pEList = p->pEList; - assert( pEList!=0 ); - for(i=0; i<pEList->nExpr; i++){ - Expr *pX = pEList->a[i].pExpr; - if( sqlite3ResolveExprNames(&sNC, pX) ){ - return WRC_Abort; - } - } - /* Recursively resolve names in all subqueries */ for(i=0; i<p->pSrc->nSrc; i++){ @@ -1077,6 +1060,23 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ } } + /* Set up the local name-context to pass to sqlite3ResolveExprNames() to + ** resolve the result-set expression list. + */ + sNC.ncFlags = NC_AllowAgg; + sNC.pSrcList = p->pSrc; + sNC.pNext = pOuterNC; + + /* Resolve names in the result set. */ + pEList = p->pEList; + assert( pEList!=0 ); + for(i=0; i<pEList->nExpr; i++){ + Expr *pX = pEList->a[i].pExpr; + if( sqlite3ResolveExprNames(&sNC, pX) ){ + return WRC_Abort; + } + } + /* If there are no aggregate functions in the result-set, and no GROUP BY ** expression, do not allow aggregates in any of the other expressions. */ |