@@ -11042,24 +11042,7 @@ impl<'a> Parser<'a> {
1104211042
1104311043 /// Parse an INSERT statement
1104411044 pub fn parse_insert(&mut self) -> Result<Statement, ParserError> {
11045- let or = if !dialect_of!(self is SQLiteDialect) {
11046- None
11047- } else if self.parse_keywords(&[Keyword::OR, Keyword::REPLACE]) {
11048- Some(SqliteOnConflict::Replace)
11049- } else if self.parse_keywords(&[Keyword::OR, Keyword::ROLLBACK]) {
11050- Some(SqliteOnConflict::Rollback)
11051- } else if self.parse_keywords(&[Keyword::OR, Keyword::ABORT]) {
11052- Some(SqliteOnConflict::Abort)
11053- } else if self.parse_keywords(&[Keyword::OR, Keyword::FAIL]) {
11054- Some(SqliteOnConflict::Fail)
11055- } else if self.parse_keywords(&[Keyword::OR, Keyword::IGNORE]) {
11056- Some(SqliteOnConflict::Ignore)
11057- } else if self.parse_keyword(Keyword::REPLACE) {
11058- Some(SqliteOnConflict::Replace)
11059- } else {
11060- None
11061- };
11062-
11045+ let or = self.parse_conflict_clause();
1106311046 let priority = if !dialect_of!(self is MySqlDialect | GenericDialect) {
1106411047 None
1106511048 } else if self.parse_keyword(Keyword::LOW_PRIORITY) {
@@ -11218,6 +11201,24 @@ impl<'a> Parser<'a> {
1121811201 }
1121911202 }
1122011203
11204+ fn parse_conflict_clause(&mut self) -> Option<SqliteOnConflict> {
11205+ if self.parse_keywords(&[Keyword::OR, Keyword::REPLACE]) {
11206+ Some(SqliteOnConflict::Replace)
11207+ } else if self.parse_keywords(&[Keyword::OR, Keyword::ROLLBACK]) {
11208+ Some(SqliteOnConflict::Rollback)
11209+ } else if self.parse_keywords(&[Keyword::OR, Keyword::ABORT]) {
11210+ Some(SqliteOnConflict::Abort)
11211+ } else if self.parse_keywords(&[Keyword::OR, Keyword::FAIL]) {
11212+ Some(SqliteOnConflict::Fail)
11213+ } else if self.parse_keywords(&[Keyword::OR, Keyword::IGNORE]) {
11214+ Some(SqliteOnConflict::Ignore)
11215+ } else if self.parse_keyword(Keyword::REPLACE) {
11216+ Some(SqliteOnConflict::Replace)
11217+ } else {
11218+ None
11219+ }
11220+ }
11221+
1122111222 pub fn parse_insert_partition(&mut self) -> Result<Option<Vec<Expr>>, ParserError> {
1122211223 if self.parse_keyword(Keyword::PARTITION) {
1122311224 self.expect_token(&Token::LParen)?;
@@ -11253,6 +11254,7 @@ impl<'a> Parser<'a> {
1125311254 }
1125411255
1125511256 pub fn parse_update(&mut self) -> Result<Statement, ParserError> {
11257+ let or = self.parse_conflict_clause();
1125611258 let table = self.parse_table_and_joins()?;
1125711259 self.expect_keyword(Keyword::SET)?;
1125811260 let assignments = self.parse_comma_separated(Parser::parse_assignment)?;
@@ -11279,6 +11281,7 @@ impl<'a> Parser<'a> {
1127911281 from,
1128011282 selection,
1128111283 returning,
11284+ or,
1128211285 })
1128311286 }
1128411287
0 commit comments