1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use crate::{salmo_contex::SalmoContext, meta_table::{tries::TriedMigration, executions::ExecutedMigration}};
use super::status::get_committed;
pub fn run_migrations(ctx: &SalmoContext) -> anyhow::Result<()> {
let migrations = ctx.migrations()?;
for env in ctx.environments.iter() {
let mut client = env.connect()?;
let mut t = client.transaction()?;
let committed = get_committed(ctx, &mut t)?;
let mut commit_index = 1 + committed.already_migrated.len();
for pending_migration_name in committed.pending_migration.iter() {
let migration = &migrations.db[pending_migration_name];
t.batch_execute(&migration.migrate_sql()?)?;
TriedMigration::delete(&mut t, migration)?;
ExecutedMigration::insert(&mut t, migration, commit_index as i32)?;
commit_index += 1;
println!("EXECUTED: {}", migration.id);
}
t.commit()?;
}
Ok(())
}