@@ -587,8 +587,8 @@ impl<'a> Parser<'a> {
587587 Keyword::DECLARE => self.parse_declare(),
588588 Keyword::FETCH => self.parse_fetch_statement(),
589589 Keyword::DELETE => self.parse_delete(next_token),
590- Keyword::INSERT => self.parse_insert(),
591- Keyword::REPLACE => self.parse_replace(),
590+ Keyword::INSERT => self.parse_insert(next_token ),
591+ Keyword::REPLACE => self.parse_replace(next_token ),
592592 Keyword::UNCACHE => self.parse_uncache_table(),
593593 Keyword::UPDATE => self.parse_update(next_token),
594594 Keyword::ALTER => self.parse_alter(),
@@ -12001,7 +12001,7 @@ impl<'a> Parser<'a> {
1200112001 if self.parse_keyword(Keyword::INSERT) {
1200212002 Ok(Query {
1200312003 with,
12004- body: self.parse_insert_setexpr_boxed()?,
12004+ body: self.parse_insert_setexpr_boxed(self.get_current_token().clone() )?,
1200512005 order_by: None,
1200612006 limit_clause: None,
1200712007 fetch: None,
@@ -15471,15 +15471,15 @@ impl<'a> Parser<'a> {
1547115471 }
1547215472
1547315473 /// Parse an REPLACE statement
15474- pub fn parse_replace(&mut self) -> Result<Statement, ParserError> {
15474+ pub fn parse_replace(&mut self, replace_token: TokenWithSpan ) -> Result<Statement, ParserError> {
1547515475 if !dialect_of!(self is MySqlDialect | GenericDialect) {
1547615476 return parser_err!(
1547715477 "Unsupported statement REPLACE",
1547815478 self.peek_token().span.start
1547915479 );
1548015480 }
1548115481
15482- let mut insert = self.parse_insert()?;
15482+ let mut insert = self.parse_insert(replace_token )?;
1548315483 if let Statement::Insert(Insert { replace_into, .. }) = &mut insert {
1548415484 *replace_into = true;
1548515485 }
@@ -15490,12 +15490,12 @@ impl<'a> Parser<'a> {
1549015490 /// Parse an INSERT statement, returning a `Box`ed SetExpr
1549115491 ///
1549215492 /// This is used to reduce the size of the stack frames in debug builds
15493- fn parse_insert_setexpr_boxed(&mut self) -> Result<Box<SetExpr>, ParserError> {
15494- Ok(Box::new(SetExpr::Insert(self.parse_insert()?)))
15493+ fn parse_insert_setexpr_boxed(&mut self, insert_token: TokenWithSpan ) -> Result<Box<SetExpr>, ParserError> {
15494+ Ok(Box::new(SetExpr::Insert(self.parse_insert(insert_token )?)))
1549515495 }
1549615496
1549715497 /// Parse an INSERT statement
15498- pub fn parse_insert(&mut self) -> Result<Statement, ParserError> {
15498+ pub fn parse_insert(&mut self, insert_token: TokenWithSpan ) -> Result<Statement, ParserError> {
1549915499 let or = self.parse_conflict_clause();
1550015500 let priority = if !dialect_of!(self is MySqlDialect | GenericDialect) {
1550115501 None
@@ -15664,6 +15664,7 @@ impl<'a> Parser<'a> {
1566415664 };
1566515665
1566615666 Ok(Statement::Insert(Insert {
15667+ insert_token: insert_token.into(),
1566715668 or,
1566815669 table: table_object,
1566915670 table_alias,
0 commit comments