Merge pull request #80 from benesch/between-expr

Support nested expressions in BETWEEN
This commit is contained in:
Nickolay Ponomarev 2019-05-30 02:37:06 +03:00 committed by GitHub
commit d80f9f3a7a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 2 deletions

View file

@ -508,9 +508,12 @@ impl Parser {
/// Parses `BETWEEN <low> AND <high>`, assuming the `BETWEEN` keyword was already consumed
pub fn parse_between(&mut self, expr: ASTNode, negated: bool) -> Result<ASTNode, ParserError> {
let low = self.parse_prefix()?;
// Stop parsing subexpressions for <low> and <high> on tokens with
// precedence lower than that of `BETWEEN`, such as `AND`, `IS`, etc.
let prec = self.get_precedence(&Token::make_keyword("BETWEEN"))?;
let low = self.parse_subexpr(prec)?;
self.expect_keyword("AND")?;
let high = self.parse_prefix()?;
let high = self.parse_subexpr(prec)?;
Ok(ASTNode::SQLBetween {
expr: Box::new(expr),
negated,