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

Method parse_statement_inner

src/sql-parser/src/parser.rs:428–557  ·  view source on GitHub ↗

Parse a single top-level statement (such as SELECT, INSERT, CREATE, etc.), stopping before the statement separator, if any.

(&mut self)

Source from the content-addressed store, hash-verified

426 /// Parse a single top-level statement (such as SELECT, INSERT, CREATE, etc.),
427 /// stopping before the statement separator, if any.
428 fn parse_statement_inner(&mut self) -> Result<Statement<Raw>, ParserStatementError> {
429 match self.next_token() {
430 Some(t) => match t {
431 Token::Keyword(CREATE) => Ok(self.parse_create()?),
432 Token::Keyword(DISCARD) => Ok(self
433 .parse_discard()
434 .map_parser_err(StatementKind::Discard)?),
435 Token::Keyword(DROP) => Ok(self.parse_drop()?),
436 Token::Keyword(DELETE) => {
437 Ok(self.parse_delete().map_parser_err(StatementKind::Delete)?)
438 }
439 Token::Keyword(INSERT) => {
440 Ok(self.parse_insert().map_parser_err(StatementKind::Insert)?)
441 }
442 Token::Keyword(UPDATE) => {
443 Ok(self.parse_update().map_parser_err(StatementKind::Update)?)
444 }
445 Token::Keyword(ALTER) => Ok(self.parse_alter()?),
446 Token::Keyword(COPY) => Ok(self.parse_copy()?),
447 Token::Keyword(SET) => Ok(self.parse_set()?),
448 Token::Keyword(RESET) => Ok(self
449 .parse_reset()
450 .map_parser_err(StatementKind::ResetVariable)?),
451 Token::Keyword(SHOW) => Ok(Statement::Show(
452 self.parse_show().map_parser_err(StatementKind::Show)?,
453 )),
454 Token::Keyword(START) => Ok(self
455 .parse_start_transaction()
456 .map_parser_err(StatementKind::StartTransaction)?),
457 // `BEGIN` is a nonstandard but common alias for the
458 // standard `START TRANSACTION` statement. It is supported
459 // by at least PostgreSQL and MySQL.
460 Token::Keyword(BEGIN) => Ok(self
461 .parse_begin()
462 .map_parser_err(StatementKind::StartTransaction)?),
463 Token::Keyword(COMMIT) => {
464 Ok(self.parse_commit().map_parser_err(StatementKind::Commit)?)
465 }
466 Token::Keyword(ROLLBACK) | Token::Keyword(ABORT) => Ok(self
467 .parse_rollback()
468 .map_parser_err(StatementKind::Rollback)?),
469 Token::Keyword(TAIL) => {
470 Ok(self.parse_tail().map_parser_err(StatementKind::Subscribe)?)
471 }
472 Token::Keyword(SUBSCRIBE) => Ok(self
473 .parse_subscribe()
474 .map_parser_err(StatementKind::Subscribe)?),
475 Token::Keyword(EXPLAIN) => Ok(self.parse_explain()?),
476 Token::Keyword(DECLARE) => Ok(self.parse_declare()?),
477 Token::Keyword(FETCH) => {
478 Ok(self.parse_fetch().map_parser_err(StatementKind::Fetch)?)
479 }
480 Token::Keyword(CLOSE) => {
481 Ok(self.parse_close().map_parser_err(StatementKind::Close)?)
482 }
483 Token::Keyword(PREPARE) => Ok(self.parse_prepare()?),
484 Token::Keyword(EXECUTE) => Ok(self
485 .parse_execute()

Callers 1

parse_statementMethod · 0.80

Calls 15

SelectClass · 0.85
next_tokenMethod · 0.80
parse_createMethod · 0.80
map_parser_errMethod · 0.80
parse_discardMethod · 0.80
parse_dropMethod · 0.80
parse_deleteMethod · 0.80
parse_insertMethod · 0.80
parse_alterMethod · 0.80
parse_copyMethod · 0.80
parse_setMethod · 0.80
parse_resetMethod · 0.80

Tested by

no test coverage detected