(
&mut self,
name: Option<UnresolvedItemName>,
in_cluster: Option<RawClusterName>,
from: RawItemName,
if_not_exists: bool,
connection: CreateSinkConnect
| 3510 | } |
| 3511 | |
| 3512 | fn parse_create_kafka_sink( |
| 3513 | &mut self, |
| 3514 | name: Option<UnresolvedItemName>, |
| 3515 | in_cluster: Option<RawClusterName>, |
| 3516 | from: RawItemName, |
| 3517 | if_not_exists: bool, |
| 3518 | connection: CreateSinkConnection<Raw>, |
| 3519 | ) -> Result<CreateSinkStatement<Raw>, ParserError> { |
| 3520 | let format = match &self.parse_one_of_keywords(&[KEY, FORMAT]) { |
| 3521 | Some(KEY) => { |
| 3522 | self.expect_keyword(FORMAT)?; |
| 3523 | let key = self.parse_format()?; |
| 3524 | self.expect_keywords(&[VALUE, FORMAT])?; |
| 3525 | let value = self.parse_format()?; |
| 3526 | Some(FormatSpecifier::KeyValue { key, value }) |
| 3527 | } |
| 3528 | Some(FORMAT) => Some(FormatSpecifier::Bare(self.parse_format()?)), |
| 3529 | Some(_) => unreachable!("parse_one_of_keywords returns None for this"), |
| 3530 | None => None, |
| 3531 | }; |
| 3532 | let envelope = if self.parse_keyword(ENVELOPE) { |
| 3533 | Some(self.parse_sink_envelope()?) |
| 3534 | } else { |
| 3535 | None |
| 3536 | }; |
| 3537 | |
| 3538 | let with_options = if self.parse_keyword(WITH) { |
| 3539 | self.expect_token(&Token::LParen)?; |
| 3540 | let options = self.parse_comma_separated(Parser::parse_create_sink_option)?; |
| 3541 | self.expect_token(&Token::RParen)?; |
| 3542 | options |
| 3543 | } else { |
| 3544 | vec![] |
| 3545 | }; |
| 3546 | |
| 3547 | Ok(CreateSinkStatement { |
| 3548 | name, |
| 3549 | in_cluster, |
| 3550 | from, |
| 3551 | connection, |
| 3552 | format, |
| 3553 | envelope, |
| 3554 | mode: None, |
| 3555 | if_not_exists, |
| 3556 | with_options, |
| 3557 | }) |
| 3558 | } |
| 3559 | |
| 3560 | fn parse_create_sink(&mut self) -> Result<Statement<Raw>, ParserError> { |
| 3561 | self.expect_keyword(SINK)?; |
no test coverage detected