add support for update statements that contain tuple assignments (#1317)

This commit is contained in:
Ophir LOJKINE 2024-06-18 15:28:39 +02:00 committed by GitHub
parent 0330f9def5
commit 345e2098fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 114 additions and 24 deletions

View file

@ -9937,10 +9937,22 @@ impl<'a> Parser<'a> {
/// Parse a `var = expr` assignment, used in an UPDATE statement
pub fn parse_assignment(&mut self) -> Result<Assignment, ParserError> {
let id = self.parse_identifiers()?;
let target = self.parse_assignment_target()?;
self.expect_token(&Token::Eq)?;
let value = self.parse_expr()?;
Ok(Assignment { id, value })
Ok(Assignment { target, value })
}
/// Parse the left-hand side of an assignment, used in an UPDATE statement
pub fn parse_assignment_target(&mut self) -> Result<AssignmentTarget, ParserError> {
if self.consume_token(&Token::LParen) {
let columns = self.parse_comma_separated(|p| p.parse_object_name(false))?;
self.expect_token(&Token::RParen)?;
Ok(AssignmentTarget::Tuple(columns))
} else {
let column = self.parse_object_name(false)?;
Ok(AssignmentTarget::ColumnName(column))
}
}
pub fn parse_function_args(&mut self) -> Result<FunctionArg, ParserError> {