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

Apache-2.0

18KB
358 lines

alisql

test alisql at crates.io alisql at docs.rs

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