diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/alter.c | 6 | ||||
-rw-r--r-- | src/resolve.c | 12 |
2 files changed, 15 insertions, 3 deletions
diff --git a/src/alter.c b/src/alter.c index d2554a693..035ec0fc5 100644 --- a/src/alter.c +++ b/src/alter.c @@ -1361,6 +1361,11 @@ static void renameColumnFunc( if( pStep->pUpsert ){ Upsert *pUpsert = pStep->pUpsert; assert( rc==SQLITE_OK ); + if( pTarget==pTab ){ + pUpsert->pUpsertSrc = &sSrc; + sNC.uNC.pUpsert = pUpsert; + sNC.ncFlags = NC_UUpsert; + } rc = sqlite3ResolveExprListNames(&sNC, pUpsert->pUpsertTarget); if( rc==SQLITE_OK ){ ExprList *pUpsertSet = pUpsert->pUpsertSet; @@ -1375,6 +1380,7 @@ static void renameColumnFunc( if( rc==SQLITE_OK ){ rc = sqlite3ResolveExprNames(&sNC, pUpsert->pUpsertTargetWhere); } + sNC.ncFlags = 0; } if( rc==SQLITE_OK && pTarget==pTab ){ diff --git a/src/resolve.c b/src/resolve.c index 3ac6f5305..a754ae846 100644 --- a/src/resolve.c +++ b/src/resolve.c @@ -349,9 +349,15 @@ static int lookupName( #ifndef SQLITE_OMIT_UPSERT if( pExpr->iTable==2 ){ testcase( iCol==(-1) ); - pExpr->iTable = pNC->uNC.pUpsert->regData + iCol; - eNewExprOp = TK_REGISTER; - ExprSetProperty(pExpr, EP_Alias); + if( IN_RENAME_COLUMN ){ + pExpr->iColumn = iCol; + pExpr->pTab = pTab; + eNewExprOp = TK_COLUMN; + }else{ + pExpr->iTable = pNC->uNC.pUpsert->regData + iCol; + eNewExprOp = TK_REGISTER; + ExprSetProperty(pExpr, EP_Alias); + } }else #endif /* SQLITE_OMIT_UPSERT */ { |