6个版本

0.1.6 2024年5月29日
0.1.5 2024年4月17日
0.1.3 2024年1月31日

#2767数据库接口


filigree-cli 中使用

MIT/Apache

34KB
754

sql-migration-sim

此包读取多个SQL语句,如数据库迁移,并模拟DDL语句以确定运行所有这些语句后的结果模式。


lib.rs:

此库旨在解析多个相关的SQL迁移文件,并计算按顺序运行它们后生成的最终模式。

示例

use sql_migration_sim::{Schema, Error, ast::DataType};

let mut schema = Schema::new();

let create_statement = r##"CREATE TABLE ships (
   id BIGINT PRIMARY KEY,
   name TEXT NOT NULL,
   mast_count INT not null
);"##;

let alter = r##"
    ALTER TABLE ships ALTER COLUMN mast_count DROP NOT NULL;
    ALTER TABLE ships ADD COLUMN has_motor BOOLEAN NOT NULL;
    "##;

schema.apply_sql(create_statement)?;
schema.apply_sql(alter)?;


let result = schema.tables.get("ships").unwrap();
assert_eq!(result.columns.len(), 4);
assert_eq!(result.columns[0].name(), "id");
assert!(matches!(result.columns[0].data_type, DataType::BigInt(_)));
assert_eq!(result.columns[0].not_null(), true);
assert_eq!(result.columns[1].name(), "name");
assert_eq!(result.columns[1].not_null(), true);
assert_eq!(result.columns[2].name(), "mast_count");
assert_eq!(result.columns[2].not_null(), false);
assert_eq!(result.columns[3].name(), "has_motor");
assert_eq!(result.columns[3].not_null(), true);


依赖项

~1.6–2.1MB
~48K SLoC