diff --git a/common/database.cpp b/common/database.cpp index 74596df23..c79ae0117 100644 --- a/common/database.cpp +++ b/common/database.cpp @@ -1920,6 +1920,7 @@ bool Database::CopyCharacter( std::vector tables_to_zero_id = { "keyring", "data_buckets", + "character_evolving_items", "character_instance_safereturns", "character_expedition_lockouts", "character_instance_lockouts", @@ -1951,6 +1952,12 @@ bool Database::CopyCharacter( ) ); + if (!results.Success()) { + LogError("Transaction failed [{}] rolling back", results.ErrorMessage()); + TransactionRollback(); + return false; + } + std::vector columns = {}; int column_count = 0; @@ -1969,6 +1976,12 @@ bool Database::CopyCharacter( ) ); + if (!results.Success()) { + LogError("Transaction failed [{}] rolling back", results.ErrorMessage()); + TransactionRollback(); + return false; + } + std::vector> new_rows; for (auto row : results) { @@ -2036,13 +2049,18 @@ bool Database::CopyCharacter( LogInfo("Copying table [{}] rows [{}]", table_name, Strings::Commify(rows_copied)); if (!insert.ErrorMessage().empty()) { + LogError("Error copying table [{}] [{}]", table_name, insert.ErrorMessage()); TransactionRollback(); return false; } } } - TransactionCommit(); + auto r = TransactionCommit(); + if (!r.Success()) { + LogError("Transaction failed [{}] rolling back", r.ErrorMessage()); + return false; + } LogInfo( "Character [{}] copied to [{}] total rows [{}]", diff --git a/common/dbcore.cpp b/common/dbcore.cpp index 1c0911866..a6117cfd2 100644 --- a/common/dbcore.cpp +++ b/common/dbcore.cpp @@ -189,9 +189,9 @@ void DBcore::TransactionBegin() QueryDatabase("START TRANSACTION"); } -void DBcore::TransactionCommit() +MySQLRequestResult DBcore::TransactionCommit() { - QueryDatabase("COMMIT"); + return QueryDatabase("COMMIT"); } void DBcore::TransactionRollback() diff --git a/common/dbcore.h b/common/dbcore.h index cefdc6522..6d07f1bdb 100644 --- a/common/dbcore.h +++ b/common/dbcore.h @@ -32,7 +32,7 @@ public: MySQLRequestResult QueryDatabase(const std::string& query, bool retryOnFailureOnce = true); MySQLRequestResult QueryDatabaseMulti(const std::string &query); void TransactionBegin(); - void TransactionCommit(); + MySQLRequestResult TransactionCommit(); void TransactionRollback(); std::string Escape(const std::string& s); uint32 DoEscapeString(char *tobuf, const char *frombuf, uint32 fromlen);