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