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

Method parse_alter_source

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

Source from the content-addressed store, hash-verified

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

Callers 1

parse_alter_objectMethod · 0.80

Calls 12

parse_if_existsMethod · 0.80
parse_item_nameMethod · 0.80
map_parser_errMethod · 0.80
parse_comma_separatedMethod · 0.80
parse_keywordMethod · 0.80
expect_tokenMethod · 0.80
expect_keywordMethod · 0.80
parse_identifierMethod · 0.80
ItemEnum · 0.50

Tested by

no test coverage detected