Parse a `PREPARE` statement, assuming that the `PREPARE` token has already been consumed.
(&mut self)
| 9339 | /// Parse a `PREPARE` statement, assuming that the `PREPARE` token |
| 9340 | /// has already been consumed. |
| 9341 | fn parse_prepare(&mut self) -> Result<Statement<Raw>, ParserStatementError> { |
| 9342 | let name = self |
| 9343 | .parse_identifier() |
| 9344 | .map_parser_err(StatementKind::Prepare)?; |
| 9345 | self.expect_keyword(AS) |
| 9346 | .map_parser_err(StatementKind::Prepare)?; |
| 9347 | let pos = self.peek_pos(); |
| 9348 | // |
| 9349 | let StatementParseResult { ast, sql } = self.parse_statement()?; |
| 9350 | if !matches!( |
| 9351 | ast, |
| 9352 | Statement::Select(_) |
| 9353 | | Statement::Insert(_) |
| 9354 | | Statement::Delete(_) |
| 9355 | | Statement::Update(_) |
| 9356 | | Statement::Fetch(_), |
| 9357 | ) { |
| 9358 | return parser_err!(self, pos, "unpreparable statement").map_no_statement_parser_err(); |
| 9359 | } |
| 9360 | Ok(Statement::Prepare(PrepareStatement { |
| 9361 | name, |
| 9362 | stmt: Box::new(ast), |
| 9363 | sql: sql.to_string(), |
| 9364 | })) |
| 9365 | } |
| 9366 | |
| 9367 | /// Parse a `EXECUTE` statement, assuming that the `EXECUTE` token |
| 9368 | /// has already been consumed. |
no test coverage detected