diff --git a/CMakeLists.txt b/CMakeLists.txt index 50a5960ac..91085269e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1844,6 +1844,7 @@ set_src(ENGINE_SERVER GLOB_RECURSE src/engine/server antibot.h authmanager.cpp authmanager.h + databases/connection.cpp databases/connection.h databases/connection_pool.cpp databases/connection_pool.h diff --git a/src/engine/server/databases/connection.cpp b/src/engine/server/databases/connection.cpp new file mode 100644 index 000000000..80eb923a2 --- /dev/null +++ b/src/engine/server/databases/connection.cpp @@ -0,0 +1,86 @@ +#include "connection.h" + +#include + +void IDbConnection::FormatCreateRace(char *aBuf, unsigned int BufferSize) +{ + str_format(aBuf, BufferSize, + "CREATE TABLE IF NOT EXISTS %s_race (" + "Map VARCHAR(128) BINARY NOT NULL, " + "Name VARCHAR(%d) BINARY NOT NULL, " + "Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " + "Time FLOAT DEFAULT 0, " + "Server CHAR(4), " + "cp1 FLOAT DEFAULT 0, cp2 FLOAT DEFAULT 0, cp3 FLOAT DEFAULT 0, " + "cp4 FLOAT DEFAULT 0, cp5 FLOAT DEFAULT 0, cp6 FLOAT DEFAULT 0, " + "cp7 FLOAT DEFAULT 0, cp8 FLOAT DEFAULT 0, cp9 FLOAT DEFAULT 0, " + "cp10 FLOAT DEFAULT 0, cp11 FLOAT DEFAULT 0, cp12 FLOAT DEFAULT 0, " + "cp13 FLOAT DEFAULT 0, cp14 FLOAT DEFAULT 0, cp15 FLOAT DEFAULT 0, " + "cp16 FLOAT DEFAULT 0, cp17 FLOAT DEFAULT 0, cp18 FLOAT DEFAULT 0, " + "cp19 FLOAT DEFAULT 0, cp20 FLOAT DEFAULT 0, cp21 FLOAT DEFAULT 0, " + "cp22 FLOAT DEFAULT 0, cp23 FLOAT DEFAULT 0, cp24 FLOAT DEFAULT 0, " + "cp25 FLOAT DEFAULT 0, " + "GameID VARCHAR(64), " + "DDNet7 BOOL DEFAULT FALSE, " + "KEY (Map, Name)" + ") CHARACTER SET utf8mb4;", + GetPrefix(), MAX_NAME_LENGTH); +} + +void IDbConnection::FormatCreateTeamrace(char *aBuf, unsigned int BufferSize) +{ + str_format(aBuf, BufferSize, + "CREATE TABLE IF NOT EXISTS %s_teamrace (" + "Map VARCHAR(128) BINARY NOT NULL, " + "Name VARCHAR(%d) BINARY NOT NULL, " + "Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " + "Time FLOAT DEFAULT 0, " + "ID VARBINARY(16) NOT NULL, " + "GameID VARCHAR(64), " + "DDNet7 BOOL DEFAULT FALSE, " + "KEY Map (Map)" + ") CHARACTER SET utf8mb4;", + GetPrefix(), MAX_NAME_LENGTH); +} + +void IDbConnection::FormatCreateMaps(char *aBuf, unsigned int BufferSize) +{ + str_format(aBuf, BufferSize, + "CREATE TABLE IF NOT EXISTS %s_maps (" + "Map VARCHAR(128) BINARY NOT NULL, " + "Server VARCHAR(32) BINARY NOT NULL, " + "Mapper VARCHAR(128) BINARY NOT NULL, " + "Points INT DEFAULT 0, " + "Stars INT DEFAULT 0, " + "Timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " + "UNIQUE KEY Map (Map)" + ") CHARACTER SET utf8mb4;", + GetPrefix()); +} + +void IDbConnection::FormatCreateSaves(char *aBuf, unsigned int BufferSize) +{ + str_format(aBuf, BufferSize, + "CREATE TABLE IF NOT EXISTS %s_saves (" + "Savegame TEXT CHARACTER SET utf8mb4 BINARY NOT NULL, " + "Map VARCHAR(128) BINARY NOT NULL, " + "Code VARCHAR(128) BINARY NOT NULL, " + "Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " + "Server CHAR(4), " + "DDNet7 BOOL DEFAULT FALSE, " + "SaveID VARCHAR(36) DEFAULT NULL, " + "UNIQUE KEY (Map, Code)" + ") CHARACTER SET utf8mb4;", + GetPrefix()); +} + +void IDbConnection::FormatCreatePoints(char *aBuf, unsigned int BufferSize) +{ + str_format(aBuf, BufferSize, + "CREATE TABLE IF NOT EXISTS %s_points (" + "Name VARCHAR(%d) BINARY NOT NULL, " + "Points INT DEFAULT 0, " + "UNIQUE KEY Name (Name)" + ") CHARACTER SET utf8mb4;", + GetPrefix(), MAX_NAME_LENGTH); +} diff --git a/src/engine/server/databases/connection.h b/src/engine/server/databases/connection.h index 0d67e5f65..c58d03c95 100644 --- a/src/engine/server/databases/connection.h +++ b/src/engine/server/databases/connection.h @@ -54,67 +54,15 @@ public: // returns number of bytes read into the buffer virtual int GetBlob(int Col, unsigned char *pBuffer, int BufferSize) const = 0; -protected: +private: char m_aPrefix[64]; - static constexpr const char *m_pCreateRace = - "CREATE TABLE IF NOT EXISTS %s_race (" - "Map VARCHAR(128) BINARY NOT NULL, " - "Name VARCHAR(%d) BINARY NOT NULL, " - "Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " - "Time FLOAT DEFAULT 0, " - "Server CHAR(4), " - "cp1 FLOAT DEFAULT 0, cp2 FLOAT DEFAULT 0, cp3 FLOAT DEFAULT 0, " - "cp4 FLOAT DEFAULT 0, cp5 FLOAT DEFAULT 0, cp6 FLOAT DEFAULT 0, " - "cp7 FLOAT DEFAULT 0, cp8 FLOAT DEFAULT 0, cp9 FLOAT DEFAULT 0, " - "cp10 FLOAT DEFAULT 0, cp11 FLOAT DEFAULT 0, cp12 FLOAT DEFAULT 0, " - "cp13 FLOAT DEFAULT 0, cp14 FLOAT DEFAULT 0, cp15 FLOAT DEFAULT 0, " - "cp16 FLOAT DEFAULT 0, cp17 FLOAT DEFAULT 0, cp18 FLOAT DEFAULT 0, " - "cp19 FLOAT DEFAULT 0, cp20 FLOAT DEFAULT 0, cp21 FLOAT DEFAULT 0, " - "cp22 FLOAT DEFAULT 0, cp23 FLOAT DEFAULT 0, cp24 FLOAT DEFAULT 0, " - "cp25 FLOAT DEFAULT 0, " - "GameID VARCHAR(64), " - "DDNet7 BOOL DEFAULT FALSE, " - "KEY (Map, Name)" - ") CHARACTER SET utf8mb4;"; - static constexpr const char *m_pCreateTeamrace = - "CREATE TABLE IF NOT EXISTS %s_teamrace (" - "Map VARCHAR(128) BINARY NOT NULL, " - "Name VARCHAR(%d) BINARY NOT NULL, " - "Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " - "Time FLOAT DEFAULT 0, " - "ID VARBINARY(16) NOT NULL, " - "GameID VARCHAR(64), " - "DDNet7 BOOL DEFAULT FALSE, " - "KEY Map (Map)" - ") CHARACTER SET utf8mb4;"; - static constexpr const char *m_pCreateMaps = - "CREATE TABLE IF NOT EXISTS %s_maps (" - "Map VARCHAR(128) BINARY NOT NULL, " - "Server VARCHAR(32) BINARY NOT NULL, " - "Mapper VARCHAR(128) BINARY NOT NULL, " - "Points INT DEFAULT 0, " - "Stars INT DEFAULT 0, " - "Timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, " - "UNIQUE KEY Map (Map)" - ") CHARACTER SET utf8mb4;"; - static constexpr const char *m_pCreateSaves = - "CREATE TABLE IF NOT EXISTS %s_saves (" - "Savegame TEXT CHARACTER SET utf8mb4 BINARY NOT NULL, " - "Map VARCHAR(128) BINARY NOT NULL, " - "Code VARCHAR(128) BINARY NOT NULL, " - "Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " - "Server CHAR(4), " - "DDNet7 BOOL DEFAULT FALSE, " - "SaveID VARCHAR(36) DEFAULT NULL, " - "UNIQUE KEY (Map, Code)" - ") CHARACTER SET utf8mb4;"; - static constexpr const char *m_pCreatePoints = - "CREATE TABLE IF NOT EXISTS %s_points (" - "Name VARCHAR(%d) BINARY NOT NULL, " - "Points INT DEFAULT 0, " - "UNIQUE KEY Name (Name)" - ") CHARACTER SET utf8mb4;"; +protected: + void FormatCreateRace(char *aBuf, unsigned int BufferSize); + void FormatCreateTeamrace(char *aBuf, unsigned int BufferSize); + void FormatCreateMaps(char *aBuf, unsigned int BufferSize); + void FormatCreateSaves(char *aBuf, unsigned int BufferSize); + void FormatCreatePoints(char *aBuf, unsigned int BufferSize); }; #endif // ENGINE_SERVER_DATABASES_CONNECTION_H diff --git a/src/engine/server/databases/mysql.cpp b/src/engine/server/databases/mysql.cpp index d4e3c0f43..b86530e5f 100644 --- a/src/engine/server/databases/mysql.cpp +++ b/src/engine/server/databases/mysql.cpp @@ -2,7 +2,6 @@ #if defined(CONF_SQL) #include -#include #endif lock CMysqlConnection::m_SqlDriverLock; @@ -39,7 +38,7 @@ CMysqlConnection::~CMysqlConnection() CMysqlConnection *CMysqlConnection::Copy() { - return new CMysqlConnection(m_aDatabase, m_aPrefix, m_aUser, m_aPass, m_aIp, m_Port, m_Setup); + return new CMysqlConnection(m_aDatabase, GetPrefix(), m_aUser, m_aPass, m_aIp, m_Port, m_Setup); } IDbConnection::Status CMysqlConnection::Connect() @@ -118,15 +117,15 @@ IDbConnection::Status CMysqlConnection::Connect() m_pStmt->execute(aBuf); // Connect to specific database m_pConnection->setSchema(m_aDatabase); - str_format(aBuf, sizeof(aBuf), m_pCreateRace, GetPrefix(), MAX_NAME_LENGTH); + FormatCreateRace(aBuf, sizeof(aBuf)); m_pStmt->execute(aBuf); - str_format(aBuf, sizeof(aBuf), m_pCreateTeamrace, GetPrefix(), MAX_NAME_LENGTH); + FormatCreateTeamrace(aBuf, sizeof(aBuf)); m_pStmt->execute(aBuf); - str_format(aBuf, sizeof(aBuf), m_pCreateMaps, GetPrefix()); + FormatCreateMaps(aBuf, sizeof(aBuf)); m_pStmt->execute(aBuf); - str_format(aBuf, sizeof(aBuf), m_pCreateSaves, GetPrefix()); + FormatCreateSaves(aBuf, sizeof(aBuf)); m_pStmt->execute(aBuf); - str_format(aBuf, sizeof(aBuf), m_pCreatePoints, GetPrefix(), MAX_NAME_LENGTH); + FormatCreatePoints(aBuf, sizeof(aBuf)); m_pStmt->execute(aBuf); m_Setup = false; } diff --git a/src/engine/server/databases/sqlite.cpp b/src/engine/server/databases/sqlite.cpp index 2d7105c22..007bb60d8 100644 --- a/src/engine/server/databases/sqlite.cpp +++ b/src/engine/server/databases/sqlite.cpp @@ -1,7 +1,6 @@ #include "sqlite.h" #include -#include #include #include @@ -51,19 +50,19 @@ IDbConnection::Status CSqliteConnection::Connect() if(m_Setup) { char aBuf[1024]; - str_format(aBuf, sizeof(aBuf), m_pCreateRace, GetPrefix(), MAX_NAME_LENGTH); + FormatCreateRace(aBuf, sizeof(aBuf)); if(!Execute(aBuf)) return Status::ERROR; - str_format(aBuf, sizeof(aBuf), m_pCreateTeamrace, GetPrefix(), MAX_NAME_LENGTH); + FormatCreateTeamrace(aBuf, sizeof(aBuf)); if(!Execute(aBuf)) return Status::ERROR; - str_format(aBuf, sizeof(aBuf), m_pCreateMaps, GetPrefix()); + FormatCreateMaps(aBuf, sizeof(aBuf)); if(!Execute(aBuf)) return Status::ERROR; - str_format(aBuf, sizeof(aBuf), m_pCreateSaves, GetPrefix()); + FormatCreateSaves(aBuf, sizeof(aBuf)); if(!Execute(aBuf)) return Status::ERROR; - str_format(aBuf, sizeof(aBuf), m_pCreatePoints, GetPrefix(), MAX_NAME_LENGTH); + FormatCreatePoints(aBuf, sizeof(aBuf)); if(!Execute(aBuf)) return Status::ERROR; m_Setup = false;