Skip to content

Commit 3fbbed8

Browse files
authored
[SIG-13647] allow idents for limits and offsets (#3)
1 parent e6c54a2 commit 3fbbed8

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/parser.rs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,12 +1920,14 @@ impl<'a> Parser<'a> {
19201920
}
19211921
}
19221922

1923-
pub fn parse_number_value(&mut self) -> Result<Value, ParserError> {
1924-
match self.parse_value()? {
1925-
v @ Value::Number(_) => Ok(v),
1923+
// XXX(don): this used to only succeed if we found a number value, but due to https://sigmacomputing.atlassian.net/browse/SIG-13647 I've updated it to allow idents as well.
1924+
pub fn parse_number_value_or_ident(&mut self) -> Result<Expr, ParserError> {
1925+
match self.parse_expr()? {
1926+
e @ Expr::Value(Value::Number(_)) => Ok(e),
1927+
e @ Expr::Identifier(_) => Ok(e),
19261928
_ => {
19271929
self.prev_token();
1928-
self.expected("literal number", self.peek_token())
1930+
self.expected("literal number or ident", self.peek_token())
19291931
}
19301932
}
19311933
}
@@ -2952,7 +2954,7 @@ impl<'a> Parser<'a> {
29522954
self.expect_token(&Token::RParen)?;
29532955
Some(quantity)
29542956
} else {
2955-
Some(Expr::Value(self.parse_number_value()?))
2957+
Some(self.parse_number_value_or_ident()?)
29562958
};
29572959

29582960
let percent = self.parse_keyword(Keyword::PERCENT);
@@ -2971,13 +2973,13 @@ impl<'a> Parser<'a> {
29712973
if self.parse_keyword(Keyword::ALL) {
29722974
Ok(None)
29732975
} else {
2974-
Ok(Some(Expr::Value(self.parse_number_value()?)))
2976+
Ok(Some(self.parse_number_value_or_ident()?))
29752977
}
29762978
}
29772979

29782980
/// Parse an OFFSET clause
29792981
pub fn parse_offset(&mut self) -> Result<Offset, ParserError> {
2980-
let value = Expr::Value(self.parse_number_value()?);
2982+
let value = self.parse_number_value_or_ident()?;
29812983
let rows = if self.parse_keyword(Keyword::ROW) {
29822984
OffsetRows::Row
29832985
} else if self.parse_keyword(Keyword::ROWS) {

0 commit comments

Comments
 (0)