mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-25 08:24:05 +00:00
Code review comments
This commit is contained in:
parent
41af5d4f6e
commit
2e313d3e69
2 changed files with 38 additions and 16 deletions
|
@ -649,7 +649,10 @@ impl<'a> Parser<'a> {
|
|||
self.prev_token();
|
||||
self.parse_export_data()
|
||||
}
|
||||
Keyword::VACUUM => self.parse_vacuum(),
|
||||
Keyword::VACUUM => {
|
||||
self.prev_token();
|
||||
self.parse_vacuum()
|
||||
}
|
||||
_ => self.expected("an SQL statement", next_token),
|
||||
},
|
||||
Token::LParen => {
|
||||
|
@ -16934,25 +16937,27 @@ impl<'a> Parser<'a> {
|
|||
}
|
||||
|
||||
fn parse_vacuum(&mut self) -> Result<Statement, ParserError> {
|
||||
self.expect_keyword(Keyword::VACUUM)?;
|
||||
let full = self.parse_keyword(Keyword::FULL);
|
||||
let sort_only = self.parse_keywords(&[Keyword::SORT, Keyword::ONLY]);
|
||||
let delete_only = self.parse_keywords(&[Keyword::DELETE, Keyword::ONLY]);
|
||||
let reindex = self.parse_keyword(Keyword::REINDEX);
|
||||
let recluster = self.parse_keyword(Keyword::RECLUSTER);
|
||||
let (table_name, threshold, boost) = match self.parse_object_name(false) {
|
||||
Ok(table_name) => {
|
||||
let threshold = if self.parse_keyword(Keyword::TO) {
|
||||
let value = self.parse_value()?;
|
||||
self.expect_keyword(Keyword::PERCENT)?;
|
||||
Some(value.value)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let boost = self.parse_keyword(Keyword::BOOST);
|
||||
(Some(table_name), threshold, boost)
|
||||
}
|
||||
_ => (None, None, false),
|
||||
};
|
||||
let (table_name, threshold, boost) =
|
||||
match self.maybe_parse(|p| p.parse_object_name(false))? {
|
||||
Some(table_name) => {
|
||||
let threshold = if self.parse_keyword(Keyword::TO) {
|
||||
let value = self.parse_value()?;
|
||||
self.expect_keyword(Keyword::PERCENT)?;
|
||||
Some(value.value)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let boost = self.parse_keyword(Keyword::BOOST);
|
||||
(Some(table_name), threshold, boost)
|
||||
}
|
||||
_ => (None, None, false),
|
||||
};
|
||||
Ok(Statement::Vacuum(VacuumStatement {
|
||||
full,
|
||||
sort_only,
|
||||
|
|
|
@ -410,7 +410,24 @@ fn parse_utf8_multibyte_idents() {
|
|||
|
||||
#[test]
|
||||
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(
|
||||
"VACUUM FULL SORT ONLY DELETE ONLY REINDEX RECLUSTER db1.sc1.tbl1 TO 20 PERCENT BOOST",
|
||||
);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue