@@ -11032,24 +11032,7 @@ impl<'a> Parser<'a> {
1103211032
1103311033 /// Parse an INSERT statement
1103411034 pub fn parse_insert(&mut self) -> Result<Statement, ParserError> {
11035- let or = if !dialect_of!(self is SQLiteDialect) {
11036- None
11037- } else if self.parse_keywords(&[Keyword::OR, Keyword::REPLACE]) {
11038- Some(SqliteOnConflict::Replace)
11039- } else if self.parse_keywords(&[Keyword::OR, Keyword::ROLLBACK]) {
11040- Some(SqliteOnConflict::Rollback)
11041- } else if self.parse_keywords(&[Keyword::OR, Keyword::ABORT]) {
11042- Some(SqliteOnConflict::Abort)
11043- } else if self.parse_keywords(&[Keyword::OR, Keyword::FAIL]) {
11044- Some(SqliteOnConflict::Fail)
11045- } else if self.parse_keywords(&[Keyword::OR, Keyword::IGNORE]) {
11046- Some(SqliteOnConflict::Ignore)
11047- } else if self.parse_keyword(Keyword::REPLACE) {
11048- Some(SqliteOnConflict::Replace)
11049- } else {
11050- None
11051- };
11052-
11035+ let or = self.parse_conflict_clause();
1105311036 let priority = if !dialect_of!(self is MySqlDialect | GenericDialect) {
1105411037 None
1105511038 } else if self.parse_keyword(Keyword::LOW_PRIORITY) {
@@ -11208,6 +11191,24 @@ impl<'a> Parser<'a> {
1120811191 }
1120911192 }
1121011193
11194+ fn parse_conflict_clause(&mut self) -> Option<SqliteOnConflict> {
11195+ if self.parse_keywords(&[Keyword::OR, Keyword::REPLACE]) {
11196+ Some(SqliteOnConflict::Replace)
11197+ } else if self.parse_keywords(&[Keyword::OR, Keyword::ROLLBACK]) {
11198+ Some(SqliteOnConflict::Rollback)
11199+ } else if self.parse_keywords(&[Keyword::OR, Keyword::ABORT]) {
11200+ Some(SqliteOnConflict::Abort)
11201+ } else if self.parse_keywords(&[Keyword::OR, Keyword::FAIL]) {
11202+ Some(SqliteOnConflict::Fail)
11203+ } else if self.parse_keywords(&[Keyword::OR, Keyword::IGNORE]) {
11204+ Some(SqliteOnConflict::Ignore)
11205+ } else if self.parse_keyword(Keyword::REPLACE) {
11206+ Some(SqliteOnConflict::Replace)
11207+ } else {
11208+ None
11209+ }
11210+ }
11211+
1121111212 pub fn parse_insert_partition(&mut self) -> Result<Option<Vec<Expr>>, ParserError> {
1121211213 if self.parse_keyword(Keyword::PARTITION) {
1121311214 self.expect_token(&Token::LParen)?;
@@ -11243,6 +11244,7 @@ impl<'a> Parser<'a> {
1124311244 }
1124411245
1124511246 pub fn parse_update(&mut self) -> Result<Statement, ParserError> {
11247+ let or = self.parse_conflict_clause();
1124611248 let table = self.parse_table_and_joins()?;
1124711249 self.expect_keyword(Keyword::SET)?;
1124811250 let assignments = self.parse_comma_separated(Parser::parse_assignment)?;
@@ -11269,6 +11271,7 @@ impl<'a> Parser<'a> {
1126911271 from,
1127011272 selection,
1127111273 returning,
11274+ or,
1127211275 })
1127311276 }
1127411277
0 commit comments