diff options
author | dan <dan@noemail.net> | 2018-08-24 20:10:22 +0000 |
---|---|---|
committer | dan <dan@noemail.net> | 2018-08-24 20:10:22 +0000 |
commit | 85a9d508dffa519ab37c02a1702002ad3a8f3d85 (patch) | |
tree | a57bdb4153963a2f03064b31f103a61889d5ac0c /src | |
parent | 0d5fa6b9798f682b2463d14a343489df3752aff6 (diff) | |
download | sqlite-85a9d508dffa519ab37c02a1702002ad3a8f3d85.tar.gz sqlite-85a9d508dffa519ab37c02a1702002ad3a8f3d85.zip |
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
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 */ { |