diff options
author | drh <drh@noemail.net> | 2020-01-02 23:50:50 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2020-01-02 23:50:50 +0000 |
commit | 618ee336144091caace2d0a647f96883ba7580b9 (patch) | |
tree | dd67e962eecacbee3aaedae2f67228c999e7d953 /src/resolve.c | |
parent | b945bcdaf178eabb320aa4609a31ec74233e3115 (diff) | |
parent | 24d35e409c900adba4f5528e70c6c7e5e748cfd0 (diff) | |
download | sqlite-618ee336144091caace2d0a647f96883ba7580b9.tar.gz sqlite-618ee336144091caace2d0a647f96883ba7580b9.zip |
Merge enhancements from trunk.
FossilOrigin-Name: 091403a6705f5f1352c76eacbfdca75fe0bab12ab9b156842641de07c38d3f66
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/resolve.c b/src/resolve.c index 36eef4bb4..b2df2bac2 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -132,13 +132,16 @@ static int nameInUsingClause(IdList *pUsing, const char *zCol){ ** and zCol. If any of zDb, zTab, and zCol are NULL then those fields will ** match anything. */ -int sqlite3MatchSpanName( - const char *zSpan, +int sqlite3MatchEName( + const struct ExprList_item *pItem, const char *zCol, const char *zTab, const char *zDb ){ int n; + const char *zSpan; + if( NEVER(pItem->eEName!=ENAME_TAB) ) return 0; + zSpan = pItem->zEName; for(n=0; ALWAYS(zSpan[n]) && zSpan[n]!='.'; n++){} if( zDb && (sqlite3StrNICmp(zSpan, zDb, n)!=0 || zDb[n]!=0) ){ return 0; @@ -267,7 +270,7 @@ static int lookupName( int hit = 0; pEList = pItem->pSelect->pEList; for(j=0; j<pEList->nExpr; j++){ - if( sqlite3MatchSpanName(pEList->a[j].zSpan, zCol, zTab, zDb) ){ + if( sqlite3MatchEName(&pEList->a[j], zCol, zTab, zDb) ){ cnt++; cntTab = 2; pMatch = pItem; @@ -448,8 +451,11 @@ static int lookupName( pEList = pNC->uNC.pEList; assert( pEList!=0 ); for(j=0; j<pEList->nExpr; j++){ - char *zAs = pEList->a[j].zName; - if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){ + char *zAs = pEList->a[j].zEName; + if( pEList->a[j].eEName==ENAME_NAME + && ALWAYS(zAs!=0) + && sqlite3StrICmp(zAs, zCol)==0 + ){ Expr *pOrig; assert( pExpr->pLeft==0 && pExpr->pRight==0 ); assert( pExpr->x.pList==0 ); @@ -884,7 +890,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ } if( (pDef->funcFlags & SQLITE_FUNC_INTERNAL)!=0 && pParse->nested==0 - && sqlite3Config.bInternalFunctions==0 + && (pParse->db->mDbFlags & DBFLAG_InternalFunc)==0 ){ /* Internal-use-only functions are disallowed unless the ** SQL is being compiled using sqlite3NestedParse() */ @@ -1127,8 +1133,11 @@ static int resolveAsName( if( pE->op==TK_ID ){ char *zCol = pE->u.zToken; for(i=0; i<pEList->nExpr; i++){ - char *zAs = pEList->a[i].zName; - if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){ + char *zAs = pEList->a[i].zEName; + if( pEList->a[i].eEName==ENAME_NAME + && ALWAYS(zAs!=0) + && sqlite3StrICmp(zAs, zCol)==0 + ){ return i+1; } } |