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(())
}