(&mut self)
| 7239 | } |
| 7240 | |
| 7241 | fn parse_raw_name(&mut self) -> Result<RawItemName, ParserError> { |
| 7242 | if self.consume_token(&Token::LBracket) { |
| 7243 | let id = match self.next_token() { |
| 7244 | Some(Token::Ident(id)) => id.into_inner(), |
| 7245 | _ => return parser_err!(self, self.peek_prev_pos(), "expected id"), |
| 7246 | }; |
| 7247 | self.expect_keyword(AS)?; |
| 7248 | let name = self.parse_item_name()?; |
| 7249 | // TODO(justin): is there a more idiomatic way to detect a fully-qualified name? |
| 7250 | if name.0.len() < 2 { |
| 7251 | return parser_err!( |
| 7252 | self, |
| 7253 | self.peek_prev_pos(), |
| 7254 | "table name in square brackets must be fully qualified" |
| 7255 | ); |
| 7256 | } |
| 7257 | |
| 7258 | let version = if self.parse_keywords(&[VERSION]) { |
| 7259 | let version = self.parse_version()?; |
| 7260 | Some(version) |
| 7261 | } else { |
| 7262 | None |
| 7263 | }; |
| 7264 | |
| 7265 | self.expect_token(&Token::RBracket)?; |
| 7266 | Ok(RawItemName::Id(id, name, version)) |
| 7267 | } else { |
| 7268 | Ok(RawItemName::Name(self.parse_item_name()?)) |
| 7269 | } |
| 7270 | } |
| 7271 | |
| 7272 | fn parse_column_name(&mut self) -> Result<ColumnName<Raw>, ParserError> { |
| 7273 | let start = self.peek_pos(); |
no test coverage detected