summaryrefslogtreecommitdiff
path: root/src/migrations.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/migrations.rs')
-rw-r--r--src/migrations.rs46
1 files changed, 29 insertions, 17 deletions
diff --git a/src/migrations.rs b/src/migrations.rs
index c7cd6bf..5076a9e 100644
--- a/src/migrations.rs
+++ b/src/migrations.rs
@@ -43,13 +43,16 @@ impl<'a> MigrationRunner<'a> {
// Get current migration version
let current_version = self.get_current_version()?;
-
+
println!("Current database version: {}", current_version);
// Run pending migrations
for migration in MIGRATIONS {
if migration.version > current_version {
- println!("Running migration {}: {}", migration.version, migration.name);
+ println!(
+ "Running migration {}: {}",
+ migration.version, migration.name
+ );
self.run_migration(migration)?;
}
}
@@ -70,7 +73,7 @@ impl<'a> MigrationRunner<'a> {
fn run_migration(&self, migration: &Migration) -> Result<()> {
// Execute the migration SQL
self.conn.execute_batch(migration.sql)?;
-
+
// Record the migration as applied
self.conn.execute(
"INSERT INTO schema_migrations (version, name, applied_at) VALUES (?1, ?2, ?3)",
@@ -86,14 +89,14 @@ impl<'a> MigrationRunner<'a> {
pub fn rollback_to_version(&self, target_version: i32) -> Result<()> {
println!("Rolling back to version {}", target_version);
-
+
// This is a simplified rollback - in practice you'd need down migrations
// For now, just remove migration records
self.conn.execute(
"DELETE FROM schema_migrations WHERE version > ?1",
[target_version],
)?;
-
+
println!("Rollback completed (Note: This doesn't actually undo schema changes)");
Ok(())
}
@@ -101,11 +104,11 @@ impl<'a> MigrationRunner<'a> {
pub fn show_migration_status(&self) -> Result<()> {
println!("Migration Status:");
println!("================");
-
- let mut stmt = self.conn.prepare(
- "SELECT version, name, applied_at FROM schema_migrations ORDER BY version"
- )?;
-
+
+ let mut stmt = self
+ .conn
+ .prepare("SELECT version, name, applied_at FROM schema_migrations ORDER BY version")?;
+
let migrations = stmt.query_map([], |row| {
Ok((
row.get::<_, i32>(0)?,
@@ -116,14 +119,20 @@ impl<'a> MigrationRunner<'a> {
for migration in migrations {
let (version, name, applied_at) = migration?;
- println!("✅ Migration {}: {} (applied: {})", version, name, applied_at);
+ println!(
+ "✅ Migration {}: {} (applied: {})",
+ version, name, applied_at
+ );
}
// Show pending migrations
let current_version = self.get_current_version()?;
for migration in MIGRATIONS {
if migration.version > current_version {
- println!("⏳ Migration {}: {} (pending)", migration.version, migration.name);
+ println!(
+ "⏳ Migration {}: {} (pending)",
+ migration.version, migration.name
+ );
}
}
@@ -139,14 +148,17 @@ mod tests {
fn test_migration_runner() {
let conn = Connection::open_in_memory().unwrap();
let runner = MigrationRunner::new(&conn);
-
+
// Should start with version 0
assert_eq!(runner.get_current_version().unwrap(), 0);
-
+
// Run migrations
runner.run_migrations().unwrap();
-
+
// Should now be at latest version
- assert_eq!(runner.get_current_version().unwrap(), MIGRATIONS.len() as i32);
+ assert_eq!(
+ runner.get_current_version().unwrap(),
+ MIGRATIONS.len() as i32
+ );
}
-} \ No newline at end of file
+}