diff --git a/src/parser.rs b/src/parser.rs index f91223c2f..e2e67c17b 100644 --- a/src/parser.rs +++ b/src/parser.rs @@ -3886,41 +3886,19 @@ impl<'a> Parser<'a> { Ok(ObjectName(idents)) } - /// Parse identifiers strictly i.e. don't parse keywords - pub fn parse_identifiers_non_keywords(&mut self) -> Result, ParserError> { + /// Parse identifiers + pub fn parse_identifiers(&mut self) -> Result, ParserError> { let mut idents = vec![]; loop { match self.peek_token() { Token::Word(w) => { - if w.keyword != Keyword::NoKeyword { - break; - } - idents.push(w.to_ident()); } Token::EOF | Token::Eq => break, _ => {} } - self.next_token(); } - - Ok(idents) - } - - /// Parse identifiers - pub fn parse_identifiers(&mut self) -> Result, ParserError> { - let mut idents = vec![]; - loop { - match self.next_token() { - Token::Word(w) => { - idents.push(w.to_ident()); - } - Token::EOF => break, - _ => {} - } - } - Ok(idents) } @@ -5282,7 +5260,7 @@ impl<'a> Parser<'a> { /// Parse a `var = expr` assignment, used in an UPDATE statement pub fn parse_assignment(&mut self) -> Result { - let id = self.parse_identifiers_non_keywords()?; + let id = self.parse_identifiers()?; self.expect_token(&Token::Eq)?; let value = self.parse_expr()?; Ok(Assignment { id, value }) @@ -6295,4 +6273,22 @@ mod tests { } ); } + + #[test] + fn test_update_has_keyword() { + let sql = r#"UPDATE test SET name=$1, + value=$2, + where=$3, + create=$4, + is_default=$5, + classification=$6, + sort=$7 + WHERE id=$8"#; + let pg_dialect = PostgreSqlDialect {}; + let ast = Parser::parse_sql(&pg_dialect, sql).unwrap(); + assert_eq!( + ast[0].to_string(), + r#"UPDATE test SET name = $1, value = $2, where = $3, create = $4, is_default = $5, classification = $6, sort = $7 WHERE id = $8"# + ); + } }