Skip to content

Commit e314e06

Browse files
yoavcloudayman-sigma
authored andcommitted
Add support for DROP USER statement (apache#1951)
1 parent 788f653 commit e314e06

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
@@ -7797,6 +7797,7 @@ pub enum ObjectType {
77977797
Sequence,
77987798
Stage,
77997799
Type,
7800+
User,
78007801
}
78017802

78027803
impl fmt::Display for ObjectType {
@@ -7812,6 +7813,7 @@ impl fmt::Display for ObjectType {
78127813
ObjectType::Sequence => "SEQUENCE",
78137814
ObjectType::Stage => "STAGE",
78147815
ObjectType::Type => "TYPE",
7816+
ObjectType::User => "USER",
78157817
})
78167818
}
78177819
}

src/parser/mod.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6282,6 +6282,8 @@ impl<'a> Parser<'a> {
62826282
ObjectType::Stage
62836283
} else if self.parse_keyword(Keyword::TYPE) {
62846284
ObjectType::Type
6285+
} else if self.parse_keyword(Keyword::USER) {
6286+
ObjectType::User
62856287
} else if self.parse_keyword(Keyword::FUNCTION) {
62866288
return self.parse_drop_function();
62876289
} else if self.parse_keyword(Keyword::POLICY) {
@@ -6300,7 +6302,7 @@ impl<'a> Parser<'a> {
63006302
return self.parse_drop_extension();
63016303
} else {
63026304
return self.expected(
6303-
"CONNECTOR, DATABASE, EXTENSION, FUNCTION, INDEX, POLICY, PROCEDURE, ROLE, SCHEMA, SECRET, SEQUENCE, STAGE, TABLE, TRIGGER, TYPE, VIEW, or MATERIALIZED VIEW after DROP",
6305+
"CONNECTOR, DATABASE, EXTENSION, FUNCTION, INDEX, POLICY, PROCEDURE, ROLE, SCHEMA, SECRET, SEQUENCE, STAGE, TABLE, TRIGGER, TYPE, VIEW, MATERIALIZED VIEW or USER after DROP",
63046306
self.peek_token(),
63056307
);
63066308
};

tests/sqlparser_common.rs

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

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

0 commit comments

Comments
 (0)