@@ -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(),
@@ -12009,7 +12009,7 @@ impl<'a> Parser<'a> {
1200912009 } else if self.parse_keyword(Keyword::UPDATE) {
1201012010 Ok(Query {
1201112011 with,
12012- body: self.parse_update_setexpr_boxed()?,
12012+ body: self.parse_update_setexpr_boxed(self.get_current_token().clone() )?,
1201312013 order_by: None,
1201412014 limit_clause: None,
1201512015 fetch: None,
@@ -15734,11 +15734,14 @@ impl<'a> Parser<'a> {
1573415734 /// Parse an UPDATE statement, returning a `Box`ed SetExpr
1573515735 ///
1573615736 /// This is used to reduce the size of the stack frames in debug builds
15737- fn parse_update_setexpr_boxed(&mut self) -> Result<Box<SetExpr>, ParserError> {
15738- Ok(Box::new(SetExpr::Update(self.parse_update()?)))
15737+ fn parse_update_setexpr_boxed(
15738+ &mut self,
15739+ update_token: TokenWithSpan,
15740+ ) -> Result<Box<SetExpr>, ParserError> {
15741+ Ok(Box::new(SetExpr::Update(self.parse_update(update_token)?)))
1573915742 }
1574015743
15741- pub fn parse_update(&mut self) -> Result<Statement, ParserError> {
15744+ pub fn parse_update(&mut self, update_token: TokenWithSpan ) -> Result<Statement, ParserError> {
1574215745 let or = self.parse_conflict_clause();
1574315746 let table = self.parse_table_and_joins()?;
1574415747 let from_before_set = if self.parse_keyword(Keyword::FROM) {
@@ -15773,6 +15776,7 @@ impl<'a> Parser<'a> {
1577315776 None
1577415777 };
1577515778 Ok(Update {
15779+ update_token: update_token.into(),
1577615780 table,
1577715781 assignments,
1577815782 from,
0 commit comments