@@ -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(),
@@ -11996,7 +11996,7 @@ impl<'a> Parser<'a> {
1199611996 if self.parse_keyword(Keyword::INSERT) {
1199711997 Ok(Query {
1199811998 with,
11999- body: self.parse_insert_setexpr_boxed()?,
11999+ body: self.parse_insert_setexpr_boxed(self.get_current_token().clone() )?,
1200012000 order_by: None,
1200112001 limit_clause: None,
1200212002 fetch: None,
@@ -15451,15 +15451,15 @@ impl<'a> Parser<'a> {
1545115451 }
1545215452
1545315453 /// Parse an REPLACE statement
15454- pub fn parse_replace(&mut self) -> Result<Statement, ParserError> {
15454+ pub fn parse_replace(&mut self, replace_token: TokenWithSpan ) -> Result<Statement, ParserError> {
1545515455 if !dialect_of!(self is MySqlDialect | GenericDialect) {
1545615456 return parser_err!(
1545715457 "Unsupported statement REPLACE",
1545815458 self.peek_token().span.start
1545915459 );
1546015460 }
1546115461
15462- let mut insert = self.parse_insert()?;
15462+ let mut insert = self.parse_insert(replace_token )?;
1546315463 if let Statement::Insert(Insert { replace_into, .. }) = &mut insert {
1546415464 *replace_into = true;
1546515465 }
@@ -15470,12 +15470,12 @@ impl<'a> Parser<'a> {
1547015470 /// Parse an INSERT statement, returning a `Box`ed SetExpr
1547115471 ///
1547215472 /// This is used to reduce the size of the stack frames in debug builds
15473- fn parse_insert_setexpr_boxed(&mut self) -> Result<Box<SetExpr>, ParserError> {
15474- Ok(Box::new(SetExpr::Insert(self.parse_insert()?)))
15473+ fn parse_insert_setexpr_boxed(&mut self, insert_token: TokenWithSpan ) -> Result<Box<SetExpr>, ParserError> {
15474+ Ok(Box::new(SetExpr::Insert(self.parse_insert(insert_token )?)))
1547515475 }
1547615476
1547715477 /// Parse an INSERT statement
15478- pub fn parse_insert(&mut self) -> Result<Statement, ParserError> {
15478+ pub fn parse_insert(&mut self, insert_token: TokenWithSpan ) -> Result<Statement, ParserError> {
1547915479 let or = self.parse_conflict_clause();
1548015480 let priority = if !dialect_of!(self is MySqlDialect | GenericDialect) {
1548115481 None
@@ -15644,6 +15644,7 @@ impl<'a> Parser<'a> {
1564415644 };
1564515645
1564615646 Ok(Statement::Insert(Insert {
15647+ insert_token: insert_token.into(),
1564715648 or,
1564815649 table: table_object,
1564915650 table_alias,
0 commit comments