otter_sql/
parser.rs

1//! SQL parsing. A thin wrapper around [`sqlparser`].
2
3use sqlparser::ast::Statement;
4use sqlparser::dialect::GenericDialect;
5use sqlparser::parser::{Parser, ParserError};
6
7/// Parses a SQL statement.
8pub fn parse(sql: &str) -> Result<Vec<Statement>, ParserError> {
9    let dialect = GenericDialect {};
10    Parser::parse_sql(&dialect, sql)
11}
12
13#[cfg(test)]
14mod test {
15    use super::parse;
16
17    #[test]
18    fn sanity_check() {
19        let sql = "SELECT a, b, c FROM foo WHERE c = 10 ORDER BY a LIMIT 10";
20        let ast = parse(sql);
21        assert!(ast.is_ok());
22        let ast = ast.unwrap();
23        assert_eq!(ast.len(), 1);
24        let stmt = &ast[0];
25        assert_eq!(stmt.to_string(), sql);
26    }
27}