(&mut self)
| 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), |
no test coverage detected