mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-09-09 23:46:20 +00:00
Support DROP [TABLE|VIEW]
Co-authored-by: Jamie Brandon <jamie@scattered-thoughts.net>
This commit is contained in:
parent
4f944dd4aa
commit
187376e657
4 changed files with 145 additions and 0 deletions
|
@ -97,6 +97,7 @@ impl Parser {
|
|||
Ok(SQLStatement::SQLQuery(Box::new(self.parse_query()?)))
|
||||
}
|
||||
"CREATE" => Ok(self.parse_create()?),
|
||||
"DROP" => Ok(self.parse_drop()?),
|
||||
"DELETE" => Ok(self.parse_delete()?),
|
||||
"INSERT" => Ok(self.parse_insert()?),
|
||||
"ALTER" => Ok(self.parse_alter()?),
|
||||
|
@ -738,6 +739,43 @@ impl Parser {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn parse_drop(&mut self) -> Result<SQLStatement, ParserError> {
|
||||
let object_type = if self.parse_keyword("TABLE") {
|
||||
SQLObjectType::Table
|
||||
} else if self.parse_keyword("VIEW") {
|
||||
SQLObjectType::View
|
||||
} else {
|
||||
return parser_err!(format!(
|
||||
"Unexpected token after DROP: {:?}",
|
||||
self.peek_token()
|
||||
));
|
||||
};
|
||||
let if_exists = self.parse_keywords(vec!["IF", "EXISTS"]);
|
||||
let mut names = vec![self.parse_object_name()?];
|
||||
loop {
|
||||
let token = &self.next_token();
|
||||
if let Some(Token::Comma) = token {
|
||||
names.push(self.parse_object_name()?)
|
||||
} else {
|
||||
if token.is_some() {
|
||||
self.prev_token();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
let cascade = self.parse_keyword("CASCADE");
|
||||
let restrict = self.parse_keyword("RESTRICT");
|
||||
if cascade && restrict {
|
||||
return parser_err!("Cannot specify both CASCADE and RESTRICT in DROP");
|
||||
}
|
||||
Ok(SQLStatement::SQLDrop {
|
||||
object_type,
|
||||
if_exists,
|
||||
names,
|
||||
cascade,
|
||||
})
|
||||
}
|
||||
|
||||
pub fn parse_create_table(&mut self) -> Result<SQLStatement, ParserError> {
|
||||
let table_name = self.parse_object_name()?;
|
||||
// parse optional column list (schema)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue