mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-25 16:34:04 +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.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,
|
||||||
|
|
|
@ -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",
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue