Skip to content

Commit 73dc8a3

Browse files
authored
Support DROP DATABASE (#1443)
1 parent 2af981e commit 73dc8a3

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

src/ast/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5691,6 +5691,7 @@ pub enum ObjectType {
56915691
View,
56925692
Index,
56935693
Schema,
5694+
Database,
56945695
Role,
56955696
Sequence,
56965697
Stage,
@@ -5703,6 +5704,7 @@ impl fmt::Display for ObjectType {
57035704
ObjectType::View => "VIEW",
57045705
ObjectType::Index => "INDEX",
57055706
ObjectType::Schema => "SCHEMA",
5707+
ObjectType::Database => "DATABASE",
57065708
ObjectType::Role => "ROLE",
57075709
ObjectType::Sequence => "SEQUENCE",
57085710
ObjectType::Stage => "STAGE",

src/parser/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4881,6 +4881,8 @@ impl<'a> Parser<'a> {
48814881
ObjectType::Role
48824882
} else if self.parse_keyword(Keyword::SCHEMA) {
48834883
ObjectType::Schema
4884+
} else if self.parse_keyword(Keyword::DATABASE) {
4885+
ObjectType::Database
48844886
} else if self.parse_keyword(Keyword::SEQUENCE) {
48854887
ObjectType::Sequence
48864888
} else if self.parse_keyword(Keyword::STAGE) {
@@ -4897,7 +4899,7 @@ impl<'a> Parser<'a> {
48974899
return self.parse_drop_trigger();
48984900
} else {
48994901
return self.expected(
4900-
"TABLE, VIEW, INDEX, ROLE, SCHEMA, FUNCTION, PROCEDURE, STAGE, TRIGGER, SECRET or SEQUENCE after DROP",
4902+
"TABLE, VIEW, INDEX, ROLE, SCHEMA, DATABASE, FUNCTION, PROCEDURE, STAGE, TRIGGER, SECRET or SEQUENCE after DROP",
49014903
self.peek_token(),
49024904
);
49034905
};

tests/sqlparser_common.rs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6734,6 +6734,43 @@ fn parse_create_database_ine() {
67346734
}
67356735
}
67366736

6737+
#[test]
6738+
fn parse_drop_database() {
6739+
let sql = "DROP DATABASE mycatalog.mydb";
6740+
match verified_stmt(sql) {
6741+
Statement::Drop {
6742+
names,
6743+
object_type,
6744+
if_exists,
6745+
..
6746+
} => {
6747+
assert_eq!(
6748+
vec!["mycatalog.mydb"],
6749+
names.iter().map(ToString::to_string).collect::<Vec<_>>()
6750+
);
6751+
assert_eq!(ObjectType::Database, object_type);
6752+
assert!(!if_exists);
6753+
}
6754+
_ => unreachable!(),
6755+
}
6756+
}
6757+
6758+
#[test]
6759+
fn parse_drop_database_if_exists() {
6760+
let sql = "DROP DATABASE IF EXISTS mydb";
6761+
match verified_stmt(sql) {
6762+
Statement::Drop {
6763+
object_type,
6764+
if_exists,
6765+
..
6766+
} => {
6767+
assert_eq!(ObjectType::Database, object_type);
6768+
assert!(if_exists);
6769+
}
6770+
_ => unreachable!(),
6771+
}
6772+
}
6773+
67376774
#[test]
67386775
fn parse_create_view() {
67396776
let sql = "CREATE VIEW myschema.myview AS SELECT foo FROM bar";

0 commit comments

Comments
 (0)