14个版本

0.1.13 2022年11月18日
0.1.12 2022年11月18日
0.1.10 2022年10月30日

#287 in 模板引擎

Apache-2.0

13KB
217

alisql

test alisql at crates.io alisql at docs.rs

这是一个使用Jinja模板分析SQL的库。

示例

获取依赖项

首先,创建类似于Jinja的SQL。

-- 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

在主函数中使用别名lib。

use alias;
fn main() {
    let d = alias::get_dependencies("src/sample_sqls") 
}

结果是...

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",
        ],
    },
]

获取mermaid图

use alisql;

fn main() {
    let m = alisql::get_mermaid("src/sample_sqls", "TD");
    println!("{}", m);
}

变量m是

graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;

这将在下面的图中展示。

graph TD;
db.users --> sample;
role --> sample;
db.sales --> sample2;
db.sale_detail --> sample2;

依赖项

~3–12MB
~138K SLoC