(&mut self)
| 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) { |
no test coverage detected