diff options
author | drh <drh@noemail.net> | 2013-01-03 17:34:28 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2013-01-03 17:34:28 +0000 |
commit | 38b384a0328c2dcbdc2d46732e08b68d6cec632f (patch) | |
tree | ff35c79c4e9b759c61e44c3cd55556fc8a8b312e /src | |
parent | c75e09c761e5f47eb74243c3dea2b975bd23e8cc (diff) | |
download | sqlite-38b384a0328c2dcbdc2d46732e08b68d6cec632f.tar.gz sqlite-38b384a0328c2dcbdc2d46732e08b68d6cec632f.zip |
Further corner-case fixes to the name resolution logic.
FossilOrigin-Name: 20730bad7082b559a65e8cfedb31b6afca50df58
Diffstat (limited to 'src')
-rw-r--r-- | src/resolve.c | 1 | ||||
-rw-r--r-- | src/select.c | 12 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/resolve.c b/src/resolve.c index b9f5123ef..944fb5cad 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -271,6 +271,7 @@ static int lookupName( cntTab = 2; pMatch = pItem; pExpr->iColumn = j; + hit = 1; } } if( hit || zTab==0 ) continue; diff --git a/src/select.c b/src/select.c index a0a4c10da..316889480 100644 --- a/src/select.c +++ b/src/select.c @@ -3394,8 +3394,14 @@ static int selectExpander(Walker *pWalker, Select *p){ ExprList *pNew = 0; int flags = pParse->db->flags; int longNames = (flags & SQLITE_FullColNames)!=0 - && (flags & SQLITE_ShortColNames)==0 - && (p->selFlags & SF_NestedFrom)==0; + && (flags & SQLITE_ShortColNames)==0; + + /* When processing FROM-clause subqueries, it is always the case + ** that full_column_names=OFF and short_column_names=ON. The + ** sqlite3ResultSetOfSelect() routine makes it so. */ + assert( (p->selFlags & SF_NestedFrom)==0 + || ((flags & SQLITE_FullColNames)==0 && + (flags & SQLITE_ShortColNames)!=0) ); for(k=0; k<pEList->nExpr; k++){ pE = a[k].pExpr; @@ -3484,7 +3490,7 @@ static int selectExpander(Walker *pWalker, Select *p){ Expr *pLeft; pLeft = sqlite3Expr(db, TK_ID, zTabName); pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); - if( zSchemaName && iDb>0 ){ + if( zSchemaName ){ pLeft = sqlite3Expr(db, TK_ID, zSchemaName); pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pExpr, 0); } |