(&mut self)
| 8040 | } |
| 8041 | |
| 8042 | fn parse_show(&mut self) -> Result<ShowStatement<Raw>, ParserError> { |
| 8043 | let redacted = self.parse_keyword(REDACTED); |
| 8044 | if redacted && !self.peek_keyword(CREATE) { |
| 8045 | return parser_err!( |
| 8046 | self, |
| 8047 | self.peek_pos(), |
| 8048 | "SHOW REDACTED is only supported for SHOW REDACTED CREATE ..." |
| 8049 | ); |
| 8050 | } |
| 8051 | if self.parse_one_of_keywords(&[COLUMNS, FIELDS]).is_some() { |
| 8052 | self.parse_show_columns() |
| 8053 | } else if self.parse_keyword(OBJECTS) { |
| 8054 | let from = if self.parse_keywords(&[FROM]) { |
| 8055 | Some(self.parse_schema_name()?) |
| 8056 | } else { |
| 8057 | None |
| 8058 | }; |
| 8059 | Ok(ShowStatement::ShowObjects(ShowObjectsStatement { |
| 8060 | object_type: ShowObjectType::Object, |
| 8061 | from, |
| 8062 | filter: self.parse_show_statement_filter()?, |
| 8063 | })) |
| 8064 | } else if let Some(object_type) = self.parse_plural_object_type() { |
| 8065 | let from = if object_type.lives_in_schema() { |
| 8066 | if self.parse_keywords(&[FROM]) { |
| 8067 | Some(self.parse_schema_name()?) |
| 8068 | } else { |
| 8069 | None |
| 8070 | } |
| 8071 | } else { |
| 8072 | None |
| 8073 | }; |
| 8074 | |
| 8075 | let show_object_type = match object_type { |
| 8076 | ObjectType::Database => ShowObjectType::Database, |
| 8077 | ObjectType::Schema => { |
| 8078 | let from = if self.parse_keyword(FROM) { |
| 8079 | Some(self.parse_database_name()?) |
| 8080 | } else { |
| 8081 | None |
| 8082 | }; |
| 8083 | ShowObjectType::Schema { from } |
| 8084 | } |
| 8085 | ObjectType::Table => { |
| 8086 | let on_source = if self.parse_one_of_keywords(&[ON]).is_some() { |
| 8087 | Some(self.parse_raw_name()?) |
| 8088 | } else { |
| 8089 | None |
| 8090 | }; |
| 8091 | ShowObjectType::Table { on_source } |
| 8092 | } |
| 8093 | ObjectType::View => ShowObjectType::View, |
| 8094 | ObjectType::Source => { |
| 8095 | let in_cluster = self.parse_optional_in_cluster()?; |
| 8096 | ShowObjectType::Source { in_cluster } |
| 8097 | } |
| 8098 | ObjectType::Subsource => { |
| 8099 | let on_source = if self.parse_one_of_keywords(&[ON]).is_some() { |
no test coverage detected