diff --git a/crates/pgt_workspace/src/workspace/server.rs b/crates/pgt_workspace/src/workspace/server.rs
index 032b92c6..8dcbfb1d 100644
--- a/crates/pgt_workspace/src/workspace/server.rs
+++ b/crates/pgt_workspace/src/workspace/server.rs
@@ -108,7 +108,7 @@ impl WorkspaceServer {
let migrations_dir = migration_settings.path.as_ref()?;
let migration = migration::get_migration(path, migrations_dir)?;
- Some(&migration.timestamp <= ignore_before)
+ Some(&migration.sequence_number <= ignore_before)
})
.unwrap_or(false)
}
diff --git a/crates/pgt_workspace/src/workspace/server/migration.rs b/crates/pgt_workspace/src/workspace/server/migration.rs
index ef4bdd25..d8853727 100644
--- a/crates/pgt_workspace/src/workspace/server/migration.rs
+++ b/crates/pgt_workspace/src/workspace/server/migration.rs
@@ -2,7 +2,7 @@ use std::path::Path;
#[derive(Debug)]
pub(crate) struct Migration {
- pub(crate) timestamp: u64,
+ pub(crate) sequence_number: u64,
#[allow(unused)]
pub(crate) name: String,
}
@@ -33,12 +33,7 @@ pub(crate) fn get_migration(path: &Path, migrations_dir: &Path) -> Option Option Option {
+ let mut parts = name.splitn(2, '_');
+ // remove leading zeros to support numeric
+ let sequence_number: u64 = parts.next()?.trim_start_matches('0').parse().ok()?;
+ let full_name = parts.next()?;
+ let name = full_name
+ .strip_suffix(".sql")
+ .unwrap_or(full_name)
+ .to_string();
+ Some(Migration {
+ sequence_number,
+ name,
+ })
}
#[cfg(test)]
@@ -79,8 +84,8 @@ mod tests {
assert!(migration.is_some());
let migration = migration.unwrap();
- assert_eq!(migration.timestamp, 1234567890);
- assert_eq!(migration.name, "create_users.sql");
+ assert_eq!(migration.sequence_number, 1234567890);
+ assert_eq!(migration.name, "create_users");
}
#[test]
@@ -96,10 +101,25 @@ mod tests {
assert!(migration.is_some());
let migration = migration.unwrap();
- assert_eq!(migration.timestamp, 1234567890);
+ assert_eq!(migration.sequence_number, 1234567890);
assert_eq!(migration.name, "create_users");
}
+ #[test]
+ fn test_get_migration_prefix_number() {
+ let temp_dir = setup();
+ let migrations_dir = temp_dir.path().to_path_buf();
+ let path = migrations_dir.join("000201_a_migration.sql");
+ fs::write(&path, "").unwrap();
+
+ let migration = get_migration(&path, &migrations_dir);
+
+ assert!(migration.is_some());
+ let migration = migration.unwrap();
+ assert_eq!(migration.sequence_number, 201);
+ assert_eq!(migration.name, "a_migration");
+ }
+
#[test]
fn test_get_migration_not_timestamp_in_filename() {
let migrations_dir = PathBuf::from("/tmp/migrations");