Implement database dump service

This commit is contained in:
Chris Miles
2020-03-09 03:00:07 -05:00
parent 1577f2823b
commit 8d252dfd9a
11 changed files with 243 additions and 272 deletions
+61 -1
View File
@@ -24,6 +24,7 @@
#include "../common/version.h"
#include "worlddb.h"
#include "../common/database_schema.h"
#include "../common/database/database_dump_service.h"
namespace WorldserverCommandHandler {
@@ -51,6 +52,7 @@ namespace WorldserverCommandHandler {
function_map["database:version"] = &WorldserverCommandHandler::DatabaseVersion;
function_map["database:set-account-status"] = &WorldserverCommandHandler::DatabaseSetAccountStatus;
function_map["database:schema"] = &WorldserverCommandHandler::DatabaseGetSchema;
function_map["database:dump"] = &WorldserverCommandHandler::DatabaseDump;
EQEmuCommand::HandleMenu(function_map, cmd, argc, argv);
}
@@ -145,7 +147,7 @@ namespace WorldserverCommandHandler {
*/
void DatabaseGetSchema(int argc, char **argv, argh::parser &cmd, std::string &description)
{
description = "Displays server database schema";
description = "Displays server database schema";
if (cmd[{"-h", "--help"}]) {
return;
@@ -202,4 +204,62 @@ namespace WorldserverCommandHandler {
std::cout << payload.str() << std::endl;
}
/**
* @param argc
* @param argv
* @param cmd
* @param description
*/
void DatabaseDump(int argc, char **argv, argh::parser &cmd, std::string &description)
{
description = "Dumps server database tables";
if (cmd[{"-h", "--help"}]) {
return;
}
std::vector<std::string> arguments = {};
std::vector<std::string> options = {
"--all",
"--content-tables",
"--login-tables",
"--player-tables",
"--system-tables",
"--table-structure-only",
"--no-table-lock",
"--dump-path=",
"--compress"
};
if (argc < 3) {
EQEmuCommand::ValidateCmdInput(arguments, options, cmd, argc, argv);
return;
}
auto database_dump_service = new DatabaseDumpService();
bool dump_all = cmd[{"-a", "--all"}];
if (!cmd("--dump-path").str().empty()) {
database_dump_service->SetDumpPath(cmd("--dump-path").str());
}
/**
* Set Option
*/
database_dump_service->SetDumpContentTables(cmd[{"-c", "--content-tables"}] || dump_all);
database_dump_service->SetDumpLoginServerTables(cmd[{"-c", "--login-tables"}] || dump_all);
database_dump_service->SetDumpPlayerTables(cmd[{"-c", "--player-tables"}] || dump_all);
database_dump_service->SetDumpSystemTables(cmd[{"-c", "--system-tables"}] || dump_all);
database_dump_service->SetDumpWithNoData(cmd[{"-c", "--table-structure-only"}]);
database_dump_service->SetDumpAllTables(dump_all);
database_dump_service->SetDumpNoTableLock(cmd[{"--no-table-lock"}]);
database_dump_service->SetDumpWithCompression(cmd[{"--compress"}]);
/**
* Dump
*/
database_dump_service->Dump();
}
}