diff options
author | dan <dan@noemail.net> | 2009-10-19 15:52:32 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2009-10-19 15:52:32 +0000 |
commit | f7b0b0ad5fb083c194f0f69e75747dccf71427ed (patch) | |
tree | 29d68bdb3caab9436fc103a4a236635ac9fae363 /src/resolve.c | |
parent | fd3b22265e3e9968e0bf2d909420c7c5118a4e4e (diff) | |
download | sqlite-f7b0b0ad5fb083c194f0f69e75747dccf71427ed.tar.gz sqlite-f7b0b0ad5fb083c194f0f69e75747dccf71427ed.zip |
When generating WHERE clause terms internally for NATURAL and USING joins, identify the table by its position in the FROM list, not by its name or alias. Fix for [b73fb0bd64].
FossilOrigin-Name: 6fe6371175482d38ac4aeea994c7b20c18b7de01
Diffstat (limited to 'src/resolve.c')
-rw-r--r-- | src/resolve.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/resolve.c b/src/resolve.c index 4090bdd6e..40aab3fac 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -395,6 +395,27 @@ lookupname_end: } /* +** Allocate and return a pointer to an expression to load the column iCol +** from datasource iSrc datasource in SrcList pSrc. +*/ +Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){ + Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0); + if( p ){ + struct SrcList_item *pItem = &pSrc->a[iSrc]; + p->pTab = pItem->pTab; + p->iTable = pItem->iCursor; + if( p->pTab->iPKey==iCol ){ + p->iColumn = -1; + }else{ + p->iColumn = iCol; + pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol); + } + ExprSetProperty(p, EP_Resolved); + } + return p; +} + +/* ** This routine is callback for sqlite3WalkExpr(). ** ** Resolve symbolic names into TK_COLUMN operators for the current |