(&mut self)
| 388 | } |
| 389 | |
| 390 | fn parse_statements(&mut self) -> Result<Vec<StatementParseResult<'a>>, ParserStatementError> { |
| 391 | let mut stmts = Vec::new(); |
| 392 | let mut expecting_statement_delimiter = false; |
| 393 | loop { |
| 394 | // ignore empty statements (between successive statement delimiters) |
| 395 | while self.consume_token(&Token::Semicolon) { |
| 396 | expecting_statement_delimiter = false; |
| 397 | } |
| 398 | |
| 399 | if self.peek_token().is_none() { |
| 400 | break; |
| 401 | } else if expecting_statement_delimiter { |
| 402 | return self |
| 403 | .expected(self.peek_pos(), "end of statement", self.peek_token()) |
| 404 | .map_no_statement_parser_err(); |
| 405 | } |
| 406 | |
| 407 | let s = self.parse_statement()?; |
| 408 | stmts.push(s); |
| 409 | expecting_statement_delimiter = true; |
| 410 | } |
| 411 | Ok(stmts) |
| 412 | } |
| 413 | /// Parse a single top-level statement (such as SELECT, INSERT, CREATE, etc.), |
| 414 | /// stopping before the statement separator, if any. Returns the parsed statement and the SQL |
| 415 | /// fragment corresponding to it. |
no test coverage detected