mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-09-26 15:39:12 +00:00
Support DROP DATABASE
(#1443)
This commit is contained in:
parent
2af981e4e6
commit
73dc8a352d
3 changed files with 42 additions and 1 deletions
|
@ -5691,6 +5691,7 @@ pub enum ObjectType {
|
||||||
View,
|
View,
|
||||||
Index,
|
Index,
|
||||||
Schema,
|
Schema,
|
||||||
|
Database,
|
||||||
Role,
|
Role,
|
||||||
Sequence,
|
Sequence,
|
||||||
Stage,
|
Stage,
|
||||||
|
@ -5703,6 +5704,7 @@ impl fmt::Display for ObjectType {
|
||||||
ObjectType::View => "VIEW",
|
ObjectType::View => "VIEW",
|
||||||
ObjectType::Index => "INDEX",
|
ObjectType::Index => "INDEX",
|
||||||
ObjectType::Schema => "SCHEMA",
|
ObjectType::Schema => "SCHEMA",
|
||||||
|
ObjectType::Database => "DATABASE",
|
||||||
ObjectType::Role => "ROLE",
|
ObjectType::Role => "ROLE",
|
||||||
ObjectType::Sequence => "SEQUENCE",
|
ObjectType::Sequence => "SEQUENCE",
|
||||||
ObjectType::Stage => "STAGE",
|
ObjectType::Stage => "STAGE",
|
||||||
|
|
|
@ -4881,6 +4881,8 @@ impl<'a> Parser<'a> {
|
||||||
ObjectType::Role
|
ObjectType::Role
|
||||||
} else if self.parse_keyword(Keyword::SCHEMA) {
|
} else if self.parse_keyword(Keyword::SCHEMA) {
|
||||||
ObjectType::Schema
|
ObjectType::Schema
|
||||||
|
} else if self.parse_keyword(Keyword::DATABASE) {
|
||||||
|
ObjectType::Database
|
||||||
} else if self.parse_keyword(Keyword::SEQUENCE) {
|
} else if self.parse_keyword(Keyword::SEQUENCE) {
|
||||||
ObjectType::Sequence
|
ObjectType::Sequence
|
||||||
} else if self.parse_keyword(Keyword::STAGE) {
|
} else if self.parse_keyword(Keyword::STAGE) {
|
||||||
|
@ -4897,7 +4899,7 @@ impl<'a> Parser<'a> {
|
||||||
return self.parse_drop_trigger();
|
return self.parse_drop_trigger();
|
||||||
} else {
|
} else {
|
||||||
return self.expected(
|
return self.expected(
|
||||||
"TABLE, VIEW, INDEX, ROLE, SCHEMA, FUNCTION, PROCEDURE, STAGE, TRIGGER, SECRET or SEQUENCE after DROP",
|
"TABLE, VIEW, INDEX, ROLE, SCHEMA, DATABASE, FUNCTION, PROCEDURE, STAGE, TRIGGER, SECRET or SEQUENCE after DROP",
|
||||||
self.peek_token(),
|
self.peek_token(),
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -6734,6 +6734,43 @@ fn parse_create_database_ine() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_drop_database() {
|
||||||
|
let sql = "DROP DATABASE mycatalog.mydb";
|
||||||
|
match verified_stmt(sql) {
|
||||||
|
Statement::Drop {
|
||||||
|
names,
|
||||||
|
object_type,
|
||||||
|
if_exists,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
assert_eq!(
|
||||||
|
vec!["mycatalog.mydb"],
|
||||||
|
names.iter().map(ToString::to_string).collect::<Vec<_>>()
|
||||||
|
);
|
||||||
|
assert_eq!(ObjectType::Database, object_type);
|
||||||
|
assert!(!if_exists);
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_drop_database_if_exists() {
|
||||||
|
let sql = "DROP DATABASE IF EXISTS mydb";
|
||||||
|
match verified_stmt(sql) {
|
||||||
|
Statement::Drop {
|
||||||
|
object_type,
|
||||||
|
if_exists,
|
||||||
|
..
|
||||||
|
} => {
|
||||||
|
assert_eq!(ObjectType::Database, object_type);
|
||||||
|
assert!(if_exists);
|
||||||
|
}
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_create_view() {
|
fn parse_create_view() {
|
||||||
let sql = "CREATE VIEW myschema.myview AS SELECT foo FROM bar";
|
let sql = "CREATE VIEW myschema.myview AS SELECT foo FROM bar";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue