Skip to content

Commit 02b1c53

Browse files
committed
sql_parser: expression parser refactoring (7)
1 parent dffb9e5 commit 02b1c53

File tree

1 file changed

+15
-30
lines changed

1 file changed

+15
-30
lines changed

src/parser/expression/pratt_parser.rs

+15-30
Original file line numberDiff line numberDiff line change
@@ -67,28 +67,6 @@ impl<'a> PrattParser for Parser<'a> {
6767
/// A prefix expression is an expression that does not have a left operand.
6868
fn parse_prefix(&mut self) -> Result<Expression, ParsingError> {
6969
if let Ok(keyword) = self.peek_as_keyword() {
70-
// Check if it's one of the special expressions
71-
if keyword == Keyword::Null
72-
|| keyword == Keyword::CurrentTime
73-
|| keyword == Keyword::CurrentDate
74-
|| keyword == Keyword::CurrentTimestamp
75-
{
76-
self.consume_as_keyword(keyword)?;
77-
78-
match keyword {
79-
Keyword::Null => return Ok(Expression::LiteralValue(LiteralValue::Null)),
80-
Keyword::CurrentTime => {
81-
return Ok(Expression::LiteralValue(LiteralValue::CurrentTime))
82-
}
83-
Keyword::CurrentDate => {
84-
return Ok(Expression::LiteralValue(LiteralValue::CurrentDate))
85-
}
86-
Keyword::CurrentTimestamp => {
87-
return Ok(Expression::LiteralValue(LiteralValue::CurrentTimestamp))
88-
}
89-
_ => {}
90-
}
91-
}
9270
match keyword {
9371
Keyword::Case => return CaseExpressionParser::parse_case_expression(self),
9472
Keyword::Cast => return CastExpressionParser::parse_cast_expression(self),
@@ -97,20 +75,27 @@ impl<'a> PrattParser for Parser<'a> {
9775
return ExistsExpressionParser::parse_exists_expression(self, false)
9876
}
9977
Keyword::Raise => return RaiseExpressionParser::parse_raise_expression(self),
100-
Keyword::Null
101-
| Keyword::CurrentTime
102-
| Keyword::CurrentDate
103-
| Keyword::CurrentTimestamp => {
104-
// These are literals, so we don't need to do anything here
105-
// as the pratt parser will handle them
78+
Keyword::Null => {
79+
self.consume_as_keyword(Keyword::Null)?;
80+
return Ok(Expression::LiteralValue(LiteralValue::Null));
81+
}
82+
Keyword::CurrentTime => {
83+
self.consume_as_keyword(Keyword::CurrentTime)?;
84+
return Ok(Expression::LiteralValue(LiteralValue::CurrentTime));
85+
}
86+
Keyword::CurrentDate => {
87+
self.consume_as_keyword(Keyword::CurrentDate)?;
88+
return Ok(Expression::LiteralValue(LiteralValue::CurrentDate));
89+
}
90+
Keyword::CurrentTimestamp => {
91+
self.consume_as_keyword(Keyword::CurrentTimestamp)?;
92+
return Ok(Expression::LiteralValue(LiteralValue::CurrentTimestamp));
10693
}
10794
_ => return Err(ParsingError::UnexpectedKeyword(keyword)),
10895
}
10996
} else if self.peek_as(TokenType::LeftParen).is_ok() {
110-
// Consume the left parenthesis
11197
self.consume_as(TokenType::LeftParen)?;
11298

113-
// TODO: Handle EXISTS (SELECT ...)
11499
let expression = if let Ok(Keyword::Select) = self.peek_as_keyword() {
115100
ExistsExpressionParser::parse_exists_expression(self, false)?
116101
} else {

0 commit comments

Comments
 (0)