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

Method parse_column_option_def

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

Source from the content-addressed store, hash-verified

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,

Callers 2

parse_columnsMethod · 0.80

Calls 13

CheckClass · 0.85
parse_keywordMethod · 0.80
parse_identifierMethod · 0.80
parse_keywordsMethod · 0.80
parse_exprMethod · 0.80
parse_item_nameMethod · 0.80
expect_tokenMethod · 0.80
expect_keywordMethod · 0.80
expectedMethod · 0.80
peek_posMethod · 0.80
peek_tokenMethod · 0.80

Tested by

no test coverage detected