embed_migrations!("./src/migrations/diesel/sqlite/migrations");
use diesel::sqlite::SqliteConnection;
use diesel::Connection;
use diesel_migrations::MigrationConnection;
use sawtooth::migrations::run_sqlite_migrations as run_sawtooth_sqlite_migrations;
use splinter::error::InternalError;
use transact::state::merkle::sql::migration::run_sqlite_migrations as run_transact_sqlite_migrations;
pub fn run_migrations(conn: &SqliteConnection) -> Result<(), InternalError> {
embedded_migrations::run(conn).map_err(|err| InternalError::from_source(Box::new(err)))?;
run_transact_sqlite_migrations(conn)
.map_err(|err| InternalError::from_source(Box::new(err)))?;
run_sawtooth_sqlite_migrations(conn)
.map_err(|err| InternalError::from_source(Box::new(err)))?;
debug!("Successfully applied Scabbard SQLite migrations");
Ok(())
}
pub fn any_pending_migrations(conn: &SqliteConnection) -> Result<bool, InternalError> {
let current_version = conn.latest_run_migration_version().unwrap_or(None);
let latest_version =
conn.test_transaction::<Result<Option<String>, InternalError>, (), _>(|| {
Ok(match run_migrations(conn) {
Ok(_) => conn
.latest_run_migration_version()
.map_err(|err| InternalError::from_source(Box::new(err))),
Err(err) => Err(InternalError::from_source(Box::new(err))),
})
})?;
Ok(current_version == latest_version)
}