(&mut self)
| 5408 | } |
| 5409 | |
| 5410 | fn parse_column_option_def(&mut self) -> Result<ColumnOptionDef<Raw>, ParserError> { |
| 5411 | let name = if self.parse_keyword(CONSTRAINT) { |
| 5412 | Some(self.parse_identifier()?) |
| 5413 | } else { |
| 5414 | None |
| 5415 | }; |
| 5416 | |
| 5417 | let option = if self.parse_keywords(&[NOT, NULL]) { |
| 5418 | ColumnOption::NotNull |
| 5419 | } else if self.parse_keyword(NULL) { |
| 5420 | ColumnOption::Null |
| 5421 | } else if self.parse_keyword(DEFAULT) { |
| 5422 | ColumnOption::Default(self.parse_expr()?) |
| 5423 | } else if self.parse_keywords(&[PRIMARY, KEY]) { |
| 5424 | ColumnOption::Unique { is_primary: true } |
| 5425 | } else if self.parse_keyword(UNIQUE) { |
| 5426 | ColumnOption::Unique { is_primary: false } |
| 5427 | } else if self.parse_keyword(REFERENCES) { |
| 5428 | let foreign_table = self.parse_item_name()?; |
| 5429 | let referred_columns = self.parse_parenthesized_column_list(Mandatory)?; |
| 5430 | ColumnOption::ForeignKey { |
| 5431 | foreign_table, |
| 5432 | referred_columns, |
| 5433 | } |
| 5434 | } else if self.parse_keyword(CHECK) { |
| 5435 | self.expect_token(&Token::LParen)?; |
| 5436 | let expr = self.parse_expr()?; |
| 5437 | self.expect_token(&Token::RParen)?; |
| 5438 | ColumnOption::Check(expr) |
| 5439 | } else if self.parse_keyword(VERSION) { |
| 5440 | self.expect_keyword(ADDED)?; |
| 5441 | let action = ColumnVersioned::Added; |
| 5442 | let version = self.parse_version()?; |
| 5443 | |
| 5444 | ColumnOption::Versioned { action, version } |
| 5445 | } else { |
| 5446 | return self.expected(self.peek_pos(), "column option", self.peek_token()); |
| 5447 | }; |
| 5448 | |
| 5449 | Ok(ColumnOptionDef { name, option }) |
| 5450 | } |
| 5451 | |
| 5452 | fn parse_optional_table_constraint( |
| 5453 | &mut self, |
no test coverage detected