26#include <kcenon/common/patterns/result.h>
35#ifdef PACS_WITH_DATABASE_SYSTEM
37class pacs_database_adapter;
47using VoidResult = kcenon::common::VoidResult;
60#ifdef PACS_WITH_DATABASE_SYSTEM
70using adapter_migration_function =
71 std::function<VoidResult(pacs_database_adapter&)>;
149#ifdef PACS_WITH_DATABASE_SYSTEM
166 [[nodiscard]]
auto run_migrations(pacs_database_adapter& db) -> VoidResult;
176 int target_version) -> VoidResult;
193 [[nodiscard]]
auto needs_migration(pacs_database_adapter& db)
const -> bool;
201 [[nodiscard]]
auto get_history(pacs_database_adapter& db)
const
202 -> std::vector<migration_record>;
270 [[nodiscard]] auto
apply_migration(sqlite3* db,
int version) -> VoidResult;
281 std::string_view description)
291 [[nodiscard]] auto
execute_sql(sqlite3* db, std::string_view sql)
295 [[nodiscard]] auto
migrate_v1(sqlite3* db) -> VoidResult;
296 [[nodiscard]] auto
migrate_v2(sqlite3* db) -> VoidResult;
297 [[nodiscard]] auto
migrate_v3(sqlite3* db) -> VoidResult;
298 [[nodiscard]] auto
migrate_v4(sqlite3* db) -> VoidResult;
299 [[nodiscard]] auto
migrate_v5(sqlite3* db) -> VoidResult;
300 [[nodiscard]] auto
migrate_v6(sqlite3* db) -> VoidResult;
301 [[nodiscard]] auto
migrate_v7(sqlite3* db) -> VoidResult;
302 [[nodiscard]] auto
migrate_v8(sqlite3* db) -> VoidResult;
303 [[nodiscard]] auto
migrate_v9(sqlite3* db) -> VoidResult;
305#ifdef PACS_WITH_DATABASE_SYSTEM
326 [[nodiscard]]
auto apply_migration(pacs_database_adapter& db,
int version)
338 std::string_view description)
348 [[nodiscard]]
auto execute_sql(pacs_database_adapter& db,
349 std::string_view sql) -> VoidResult;
352 [[nodiscard]]
auto migrate_v1(pacs_database_adapter& db) -> VoidResult;
353 [[nodiscard]]
auto migrate_v2(pacs_database_adapter& db) -> VoidResult;
354 [[nodiscard]]
auto migrate_v3(pacs_database_adapter& db) -> VoidResult;
355 [[nodiscard]]
auto migrate_v4(pacs_database_adapter& db) -> VoidResult;
356 [[nodiscard]]
auto migrate_v5(pacs_database_adapter& db) -> VoidResult;
357 [[nodiscard]]
auto migrate_v6(pacs_database_adapter& db) -> VoidResult;
358 [[nodiscard]]
auto migrate_v7(pacs_database_adapter& db) -> VoidResult;
359 [[nodiscard]]
auto migrate_v8(pacs_database_adapter& db) -> VoidResult;
360 [[nodiscard]]
auto migrate_v9(pacs_database_adapter& db) -> VoidResult;
363 std::vector<std::pair<int, adapter_migration_function>> adapter_migrations_;
auto operator=(migration_runner &&) -> migration_runner &=delete
migration_runner(migration_runner &&)=delete
auto migrate_v4(sqlite3 *db) -> VoidResult
auto migrate_v9(sqlite3 *db) -> VoidResult
auto migrate_v2(sqlite3 *db) -> VoidResult
auto run_migrations_to(sqlite3 *db, int target_version) -> VoidResult
Run migrations up to a specific version.
auto migrate_v6(sqlite3 *db) -> VoidResult
static constexpr int LATEST_VERSION
Latest schema version (increment when adding migrations)
std::vector< std::pair< int, migration_function > > migrations_
Migration function registry.
auto get_current_version(sqlite3 *db) const -> int
Get the current schema version.
auto migrate_v8(sqlite3 *db) -> VoidResult
auto operator=(const migration_runner &) -> migration_runner &=delete
auto ensure_schema_version_table(sqlite3 *db) -> VoidResult
Create the schema_version table if it doesn't exist.
auto migrate_v5(sqlite3 *db) -> VoidResult
auto migrate_v1(sqlite3 *db) -> VoidResult
auto get_latest_version() const noexcept -> int
Get the latest available schema version.
auto execute_sql(sqlite3 *db, std::string_view sql) -> VoidResult
Execute SQL statement and handle errors.
migration_runner(const migration_runner &)=delete
auto needs_migration(sqlite3 *db) const -> bool
Check if migration is needed.
auto apply_migration(sqlite3 *db, int version) -> VoidResult
Apply a single migration.
~migration_runner()=default
Default destructor.
migration_runner()
Default constructor.
auto record_migration(sqlite3 *db, int version, std::string_view description) -> VoidResult
Record a migration in the schema_version table.
auto get_history(sqlite3 *db) const -> std::vector< migration_record >
Get the migration history.
auto run_migrations(sqlite3 *db) -> VoidResult
Run all pending migrations.
auto migrate_v3(sqlite3 *db) -> VoidResult
auto migrate_v7(sqlite3 *db) -> VoidResult
Migration record structure for schema version tracking.
std::function< VoidResult(sqlite3 *db)> migration_function
Function type for migration implementations (SQLite)
Represents a record of an applied database migration.