10个版本 (破坏性更新)

0.20.0 2024年6月2日
0.19.0 2024年5月2日
0.18.0 2023年12月27日
0.17.1 2023年12月18日
0.1.0 2023年7月12日

#2644 in 数据库接口

每月42次下载

MIT许可证

69KB
2K SLoC

GitHub Contributors Stars Build Status Downloads Crates.io

sqlmo

sqlmo 是一组用于表示SQL表和查询的基本元素。使用这些基本元素来

  • 自动生成迁移:以标准化的形式加载SQL表示(sqlmo::Schema),计算模式之间的差异(sqlmo::Migration),并生成应用迁移的SQL(sqlmo::Migration::to_sql)。
  • 构建SQL查询:在数据模型中表示SQL查询,以创建查询生成的API。然后生成SQL查询。注意:此库(尚)不支持解析SQL查询。

自动生成迁移时,有几个内置的源模式

如果您需要另一个源,您应该定义一种从您的数据源构建 sqlmo::Schema 的方法,然后使用 sqlmo 自动生成迁移。

当前支持此功能的工具

如果您使用此库,请提交PR以将其添加到此列表。

用法

此示例从PostgreSQL数据库中读取模式,定义一个空模式(应填充),然后计算要应用到数据库的迁移。

use sqlmo_sqlx::FromPostgres;

#[tokio::main]
async fn main() {
    let url = std::env::var("DATABASE_URL").unwrap();
    let mut conn = sqlx::postgres::PgConnection::connect(&url).await?;
    let current = Schema::try_from_postgres(&mut conn, schema_name).await?;
    let end_state = Schema::default(); // Load your end-state by manually defining it, or building it from another source
    let migration = current.migrate_to(end_state, &sqlmo::Options::default());
    
    for statement in migration.statements {
        let statement = statement.to_sql(Dialect::Postgres);
        println!("{}", statement);
    }
}

路线图

  • 在计算迁移时,为列删除创建注释行
  • ? 在计算迁移时,通过计算列名之间的词距来更改列

依赖项

~3–4MB
~72K SLoC