Skip to content

Commit 5f69df2

Browse files
authored
Add support for DROP USER statement (#1951)
1 parent 92db206 commit 5f69df2

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
@@ -6251,6 +6251,8 @@ impl<'a> Parser<'a> {
62516251
ObjectType::Stage
62526252
} else if self.parse_keyword(Keyword::TYPE) {
62536253
ObjectType::Type
6254+
} else if self.parse_keyword(Keyword::USER) {
6255+
ObjectType::User
62546256
} else if self.parse_keyword(Keyword::FUNCTION) {
62556257
return self.parse_drop_function();
62566258
} else if self.parse_keyword(Keyword::POLICY) {
@@ -6269,7 +6271,7 @@ impl<'a> Parser<'a> {
62696271
return self.parse_drop_extension();
62706272
} else {
62716273
return self.expected(
6272-
"CONNECTOR, DATABASE, EXTENSION, FUNCTION, INDEX, POLICY, PROCEDURE, ROLE, SCHEMA, SECRET, SEQUENCE, STAGE, TABLE, TRIGGER, TYPE, VIEW, or MATERIALIZED VIEW after DROP",
6274+
"CONNECTOR, DATABASE, EXTENSION, FUNCTION, INDEX, POLICY, PROCEDURE, ROLE, SCHEMA, SECRET, SEQUENCE, STAGE, TABLE, TRIGGER, TYPE, VIEW, MATERIALIZED VIEW or USER after DROP",
62736275
self.peek_token(),
62746276
);
62756277
};

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)