From 2c0132b730ac93e8f925950cbedfb136c6433c85 Mon Sep 17 00:00:00 2001 From: Kubat <mael.martin31@gmail.com> Date: Sat, 1 Oct 2022 22:46:47 +0200 Subject: [PATCH] DB: Run migrations when opening the database --- src/rust/liblektor-rs/Cargo.toml | 6 ++++-- src/rust/liblektor-rs/src/database/mod.rs | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/rust/liblektor-rs/Cargo.toml b/src/rust/liblektor-rs/Cargo.toml index 7e9d12c7..16435bdb 100644 --- a/src/rust/liblektor-rs/Cargo.toml +++ b/src/rust/liblektor-rs/Cargo.toml @@ -7,5 +7,7 @@ edition = "2021" crate-type = [ "staticlib" ] [dependencies] -libc = "0.2.0" -diesel = { version = "2", default-features = false, features = [ "sqlite" ] } +log = "0.4" +libc = "0.2.0" +diesel_migrations = "2" +diesel = { version = "2", default-features = false, features = [ "sqlite" ] } diff --git a/src/rust/liblektor-rs/src/database/mod.rs b/src/rust/liblektor-rs/src/database/mod.rs index 8ea4ab39..bf76fec2 100644 --- a/src/rust/liblektor-rs/src/database/mod.rs +++ b/src/rust/liblektor-rs/src/database/mod.rs @@ -1,4 +1,24 @@ pub(self) use diesel::prelude::*; +use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; +pub(self) use log::*; pub mod models; pub mod schema; + +/// The migrations! +const MIGRATIONS: EmbeddedMigrations = embed_migrations!(); + +/// Run migrations in a connexion! +fn run_migration(conn: &mut SqliteConnection) -> Result<(), String> { + conn.run_pending_migrations(MIGRATIONS) + .map_err(|err| err.to_string()) + .map(|_| ()) +} + +/// Create a connexion to a database and run automatically the migrations. +pub fn establish_connection(path: impl AsRef<str>) -> Result<SqliteConnection, String> { + let mut conn = SqliteConnection::establish(path.as_ref()) + .map_err(|err| format!("error connecting to {}: {}", path.as_ref(), err))?; + self::run_migration(&mut conn)?; + Ok(conn) +} -- GitLab