diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/resolve.c | 6 | ||||
-rw-r--r-- | src/update.c | 8 |
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 |