aboutsummaryrefslogtreecommitdiff
path: root/src/db/migration/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/migration/mod.rs')
-rw-r--r--src/db/migration/mod.rs21
1 files changed, 19 insertions, 2 deletions
diff --git a/src/db/migration/mod.rs b/src/db/migration/mod.rs
index d53f46b..d511f88 100644
--- a/src/db/migration/mod.rs
+++ b/src/db/migration/mod.rs
@@ -1,5 +1,13 @@
pub use tosin_macros::gather_migrations as gather;
+use diesel::{Connection, result::Error as DieselError};
+
+use crate::db::backend::Connectable;
+
+mod change;
+
+pub use change::*;
+
pub struct Migration {
pub id: usize,
pub name: &'static str,
@@ -7,6 +15,15 @@ pub struct Migration {
pub changes: &'static [DatabaseChange],
}
-pub enum DatabaseChange {
- CreateModel,
+impl Migration {
+ pub fn apply<C: Connectable>(&self, app_name: &str, connection: &C::Connection) {
+ // TODO prevent double-applying
+ connection.transaction::<_, DieselError, _>(|| {
+ for change in self.changes {
+ change.apply::<C>(app_name, connection);
+ }
+
+ Ok(())
+ }).unwrap();
+ }
}