6个版本
0.1.6 | 2024年5月29日 |
---|---|
0.1.5 | 2024年4月17日 |
0.1.3 | 2024年1月31日 |
#2767 在 数据库接口
在 filigree-cli 中使用
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