diff --git a/src/ast/mod.rs b/src/ast/mod.rs index d83591364..403176f82 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -7824,6 +7824,7 @@ pub enum ObjectType { Stage, Type, User, + Stream, } impl fmt::Display for ObjectType { @@ -7840,6 +7841,7 @@ impl fmt::Display for ObjectType { ObjectType::Stage => "STAGE", ObjectType::Type => "TYPE", ObjectType::User => "USER", + ObjectType::Stream => "STREAM", }) } } diff --git a/src/keywords.rs b/src/keywords.rs index 7781939bc..509c1f96c 100644 --- a/src/keywords.rs +++ b/src/keywords.rs @@ -870,6 +870,7 @@ define_keywords!( STORAGE_SERIALIZATION_POLICY, STORED, STRAIGHT_JOIN, + STREAM, STRICT, STRING, STRUCT, diff --git a/src/parser/mod.rs b/src/parser/mod.rs index a876d90e5..7eb22a2b3 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -6325,6 +6325,8 @@ impl<'a> Parser<'a> { ObjectType::Type } else if self.parse_keyword(Keyword::USER) { ObjectType::User + } else if self.parse_keyword(Keyword::STREAM) { + ObjectType::Stream } else if self.parse_keyword(Keyword::FUNCTION) { return self.parse_drop_function(); } else if self.parse_keyword(Keyword::POLICY) { diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index add54a71a..29572cde7 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -16357,3 +16357,21 @@ fn parse_create_user() { _ => unreachable!(), } } + +#[test] +fn parse_drop_stream() { + let sql = "DROP STREAM s1"; + match verified_stmt(sql) { + Statement::Drop { + names, object_type, .. + } => { + assert_eq!( + vec!["s1"], + names.iter().map(ToString::to_string).collect::>() + ); + assert_eq!(ObjectType::Stream, object_type); + } + _ => unreachable!(), + } + verified_stmt("DROP STREAM IF EXISTS s1"); +}