#sql-query #sql #query #insight #utility

sql-insight

SQL查询分析、格式化和转换的实用工具

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

MIT 许可证

81KB
2K SLoC

sql-insight

SQL查询分析、格式化和转换的实用工具。利用 sqlparser-rs 的全面解析能力,它可以处理各种SQL方言。

Crates.io Docs.rs Rust codecov License: MIT

特性

  • 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-insightMIT 许可证 下分发。

依赖

~2MB
~46K SLoC