16 releases
| 0.2.1 | Mar 20, 2026 |
|---|---|
| 0.2.0 | Mar 20, 2026 |
| 0.1.13 | Nov 18, 2022 |
| 0.1.10 | Oct 30, 2022 |
#755 in Text processing
18KB
358 lines
alisql
A tool for analyzing SQL files that use Jinja2 {{ ref() }} macros, extracting table dependencies and visualizing them as graphs.
Installation
cargo install alisql
Or download a pre-built binary for your platform from Releases.
CLI
deps — Show dependencies
# Text format (default)
alisql deps ./sql
# JSON format
alisql deps ./sql --format json
# Limit search depth (default: 5)
alisql deps ./sql --max-depth 3
Output (text):
[sample]
<- db.users
<- role
[sample2]
<- db.sales
<- db.sale_detail
Output (json):
[
{
"table": "sample",
"depends_on": ["db.users", "role"]
},
{
"table": "sample2",
"depends_on": ["db.sales", "db.sale_detail"]
}
]
graph — Generate a Mermaid diagram
# Default orientation (top-down: TD)
alisql graph ./sql
# Specify orientation (TB / TD / BT / RL / LR)
alisql graph ./sql --orientation lr
Output:
graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;
Rendered as a Mermaid diagram:
graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;
Using as a Rust library
# Cargo.toml
[dependencies]
alisql = "0.2"
Get dependencies
let tables = alisql::get_dependencies("./sql", 5);
for table in &tables {
println!("{} depends on {:?}", table.table, table.depends_on);
}
Get a Mermaid diagram
let graph = alisql::get_mermaid("./sql", "TD", 5);
println!("{}", graph);
Writing SQL files
Reference dependent tables using {{ ref("table") }} or {{ ref("schema", "table") }}.
-- sql/orders.sql
select o.*, u.name
from {{ ref("db", "orders") }} as o
left join {{ ref("users") }} as u on o.user_id = u.id
Analyzing this file reveals that the orders table depends on db.orders and users.
Dependencies
~4–8MB
~142K SLoC