Skip to content

Commit 2e313d3

Browse files
committed
Code review comments
1 parent 41af5d4 commit 2e313d3

File tree

2 files changed

+38
-16
lines changed

2 files changed

+38
-16
lines changed

src/parser/mod.rs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -649,7 +649,10 @@ impl<'a> Parser<'a> {
649649
self.prev_token();
650650
self.parse_export_data()
651651
}
652-
Keyword::VACUUM => self.parse_vacuum(),
652+
Keyword::VACUUM => {
653+
self.prev_token();
654+
self.parse_vacuum()
655+
}
653656
_ => self.expected("an SQL statement", next_token),
654657
},
655658
Token::LParen => {
@@ -16934,25 +16937,27 @@ impl<'a> Parser<'a> {
1693416937
}
1693516938

1693616939
fn parse_vacuum(&mut self) -> Result<Statement, ParserError> {
16940+
self.expect_keyword(Keyword::VACUUM)?;
1693716941
let full = self.parse_keyword(Keyword::FULL);
1693816942
let sort_only = self.parse_keywords(&[Keyword::SORT, Keyword::ONLY]);
1693916943
let delete_only = self.parse_keywords(&[Keyword::DELETE, Keyword::ONLY]);
1694016944
let reindex = self.parse_keyword(Keyword::REINDEX);
1694116945
let recluster = self.parse_keyword(Keyword::RECLUSTER);
16942-
let (table_name, threshold, boost) = match self.parse_object_name(false) {
16943-
Ok(table_name) => {
16944-
let threshold = if self.parse_keyword(Keyword::TO) {
16945-
let value = self.parse_value()?;
16946-
self.expect_keyword(Keyword::PERCENT)?;
16947-
Some(value.value)
16948-
} else {
16949-
None
16950-
};
16951-
let boost = self.parse_keyword(Keyword::BOOST);
16952-
(Some(table_name), threshold, boost)
16953-
}
16954-
_ => (None, None, false),
16955-
};
16946+
let (table_name, threshold, boost) =
16947+
match self.maybe_parse(|p| p.parse_object_name(false))? {
16948+
Some(table_name) => {
16949+
let threshold = if self.parse_keyword(Keyword::TO) {
16950+
let value = self.parse_value()?;
16951+
self.expect_keyword(Keyword::PERCENT)?;
16952+
Some(value.value)
16953+
} else {
16954+
None
16955+
};
16956+
let boost = self.parse_keyword(Keyword::BOOST);
16957+
(Some(table_name), threshold, boost)
16958+
}
16959+
_ => (None, None, false),
16960+
};
1695616961
Ok(Statement::Vacuum(VacuumStatement {
1695716962
full,
1695816963
sort_only,

tests/sqlparser_redshift.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,24 @@ fn parse_utf8_multibyte_idents() {
410410

411411
#[test]
412412
fn parse_vacuum() {
413-
redshift().verified_stmt("VACUUM db1.sc1.tbl1");
413+
let stmt = redshift().verified_stmt("VACUUM FULL");
414+
match stmt {
415+
Statement::Vacuum(v) => {
416+
assert!(v.full);
417+
assert_eq!(v.table_name, None);
418+
}
419+
_ => unreachable!(),
420+
}
421+
let stmt = redshift().verified_stmt("VACUUM tbl");
422+
match stmt {
423+
Statement::Vacuum(v) => {
424+
assert_eq!(
425+
v.table_name,
426+
Some(ObjectName::from(vec![Ident::new("tbl"),]))
427+
);
428+
}
429+
_ => unreachable!(),
430+
}
414431
let stmt = redshift().verified_stmt(
415432
"VACUUM FULL SORT ONLY DELETE ONLY REINDEX RECLUSTER db1.sc1.tbl1 TO 20 PERCENT BOOST",
416433
);

0 commit comments

Comments
 (0)