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

Method parse_create_materialized_view

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

Source from the content-addressed store, hash-verified

4092 }
4093
4094 fn parse_create_materialized_view(&mut self) -> Result<Statement<Raw>, ParserError> {
4095 let mut if_exists = if self.parse_keyword(OR) {
4096 self.expect_keyword(REPLACE)?;
4097 IfExistsBehavior::Replace
4098 } else {
4099 IfExistsBehavior::Error
4100 };
4101 let replacement = self.parse_keyword(REPLACEMENT);
4102 self.expect_keywords(&[MATERIALIZED, VIEW])?;
4103 if if_exists == IfExistsBehavior::Error && self.parse_if_not_exists()? {
4104 if_exists = IfExistsBehavior::Skip;
4105 }
4106
4107 let name = self.parse_item_name()?;
4108 let columns = self.parse_parenthesized_column_list(Optional)?;
4109 let replacement_for = if replacement {
4110 self.expect_keyword(FOR)?;
4111 Some(self.parse_raw_name()?)
4112 } else {
4113 None
4114 };
4115 let (in_cluster, in_cluster_replica) = if self.parse_keywords(&[IN, CLUSTER]) {
4116 let cluster = self.parse_raw_ident()?;
4117 let replica = if self.parse_keyword(REPLICA) {
4118 Some(self.parse_identifier()?)
4119 } else {
4120 None
4121 };
4122 (Some(cluster), replica)
4123 } else if self.parse_keywords(&[IN, REPLICA]) {
4124 let replica = self.parse_identifier()?;
4125 (None, Some(replica))
4126 } else {
4127 (None, None)
4128 };
4129
4130 let with_options = if self.parse_keyword(WITH) {
4131 self.expect_token(&Token::LParen)?;
4132 let options = self.parse_comma_separated(Parser::parse_materialized_view_option)?;
4133 self.expect_token(&Token::RParen)?;
4134 options
4135 } else {
4136 vec![]
4137 };
4138
4139 self.expect_keyword(AS)?;
4140 let query = self.parse_query()?;
4141 let as_of = self.parse_optional_internal_as_of()?;
4142
4143 Ok(Statement::CreateMaterializedView(
4144 CreateMaterializedViewStatement {
4145 if_exists,
4146 name,
4147 columns,
4148 replacement_for,
4149 in_cluster,
4150 in_cluster_replica,
4151 query,

Callers 2

parse_createMethod · 0.80
parse_explaineeMethod · 0.80

Calls 14

parse_keywordMethod · 0.80
expect_keywordMethod · 0.80
expect_keywordsMethod · 0.80
parse_if_not_existsMethod · 0.80
parse_item_nameMethod · 0.80
parse_raw_nameMethod · 0.80
parse_keywordsMethod · 0.80
parse_raw_identMethod · 0.80
parse_identifierMethod · 0.80
expect_tokenMethod · 0.80
parse_comma_separatedMethod · 0.80

Tested by

no test coverage detected