| 138 | /// Parses a SQL string containing zero or more SQL statements. |
| 139 | #[mz_ore::instrument(target = "compiler", level = "trace", name = "sql_to_ast")] |
| 140 | pub fn parse_statements(sql: &str) -> Result<Vec<StatementParseResult<'_>>, ParserStatementError> { |
| 141 | let tokens = lexer::lex(sql).map_err(|error| ParserStatementError { |
| 142 | error: error.into(), |
| 143 | statement: None, |
| 144 | })?; |
| 145 | let res = Parser::new(sql, tokens).parse_statements(); |
| 146 | // Don't trace sensitive raw sql, so we can only trace after parsing, and then can only output |
| 147 | // redacted statements. |
| 148 | debug!("{:?}", { |
| 149 | match &res { |
| 150 | Ok(stmts) => stmts |
| 151 | .iter() |
| 152 | .map(|stmt| stmt.ast.to_ast_string_redacted()) |
| 153 | .join("; "), |
| 154 | // Errors can leak sensitive SQL. |
| 155 | Err(_) => "parse error".to_string(), |
| 156 | } |
| 157 | }); |
| 158 | res |
| 159 | } |
| 160 | |
| 161 | /// Parses a SQL string containing one SQL expression. |
| 162 | pub fn parse_expr(sql: &str) -> Result<Expr<Raw>, ParserError> { |