diff --git a/Cargo.lock b/Cargo.lock index 625a8f9..2b20df2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,4 +4,4 @@ version = 4 [[package]] name = "sql-parse" -version = "0.26.0" +version = "0.27.0" diff --git a/Cargo.toml b/Cargo.toml index 04ceccf..8dac977 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sql-parse" -version = "0.26.0" +version = "0.27.0" edition = "2021" authors = ["Jakob Truelsen "] keywords = [ "mysql", "postgresql", "sql", "lexer", "parser" ] diff --git a/src/insert_replace.rs b/src/insert_replace.rs index 29893e3..6775bb5 100644 --- a/src/insert_replace.rs +++ b/src/insert_replace.rs @@ -58,8 +58,8 @@ impl Spanned for InsertReplaceType { #[derive(Clone, Debug)] pub enum OnConflictTarget<'a> { - Column { - name: Identifier<'a>, + Columns { + names: Vec>, }, OnConstraint { on_constraint_span: Span, @@ -71,7 +71,7 @@ pub enum OnConflictTarget<'a> { impl<'a> OptSpanned for OnConflictTarget<'a> { fn opt_span(&self) -> Option { match self { - OnConflictTarget::Column { name } => Some(name.span()), + OnConflictTarget::Columns { names } => names.opt_span(), OnConflictTarget::OnConstraint { on_constraint_span: token, name, @@ -426,9 +426,13 @@ pub(crate) fn parse_insert_replace<'a>( let target = match &parser.token { Token::LParen => { parser.consume_token(Token::LParen)?; - let name = parser.consume_plain_identifier()?; + let mut names = Vec::new(); + names.push(parser.consume_plain_identifier()?); + while parser.skip_token(Token::Comma).is_some() { + names.push(parser.consume_plain_identifier()?); + } parser.consume_token(Token::RParen)?; - OnConflictTarget::Column { name } + OnConflictTarget::Columns { names } } Token::Ident(_, Keyword::ON) => { let on_constraint =