aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2013-01-03 17:34:28 +0000
committerdrh <drh@noemail.net>2013-01-03 17:34:28 +0000
commit38b384a0328c2dcbdc2d46732e08b68d6cec632f (patch)
treeff35c79c4e9b759c61e44c3cd55556fc8a8b312e /src
parentc75e09c761e5f47eb74243c3dea2b975bd23e8cc (diff)
downloadsqlite-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.c1
-rw-r--r--src/select.c12
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);
}