Fix a problem with renaming a column that occurs as an "excluded.colname"
construction in an UPSERT that is part of a trigger program.
FossilOrigin-Name: bb2f7234968157b605522dea8e115d8772ab4234147894089d6e48fedf5d6a5d
diff --git a/src/alter.c b/src/alter.c
index d2554a6..035ec0f 100644
--- a/src/alter.c
+++ b/src/alter.c
@@ -1361,6 +1361,11 @@
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 @@
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 3ac6f53..a754ae8 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -349,9 +349,15 @@
#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 */
{