6 releases
0.1.6 | May 29, 2024 |
---|---|
0.1.5 | Apr 17, 2024 |
0.1.3 | Jan 31, 2024 |
#2914 in Database interfaces
352 downloads per month
Used in filigree-cli
34KB
754 lines
sql-migration-sim
This package reads multiple SQL statements, as from database migrations, and simulates the DDL statements to figure out the resulting schema from running them all.
lib.rs
:
This library is meant to parse multiple related SQL migration files, and calculate the final schema that results from running them in order.
Example
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);
Dependencies
~1.6–2.1MB
~48K SLoC