Adjusts processing of updates

* Temporarily store updates into a map STL so that they are applied sequentially based on their order defined in the database.
This commit is contained in:
aleos 2020-05-14 11:41:37 -04:00
parent fd844759f7
commit ba5109189b

View File

@ -3,6 +3,7 @@
#include "sql.hpp" #include "sql.hpp"
#include <map>
#ifdef WIN32 #ifdef WIN32
#include "winapi.hpp" #include "winapi.hpp"
#endif #endif
@ -1062,8 +1063,9 @@ void Sql_UpgradesChecker(Sql *sql_handle, e_sql_database schema) {
sql_update_db.load(); sql_update_db.load();
std::vector<int32> new_updates, skipped_updates; std::vector<int32> new_updates, skipped_updates;
std::map<int32, std::shared_ptr<s_sql_update_db>> ordered_sql_update_db(sql_update_db.begin(), sql_update_db.end()); // Create an ordered list (by ID) to make sure updates are applied sequentially
for (const auto &updateIt : sql_update_db) { for (const auto &updateIt : ordered_sql_update_db) {
std::shared_ptr<s_sql_update_db> update = updateIt.second; std::shared_ptr<s_sql_update_db> update = updateIt.second;
if (!update->patchdate.empty()) // Already applied if (!update->patchdate.empty()) // Already applied
@ -1162,6 +1164,7 @@ void Sql_UpgradesChecker(Sql *sql_handle, e_sql_database schema) {
save.close(); save.close();
} }
ordered_sql_update_db.clear();
new_updates.clear(); new_updates.clear();
skipped_updates.clear(); skipped_updates.clear();
} }