@@ -590,7 +590,7 @@ impl<'a> Parser<'a> {
590590 Keyword::INSERT => self.parse_insert(),
591591 Keyword::REPLACE => self.parse_replace(),
592592 Keyword::UNCACHE => self.parse_uncache_table(),
593- Keyword::UPDATE => self.parse_update(),
593+ Keyword::UPDATE => self.parse_update(next_token ),
594594 Keyword::ALTER => self.parse_alter(),
595595 Keyword::CALL => self.parse_call(),
596596 Keyword::COPY => self.parse_copy(),
@@ -12014,7 +12014,7 @@ impl<'a> Parser<'a> {
1201412014 } else if self.parse_keyword(Keyword::UPDATE) {
1201512015 Ok(Query {
1201612016 with,
12017- body: self.parse_update_setexpr_boxed()?,
12017+ body: self.parse_update_setexpr_boxed(self.get_current_token().clone() )?,
1201812018 order_by: None,
1201912019 limit_clause: None,
1202012020 fetch: None,
@@ -15742,11 +15742,14 @@ impl<'a> Parser<'a> {
1574215742 /// Parse an UPDATE statement, returning a `Box`ed SetExpr
1574315743 ///
1574415744 /// This is used to reduce the size of the stack frames in debug builds
15745- fn parse_update_setexpr_boxed(&mut self) -> Result<Box<SetExpr>, ParserError> {
15746- Ok(Box::new(SetExpr::Update(self.parse_update()?)))
15745+ fn parse_update_setexpr_boxed(
15746+ &mut self,
15747+ update_token: TokenWithSpan,
15748+ ) -> Result<Box<SetExpr>, ParserError> {
15749+ Ok(Box::new(SetExpr::Update(self.parse_update(update_token)?)))
1574715750 }
1574815751
15749- pub fn parse_update(&mut self) -> Result<Statement, ParserError> {
15752+ pub fn parse_update(&mut self, update_token: TokenWithSpan ) -> Result<Statement, ParserError> {
1575015753 let or = self.parse_conflict_clause();
1575115754 let table = self.parse_table_and_joins()?;
1575215755 let from_before_set = if self.parse_keyword(Keyword::FROM) {
@@ -15781,6 +15784,7 @@ impl<'a> Parser<'a> {
1578115784 None
1578215785 };
1578315786 Ok(Update {
15787+ update_token: update_token.into(),
1578415788 table,
1578515789 assignments,
1578615790 from,
0 commit comments