aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/resolve.c6
-rw-r--r--src/update.c8
2 files changed, 9 insertions, 5 deletions
diff --git a/src/resolve.c b/src/resolve.c
index 2b2a3fa12..8e06344c7 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -756,10 +756,10 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
#endif
switch( pExpr->op ){
-#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
/* The special operator TK_ROW means use the rowid for the first
** column in the FROM clause. This is used by the LIMIT and ORDER BY
- ** clause processing on UPDATE and DELETE statements.
+ ** clause processing on UPDATE and DELETE statements, and by
+ ** UPDATE ... FROM statement processing.
*/
case TK_ROW: {
SrcList *pSrcList = pNC->pSrcList;
@@ -774,8 +774,6 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pExpr->affExpr = SQLITE_AFF_INTEGER;
break;
}
-#endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- && !defined(SQLITE_OMIT_SUBQUERY) */
/* A column name: ID
** Or table name and column name: ID.ID
diff --git a/src/update.c b/src/update.c
index 4d86aab6e..799caf6ab 100644
--- a/src/update.c
+++ b/src/update.c
@@ -637,7 +637,13 @@ void sqlite3Update(
iEph = pParse->nTab++;
if( pPk ) sqlite3VdbeAddOp3(v, OP_Null, 0, iPk, iPk+nPk-1);
addrOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEph, nEphCol);
- if( pPk ) sqlite3VdbeSetP4KeyInfo(pParse, pPk);
+ if( pPk ){
+ KeyInfo *pKeyInfo = sqlite3KeyInfoOfIndex(pParse, pPk);
+ if( pKeyInfo ){
+ pKeyInfo->nAllField = nEphCol;
+ sqlite3VdbeAppendP4(v, pKeyInfo, P4_KEYINFO);
+ }
+ }
if( nChangeFrom ){
updatePopulateEphTable(
pParse, iEph, pPk, pChanges, pTabList, pWhere, pOrderBy, pLimit