27 个版本 (破坏性更新)
0.20.0 | 2024年6月13日 |
---|---|
0.18.0 | 2024年4月5日 |
0.17.0 | 2024年3月27日 |
0.16.0 | 2023年10月2日 |
0.4.0 | 2022年3月30日 |
#163 在 数据库接口
每月267次 下载
在 4 个 Crates 中使用 (2 个直接使用)
330KB
9K SLoC
sql-parse
将 SQL 解析成 AST
此 crate 提供了一个词法分析和解析器,可以将 SQL 解析成抽象语法树 (AST)。目前主要关注 MariaDB/Mysql。
示例代码
use sql_parse::{SQLDialect, SQLArguments, ParseOptions, parse_statement};
let options = ParseOptions::new()
.dialect(SQLDialect::MariaDB)
.arguments(SQLArguments::QuestionMark)
.warn_unquoted_identifiers(true);
let mut issues = Vec::new();
let sql = "SELECT `monkey`,
FROM `t1` LEFT JOIN `t2` ON `t2`.`id` = `t1.two`
WHERE `t1`.`id` = ?";
let ast = parse_statement(sql, &mut issues, &options);
println!("Issues: {:#?}", issues);
println!("AST: {:#?}", ast);
功能
- 良好的错误恢复:解析器实现了合理的错误恢复,如果内部发现错误,将继续解析长表达式。
- 代码范围注释:所有 AST 节点都实现了
Spanned
,从而在代码中生成字节数据范围。这意味着可以从解析中生成错误和警告,并以美观的方式呈现给用户。此外,AST 的用户还可以生成更多类似的问题,并以相同的方式美观地呈现。 - 无依赖:我们使用 no-std 和 alloc,没有其他依赖。
- 无 unsafe 代码:我们使用
#![forbid(unsafe_code)]
来保证没有 unsafe 代码。 - 快速解析:解析器是一个手写的递归下降解析器。为了加快解析速度,解析表达式使用
O(1)
移位归约机制。