@@ -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,
@@ -15754,11 +15754,14 @@ impl<'a> Parser<'a> {
1575415754 /// Parse an UPDATE statement, returning a `Box`ed SetExpr
1575515755 ///
1575615756 /// This is used to reduce the size of the stack frames in debug builds
15757- fn parse_update_setexpr_boxed(&mut self) -> Result<Box<SetExpr>, ParserError> {
15758- Ok(Box::new(SetExpr::Update(self.parse_update()?)))
15757+ fn parse_update_setexpr_boxed(
15758+ &mut self,
15759+ update_token: TokenWithSpan,
15760+ ) -> Result<Box<SetExpr>, ParserError> {
15761+ Ok(Box::new(SetExpr::Update(self.parse_update(update_token)?)))
1575915762 }
1576015763
15761- pub fn parse_update(&mut self) -> Result<Statement, ParserError> {
15764+ pub fn parse_update(&mut self, update_token: TokenWithSpan ) -> Result<Statement, ParserError> {
1576215765 let or = self.parse_conflict_clause();
1576315766 let table = self.parse_table_and_joins()?;
1576415767 let from_before_set = if self.parse_keyword(Keyword::FROM) {
@@ -15793,6 +15796,7 @@ impl<'a> Parser<'a> {
1579315796 None
1579415797 };
1579515798 Ok(Update {
15799+ update_token: update_token.into(),
1579615800 table,
1579715801 assignments,
1579815802 from,
0 commit comments