aboutsummaryrefslogtreecommitdiff
path: root/src/update.c
diff options
context:
space:
mode:
authordan <dan@noemail.net>2020-04-29 17:41:29 +0000
committerdan <dan@noemail.net>2020-04-29 17:41:29 +0000
commit9ed322d6c3c2562dffd590c59dfc8f83c31937ea (patch)
tree0e5db4a8ed99f585bccd399d009f73c2fdc69bc3 /src/update.c
parent69887c99d4cd271fe6bf9b40e958c90e409120b1 (diff)
downloadsqlite-9ed322d6c3c2562dffd590c59dfc8f83c31937ea.tar.gz
sqlite-9ed322d6c3c2562dffd590c59dfc8f83c31937ea.zip
Fix various bugs in new feature on this branch.
FossilOrigin-Name: 823ba94e29dece1687e28711e503a1f56d392c306b0cbc0a20548180834530d1
Diffstat (limited to 'src/update.c')
-rw-r--r--src/update.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/update.c b/src/update.c
index 7257b2c6f..80f07d3de 100644
--- a/src/update.c
+++ b/src/update.c
@@ -190,7 +190,7 @@ static void updatePopulateEphTable(
sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zName)
));
}
- eDest = SRT_Set;
+ eDest = SRT_Upfrom;
}else if( pTab->pSelect ){
pList = sqlite3ExprListAppend(pParse, pList,
sqlite3PExpr(pParse, TK_DOT,
@@ -204,7 +204,7 @@ static void updatePopulateEphTable(
sqlite3Expr(db, TK_ID, pTab->zName),
sqlite3Expr(db, TK_ID, "_rowid_")
));
- eDest = IsVirtual(pTab) ? SRT_Table : SRT_ISet;
+ eDest = IsVirtual(pTab) ? SRT_Table : SRT_Upfrom;
}
for(i=0; i<pChanges->nExpr; i++){
pList = sqlite3ExprListAppend(pParse, pList,
@@ -213,6 +213,7 @@ static void updatePopulateEphTable(
}
pSelect = sqlite3SelectNew(pParse, pList, pSrc, pWhere2, 0, 0, 0, 0, 0);
sqlite3SelectDestInit(&dest, eDest, iEph);
+ dest.iSDParm2 = (pPk ? pPk->nKeyCol : -1);
sqlite3Select(pParse, pSelect, &dest);
sqlite3SelectDelete(db, pSelect);
}
@@ -878,7 +879,15 @@ void sqlite3Update(
** documentation.
*/
if( pPk ){
- sqlite3VdbeAddOp4Int(v, OP_NotFound,iDataCur,labelContinue,regKey,nKey);
+ int p3, p4;
+ if( nChangeFrom ){
+ p3 = iPk;
+ p4 = nPk;
+ }else{
+ p3 = regKey;
+ p4 = nKey;
+ }
+ sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelContinue, p3, p4);
VdbeCoverage(v);
}else{
sqlite3VdbeAddOp3(v, OP_NotExists, iDataCur, labelContinue,regOldRowid);