MCPcopy Create free account
hub / github.com/MaterializeInc/materialize / parse_drop_objects

Method parse_drop_objects

src/sql-parser/src/parser.rs:4861–4949  ·  view source on GitHub ↗
(&mut self)

Source from the content-addressed store, hash-verified

4859 }
4860
4861 fn parse_drop_objects(&mut self) -> Result<Statement<Raw>, ParserError> {
4862 let object_type = self.expect_object_type()?;
4863 let if_exists = self.parse_if_exists()?;
4864 match object_type {
4865 ObjectType::Database => {
4866 let name = UnresolvedObjectName::Database(self.parse_database_name()?);
4867 let restrict = matches!(
4868 self.parse_at_most_one_keyword(&[CASCADE, RESTRICT], "DROP")?,
4869 Some(RESTRICT),
4870 );
4871 Ok(Statement::DropObjects(DropObjectsStatement {
4872 object_type: ObjectType::Database,
4873 if_exists,
4874 names: vec![name],
4875 cascade: !restrict,
4876 }))
4877 }
4878 ObjectType::Schema => {
4879 let names = self.parse_comma_separated(|parser| {
4880 Ok(UnresolvedObjectName::Schema(parser.parse_schema_name()?))
4881 })?;
4882
4883 let cascade = matches!(
4884 self.parse_at_most_one_keyword(&[CASCADE, RESTRICT], "DROP")?,
4885 Some(CASCADE),
4886 );
4887 Ok(Statement::DropObjects(DropObjectsStatement {
4888 object_type: ObjectType::Schema,
4889 if_exists,
4890 names,
4891 cascade,
4892 }))
4893 }
4894 ObjectType::Role => {
4895 let names = self.parse_comma_separated(|parser| {
4896 Ok(UnresolvedObjectName::Role(parser.parse_identifier()?))
4897 })?;
4898 Ok(Statement::DropObjects(DropObjectsStatement {
4899 object_type: ObjectType::Role,
4900 if_exists,
4901 names,
4902 cascade: false,
4903 }))
4904 }
4905 ObjectType::NetworkPolicy => {
4906 let names = self.parse_comma_separated(|parser| {
4907 Ok(UnresolvedObjectName::NetworkPolicy(
4908 parser.parse_identifier()?,
4909 ))
4910 })?;
4911 Ok(Statement::DropObjects(DropObjectsStatement {
4912 object_type: ObjectType::NetworkPolicy,
4913 if_exists,
4914 names,
4915 cascade: false,
4916 }))
4917 }
4918 ObjectType::Cluster => self.parse_drop_clusters(if_exists),

Callers 1

parse_dropMethod · 0.80

Calls 14

expect_object_typeMethod · 0.80
parse_if_existsMethod · 0.80
parse_database_nameMethod · 0.80
parse_comma_separatedMethod · 0.80
parse_schema_nameMethod · 0.80
parse_identifierMethod · 0.80
parse_drop_clustersMethod · 0.80
parse_item_nameMethod · 0.80
DatabaseClass · 0.50
SchemaClass · 0.50
RoleEnum · 0.50

Tested by

no test coverage detected