Parse a single top-level statement (such as SELECT, INSERT, CREATE, etc.), stopping before the statement separator, if any.
(&mut self)
| 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() |
no test coverage detected