3 个版本
0.1.2 | 2024年1月1日 |
---|---|
0.1.1 | 2024年1月1日 |
0.1.0 | 2023年12月30日 |
#1439 在 数据库接口
用于 steeldb
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