Code review comments

This commit is contained in:
Yoav Cohen 2025-08-21 09:29:24 +03:00
parent 41af5d4f6e
commit 2e313d3e69
2 changed files with 38 additions and 16 deletions

View file

@ -649,7 +649,10 @@ impl<'a> Parser<'a> {
self.prev_token(); self.prev_token();
self.parse_export_data() self.parse_export_data()
} }
Keyword::VACUUM => self.parse_vacuum(), Keyword::VACUUM => {
self.prev_token();
self.parse_vacuum()
}
_ => self.expected("an SQL statement", next_token), _ => self.expected("an SQL statement", next_token),
}, },
Token::LParen => { Token::LParen => {
@ -16934,25 +16937,27 @@ impl<'a> Parser<'a> {
} }
fn parse_vacuum(&mut self) -> Result<Statement, ParserError> { fn parse_vacuum(&mut self) -> Result<Statement, ParserError> {
self.expect_keyword(Keyword::VACUUM)?;
let full = self.parse_keyword(Keyword::FULL); let full = self.parse_keyword(Keyword::FULL);
let sort_only = self.parse_keywords(&[Keyword::SORT, Keyword::ONLY]); let sort_only = self.parse_keywords(&[Keyword::SORT, Keyword::ONLY]);
let delete_only = self.parse_keywords(&[Keyword::DELETE, Keyword::ONLY]); let delete_only = self.parse_keywords(&[Keyword::DELETE, Keyword::ONLY]);
let reindex = self.parse_keyword(Keyword::REINDEX); let reindex = self.parse_keyword(Keyword::REINDEX);
let recluster = self.parse_keyword(Keyword::RECLUSTER); let recluster = self.parse_keyword(Keyword::RECLUSTER);
let (table_name, threshold, boost) = match self.parse_object_name(false) { let (table_name, threshold, boost) =
Ok(table_name) => { match self.maybe_parse(|p| p.parse_object_name(false))? {
let threshold = if self.parse_keyword(Keyword::TO) { Some(table_name) => {
let value = self.parse_value()?; let threshold = if self.parse_keyword(Keyword::TO) {
self.expect_keyword(Keyword::PERCENT)?; let value = self.parse_value()?;
Some(value.value) self.expect_keyword(Keyword::PERCENT)?;
} else { Some(value.value)
None } else {
}; None
let boost = self.parse_keyword(Keyword::BOOST); };
(Some(table_name), threshold, boost) let boost = self.parse_keyword(Keyword::BOOST);
} (Some(table_name), threshold, boost)
_ => (None, None, false), }
}; _ => (None, None, false),
};
Ok(Statement::Vacuum(VacuumStatement { Ok(Statement::Vacuum(VacuumStatement {
full, full,
sort_only, sort_only,

View file

@ -410,7 +410,24 @@ fn parse_utf8_multibyte_idents() {
#[test] #[test]
fn parse_vacuum() { fn parse_vacuum() {
redshift().verified_stmt("VACUUM db1.sc1.tbl1"); let stmt = redshift().verified_stmt("VACUUM FULL");
match stmt {
Statement::Vacuum(v) => {
assert!(v.full);
assert_eq!(v.table_name, None);
}
_ => unreachable!(),
}
let stmt = redshift().verified_stmt("VACUUM tbl");
match stmt {
Statement::Vacuum(v) => {
assert_eq!(
v.table_name,
Some(ObjectName::from(vec![Ident::new("tbl"),]))
);
}
_ => unreachable!(),
}
let stmt = redshift().verified_stmt( let stmt = redshift().verified_stmt(
"VACUUM FULL SORT ONLY DELETE ONLY REINDEX RECLUSTER db1.sc1.tbl1 TO 20 PERCENT BOOST", "VACUUM FULL SORT ONLY DELETE ONLY REINDEX RECLUSTER db1.sc1.tbl1 TO 20 PERCENT BOOST",
); );