feat(cdclient): make a new CDServer.sqlite off-thread and swap tables in place

CDClientSnapshot converts a copy of the client's fdb into its own
CDServer-<hash>.sqlite with the cdserver migrations applied, on its own
connection. CDClientDatabase::Reconnect opens the new file before letting go
of the old one; CDClientManager::Reload empties every table (old entries kept
alive so references from spawned objects stay valid), retires the old fdb view
and loads again.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-29 22:50:20 -05:00
parent 1e0fc92f2e
commit 27a4564fec
13 changed files with 390 additions and 2 deletions

View File

@@ -1,8 +1,17 @@
#include "CDZoneTableTable.h"
#include <memory>
#include <vector>
namespace CDZoneTableTable {
Table entries;
void Reset() {
static std::vector<std::unique_ptr<Table>> retired;
retired.push_back(std::make_unique<Table>(std::move(entries)));
entries = {};
}
void LoadValuesFromDatabase() {
// Get the data from the database
auto tableData = CDClientDatabase::ExecuteQuery("SELECT * FROM ZoneTable");