diff --git a/sea-orm-migration/src/migrator.rs b/sea-orm-migration/src/migrator.rs index c62041b8..d0058bac 100644 --- a/sea-orm-migration/src/migrator.rs +++ b/sea-orm-migration/src/migrator.rs @@ -17,7 +17,7 @@ use sea_schema::{mysql::MySql, postgres::Postgres, probe::SchemaProbe, sqlite::S use super::{seaql_migrations, IntoSchemaManagerConnection, MigrationTrait, SchemaManager}; -#[derive(Debug, PartialEq, Eq)] +#[derive(Copy, Clone, Debug, PartialEq, Eq)] /// Status of migration pub enum MigrationStatus { /// Not yet applied @@ -26,11 +26,6 @@ pub enum MigrationStatus { Applied, } -pub struct Migration { - migration: Box, - status: MigrationStatus, -} - impl Display for MigrationStatus { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let status = match self { @@ -41,6 +36,23 @@ impl Display for MigrationStatus { } } +pub struct Migration { + migration: Box, + status: MigrationStatus, +} + +impl Migration { + /// Get migration name from MigrationName trait implementation + pub fn name(&self) -> &str { + self.migration.name() + } + + /// Get migration status + pub fn status(&self) -> MigrationStatus { + self.status + } +} + /// Performing migrations on a database #[async_trait::async_trait] pub trait MigratorTrait: Send { diff --git a/sea-orm-migration/tests/main.rs b/sea-orm-migration/tests/main.rs index 022ff8a5..3209b2c8 100644 --- a/sea-orm-migration/tests/main.rs +++ b/sea-orm-migration/tests/main.rs @@ -2,7 +2,7 @@ mod migrator; use migrator::Migrator; use sea_orm::{ConnectOptions, ConnectionTrait, Database, DbBackend, DbErr, Statement}; -use sea_orm_migration::prelude::*; +use sea_orm_migration::{migrator::MigrationStatus, prelude::*}; #[async_std::test] async fn main() -> Result<(), DbErr> { @@ -92,6 +92,14 @@ async fn run_migration(url: &str, db_name: &str, schema: &str) -> Result<(), DbE println!("\nMigrator::up"); Migrator::up(db, Some(1)).await?; + println!("\nMigrator::get_pending_migrations"); + let migrations = Migrator::get_pending_migrations(db).await?; + assert_eq!(migrations.len(), 5); + + let migration = migrations.get(0).unwrap(); + assert_eq!(migration.name(), "m20220118_000002_create_fruit_table"); + assert_eq!(migration.status(), MigrationStatus::Pending); + assert!(manager.has_table("cake").await?); assert!(!manager.has_table("fruit").await?); @@ -137,6 +145,14 @@ async fn run_migration(url: &str, db_name: &str, schema: &str) -> Result<(), DbE println!("\nMigrator::up"); Migrator::up(db, None).await?; + println!("\nMigrator::get_applied_migrations"); + let migrations = Migrator::get_applied_migrations(db).await?; + assert_eq!(migrations.len(), 6); + + let migration = migrations.get(0).unwrap(); + assert_eq!(migration.name(), "m20220118_000001_create_cake_table"); + assert_eq!(migration.status(), MigrationStatus::Applied); + println!("\nMigrator::status"); Migrator::status(db).await?;