aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/alter.c6
-rw-r--r--src/resolve.c12
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 */
{