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

Method parse_declare

src/sql-parser/src/parser.rs:9303–9330  ·  view source on GitHub ↗

Parse a `DECLARE` statement, assuming that the `DECLARE` token has already been consumed.

(&mut self)

Source from the content-addressed store, hash-verified

9301 /// Parse a `DECLARE` statement, assuming that the `DECLARE` token
9302 /// has already been consumed.
9303 fn parse_declare(&mut self) -> Result<Statement<Raw>, ParserStatementError> {
9304 let name = self
9305 .parse_identifier()
9306 .map_parser_err(StatementKind::Declare)?;
9307 self.expect_keyword(CURSOR)
9308 .map_parser_err(StatementKind::Declare)?;
9309 if self.parse_keyword(WITH) {
9310 let err = parser_err!(
9311 self,
9312 self.peek_prev_pos(),
9313 format!("WITH HOLD is unsupported for cursors")
9314 )
9315 .map_parser_err(StatementKind::Declare);
9316 self.expect_keyword(HOLD)
9317 .map_parser_err(StatementKind::Declare)?;
9318 return err;
9319 }
9320 // WITHOUT HOLD is optional and the default behavior so we can ignore it.
9321 let _ = self.parse_keywords(&[WITHOUT, HOLD]);
9322 self.expect_keyword(FOR)
9323 .map_parser_err(StatementKind::Declare)?;
9324 let StatementParseResult { ast, sql } = self.parse_statement()?;
9325 Ok(Statement::Declare(DeclareStatement {
9326 name,
9327 stmt: Box::new(ast),
9328 sql: sql.to_string(),
9329 }))
9330 }
9331
9332 /// Parse a `CLOSE` statement, assuming that the `CLOSE` token
9333 /// has already been consumed.

Callers 1

parse_statement_innerMethod · 0.80

Calls 7

map_parser_errMethod · 0.80
parse_identifierMethod · 0.80
expect_keywordMethod · 0.80
parse_keywordMethod · 0.80
parse_keywordsMethod · 0.80
parse_statementMethod · 0.45
to_stringMethod · 0.45

Tested by

no test coverage detected