3个不稳定版本
0.2.0 | 2024年7月4日 |
---|---|
0.1.1 | 2024年2月12日 |
0.1.0 | 2024年2月12日 |
#10 in #insight
每月31次下载
用于 sql-insight-cli
81KB
2K SLoC
sql-insight
SQL查询分析、格式化和转换的实用工具。利用 sqlparser-rs 的全面解析能力,它可以处理各种SQL方言。
特性
- SQL格式化:将SQL查询格式化为标准形式,提高可读性和可维护性。
- SQL规范化:将SQL查询转换为规范化形式,使其更容易分析和处理。
- 表提取:从SQL查询中提取引用的表,明确涉及的数据源。
- CRUD表提取:识别创建、读取、更新和删除操作,以及每个操作中涉及的表。
安装
将 sql_insight
添加到您的 Cargo.toml
文件中
[dependencies]
sql-insight = { version = "0.2.0" }
用法
SQL格式化
根据不同的方言格式化SQL查询
use sql_insight::sqlparser::dialect::GenericDialect;
let dialect = GenericDialect {};
let formatted_sql = sql_insight::format(&dialect, "SELECT * \n from users WHERE id = 1").unwrap();
assert_eq!(formatted_sql, ["SELECT * FROM users WHERE id = 1"]);
SQL规范化
将SQL查询规范化以抽象出文字
use sql_insight::sqlparser::dialect::GenericDialect;
let dialect = GenericDialect {};
let normalized_sql = sql_insight::normalize(&dialect, "SELECT * \n from users WHERE id = 1").unwrap();
assert_eq!(normalized_sql, ["SELECT * FROM users WHERE id = ?"]);
表提取
从SQL查询中提取表引用
use sql_insight::sqlparser::dialect::GenericDialect;
let dialect = GenericDialect {};
let tables = sql_insight::extract_tables(&dialect, "SELECT * FROM catalog.schema.`users` as users_alias").unwrap();
println!("{:?}", tables);
输出结果
[Ok(Tables([TableReference { catalog: Some(Ident { value: "catalog", quote_style: None }), schema: Some(Ident { value: "schema", quote_style: None }), name: Ident { value: "users", quote_style: Some('`') }, alias: Some(Ident { value: "users_alias", quote_style: None }) }]))]
CRUD表提取
识别SQL查询中的CRUD操作和每个操作中涉及的表
use sql_insight::sqlparser::dialect::GenericDialect;
let dialect = GenericDialect {};
let crud_tables = sql_insight::extract_crud_tables(&dialect, "INSERT INTO users (name) SELECT name FROM employees").unwrap();
println!("{:?}", crud_tables);
输出结果
[Ok(CrudTables { create_tables: [TableReference { catalog: None, schema: None, name: Ident { value: "users", quote_style: None }, alias: None }], read_tables: [TableReference { catalog: None, schema: None, name: Ident { value: "employees", quote_style: None }, alias: None }], update_tables: [], delete_tables: [] })]
支持的SQL方言
sql-insight
通过 sqlparser-rs 支持广泛的SQL方言。有关支持的方言的详细信息,请参阅 sqlparser-rs 文档。
贡献
欢迎为 sql-insight
做贡献!无论是添加新功能、修复错误还是改进文档,都可以随意克隆仓库并提交拉取请求。
许可证
sql-insight
在 MIT 许可证 下分发。
依赖
~2MB
~46K SLoC