From 9f9aa802655431bf637286d32a5970a3d301f804 Mon Sep 17 00:00:00 2001 From: NotAShelf Date: Wed, 20 May 2026 17:01:03 +0300 Subject: [PATCH] treewide: move migration logic into `pinakes-migrations` crate Signed-off-by: NotAShelf Change-Id: I98b8ed2eee464ecfd42f492dec49adeb6a6a6964 --- crates/pinakes-core/Cargo.toml | 2 +- crates/pinakes-core/src/storage/migrations.rs | 23 +++------- crates/pinakes-core/src/storage/sqlite.rs | 26 ++++++------ crates/pinakes-migrations/Cargo.toml | 14 +++++++ .../postgres/V10__incremental_scan.sql | 0 .../postgres/V11__session_persistence.sql | 0 .../postgres/V12__book_management.sql | 0 .../postgres/V13__photo_metadata.sql | 0 .../postgres/V14__perceptual_hash.sql | 0 .../postgres/V15__managed_storage.sql | 0 .../migrations}/postgres/V16__sync_system.sql | 0 .../postgres/V17__enhanced_sharing.sql | 0 .../postgres/V18__file_management.sql | 0 .../postgres/V19__markdown_links.sql | 0 .../postgres/V1__initial_schema.sql | 0 .../migrations}/postgres/V2__fts_indexes.sql | 0 .../postgres/V3__audit_indexes.sql | 0 .../postgres/V4__thumbnail_path.sql | 0 .../V5__integrity_and_saved_searches.sql | 0 .../postgres/V6__plugin_system.sql | 0 .../postgres/V7__user_management.sql | 0 .../postgres/V8__media_server_features.sql | 0 .../V9__fix_indexes_and_constraints.sql | 0 .../sqlite/V10__incremental_scan.sql | 0 .../sqlite/V11__session_persistence.sql | 0 .../sqlite/V12__book_management.sql | 0 .../sqlite/V13__photo_metadata.sql | 0 .../sqlite/V14__perceptual_hash.sql | 0 .../sqlite/V15__managed_storage.sql | 0 .../migrations}/sqlite/V16__sync_system.sql | 0 .../sqlite/V17__enhanced_sharing.sql | 0 .../sqlite/V18__file_management.sql | 0 .../sqlite/V19__markdown_links.sql | 0 .../migrations}/sqlite/V1__initial_schema.sql | 0 .../migrations}/sqlite/V2__fts5_indexes.sql | 0 .../migrations}/sqlite/V3__audit_indexes.sql | 0 .../migrations}/sqlite/V4__thumbnail_path.sql | 0 .../V5__integrity_and_saved_searches.sql | 0 .../migrations}/sqlite/V6__plugin_system.sql | 0 .../sqlite/V7__user_management.sql | 0 .../sqlite/V8__media_server_features.sql | 0 .../V9__fix_indexes_and_constraints.sql | 0 crates/pinakes-migrations/src/lib.rs | 42 +++++++++++++++++++ 43 files changed, 76 insertions(+), 31 deletions(-) create mode 100644 crates/pinakes-migrations/Cargo.toml rename {migrations => crates/pinakes-migrations/migrations}/postgres/V10__incremental_scan.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V11__session_persistence.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V12__book_management.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V13__photo_metadata.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V14__perceptual_hash.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V15__managed_storage.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V16__sync_system.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V17__enhanced_sharing.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V18__file_management.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V19__markdown_links.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V1__initial_schema.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V2__fts_indexes.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V3__audit_indexes.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V4__thumbnail_path.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V5__integrity_and_saved_searches.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V6__plugin_system.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V7__user_management.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V8__media_server_features.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/postgres/V9__fix_indexes_and_constraints.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V10__incremental_scan.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V11__session_persistence.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V12__book_management.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V13__photo_metadata.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V14__perceptual_hash.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V15__managed_storage.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V16__sync_system.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V17__enhanced_sharing.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V18__file_management.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V19__markdown_links.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V1__initial_schema.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V2__fts5_indexes.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V3__audit_indexes.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V4__thumbnail_path.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V5__integrity_and_saved_searches.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V6__plugin_system.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V7__user_management.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V8__media_server_features.sql (100%) rename {migrations => crates/pinakes-migrations/migrations}/sqlite/V9__fix_indexes_and_constraints.sql (100%) create mode 100644 crates/pinakes-migrations/src/lib.rs diff --git a/crates/pinakes-core/Cargo.toml b/crates/pinakes-core/Cargo.toml index 51b1dab..8c4529d 100644 --- a/crates/pinakes-core/Cargo.toml +++ b/crates/pinakes-core/Cargo.toml @@ -29,7 +29,7 @@ deadpool-postgres = { workspace = true } postgres-types = { workspace = true } postgres-native-tls = { workspace = true } native-tls = { workspace = true } -refinery = { workspace = true } +pinakes-migrations = { workspace = true } walkdir = { workspace = true } notify = { workspace = true } winnow = { workspace = true } diff --git a/crates/pinakes-core/src/storage/migrations.rs b/crates/pinakes-core/src/storage/migrations.rs index cedd987..196397f 100644 --- a/crates/pinakes-core/src/storage/migrations.rs +++ b/crates/pinakes-core/src/storage/migrations.rs @@ -1,28 +1,17 @@ use crate::error::{PinakesError, Result}; -mod sqlite_migrations { - use refinery::embed_migrations; - embed_migrations!("../../migrations/sqlite"); -} - -mod postgres_migrations { - use refinery::embed_migrations; - embed_migrations!("../../migrations/postgres"); -} - pub fn run_sqlite_migrations(conn: &mut rusqlite::Connection) -> Result<()> { - sqlite_migrations::migrations::runner() - .run(conn) - .map_err(|e| PinakesError::Migration(e.to_string()))?; - Ok(()) + pinakes_migrations::sqlite_migrations() + .to_latest(conn) + .map_err(|e| PinakesError::Migration(e.to_string())) } pub async fn run_postgres_migrations( client: &mut tokio_postgres::Client, ) -> Result<()> { - postgres_migrations::migrations::runner() + pinakes_migrations::postgres_runner() .run_async(client) .await - .map_err(|e| PinakesError::Migration(e.to_string()))?; - Ok(()) + .map(|_| ()) + .map_err(|e| PinakesError::Migration(e.to_string())) } diff --git a/crates/pinakes-core/src/storage/sqlite.rs b/crates/pinakes-core/src/storage/sqlite.rs index ecc1b00..4b72f95 100644 --- a/crates/pinakes-core/src/storage/sqlite.rs +++ b/crates/pinakes-core/src/storage/sqlite.rs @@ -1082,8 +1082,8 @@ impl StorageBackend for SqliteBackend { .map_err(|e| PinakesError::Database(e.to_string()))?; let count: u64 = db.query_row("SELECT COUNT(*) FROM media_items", [], |row| { - row.get(0) - })?; + row.get::<_, i64>(0) + })?.cast_unsigned(); db.execute("DELETE FROM media_items", [])?; count }; @@ -2441,12 +2441,12 @@ impl StorageBackend for SqliteBackend { .map_err(|e| PinakesError::Database(e.to_string()))?; let total_media: u64 = - db.query_row("SELECT COUNT(*) FROM media_items", [], |r| r.get(0))?; + db.query_row("SELECT COUNT(*) FROM media_items", [], |r| r.get::<_, i64>(0))?.cast_unsigned(); let total_size: u64 = db.query_row( "SELECT COALESCE(SUM(file_size), 0) FROM media_items", [], - |r| r.get(0), - )?; + |r| r.get::<_, i64>(0), + )?.cast_unsigned(); let avg_size: u64 = total_size.checked_div(total_media).unwrap_or(0); // Media count by type @@ -2455,7 +2455,7 @@ impl StorageBackend for SqliteBackend { ORDER BY COUNT(*) DESC", )?; let media_by_type: Vec<(String, u64)> = stmt - .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, u64>(1)?)))? + .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, i64>(1)?.cast_unsigned())))? .filter_map(std::result::Result::ok) .collect(); @@ -2465,7 +2465,7 @@ impl StorageBackend for SqliteBackend { GROUP BY media_type ORDER BY SUM(file_size) DESC", )?; let storage_by_type: Vec<(String, u64)> = stmt - .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, u64>(1)?)))? + .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, i64>(1)?.cast_unsigned())))? .filter_map(std::result::Result::ok) .collect(); @@ -2491,7 +2491,7 @@ impl StorageBackend for SqliteBackend { mt.tag_id = t.id GROUP BY t.id ORDER BY cnt DESC LIMIT 10", )?; let top_tags: Vec<(String, u64)> = stmt - .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, u64>(1)?)))? + .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, i64>(1)?.cast_unsigned())))? .filter_map(std::result::Result::ok) .collect(); @@ -2502,22 +2502,22 @@ impl StorageBackend for SqliteBackend { DESC LIMIT 10", )?; let top_collections: Vec<(String, u64)> = stmt - .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, u64>(1)?)))? + .query_map([], |r| Ok((r.get::<_, String>(0)?, r.get::<_, i64>(1)?.cast_unsigned())))? .filter_map(std::result::Result::ok) .collect(); let total_tags: u64 = - db.query_row("SELECT COUNT(*) FROM tags", [], |r| r.get(0))?; + db.query_row("SELECT COUNT(*) FROM tags", [], |r| r.get::<_, i64>(0))?.cast_unsigned(); let total_collections: u64 = - db.query_row("SELECT COUNT(*) FROM collections", [], |r| r.get(0))?; + db.query_row("SELECT COUNT(*) FROM collections", [], |r| r.get::<_, i64>(0))?.cast_unsigned(); // Duplicates: count of hashes that appear more than once let total_duplicates: u64 = db.query_row( "SELECT COUNT(*) FROM (SELECT content_hash FROM media_items GROUP BY \ content_hash HAVING COUNT(*) > 1)", [], - |r| r.get(0), - )?; + |r| r.get::<_, i64>(0), + )?.cast_unsigned(); Ok(super::LibraryStatistics { total_media, diff --git a/crates/pinakes-migrations/Cargo.toml b/crates/pinakes-migrations/Cargo.toml new file mode 100644 index 0000000..42284da --- /dev/null +++ b/crates/pinakes-migrations/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "pinakes-migrations" +edition.workspace = true +version.workspace = true +license.workspace = true + +[dependencies] +rusqlite = { workspace = true } +tokio-postgres = { workspace = true } +rusqlite_migration = { workspace = true } +refinery = { workspace = true } + +[lints] +workspace = true diff --git a/migrations/postgres/V10__incremental_scan.sql b/crates/pinakes-migrations/migrations/postgres/V10__incremental_scan.sql similarity index 100% rename from migrations/postgres/V10__incremental_scan.sql rename to crates/pinakes-migrations/migrations/postgres/V10__incremental_scan.sql diff --git a/migrations/postgres/V11__session_persistence.sql b/crates/pinakes-migrations/migrations/postgres/V11__session_persistence.sql similarity index 100% rename from migrations/postgres/V11__session_persistence.sql rename to crates/pinakes-migrations/migrations/postgres/V11__session_persistence.sql diff --git a/migrations/postgres/V12__book_management.sql b/crates/pinakes-migrations/migrations/postgres/V12__book_management.sql similarity index 100% rename from migrations/postgres/V12__book_management.sql rename to crates/pinakes-migrations/migrations/postgres/V12__book_management.sql diff --git a/migrations/postgres/V13__photo_metadata.sql b/crates/pinakes-migrations/migrations/postgres/V13__photo_metadata.sql similarity index 100% rename from migrations/postgres/V13__photo_metadata.sql rename to crates/pinakes-migrations/migrations/postgres/V13__photo_metadata.sql diff --git a/migrations/postgres/V14__perceptual_hash.sql b/crates/pinakes-migrations/migrations/postgres/V14__perceptual_hash.sql similarity index 100% rename from migrations/postgres/V14__perceptual_hash.sql rename to crates/pinakes-migrations/migrations/postgres/V14__perceptual_hash.sql diff --git a/migrations/postgres/V15__managed_storage.sql b/crates/pinakes-migrations/migrations/postgres/V15__managed_storage.sql similarity index 100% rename from migrations/postgres/V15__managed_storage.sql rename to crates/pinakes-migrations/migrations/postgres/V15__managed_storage.sql diff --git a/migrations/postgres/V16__sync_system.sql b/crates/pinakes-migrations/migrations/postgres/V16__sync_system.sql similarity index 100% rename from migrations/postgres/V16__sync_system.sql rename to crates/pinakes-migrations/migrations/postgres/V16__sync_system.sql diff --git a/migrations/postgres/V17__enhanced_sharing.sql b/crates/pinakes-migrations/migrations/postgres/V17__enhanced_sharing.sql similarity index 100% rename from migrations/postgres/V17__enhanced_sharing.sql rename to crates/pinakes-migrations/migrations/postgres/V17__enhanced_sharing.sql diff --git a/migrations/postgres/V18__file_management.sql b/crates/pinakes-migrations/migrations/postgres/V18__file_management.sql similarity index 100% rename from migrations/postgres/V18__file_management.sql rename to crates/pinakes-migrations/migrations/postgres/V18__file_management.sql diff --git a/migrations/postgres/V19__markdown_links.sql b/crates/pinakes-migrations/migrations/postgres/V19__markdown_links.sql similarity index 100% rename from migrations/postgres/V19__markdown_links.sql rename to crates/pinakes-migrations/migrations/postgres/V19__markdown_links.sql diff --git a/migrations/postgres/V1__initial_schema.sql b/crates/pinakes-migrations/migrations/postgres/V1__initial_schema.sql similarity index 100% rename from migrations/postgres/V1__initial_schema.sql rename to crates/pinakes-migrations/migrations/postgres/V1__initial_schema.sql diff --git a/migrations/postgres/V2__fts_indexes.sql b/crates/pinakes-migrations/migrations/postgres/V2__fts_indexes.sql similarity index 100% rename from migrations/postgres/V2__fts_indexes.sql rename to crates/pinakes-migrations/migrations/postgres/V2__fts_indexes.sql diff --git a/migrations/postgres/V3__audit_indexes.sql b/crates/pinakes-migrations/migrations/postgres/V3__audit_indexes.sql similarity index 100% rename from migrations/postgres/V3__audit_indexes.sql rename to crates/pinakes-migrations/migrations/postgres/V3__audit_indexes.sql diff --git a/migrations/postgres/V4__thumbnail_path.sql b/crates/pinakes-migrations/migrations/postgres/V4__thumbnail_path.sql similarity index 100% rename from migrations/postgres/V4__thumbnail_path.sql rename to crates/pinakes-migrations/migrations/postgres/V4__thumbnail_path.sql diff --git a/migrations/postgres/V5__integrity_and_saved_searches.sql b/crates/pinakes-migrations/migrations/postgres/V5__integrity_and_saved_searches.sql similarity index 100% rename from migrations/postgres/V5__integrity_and_saved_searches.sql rename to crates/pinakes-migrations/migrations/postgres/V5__integrity_and_saved_searches.sql diff --git a/migrations/postgres/V6__plugin_system.sql b/crates/pinakes-migrations/migrations/postgres/V6__plugin_system.sql similarity index 100% rename from migrations/postgres/V6__plugin_system.sql rename to crates/pinakes-migrations/migrations/postgres/V6__plugin_system.sql diff --git a/migrations/postgres/V7__user_management.sql b/crates/pinakes-migrations/migrations/postgres/V7__user_management.sql similarity index 100% rename from migrations/postgres/V7__user_management.sql rename to crates/pinakes-migrations/migrations/postgres/V7__user_management.sql diff --git a/migrations/postgres/V8__media_server_features.sql b/crates/pinakes-migrations/migrations/postgres/V8__media_server_features.sql similarity index 100% rename from migrations/postgres/V8__media_server_features.sql rename to crates/pinakes-migrations/migrations/postgres/V8__media_server_features.sql diff --git a/migrations/postgres/V9__fix_indexes_and_constraints.sql b/crates/pinakes-migrations/migrations/postgres/V9__fix_indexes_and_constraints.sql similarity index 100% rename from migrations/postgres/V9__fix_indexes_and_constraints.sql rename to crates/pinakes-migrations/migrations/postgres/V9__fix_indexes_and_constraints.sql diff --git a/migrations/sqlite/V10__incremental_scan.sql b/crates/pinakes-migrations/migrations/sqlite/V10__incremental_scan.sql similarity index 100% rename from migrations/sqlite/V10__incremental_scan.sql rename to crates/pinakes-migrations/migrations/sqlite/V10__incremental_scan.sql diff --git a/migrations/sqlite/V11__session_persistence.sql b/crates/pinakes-migrations/migrations/sqlite/V11__session_persistence.sql similarity index 100% rename from migrations/sqlite/V11__session_persistence.sql rename to crates/pinakes-migrations/migrations/sqlite/V11__session_persistence.sql diff --git a/migrations/sqlite/V12__book_management.sql b/crates/pinakes-migrations/migrations/sqlite/V12__book_management.sql similarity index 100% rename from migrations/sqlite/V12__book_management.sql rename to crates/pinakes-migrations/migrations/sqlite/V12__book_management.sql diff --git a/migrations/sqlite/V13__photo_metadata.sql b/crates/pinakes-migrations/migrations/sqlite/V13__photo_metadata.sql similarity index 100% rename from migrations/sqlite/V13__photo_metadata.sql rename to crates/pinakes-migrations/migrations/sqlite/V13__photo_metadata.sql diff --git a/migrations/sqlite/V14__perceptual_hash.sql b/crates/pinakes-migrations/migrations/sqlite/V14__perceptual_hash.sql similarity index 100% rename from migrations/sqlite/V14__perceptual_hash.sql rename to crates/pinakes-migrations/migrations/sqlite/V14__perceptual_hash.sql diff --git a/migrations/sqlite/V15__managed_storage.sql b/crates/pinakes-migrations/migrations/sqlite/V15__managed_storage.sql similarity index 100% rename from migrations/sqlite/V15__managed_storage.sql rename to crates/pinakes-migrations/migrations/sqlite/V15__managed_storage.sql diff --git a/migrations/sqlite/V16__sync_system.sql b/crates/pinakes-migrations/migrations/sqlite/V16__sync_system.sql similarity index 100% rename from migrations/sqlite/V16__sync_system.sql rename to crates/pinakes-migrations/migrations/sqlite/V16__sync_system.sql diff --git a/migrations/sqlite/V17__enhanced_sharing.sql b/crates/pinakes-migrations/migrations/sqlite/V17__enhanced_sharing.sql similarity index 100% rename from migrations/sqlite/V17__enhanced_sharing.sql rename to crates/pinakes-migrations/migrations/sqlite/V17__enhanced_sharing.sql diff --git a/migrations/sqlite/V18__file_management.sql b/crates/pinakes-migrations/migrations/sqlite/V18__file_management.sql similarity index 100% rename from migrations/sqlite/V18__file_management.sql rename to crates/pinakes-migrations/migrations/sqlite/V18__file_management.sql diff --git a/migrations/sqlite/V19__markdown_links.sql b/crates/pinakes-migrations/migrations/sqlite/V19__markdown_links.sql similarity index 100% rename from migrations/sqlite/V19__markdown_links.sql rename to crates/pinakes-migrations/migrations/sqlite/V19__markdown_links.sql diff --git a/migrations/sqlite/V1__initial_schema.sql b/crates/pinakes-migrations/migrations/sqlite/V1__initial_schema.sql similarity index 100% rename from migrations/sqlite/V1__initial_schema.sql rename to crates/pinakes-migrations/migrations/sqlite/V1__initial_schema.sql diff --git a/migrations/sqlite/V2__fts5_indexes.sql b/crates/pinakes-migrations/migrations/sqlite/V2__fts5_indexes.sql similarity index 100% rename from migrations/sqlite/V2__fts5_indexes.sql rename to crates/pinakes-migrations/migrations/sqlite/V2__fts5_indexes.sql diff --git a/migrations/sqlite/V3__audit_indexes.sql b/crates/pinakes-migrations/migrations/sqlite/V3__audit_indexes.sql similarity index 100% rename from migrations/sqlite/V3__audit_indexes.sql rename to crates/pinakes-migrations/migrations/sqlite/V3__audit_indexes.sql diff --git a/migrations/sqlite/V4__thumbnail_path.sql b/crates/pinakes-migrations/migrations/sqlite/V4__thumbnail_path.sql similarity index 100% rename from migrations/sqlite/V4__thumbnail_path.sql rename to crates/pinakes-migrations/migrations/sqlite/V4__thumbnail_path.sql diff --git a/migrations/sqlite/V5__integrity_and_saved_searches.sql b/crates/pinakes-migrations/migrations/sqlite/V5__integrity_and_saved_searches.sql similarity index 100% rename from migrations/sqlite/V5__integrity_and_saved_searches.sql rename to crates/pinakes-migrations/migrations/sqlite/V5__integrity_and_saved_searches.sql diff --git a/migrations/sqlite/V6__plugin_system.sql b/crates/pinakes-migrations/migrations/sqlite/V6__plugin_system.sql similarity index 100% rename from migrations/sqlite/V6__plugin_system.sql rename to crates/pinakes-migrations/migrations/sqlite/V6__plugin_system.sql diff --git a/migrations/sqlite/V7__user_management.sql b/crates/pinakes-migrations/migrations/sqlite/V7__user_management.sql similarity index 100% rename from migrations/sqlite/V7__user_management.sql rename to crates/pinakes-migrations/migrations/sqlite/V7__user_management.sql diff --git a/migrations/sqlite/V8__media_server_features.sql b/crates/pinakes-migrations/migrations/sqlite/V8__media_server_features.sql similarity index 100% rename from migrations/sqlite/V8__media_server_features.sql rename to crates/pinakes-migrations/migrations/sqlite/V8__media_server_features.sql diff --git a/migrations/sqlite/V9__fix_indexes_and_constraints.sql b/crates/pinakes-migrations/migrations/sqlite/V9__fix_indexes_and_constraints.sql similarity index 100% rename from migrations/sqlite/V9__fix_indexes_and_constraints.sql rename to crates/pinakes-migrations/migrations/sqlite/V9__fix_indexes_and_constraints.sql diff --git a/crates/pinakes-migrations/src/lib.rs b/crates/pinakes-migrations/src/lib.rs new file mode 100644 index 0000000..8092426 --- /dev/null +++ b/crates/pinakes-migrations/src/lib.rs @@ -0,0 +1,42 @@ +use rusqlite_migration::{M, Migrations}; + +mod postgres_migrations { + use refinery::embed_migrations; + embed_migrations!("migrations/postgres"); +} + +pub fn sqlite_migrations() -> Migrations<'static> { + Migrations::new(vec![ + M::up(include_str!("../migrations/sqlite/V1__initial_schema.sql")), + M::up(include_str!("../migrations/sqlite/V2__fts5_indexes.sql")), + M::up(include_str!("../migrations/sqlite/V3__audit_indexes.sql")), + M::up(include_str!("../migrations/sqlite/V4__thumbnail_path.sql")), + M::up(include_str!( + "../migrations/sqlite/V5__integrity_and_saved_searches.sql" + )), + M::up(include_str!("../migrations/sqlite/V6__plugin_system.sql")), + M::up(include_str!("../migrations/sqlite/V7__user_management.sql")), + M::up(include_str!( + "../migrations/sqlite/V8__media_server_features.sql" + )), + M::up(include_str!( + "../migrations/sqlite/V9__fix_indexes_and_constraints.sql" + )), + M::up(include_str!("../migrations/sqlite/V10__incremental_scan.sql")), + M::up(include_str!( + "../migrations/sqlite/V11__session_persistence.sql" + )), + M::up(include_str!("../migrations/sqlite/V12__book_management.sql")), + M::up(include_str!("../migrations/sqlite/V13__photo_metadata.sql")), + M::up(include_str!("../migrations/sqlite/V14__perceptual_hash.sql")), + M::up(include_str!("../migrations/sqlite/V15__managed_storage.sql")), + M::up(include_str!("../migrations/sqlite/V16__sync_system.sql")), + M::up(include_str!("../migrations/sqlite/V17__enhanced_sharing.sql")), + M::up(include_str!("../migrations/sqlite/V18__file_management.sql")), + M::up(include_str!("../migrations/sqlite/V19__markdown_links.sql")), + ]) +} + +pub fn postgres_runner() -> refinery::Runner { + postgres_migrations::migrations::runner() +}