mirror of
https://github.com/EQEmu/Server.git
synced 2026-09-03 09:26:36 +00:00
[Database] Implement native database migrations in server (#2857)
* [Database] Implement native database updates in server * Cleanup * Delete db_update_manifest.txt * Bots updates * Final tweaks * Revert manifest * Tweaks * Remove code from eqemu_server.pl * Update database_update.cpp * Add user prompt update skipping with timeouts * Add termcolor IS_TTY is check * Update database_conversions.cpp * Remove large migrations * Push * fix headers. * Remove last of non-bot large migrations * Update database_update_manifest.cpp * More purging * Tweaks * Bot migrations * More work * Tweaks * Implement multi-statement query execution only for migrations * Add CLI database:updates * Add bootstrap commands * Upload bootstrap sql's * Update bot_tables_bootstrap.sql * Update bot_tables_bootstrap.sql * Add mercs:bootstrap and bots:bootstrap * Update bot_tables_bootstrap.sql * Update database.cpp * Update bot_tables_bootstrap.sql * More cleanup * Add mercs:disable and bots:disable * Update eqemu_server.pl * Update eqemu_server.pl * Update eqemu_server.pl * Test cases * Update eqemu_server.pl * Delete 2023_05_08_character_tribute_primary_key.sql * Post rebase fixes * Post rebase tweaks * Delete errant files * Rebase files from master * More adjustments * Delete files no longer used * Add missing migrations * bots:bootstrap is now bots:enable --------- Co-authored-by: Aeadoin <109764533+Aeadoin@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
#ifndef EQEMU_DATABASE_UPDATE_H
|
||||
#define EQEMU_DATABASE_UPDATE_H
|
||||
|
||||
#include "../database.h"
|
||||
|
||||
struct ManifestEntry {
|
||||
int version{}; // database version of the migration
|
||||
std::string description{}; // description of the migration ex: "add_new_table" or "add_index_to_table"
|
||||
std::string check{}; // query that checks against the condition
|
||||
std::string condition{}; // condition or "match_type" - Possible values [contains|match|missing|empty|not_empty]
|
||||
std::string match{}; // match field that is not always used, but works in conjunction with "condition" values [missing|match|contains]
|
||||
std::string sql{}; // the SQL DDL that gets ran when the condition is true
|
||||
};
|
||||
|
||||
struct DatabaseVersion {
|
||||
int server_database_version;
|
||||
int bots_database_version;
|
||||
};
|
||||
|
||||
class DatabaseUpdate {
|
||||
public:
|
||||
DatabaseVersion GetDatabaseVersions();
|
||||
DatabaseVersion GetBinaryDatabaseVersions();
|
||||
void CheckDbUpdates();
|
||||
std::string GetQueryResult(std::string query);
|
||||
static bool ShouldRunMigration(ManifestEntry &e, std::string query_result);
|
||||
bool UpdateManifest(std::vector<ManifestEntry> entries, int version_low, int version_high);
|
||||
|
||||
DatabaseUpdate *SetDatabase(Database *db);
|
||||
bool HasPendingUpdates();
|
||||
private:
|
||||
Database *m_database;
|
||||
static bool CheckVersions(DatabaseVersion v, DatabaseVersion b);
|
||||
void InjectBotsVersionColumn();
|
||||
};
|
||||
|
||||
#endif //EQEMU_DATABASE_UPDATE_H
|
||||
Reference in New Issue
Block a user