Skip to content

Commit c01e054

Browse files
authored
Add "DROP TYPE" support. (#1461)
1 parent 7905fb4 commit c01e054

File tree

3 files changed

+59
-1
lines changed

3 files changed

+59
-1
lines changed

src/ast/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -5736,6 +5736,7 @@ pub enum ObjectType {
57365736
Role,
57375737
Sequence,
57385738
Stage,
5739+
Type,
57395740
}
57405741

57415742
impl fmt::Display for ObjectType {
@@ -5749,6 +5750,7 @@ impl fmt::Display for ObjectType {
57495750
ObjectType::Role => "ROLE",
57505751
ObjectType::Sequence => "SEQUENCE",
57515752
ObjectType::Stage => "STAGE",
5753+
ObjectType::Type => "TYPE",
57525754
})
57535755
}
57545756
}

src/parser/mod.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -4889,6 +4889,8 @@ impl<'a> Parser<'a> {
48894889
ObjectType::Sequence
48904890
} else if self.parse_keyword(Keyword::STAGE) {
48914891
ObjectType::Stage
4892+
} else if self.parse_keyword(Keyword::TYPE) {
4893+
ObjectType::Type
48924894
} else if self.parse_keyword(Keyword::FUNCTION) {
48934895
return self.parse_drop_function();
48944896
} else if self.parse_keyword(Keyword::POLICY) {
@@ -4901,7 +4903,7 @@ impl<'a> Parser<'a> {
49014903
return self.parse_drop_trigger();
49024904
} else {
49034905
return self.expected(
4904-
"TABLE, VIEW, INDEX, ROLE, SCHEMA, DATABASE, FUNCTION, PROCEDURE, STAGE, TRIGGER, SECRET or SEQUENCE after DROP",
4906+
"TABLE, VIEW, INDEX, ROLE, SCHEMA, DATABASE, FUNCTION, PROCEDURE, STAGE, TRIGGER, SECRET, SEQUENCE, or TYPE after DROP",
49054907
self.peek_token(),
49064908
);
49074909
};

tests/sqlparser_common.rs

+54
Original file line numberDiff line numberDiff line change
@@ -9690,6 +9690,60 @@ fn parse_create_type() {
96909690
);
96919691
}
96929692

9693+
#[test]
9694+
fn parse_drop_type() {
9695+
let sql = "DROP TYPE abc";
9696+
match verified_stmt(sql) {
9697+
Statement::Drop {
9698+
names,
9699+
object_type,
9700+
if_exists,
9701+
cascade,
9702+
..
9703+
} => {
9704+
assert_eq_vec(&["abc"], &names);
9705+
assert_eq!(ObjectType::Type, object_type);
9706+
assert!(!if_exists);
9707+
assert!(!cascade);
9708+
}
9709+
_ => unreachable!(),
9710+
};
9711+
9712+
let sql = "DROP TYPE IF EXISTS def, magician, quaternion";
9713+
match verified_stmt(sql) {
9714+
Statement::Drop {
9715+
names,
9716+
object_type,
9717+
if_exists,
9718+
cascade,
9719+
..
9720+
} => {
9721+
assert_eq_vec(&["def", "magician", "quaternion"], &names);
9722+
assert_eq!(ObjectType::Type, object_type);
9723+
assert!(if_exists);
9724+
assert!(!cascade);
9725+
}
9726+
_ => unreachable!(),
9727+
}
9728+
9729+
let sql = "DROP TYPE IF EXISTS my_type CASCADE";
9730+
match verified_stmt(sql) {
9731+
Statement::Drop {
9732+
names,
9733+
object_type,
9734+
if_exists,
9735+
cascade,
9736+
..
9737+
} => {
9738+
assert_eq_vec(&["my_type"], &names);
9739+
assert_eq!(ObjectType::Type, object_type);
9740+
assert!(if_exists);
9741+
assert!(cascade);
9742+
}
9743+
_ => unreachable!(),
9744+
}
9745+
}
9746+
96939747
#[test]
96949748
fn parse_call() {
96959749
all_dialects().verified_stmt("CALL my_procedure()");

0 commit comments

Comments
 (0)