mirror of
https://github.com/EQEmu/Server.git
synced 2025-12-13 18:51:29 +00:00
Updated inventory_snapshots to correct a test case. Working as intended now.
Added sharedbank conversion to create unique item ids on world load.
This commit is contained in:
parent
345d452a7e
commit
a2310b6d5e
@ -52,6 +52,7 @@
|
|||||||
#include "../common/repositories/variables_repository.h"
|
#include "../common/repositories/variables_repository.h"
|
||||||
#include "../common/repositories/character_pet_name_repository.h"
|
#include "../common/repositories/character_pet_name_repository.h"
|
||||||
#include "../common/events/player_event_logs.h"
|
#include "../common/events/player_event_logs.h"
|
||||||
|
#include "../common/repositories/sharedbank_repository.h"
|
||||||
|
|
||||||
// Disgrace: for windows compile
|
// Disgrace: for windows compile
|
||||||
#ifdef _WINDOWS
|
#ifdef _WINDOWS
|
||||||
@ -2327,3 +2328,37 @@ void Database::ConvertInventoryToNewUniqueId()
|
|||||||
TransactionCommit();
|
TransactionCommit();
|
||||||
LogInfo("Converted {} records", results.size());
|
LogInfo("Converted {} records", results.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Database::ConvertSharedbankToNewUniqueId()
|
||||||
|
{
|
||||||
|
LogInfo("Converting shared bank entries with NULL item_unique_id");
|
||||||
|
auto results = SharedbankRepository::GetWhere(*this, "`item_unique_id` IS NULL");
|
||||||
|
|
||||||
|
if (results.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TransactionBegin();
|
||||||
|
uint32 index = 0;
|
||||||
|
const uint32 batch_size = 1000;
|
||||||
|
std::vector<SharedbankRepository::Sharedbank> queue{};
|
||||||
|
queue.reserve(batch_size);
|
||||||
|
|
||||||
|
for (auto &r: results) {
|
||||||
|
r.item_unique_id = EQ::UniqueHashGenerator::generate();
|
||||||
|
queue.push_back(r);
|
||||||
|
index++;
|
||||||
|
if (index >= batch_size) {
|
||||||
|
SharedbankRepository::ReplaceMany(*this, queue);
|
||||||
|
index = 0;
|
||||||
|
queue.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!queue.empty()) {
|
||||||
|
SharedbankRepository::ReplaceMany(*this, queue);
|
||||||
|
}
|
||||||
|
|
||||||
|
TransactionCommit();
|
||||||
|
LogInfo("Converted {} records", results.size());
|
||||||
|
}
|
||||||
@ -279,6 +279,7 @@ public:
|
|||||||
|
|
||||||
uint64_t GetNextTableId(const std::string& table_name);
|
uint64_t GetNextTableId(const std::string& table_name);
|
||||||
void ConvertInventoryToNewUniqueId();
|
void ConvertInventoryToNewUniqueId();
|
||||||
|
void ConvertSharedbankToNewUniqueId();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Mutex Mvarcache;
|
Mutex Mvarcache;
|
||||||
|
|||||||
@ -7219,7 +7219,9 @@ ALTER TABLE `inventory_snapshots`
|
|||||||
ADD COLUMN `item_unique_id` VARCHAR(16) NULL DEFAULT NULL AFTER `ornament_hero_model`;
|
ADD COLUMN `item_unique_id` VARCHAR(16) NULL DEFAULT NULL AFTER `ornament_hero_model`;
|
||||||
|
|
||||||
ALTER TABLE `inventory_snapshots`
|
ALTER TABLE `inventory_snapshots`
|
||||||
DROP PRIMARY KEY;
|
DROP PRIMARY KEY,
|
||||||
|
DROP COLUMN `guid`,
|
||||||
|
ADD COLUMN `item_unique_id` VARCHAR(16) NULL DEFAULT NULL AFTER `ornament_hero_model`;
|
||||||
|
|
||||||
ALTER TABLE `inventory_snapshots`
|
ALTER TABLE `inventory_snapshots`
|
||||||
ADD PRIMARY KEY (`time_index`, `character_id`, `slot_id`) USING BTREE;
|
ADD PRIMARY KEY (`time_index`, `character_id`, `slot_id`) USING BTREE;
|
||||||
|
|||||||
@ -37,7 +37,6 @@ public:
|
|||||||
uint32_t ornament_idfile;
|
uint32_t ornament_idfile;
|
||||||
int32_t ornament_hero_model;
|
int32_t ornament_hero_model;
|
||||||
std::string item_unique_id;
|
std::string item_unique_id;
|
||||||
uint64_t guid;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string PrimaryKey()
|
static std::string PrimaryKey()
|
||||||
@ -66,7 +65,6 @@ public:
|
|||||||
"ornament_idfile",
|
"ornament_idfile",
|
||||||
"ornament_hero_model",
|
"ornament_hero_model",
|
||||||
"item_unique_id",
|
"item_unique_id",
|
||||||
"guid",
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,7 +89,6 @@ public:
|
|||||||
"ornament_idfile",
|
"ornament_idfile",
|
||||||
"ornament_hero_model",
|
"ornament_hero_model",
|
||||||
"item_unique_id",
|
"item_unique_id",
|
||||||
"guid",
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -150,7 +147,6 @@ public:
|
|||||||
e.ornament_idfile = 0;
|
e.ornament_idfile = 0;
|
||||||
e.ornament_hero_model = 0;
|
e.ornament_hero_model = 0;
|
||||||
e.item_unique_id = "";
|
e.item_unique_id = "";
|
||||||
e.guid = 0;
|
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -205,7 +201,6 @@ public:
|
|||||||
e.ornament_idfile = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
e.ornament_idfile = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
||||||
e.ornament_hero_model = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.ornament_hero_model = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
e.item_unique_id = row[17] ? row[17] : "";
|
e.item_unique_id = row[17] ? row[17] : "";
|
||||||
e.guid = row[18] ? strtoull(row[18], nullptr, 10) : 0;
|
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
@ -257,7 +252,6 @@ public:
|
|||||||
v.push_back(columns[15] + " = " + std::to_string(e.ornament_idfile));
|
v.push_back(columns[15] + " = " + std::to_string(e.ornament_idfile));
|
||||||
v.push_back(columns[16] + " = " + std::to_string(e.ornament_hero_model));
|
v.push_back(columns[16] + " = " + std::to_string(e.ornament_hero_model));
|
||||||
v.push_back(columns[17] + " = '" + Strings::Escape(e.item_unique_id) + "'");
|
v.push_back(columns[17] + " = '" + Strings::Escape(e.item_unique_id) + "'");
|
||||||
v.push_back(columns[18] + " = " + std::to_string(e.guid));
|
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -297,7 +291,6 @@ public:
|
|||||||
v.push_back(std::to_string(e.ornament_idfile));
|
v.push_back(std::to_string(e.ornament_idfile));
|
||||||
v.push_back(std::to_string(e.ornament_hero_model));
|
v.push_back(std::to_string(e.ornament_hero_model));
|
||||||
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
||||||
v.push_back(std::to_string(e.guid));
|
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -345,7 +338,6 @@ public:
|
|||||||
v.push_back(std::to_string(e.ornament_idfile));
|
v.push_back(std::to_string(e.ornament_idfile));
|
||||||
v.push_back(std::to_string(e.ornament_hero_model));
|
v.push_back(std::to_string(e.ornament_hero_model));
|
||||||
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
||||||
v.push_back(std::to_string(e.guid));
|
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
@ -397,7 +389,6 @@ public:
|
|||||||
e.ornament_idfile = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
e.ornament_idfile = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
||||||
e.ornament_hero_model = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.ornament_hero_model = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
e.item_unique_id = row[17] ? row[17] : "";
|
e.item_unique_id = row[17] ? row[17] : "";
|
||||||
e.guid = row[18] ? strtoull(row[18], nullptr, 10) : 0;
|
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -440,7 +431,6 @@ public:
|
|||||||
e.ornament_idfile = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
e.ornament_idfile = row[15] ? static_cast<uint32_t>(strtoul(row[15], nullptr, 10)) : 0;
|
||||||
e.ornament_hero_model = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
e.ornament_hero_model = row[16] ? static_cast<int32_t>(atoi(row[16])) : 0;
|
||||||
e.item_unique_id = row[17] ? row[17] : "";
|
e.item_unique_id = row[17] ? row[17] : "";
|
||||||
e.guid = row[18] ? strtoull(row[18], nullptr, 10) : 0;
|
|
||||||
|
|
||||||
all_entries.push_back(e);
|
all_entries.push_back(e);
|
||||||
}
|
}
|
||||||
@ -533,7 +523,6 @@ public:
|
|||||||
v.push_back(std::to_string(e.ornament_idfile));
|
v.push_back(std::to_string(e.ornament_idfile));
|
||||||
v.push_back(std::to_string(e.ornament_hero_model));
|
v.push_back(std::to_string(e.ornament_hero_model));
|
||||||
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
||||||
v.push_back(std::to_string(e.guid));
|
|
||||||
|
|
||||||
auto results = db.QueryDatabase(
|
auto results = db.QueryDatabase(
|
||||||
fmt::format(
|
fmt::format(
|
||||||
@ -574,7 +563,6 @@ public:
|
|||||||
v.push_back(std::to_string(e.ornament_idfile));
|
v.push_back(std::to_string(e.ornament_idfile));
|
||||||
v.push_back(std::to_string(e.ornament_hero_model));
|
v.push_back(std::to_string(e.ornament_hero_model));
|
||||||
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
v.push_back("'" + Strings::Escape(e.item_unique_id) + "'");
|
||||||
v.push_back(std::to_string(e.guid));
|
|
||||||
|
|
||||||
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
insert_chunks.push_back("(" + Strings::Implode(",", v) + ")");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -245,6 +245,7 @@ public:
|
|||||||
s.ornament_idfile = i.ornament_idfile;
|
s.ornament_idfile = i.ornament_idfile;
|
||||||
s.slot_id = i.slot_id;
|
s.slot_id = i.slot_id;
|
||||||
s.time_index = time_index;
|
s.time_index = time_index;
|
||||||
|
s.item_unique_id = i.item_unique_id;
|
||||||
queue.push_back(s);
|
queue.push_back(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -264,8 +265,6 @@ public:
|
|||||||
|
|
||||||
static bool RestoreCharacterInvSnapshot(Database &db, uint32 character_id, uint32 timestamp)
|
static bool RestoreCharacterInvSnapshot(Database &db, uint32 character_id, uint32 timestamp)
|
||||||
{
|
{
|
||||||
InventoryRepository::DeleteWhere(db, fmt::format("`character_id` = {}", character_id));
|
|
||||||
|
|
||||||
auto snapshot = GetWhere(db, fmt::format("`character_id` = {} AND `time_index` = {}", character_id, timestamp));
|
auto snapshot = GetWhere(db, fmt::format("`character_id` = {} AND `time_index` = {}", character_id, timestamp));
|
||||||
if (snapshot.empty()) {
|
if (snapshot.empty()) {
|
||||||
LogError("The snapshot requested could not be found. Restore failed for character id [{}] @ [{}] failed",
|
LogError("The snapshot requested could not be found. Restore failed for character id [{}] @ [{}] failed",
|
||||||
@ -295,6 +294,7 @@ public:
|
|||||||
e.ornament_icon = i.ornament_icon;
|
e.ornament_icon = i.ornament_icon;
|
||||||
e.ornament_idfile = i.ornament_idfile;
|
e.ornament_idfile = i.ornament_idfile;
|
||||||
e.slot_id = i.slot_id;
|
e.slot_id = i.slot_id;
|
||||||
|
e.item_unique_id = i.item_unique_id;
|
||||||
queue.push_back(e);
|
queue.push_back(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -303,6 +303,8 @@ public:
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InventoryRepository::DeleteWhere(db, fmt::format("`character_id` = {}", character_id));
|
||||||
|
|
||||||
if (!InventoryRepository::InsertMany(db, queue)) {
|
if (!InventoryRepository::InsertMany(db, queue)) {
|
||||||
LogError("A database error occurred. Restore failed for character id [{}] @ [{}] failed", character_id, timestamp);
|
LogError("A database error occurred. Restore failed for character id [{}] @ [{}] failed", character_id, timestamp);
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@ -296,6 +296,7 @@ bool WorldBoot::DatabaseLoadRoutines(int argc, char **argv)
|
|||||||
LogInfo("Clearing buyer table details");
|
LogInfo("Clearing buyer table details");
|
||||||
|
|
||||||
database.ConvertInventoryToNewUniqueId();
|
database.ConvertInventoryToNewUniqueId();
|
||||||
|
database.ConvertSharedbankToNewUniqueId();
|
||||||
|
|
||||||
if (RuleB(Bots, Enabled)) {
|
if (RuleB(Bots, Enabled)) {
|
||||||
LogInfo("Clearing [bot_pet_buffs] table of stale entries");
|
LogInfo("Clearing [bot_pet_buffs] table of stale entries");
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user