Crate alisql

source ·
Expand description

QuickStart

Get dependencies from SQL written ref macro with Jinja.

First, create sql like Jinja.

-- src/sample_sqls/level1/sample.sql
select
u.*
, r.*
from {{ ref("db", "users") }} as u
left join {{ ref("role") }} as r on
u.id = r.user_id
-- src/sample_sqls/sample2.sql
select
u.*
, r.*
from {{ ref("db", "sales") }} as u
left join {{ ref("db", "sale_detail") }} as r on
u.id = r.sale_id

Use alias lib from main function.

use alisql;

let d = alisql::get_dependencies("src/sample_sqls", 5);
 dbg!(d);

Result

 d = [
    Table {
        table: "sample",
        sql: SQL {
            path: "src/sample_sqls/level1/sample.sql",
            query: "select \nu.*\n, r.* \nfrom {{ ref(\"db\", \"users\") }} as u\nleft join {{ ref(\"role\") }} as r on\nu.id = r.user_id",
        },
        depends_on: [
            "db.users",
            "role",
        ],
    },
    Table {
        table: "sample2",
        sql: SQL {
            path: "src/sample_sqls/sample2.sql",
            query: "select \nu.*\n, r.* \nfrom {{ ref(\"db\", \"sales\") }} as u\nleft join {{ ref(\"db\", \"sale_detail\") }} as r on\nu.id = r.sale_id",
        },
        depends_on: [
            "db.sales",
            "db.sale_detail",
        ],
    },
]

Get dependencies graph from SQL with Mermaid.

orientation are

  • TB : top to bottom
  • TD : top-down/ same as top to bottom
  • BT : bottom to top
  • RL : right to left
  • LR : left to right
use alisql;

let m = alisql::get_mermaid("src/sample_sqls", "TD", 5);
println!("{}", m);
graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;

Reference

Modules

Functions