3 个版本

0.1.2 2024年1月1日
0.1.1 2024年1月1日
0.1.0 2023年12月30日

#1439数据库接口


用于 steeldb

Apache-2.0

7KB
62 代码行

文档

https://docs.rs/steeldb-parser/latest/steeldb_parser/

源代码

https://github.com/paolorechia/steeldb/tree/main/steeldb-parser


lib.rs:

SteelDB 解析器

该 crate 提供了用于解析 SQL 子集的函数,这些函数由 SteelDB 项目使用。

您可以在以下链接中找到更多关于数据库的信息: https://github.com/paolorechia/steeldb

由于此项目仍在进行中,所以实现的内容不多。

目前,唯一公开的函数是 [parse_select],它接收一个输入字符串,并返回 SELECT 子句中给出的列。

该 crate 依赖于 lalrpop 库: https://github.com/lalrpop/lalrpop

示例

该 crate 的良好示例可以在 lib.rs 中的单元测试中找到。例如

    #[test]
    fn test_parse_select() {
        let result = parse_select("select brigadeiro, churros;".to_string()).unwrap();
        let v = vec!["brigadeiro".to_string(), "churros".to_string()];
        assert_eq!(v, result);
    }

语法文件

请注意,lalrpop 读取一个格式为 .lalrpop 的文件,其中定义了解析器语法,并在编译时生成实际的解析器代码,这些代码在源代码库中未显示。

这里是选择子句的第一个实现

grammar(v: &mut Vec<String>);

pub Select: () = {
    SELECT <c:Columns> SEMICOLON => {}
};

Columns: () = {
    <l:LITERAL> => v.push(l),
    Columns "," <l:LITERAL> => {
        v.push(l);
    }
}

SELECT: String = <s:r"select "> => s.to_string();
LITERAL: String = <s:r"[a-z\*_0-9]+"> => s.to_string();
SEMICOLON: String = <s:r";"> => s.to_string();

依赖项

~2.7–5MB
~83K SLoC