(&mut self)
| 5838 | } |
| 5839 | |
| 5840 | fn parse_alter_source(&mut self) -> Result<Statement<Raw>, ParserStatementError> { |
| 5841 | let if_exists = self.parse_if_exists().map_no_statement_parser_err()?; |
| 5842 | let source_name = self.parse_item_name().map_no_statement_parser_err()?; |
| 5843 | |
| 5844 | Ok( |
| 5845 | match self |
| 5846 | .expect_one_of_keywords(&[ADD, DROP, RESET, SET, RENAME, OWNER, REFRESH]) |
| 5847 | .map_no_statement_parser_err()? |
| 5848 | { |
| 5849 | ADD => { |
| 5850 | self.expect_one_of_keywords(&[SUBSOURCE, TABLE]) |
| 5851 | .map_parser_err(StatementKind::AlterSource)?; |
| 5852 | |
| 5853 | // TODO: Add IF NOT EXISTS? |
| 5854 | let subsources = self |
| 5855 | .parse_comma_separated(Parser::parse_subsource_references) |
| 5856 | .map_parser_err(StatementKind::AlterSource)?; |
| 5857 | |
| 5858 | let options = if self.parse_keyword(WITH) { |
| 5859 | self.expect_token(&Token::LParen) |
| 5860 | .map_parser_err(StatementKind::AlterSource)?; |
| 5861 | let options = self |
| 5862 | .parse_comma_separated(Parser::parse_alter_source_add_subsource_option) |
| 5863 | .map_parser_err(StatementKind::AlterSource)?; |
| 5864 | self.expect_token(&Token::RParen) |
| 5865 | .map_parser_err(StatementKind::AlterSource)?; |
| 5866 | options |
| 5867 | } else { |
| 5868 | vec![] |
| 5869 | }; |
| 5870 | |
| 5871 | Statement::AlterSource(AlterSourceStatement { |
| 5872 | source_name, |
| 5873 | if_exists, |
| 5874 | action: AlterSourceAction::AddSubsources { |
| 5875 | external_references: subsources, |
| 5876 | options, |
| 5877 | }, |
| 5878 | }) |
| 5879 | } |
| 5880 | DROP => { |
| 5881 | self.expect_one_of_keywords(&[SUBSOURCE, TABLE]) |
| 5882 | .map_parser_err(StatementKind::AlterSource)?; |
| 5883 | |
| 5884 | let if_exists_inner = self |
| 5885 | .parse_if_exists() |
| 5886 | .map_parser_err(StatementKind::AlterSource)?; |
| 5887 | |
| 5888 | let names = self |
| 5889 | .parse_comma_separated(Parser::parse_item_name) |
| 5890 | .map_parser_err(StatementKind::AlterSource)?; |
| 5891 | |
| 5892 | let cascade = matches!( |
| 5893 | self.parse_at_most_one_keyword(&[CASCADE, RESTRICT], "ALTER SOURCE...DROP") |
| 5894 | .map_parser_err(StatementKind::AlterSource)?, |
| 5895 | Some(CASCADE), |
| 5896 | ); |
| 5897 |
no test coverage detected