Skip to content

Commit 95ec568

Browse files
committed
DROP USER
1 parent 6506814 commit 95ec568

File tree

3 files changed

+23
-1
lines changed

3 files changed

+23
-1
lines changed

src/ast/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7768,6 +7768,7 @@ pub enum ObjectType {
77687768
Sequence,
77697769
Stage,
77707770
Type,
7771+
User,
77717772
}
77727773

77737774
impl fmt::Display for ObjectType {
@@ -7783,6 +7784,7 @@ impl fmt::Display for ObjectType {
77837784
ObjectType::Sequence => "SEQUENCE",
77847785
ObjectType::Stage => "STAGE",
77857786
ObjectType::Type => "TYPE",
7787+
ObjectType::User => "USER",
77867788
})
77877789
}
77887790
}

src/parser/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6243,6 +6243,8 @@ impl<'a> Parser<'a> {
62436243
ObjectType::Stage
62446244
} else if self.parse_keyword(Keyword::TYPE) {
62456245
ObjectType::Type
6246+
} else if self.parse_keyword(Keyword::USER) {
6247+
ObjectType::User
62466248
} else if self.parse_keyword(Keyword::FUNCTION) {
62476249
return self.parse_drop_function();
62486250
} else if self.parse_keyword(Keyword::POLICY) {
@@ -6261,7 +6263,7 @@ impl<'a> Parser<'a> {
62616263
return self.parse_drop_extension();
62626264
} else {
62636265
return self.expected(
6264-
"CONNECTOR, DATABASE, EXTENSION, FUNCTION, INDEX, POLICY, PROCEDURE, ROLE, SCHEMA, SECRET, SEQUENCE, STAGE, TABLE, TRIGGER, TYPE, VIEW, or MATERIALIZED VIEW after DROP",
6266+
"CONNECTOR, DATABASE, EXTENSION, FUNCTION, INDEX, POLICY, PROCEDURE, ROLE, SCHEMA, SECRET, SEQUENCE, STAGE, TABLE, TRIGGER, TYPE, VIEW, MATERIALIZED VIEW or USER after DROP",
62656267
self.peek_token(),
62666268
);
62676269
};

tests/sqlparser_common.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8354,6 +8354,24 @@ fn parse_drop_view() {
83548354
verified_stmt("DROP MATERIALIZED VIEW IF EXISTS a.b.c");
83558355
}
83568356

8357+
#[test]
8358+
fn parse_drop_user() {
8359+
let sql = "DROP USER u1";
8360+
match verified_stmt(sql) {
8361+
Statement::Drop {
8362+
names, object_type, ..
8363+
} => {
8364+
assert_eq!(
8365+
vec!["u1"],
8366+
names.iter().map(ToString::to_string).collect::<Vec<_>>()
8367+
);
8368+
assert_eq!(ObjectType::User, object_type);
8369+
}
8370+
_ => unreachable!(),
8371+
}
8372+
verified_stmt("DROP USER IF EXISTS u1");
8373+
}
8374+
83578375
#[test]
83588376
fn parse_invalid_subquery_without_parens() {
83598377
let res = parse_sql_statements("SELECT SELECT 1 FROM bar WHERE 1=1 FROM baz");

0 commit comments

Comments
 (0)