oak-sql 0.0.11

SQL database query language parser with support for standard SQL syntax and database operations.
Documentation
use oak_core::Builder;
use oak_sql::{SqlBuilder, SqlLanguage};

#[test]
fn test_select_ast() {
    let language = SqlLanguage::default();
    let builder = SqlBuilder::new(&language);
    let mut cache = oak_core::parser::session::ParseSession::default();

    let source = "SELECT id, name FROM users WHERE age > 18;";
    let result = builder.build(source, &[], &mut cache);

    if let Err(e) = &result.result {
        panic!("Build failed: {:?}", e);
    }
    let root = result.result.unwrap();
    assert_eq!(root.statements.len(), 1);

    if let oak_sql::ast::SqlStatement::Select(select) = &root.statements[0] {
        assert_eq!(select.items.len(), 2);
        assert!(select.from.is_some());
        assert!(select.selection.is_some());
    }
    else {
        panic!("Expected Select statement");
    }
}

#[test]
fn test_create_table_ast() {
    let language = SqlLanguage::default();
    let builder = SqlBuilder::new(&language);
    let mut cache = oak_core::parser::session::ParseSession::default();

    let source = "CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255) NOT NULL);";
    let result = builder.build(source, &[], &mut cache);

    assert!(result.result.is_ok());
    let root = result.result.unwrap();
    assert_eq!(root.statements.len(), 1);

    if let oak_sql::ast::SqlStatement::Create(create) = &root.statements[0] {
        assert_eq!(create.name.name, "users");
        if let oak_sql::ast::CreateBody::Table { columns } = &create.body {
            assert_eq!(columns.len(), 2);
            assert_eq!(columns[0].name.name, "id");
            assert_eq!(columns[0].data_type, "INT");
            assert_eq!(columns[1].name.name, "name");
            assert_eq!(columns[1].data_type, "VARCHAR(255)");
        }
        else {
            panic!("Expected Table body");
        }
    }
    else {
        panic!("Expected Create statement");
    }
}