rename database classes

This commit is contained in:
T1ti
2025-09-19 21:37:39 +02:00
parent 8f0865cc83
commit 81af05eaaa
12 changed files with 92 additions and 54 deletions

View File

@@ -76,7 +76,7 @@
#include <noggit/tools/AreaTriggerTool.hpp>
#include <noggit/StringHash.hpp>
#include <noggit/application/NoggitApplication.hpp>
#include <noggit/sql/DatabaseManager.h>
#include <noggit/database/SqlDatabaseManager.h>
#include <QtCore/QSettings>
@@ -2471,7 +2471,7 @@ void MapView::createGUI()
// do we need to do this every tick ?
if (_settings->value("project/mysql/enabled").toBool())
{
auto& db_mgr = Noggit::Sql::DatabaseManager::instance();
auto& db_mgr = Noggit::Sql::SqlDatabaseManager::instance();
if (db_mgr.testConnection(Noggit::Sql::SQLDbType::Noggit))
{

View File

@@ -37,8 +37,7 @@ namespace Noggit
bool ClientDatabase::testUploadDBCtoDB(const BlizzardDatabaseLib::BlizzardDatabaseTable& table)
{
auto& db_mgr = Noggit::Sql::DatabaseManager::instance();
auto& db_mgr = Noggit::Sql::SqlDatabaseManager::instance();
bool valid_conn = db_mgr.testConnection(Noggit::Sql::SQLDbType::Noggit);
if (!valid_conn)
return false;
@@ -96,6 +95,7 @@ namespace Noggit
if (!table_is_valid)
{
Log << "Table " << sql_table_name.toStdString() << "does not exist or has wrong structure.";
qDebug() << "Table " << sql_table_name << "does not exist or has wrong structure.";
return false;
}
@@ -130,11 +130,7 @@ namespace Noggit
noggit_db.transaction();
// Disable constraints & indexes for faster bulk load
// query.exec("SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0");
// query.exec("SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0");
// query.exec("LOCK TABLES `" + sql_table_name + "` WRITE");
// query.exec("ALTER TABLE `" + sql_table_name + "` DISABLE KEYS");
// query.exec("SET UNIQUE_CHECKS=0;");
QStringList rowBuffer; // holds each row as a string
rowBuffer.reserve(batchSize);
@@ -143,7 +139,7 @@ namespace Noggit
{
auto& record = client_table_iterator.Next();
QStringList colValues;
colValues.reserve(column_names.size()); // reserve columns per row
colValues.reserve(column_names.size());
for (auto& column_def : row_definition.ColumnDefinitions)
{
@@ -195,7 +191,7 @@ namespace Noggit
if (!query.exec(sql))
{
qWarning() << "Batch insert failed:" << query.lastError().text();
// query.exec("UNLOCK TABLES");
// query.exec("SET UNIQUE_CHECKS=1;");
noggit_db.rollback();
return false;
}
@@ -218,16 +214,12 @@ namespace Noggit
if (!query.exec(sql))
{
qWarning() << "Final batch insert failed:" << query.lastError().text();
// query.exec("UNLOCK TABLES");
// query.exec("SET UNIQUE_CHECKS=1;");
noggit_db.rollback();
return false;
}
}
// query.exec("ALTER TABLE `" + sql_table_name + "` ENABLE KEYS");
// query.exec("UNLOCK TABLES");
// query.exec("SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS");
// query.exec("SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS");
// query.exec("SET UNIQUE_CHECKS=1;");
noggit_db.commit();
@@ -237,6 +229,10 @@ namespace Noggit
<< elapsedMs << "ms ("
<< (table.RecordCount() * 1000.0 / elapsedMs) << " rows/sec)";
Log << "Inserted " << table.RecordCount() << " rows in "
<< elapsedMs << "ms ("
<< (table.RecordCount() * 1000.0 / elapsedMs) << " rows/sec)" << std::endl;
return true;
}
@@ -253,7 +249,7 @@ namespace Noggit
// never use this function for more than 1 rows, implement a new bulk function
Structures::BlizzardDatabaseRow ClientDatabase::sqlRowById(const std::string& tableName, unsigned int id)
{
auto& db_mgr = Noggit::Sql::DatabaseManager::instance();
auto& db_mgr = Noggit::Sql::SqlDatabaseManager::instance();
// Test connection ?
auto noggit_db = db_mgr.noggitDatabase();
@@ -411,7 +407,7 @@ namespace Noggit
// statement += ")\n ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 DEFAULT COLLATE='utf8mb4_general_ci';";
statement += ")\n ENGINE = InnoDB;";
auto& db_mgr = Noggit::Sql::DatabaseManager::instance();
auto& db_mgr = Noggit::Sql::SqlDatabaseManager::instance();
bool valid_conn = db_mgr.testConnection(Noggit::Sql::SQLDbType::Noggit);
if (!valid_conn)
return false;
@@ -426,7 +422,7 @@ namespace Noggit
}
else
{
qDebug() << "Table " << table_name.c_str() << " created or already exists.";
qDebug() << "Table " << table_name.c_str() << " created.";
}
return success;

View File

@@ -2,7 +2,7 @@
#include <blizzard-database-library/include/BlizzardDatabase.h>
#include <blizzard-database-library/include/structures/FileStructures.h>
#include <noggit/sql/DatabaseManager.h>
#include <noggit/database/SqlDatabaseManager.h>
#include <optional>
@@ -27,6 +27,49 @@ namespace Noggit
bool isSigned = true;
};
// interface table that gets data either from sql or raw dbc
class ClientDatabaseTable
{
private:
const std::string _tableName;
public:
unsigned int RecordCount() const;
// column count from file header, not definition file
int ColumnCount() const
{
return static_cast<int>(_tableReader->FieldCount());
}
std::string Name() const
{
return _tableName;
}
Structures::BlizzardDatabaseRow RecordById(unsigned int id) const
{
return _tableReader->RecordById(id);
}
Structures::BlizzardDatabaseRow RecordByPosition(unsigned int positionId) const
{
return _tableReader->Record(positionId);
}
BlizzardDatabaseRecordCollection Records() const
{
return BlizzardDatabaseRecordCollection(_tableReader);
}
Structures::BlizzardDatabaseRowDefinition GetRecordDefinition() const
{
return _tableReader->RecordDefinition();
}
};
// calls client or server db adaptively. so /sql/ is not really a good location
class ClientDatabase
{

View File

@@ -33,16 +33,16 @@ namespace Noggit::Sql
QString password;
};
class DatabaseManager
class SqlDatabaseManager
{
public:
static DatabaseManager& instance()
static SqlDatabaseManager& instance()
{
static DatabaseManager _instance;
static SqlDatabaseManager _instance;
return _instance;
}
bool initializeDb(SQLDbType type,
bool initializeDbConnection(SQLDbType type,
const QString& host, int port,
const QString& dbName, const QString& user, const QString& password)
{
@@ -116,7 +116,7 @@ namespace Noggit::Sql
qWarning() << "No configuration for database type" << static_cast<int>(type);
}
QSqlDatabase db = database(type);
QSqlDatabase db = databaseConnection(type);
if (db.isValid() && db.isOpen())
return true;
@@ -170,9 +170,9 @@ namespace Noggit::Sql
// disable if connection is not valid
// settings.value("project/mysql/enabled") = false;
promptText << database(type).lastError().text().toStdString() << std::endl;
promptText << database(type).lastError().nativeErrorCode().toStdString() << std::endl;
promptText << database(type).lastError().databaseText().toStdString() << std::endl;
promptText << databaseConnection(type).lastError().text().toStdString() << std::endl;
promptText << databaseConnection(type).lastError().nativeErrorCode().toStdString() << std::endl;
promptText << databaseConnection(type).lastError().databaseText().toStdString() << std::endl;
prompt.setInformativeText(promptText.str().c_str());
prompt.exec();
@@ -187,26 +187,26 @@ namespace Noggit::Sql
return availableDrivers.contains(driverToString(_sql_driver), Qt::CaseInsensitive);
}
QSqlDatabase database(SQLDbType type) const
QSqlDatabase databaseConnection(SQLDbType type) const
{
return QSqlDatabase::database(connectionName(type));
}
QSqlDatabase noggitDatabase() const
{
return DatabaseManager::database(SQLDbType::Noggit);
return SqlDatabaseManager::databaseConnection(SQLDbType::Noggit);
}
QSqlDatabase worldDatabase() const
{
return DatabaseManager::database(SQLDbType::World);
return SqlDatabaseManager::databaseConnection(SQLDbType::World);
}
private:
DatabaseManager() = default;
~DatabaseManager() = default;
DatabaseManager(const DatabaseManager&) = delete;
DatabaseManager& operator=(const DatabaseManager&) = delete;
SqlDatabaseManager() = default;
~SqlDatabaseManager() = default;
SqlDatabaseManager(const SqlDatabaseManager&) = delete;
SqlDatabaseManager& operator=(const SqlDatabaseManager&) = delete;
SqlDriver _sql_driver = SqlDriver::MySQL;

View File

@@ -2,7 +2,7 @@
bool Noggit::Sql::SqlUIDStorage::hasMaxUIDStoredDB(std::size_t mapID)
{
auto& db_mgr = DatabaseManager::instance();
auto& db_mgr = SqlDatabaseManager::instance();
bool valid_conn = db_mgr.testConnection(SQLDbType::Noggit);
if (!valid_conn)
@@ -25,7 +25,7 @@ bool Noggit::Sql::SqlUIDStorage::hasMaxUIDStoredDB(std::size_t mapID)
std::uint32_t Noggit::Sql::SqlUIDStorage::getGUIDFromDB(std::size_t mapID)
{
auto& db_mgr = Sql::DatabaseManager::instance();
auto& db_mgr = Sql::SqlDatabaseManager::instance();
bool valid_conn = db_mgr.testConnection(SQLDbType::Noggit);
if (!valid_conn)
@@ -66,7 +66,7 @@ std::uint32_t Noggit::Sql::SqlUIDStorage::getGUIDFromDB(std::size_t mapID)
void Noggit::Sql::SqlUIDStorage::insertUIDinDB(std::size_t mapID, std::uint32_t NewUID)
{
auto& db_mgr = Sql::DatabaseManager::instance();
auto& db_mgr = Sql::SqlDatabaseManager::instance();
bool valid_conn = db_mgr.testConnection(SQLDbType::Noggit);
if (!valid_conn)
{
@@ -88,7 +88,7 @@ void Noggit::Sql::SqlUIDStorage::insertUIDinDB(std::size_t mapID, std::uint32_t
void Noggit::Sql::SqlUIDStorage::updateUIDinDB(std::size_t mapID, std::uint32_t NewUID)
{
auto& db_mgr = Sql::DatabaseManager::instance();
auto& db_mgr = Sql::SqlDatabaseManager::instance();
if (!db_mgr.testConnection(SQLDbType::Noggit))
return;

View File

@@ -1,5 +1,5 @@
#pragma once
#include <noggit/sql/DatabaseManager.h>
#include <noggit/database/SqlDatabaseManager.h>
namespace Noggit::Sql
{

View File

@@ -13,7 +13,7 @@
#include <noggit/uid_storage.hpp>
#include <noggit/application/NoggitApplication.hpp>
#include <ClientFile.hpp>
#include <noggit/sql/SqlUIDStorage.h>
#include <noggit/database/SqlUIDStorage.h>
#include <QtCore/QSettings>
#include <QByteArray>

View File

@@ -14,7 +14,7 @@
#include <noggit/World.h>
#include <blizzard-database-library/include/BlizzardDatabase.h>
#include <noggit/sql/ClientDatabase.h>
#include <noggit/database/ClientDatabase.h>
#include <QApplication>
#include <QButtonGroup>
@@ -649,7 +649,6 @@ void MapCreationWizard::selectMap(int map_id)
}
///////////////////////////////
_cur_map_id = map_id;
if (_world)

View File

@@ -21,8 +21,8 @@
#include <noggit/ui/windows/settingsPanel/SettingsPanel.h>
#include <noggit/uid_storage.hpp>
#include <noggit/World.h>
#include <noggit/sql/SqlUIDStorage.h>
#include <noggit/sql/ClientDatabase.h>
#include <noggit/database/SqlUIDStorage.h>
#include <noggit/database/ClientDatabase.h>
#include <string>
#include <blizzard-archive-library/include/Exception.hpp>
@@ -94,8 +94,8 @@ namespace Noggit::Ui::Windows
auto user = settings.value("project/mysql/user").toString();
auto pass = settings.value("project/mysql/pwd").toString();
auto& db_manager = Sql::DatabaseManager::instance();
db_manager.initializeDb(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
auto& db_manager = Sql::SqlDatabaseManager::instance();
db_manager.initializeDbConnection(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
}
setCentralWidget(_null_widget);

View File

@@ -3,7 +3,7 @@
#include <noggit/Log.h>
#include <noggit/ui/FramelessWindow.hpp>
#include <noggit/ui/windows/settingsPanel/SettingsPanel.h>
#include <noggit/sql/DatabaseManager.h>
#include <noggit/database/SqlDatabaseManager.h>
#include <QDir>
#include <QtCore/QSettings>
@@ -170,7 +170,7 @@ namespace Noggit
// save_changes(); // old method saved and only used qsetting
auto& db_manager = Sql::DatabaseManager::instance();
auto& db_manager = Sql::SqlDatabaseManager::instance();
if (!db_manager.isDriverAvailable())
{
@@ -201,7 +201,7 @@ namespace Noggit
int port = ui->_mysql_port_field->value();
// test temporary connection from text fields
bool test1 = db_manager.initializeDb(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
bool test1 = db_manager.initializeDbConnection(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
bool test2 = db_manager.testConnectionWithPopup(Sql::SQLDbType::Noggit, false);
// reconnect to saved db from settings
@@ -212,7 +212,7 @@ namespace Noggit
user = settings.value("project/mysql/user").toString();
pass = settings.value("project/mysql/pwd").toString();
bool test3 = db_manager.initializeDb(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
bool test3 = db_manager.initializeDbConnection(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
assert(db_manager.testConnection(Sql::SQLDbType::Noggit));
}
@@ -375,14 +375,14 @@ namespace Noggit
_settings->sync();
// reinitialize db on save
auto& db_manager = Sql::DatabaseManager::instance();
auto& db_manager = Sql::SqlDatabaseManager::instance();
QString host = _settings->value("project/mysql/server").toString();
int port = _settings->value("project/mysql/port", "3306").toInt();
QString db_name = _settings->value("project/mysql/db").toString();
QString user = _settings->value("project/mysql/user").toString();
QString pass = _settings->value("project/mysql/pwd").toString();
bool test1 = db_manager.initializeDb(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
bool test1 = db_manager.initializeDbConnection(Sql::SQLDbType::Noggit, host, port, db_name, user, pass);
bool test2 = db_manager.testConnectionWithPopup(Sql::SQLDbType::Noggit, true);