Skip to content

Commit

Permalink
Use expect_one_of_keywords
Browse files Browse the repository at this point in the history
  • Loading branch information
ggevay committed Dec 20, 2023
1 parent 00cd5b1 commit 0814846
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 33 deletions.
60 changes: 28 additions & 32 deletions src/sql-parser/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3297,41 +3297,37 @@ impl<'a> Parser<'a> {
) -> Result<WithOptionValue<Raw>, ParserError> {
let _ = self.consume_token(&Token::Eq);

if self.parse_keyword(ON) {
self.expect_keyword(COMMIT)?;
Ok(WithOptionValue::Refresh(RefreshOptionValue::OnCommit))
} else if self.parse_keyword(AT) {
if self.parse_keyword(CREATION) {
Ok(WithOptionValue::Refresh(RefreshOptionValue::AtCreation))
} else {
Ok(WithOptionValue::Refresh(RefreshOptionValue::At(
RefreshAtOptionValue {
time: self.parse_expr()?,
match self.expect_one_of_keywords(&[ON, AT, EVERY])? {
ON => {
self.expect_keyword(COMMIT)?;
Ok(WithOptionValue::Refresh(RefreshOptionValue::OnCommit))
}
AT => {
if self.parse_keyword(CREATION) {
Ok(WithOptionValue::Refresh(RefreshOptionValue::AtCreation))
} else {
Ok(WithOptionValue::Refresh(RefreshOptionValue::At(
RefreshAtOptionValue {
time: self.parse_expr()?,
},
)))
}
}
EVERY => {
let interval = self.parse_interval_value()?;
let aligned_to = if self.parse_keywords(&[ALIGNED, TO]) {
Some(self.parse_expr()?)
} else {
None
};
Ok(WithOptionValue::Refresh(RefreshOptionValue::Every(
RefreshEveryOptionValue {
interval,
aligned_to,
},
)))
}
} else if self.parse_keyword(EVERY) {
let interval = self.parse_interval_value()?;
let aligned_to = if self.parse_keywords(&[ALIGNED, TO]) {
Some(self.parse_expr()?)
} else {
None
};
Ok(WithOptionValue::Refresh(RefreshOptionValue::Every(
RefreshEveryOptionValue {
interval,
aligned_to,
},
)))
} else {
parser_err!(
self,
self.peek_prev_pos(),
format!(
"Invalid REFRESH option value. Expected ON COMMIT, AT, or EVERY. Instead got {}.",
self.peek_token().map(|token| token.to_string()).unwrap_or("".to_string()),
)
)
_ => unreachable!(),
}
}

Expand Down
2 changes: 1 addition & 1 deletion test/sqllogictest/materialized_views.slt
Original file line number Diff line number Diff line change
Expand Up @@ -660,7 +660,7 @@ ALTER SYSTEM SET enable_refresh_every_mvs = true
----
COMPLETE 0

query error Invalid REFRESH option value\. Expected ON COMMIT, AT, or EVERY\. Instead got number "5"\.
query error Expected one of ON or AT or EVERY, found number "5"
CREATE MATERIALIZED VIEW mv_bad WITH (REFRESH 5) AS SELECT 1;

query error db error: ERROR: REFRESH ON COMMIT cannot be specified multiple times
Expand Down

0 comments on commit 0814846

Please sign in to comment.