aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2022-05-28 14:03:23 +0000
committerdrh <>2022-05-28 14:03:23 +0000
commit1943005f626fbefa1fb32f77fc671ee07c52b11f (patch)
tree4dceb3decb1fba057c50b66bc65112e7015c3288 /src
parent1a66ff359f769656e8adaaf83e8a3973dd5a6911 (diff)
downloadsqlite-1943005f626fbefa1fb32f77fc671ee07c52b11f.tar.gz
sqlite-1943005f626fbefa1fb32f77fc671ee07c52b11f.zip
Apply the UPDATE-FROM file from check-in [98b3816bbaf539ea] to
update-delete-limit builds. FossilOrigin-Name: 7e87892c249f023ee9ed1d5f75a9ad8db10fb38f14dd9e6954b12b9b28400b07
Diffstat (limited to 'src')
-rw-r--r--src/parse.y13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/parse.y b/src/parse.y
index 44a14e258..d627f22ba 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -924,7 +924,18 @@ where_opt_ret(A) ::= WHERE expr(X) RETURNING selcollist(Y).
cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F)
where_opt_ret(W) orderby_opt(O) limit_opt(L). {
sqlite3SrcListIndexedBy(pParse, X, &I);
- X = sqlite3SrcListAppendList(pParse, X, F);
+ if( F ){
+ SrcList *pFromClause = F;
+ if( pFromClause->nSrc>1 ){
+ Select *pSubquery;
+ Token as;
+ pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0);
+ as.n = 0;
+ as.z = 0;
+ pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
+ }
+ X = sqlite3SrcListAppendList(pParse, X, pFromClause);
+ }
sqlite3ExprListCheckLength(pParse,Y,"set list");
#ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
if( O || L ){