6#include "DataMapper/DataMapper.hpp"
7#include "SqlQuery/Migrate.hpp"
8#include "SqlTransaction.hpp"
39 constexpr std::weak_ordering operator<=>(
MigrationTimestamp const& other)
const noexcept =
default;
48 std::string_view title;
49 std::string storedChecksum;
50 std::string computedChecksum;
84 using MigrationList = std::list<MigrationBase const*>;
120 using ExecuteCallback =
121 std::function<
void(
MigrationBase const& ,
size_t ,
size_t )>;
182 ExecuteCallback
const& feedbackCallback = {})
const;
191 [[nodiscard]] LIGHTWEIGHT_API std::vector<ChecksumVerificationResult>
VerifyChecksums()
const;
215 ExecuteCallback
const& feedbackCallback = {});
226 MigrationList _migrations;
233#define LIGHTWEIGHT_MIGRATION_PLUGIN() \
235 extern "C" LIGHTWEIGHT_EXPORT Lightweight::SqlMigration::MigrationManager* AcquireMigrationManager() \
237 return &Lightweight::SqlMigration::MigrationManager::GetInstance(); \
251 _timestamp { timestamp },
292 [[nodiscard]] std::string_view
GetTitle() const noexcept
309 std::string_view _title;
327 std::string_view title,
358 return static_cast<bool>(_down);
370#define _LIGHTWEIGHT_CONCATENATE(s1, s2) s1##s2
376#define LIGHTWEIGHT_MIGRATION_INSTANCE(timestamp) migration_##timestamp
396#define LIGHTWEIGHT_SQL_MIGRATION(timestamp, description) \
397 struct Migration_##timestamp: public Lightweight::SqlMigration::MigrationBase \
399 explicit Migration_##timestamp(): \
400 Lightweight::SqlMigration::MigrationBase(Lightweight::SqlMigration::MigrationTimestamp { timestamp }, \
405 void Up(Lightweight::SqlMigrationQueryBuilder& plan) const override; \
406 void Down(Lightweight::SqlMigrationQueryBuilder& ) const override {} \
409 static Migration_##timestamp _LIGHTWEIGHT_CONCATENATE(migration_, timestamp); \
411 void Migration_##timestamp::Up(Lightweight::SqlMigrationQueryBuilder& plan) const
Main API for mapping records to and from the database using high level C++ syntax.
Query builder for building SQL migration queries.
virtual void Up(SqlMigrationQueryBuilder &plan) const =0
MigrationTimestamp GetTimestamp() const noexcept
std::string_view GetTitle() const noexcept
virtual void Down(SqlMigrationQueryBuilder &) const
LIGHTWEIGHT_API std::string ComputeChecksum(SqlQueryFormatter const &formatter) const
virtual bool HasDownImplementation() const noexcept
LIGHTWEIGHT_API void MarkMigrationAsApplied(MigrationBase const &migration)
LIGHTWEIGHT_API DataMapper & GetDataMapper()
Get the data mapper used for migrations.
LIGHTWEIGHT_API RevertResult RevertToMigration(MigrationTimestamp target, ExecuteCallback const &feedbackCallback={})
LIGHTWEIGHT_API void AddMigration(MigrationBase const *migration)
LIGHTWEIGHT_API MigrationList const & GetAllMigrations() const noexcept
LIGHTWEIGHT_API void RemoveAllMigrations()
LIGHTWEIGHT_API std::vector< std::string > PreviewPendingMigrations(ExecuteCallback const &feedbackCallback={}) const
LIGHTWEIGHT_API void RevertSingleMigration(MigrationBase const &migration)
LIGHTWEIGHT_API void CloseDataMapper()
LIGHTWEIGHT_API DataMapper & GetDataMapper() const
Get the data mapper used for migrations.
LIGHTWEIGHT_API SqlTransaction Transaction()
LIGHTWEIGHT_API MigrationBase const * GetMigration(MigrationTimestamp timestamp) const noexcept
LIGHTWEIGHT_API std::list< MigrationBase const * > GetPending() const noexcept
LIGHTWEIGHT_API std::vector< ChecksumVerificationResult > VerifyChecksums() const
LIGHTWEIGHT_API std::vector< std::string > PreviewMigration(MigrationBase const &migration) const
LIGHTWEIGHT_API size_t ApplyPendingMigrations(ExecuteCallback const &feedbackCallback={})
LIGHTWEIGHT_API void CreateMigrationHistory()
Create the migration history table if it does not exist.
LIGHTWEIGHT_API MigrationStatus GetMigrationStatus() const
LIGHTWEIGHT_API void ApplySingleMigration(MigrationBase const &migration)
static LIGHTWEIGHT_API MigrationManager & GetInstance()
LIGHTWEIGHT_API std::vector< MigrationTimestamp > GetAppliedMigrationIds() const
void Down(SqlMigrationQueryBuilder &builder) const override
void Up(SqlMigrationQueryBuilder &builder) const override
Migration(MigrationTimestamp timestamp, std::string_view title, std::function< void(SqlMigrationQueryBuilder &)> const &up, std::function< void(SqlMigrationQueryBuilder &)> const &down={})
bool HasDownImplementation() const noexcept override
size_t mismatchCount
Number of applied migrations with checksum mismatches.
size_t appliedCount
Number of migrations that have been applied.
size_t totalRegistered
Total number of registered migrations.
size_t pendingCount
Number of migrations waiting to be applied.
size_t unknownAppliedCount
Number of applied migrations not found in registered list.
std::vector< MigrationTimestamp > revertedTimestamps
Successfully reverted migrations.
std::optional< MigrationTimestamp > failedAt
Migration that failed, if any.
std::string errorMessage
Error message if failed.