aboutsummaryrefslogtreecommitdiff
path: root/src/resolve.c
diff options
context:
space:
mode:
authordan <dan@noemail.net>2009-10-19 15:52:32 +0000
committerdan <dan@noemail.net>2009-10-19 15:52:32 +0000
commitf7b0b0ad5fb083c194f0f69e75747dccf71427ed (patch)
tree29d68bdb3caab9436fc103a4a236635ac9fae363 /src/resolve.c
parentfd3b22265e3e9968e0bf2d909420c7c5118a4e4e (diff)
downloadsqlite-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.c21
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