mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-19 13:40:15 +00:00
Fix parsing of COLLATE after parentheses in expressions (#507)
This commit is contained in:
parent
901f5b974f
commit
0fa812bd2b
2 changed files with 20 additions and 10 deletions
|
@ -525,17 +525,18 @@ impl<'a> Parser<'a> {
|
||||||
};
|
};
|
||||||
self.expect_token(&Token::RParen)?;
|
self.expect_token(&Token::RParen)?;
|
||||||
if !self.consume_token(&Token::Period) {
|
if !self.consume_token(&Token::Period) {
|
||||||
return Ok(expr);
|
Ok(expr)
|
||||||
|
} else {
|
||||||
|
let tok = self.next_token();
|
||||||
|
let key = match tok {
|
||||||
|
Token::Word(word) => word.to_ident(),
|
||||||
|
_ => return parser_err!(format!("Expected identifier, found: {}", tok)),
|
||||||
|
};
|
||||||
|
Ok(Expr::CompositeAccess {
|
||||||
|
expr: Box::new(expr),
|
||||||
|
key,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
let tok = self.next_token();
|
|
||||||
let key = match tok {
|
|
||||||
Token::Word(word) => word.to_ident(),
|
|
||||||
_ => return parser_err!(format!("Expected identifier, found: {}", tok)),
|
|
||||||
};
|
|
||||||
Ok(Expr::CompositeAccess {
|
|
||||||
expr: Box::new(expr),
|
|
||||||
key,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
Token::Placeholder(_) => {
|
Token::Placeholder(_) => {
|
||||||
self.prev_token();
|
self.prev_token();
|
||||||
|
|
|
@ -561,6 +561,15 @@ fn parse_collate() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_collate_after_parens() {
|
||||||
|
let sql = "SELECT (name) COLLATE \"de_DE\" FROM customer";
|
||||||
|
assert_matches!(
|
||||||
|
only(&all_dialects().verified_only_select(sql).projection),
|
||||||
|
SelectItem::UnnamedExpr(Expr::Collate { .. })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_select_string_predicate() {
|
fn parse_select_string_predicate() {
|
||||||
let sql = "SELECT id, fname, lname FROM customer \
|
let sql = "SELECT id, fname, lname FROM customer \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue