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

Method parse_source_envelope

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

Source from the content-addressed store, hash-verified

2518 }
2519
2520 fn parse_source_envelope(&mut self) -> Result<SourceEnvelope, ParserError> {
2521 let envelope = if self.parse_keyword(NONE) {
2522 SourceEnvelope::None
2523 } else if self.parse_keyword(DEBEZIUM) {
2524 SourceEnvelope::Debezium
2525 } else if self.parse_keyword(UPSERT) {
2526 let value_decode_err_policy = if self.consume_token(&Token::LParen) {
2527 // We only support the `VALUE DECODING ERRORS` option for now, but if we add another
2528 // we should extract this into a helper function.
2529 self.expect_keywords(&[VALUE, DECODING, ERRORS])?;
2530 let _ = self.consume_token(&Token::Eq);
2531 let open_inner = self.consume_token(&Token::LParen);
2532 let value_decode_err_policy =
2533 self.parse_comma_separated(Parser::parse_source_error_policy_option)?;
2534 if open_inner {
2535 self.expect_token(&Token::RParen)?;
2536 }
2537 self.expect_token(&Token::RParen)?;
2538 value_decode_err_policy
2539 } else {
2540 vec![]
2541 };
2542
2543 SourceEnvelope::Upsert {
2544 value_decode_err_policy,
2545 }
2546 } else if self.parse_keyword(MATERIALIZE) {
2547 SourceEnvelope::CdcV2
2548 } else {
2549 return self.expected(
2550 self.peek_pos(),
2551 "NONE, UPSERT, or MATERIALIZE",
2552 self.peek_token(),
2553 );
2554 };
2555 Ok(envelope)
2556 }
2557
2558 fn parse_sink_envelope(&mut self) -> Result<SinkEnvelope, ParserError> {
2559 if self.parse_keyword(UPSERT) {

Callers 2

parse_create_sourceMethod · 0.80

Calls 8

parse_keywordMethod · 0.80
consume_tokenMethod · 0.80
expect_keywordsMethod · 0.80
parse_comma_separatedMethod · 0.80
expect_tokenMethod · 0.80
expectedMethod · 0.80
peek_posMethod · 0.80
peek_tokenMethod · 0.80

Tested by

no test coverage detected