#include "ObjectIDManager.h" // Custom Classes #include "Database.h" #include "dLogger.h" // Static Variables ObjectIDManager* ObjectIDManager::m_Address = nullptr; //! Initializes the manager void ObjectIDManager::Initialize(dLogger* logger) { this->mLogger = logger; this->currentPersistentID = 1; try { sql::PreparedStatement* stmt = Database::CreatePreppedStmt( "SELECT last_object_id FROM object_id_tracker"); sql::ResultSet* result = stmt->executeQuery(); auto next = result->next(); if (!next) { sql::PreparedStatement* insertStmt = Database::CreatePreppedStmt( "INSERT INTO object_id_tracker VALUES (1)"); insertStmt->execute(); delete insertStmt; return; } while (next) { this->currentPersistentID = result->getInt(1) > 0 ? result->getInt(1) : 1; next = result->next(); } delete result; delete stmt; } catch (sql::SQLException& e) { mLogger->Log("ObjectIDManager", "Unable to fetch max persistent object " "ID in use. Defaulting to 1."); mLogger->Log("ObjectIDManager", "SQL error: %s", e.what()); this->currentPersistentID = 1; } } //! Generates a new persistent ID uint32_t ObjectIDManager::GeneratePersistentID(void) { uint32_t toReturn = ++this->currentPersistentID; // So we peroidically save our ObjID to the database: if (toReturn % 25 == 0) { // TEMP: DISABLED FOR DEBUG / DEVELOPMENT! sql::PreparedStatement* stmt = Database::CreatePreppedStmt( "UPDATE object_id_tracker SET last_object_id=?"); stmt->setUInt(1, toReturn); stmt->execute(); delete stmt; } return toReturn; } void ObjectIDManager::SaveToDatabase() { sql::PreparedStatement* stmt = Database::CreatePreppedStmt( "UPDATE object_id_tracker SET last_object_id=?"); stmt->setUInt(1, currentPersistentID); stmt->execute(); delete stmt; }