Move format string to CREATE TABLE into own file

This commit is contained in:
Zwelf 2020-07-09 19:02:28 +02:00
parent 2c5f892205
commit 452017a58b
5 changed files with 105 additions and 72 deletions

View file

@ -1844,6 +1844,7 @@ set_src(ENGINE_SERVER GLOB_RECURSE src/engine/server
antibot.h antibot.h
authmanager.cpp authmanager.cpp
authmanager.h authmanager.h
databases/connection.cpp
databases/connection.h databases/connection.h
databases/connection_pool.cpp databases/connection_pool.cpp
databases/connection_pool.h databases/connection_pool.h

View file

@ -0,0 +1,86 @@
#include "connection.h"
#include <engine/shared/protocol.h>
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);
}

View file

@ -54,67 +54,15 @@ public:
// returns number of bytes read into the buffer // returns number of bytes read into the buffer
virtual int GetBlob(int Col, unsigned char *pBuffer, int BufferSize) const = 0; virtual int GetBlob(int Col, unsigned char *pBuffer, int BufferSize) const = 0;
protected: private:
char m_aPrefix[64]; char m_aPrefix[64];
static constexpr const char *m_pCreateRace = protected:
"CREATE TABLE IF NOT EXISTS %s_race (" void FormatCreateRace(char *aBuf, unsigned int BufferSize);
"Map VARCHAR(128) BINARY NOT NULL, " void FormatCreateTeamrace(char *aBuf, unsigned int BufferSize);
"Name VARCHAR(%d) BINARY NOT NULL, " void FormatCreateMaps(char *aBuf, unsigned int BufferSize);
"Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, " void FormatCreateSaves(char *aBuf, unsigned int BufferSize);
"Time FLOAT DEFAULT 0, " void FormatCreatePoints(char *aBuf, unsigned int BufferSize);
"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;";
}; };
#endif // ENGINE_SERVER_DATABASES_CONNECTION_H #endif // ENGINE_SERVER_DATABASES_CONNECTION_H

View file

@ -2,7 +2,6 @@
#if defined(CONF_SQL) #if defined(CONF_SQL)
#include <cppconn/driver.h> #include <cppconn/driver.h>
#include <engine/shared/protocol.h>
#endif #endif
lock CMysqlConnection::m_SqlDriverLock; lock CMysqlConnection::m_SqlDriverLock;
@ -39,7 +38,7 @@ CMysqlConnection::~CMysqlConnection()
CMysqlConnection *CMysqlConnection::Copy() 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() IDbConnection::Status CMysqlConnection::Connect()
@ -118,15 +117,15 @@ IDbConnection::Status CMysqlConnection::Connect()
m_pStmt->execute(aBuf); m_pStmt->execute(aBuf);
// Connect to specific database // Connect to specific database
m_pConnection->setSchema(m_aDatabase); m_pConnection->setSchema(m_aDatabase);
str_format(aBuf, sizeof(aBuf), m_pCreateRace, GetPrefix(), MAX_NAME_LENGTH); FormatCreateRace(aBuf, sizeof(aBuf));
m_pStmt->execute(aBuf); m_pStmt->execute(aBuf);
str_format(aBuf, sizeof(aBuf), m_pCreateTeamrace, GetPrefix(), MAX_NAME_LENGTH); FormatCreateTeamrace(aBuf, sizeof(aBuf));
m_pStmt->execute(aBuf); m_pStmt->execute(aBuf);
str_format(aBuf, sizeof(aBuf), m_pCreateMaps, GetPrefix()); FormatCreateMaps(aBuf, sizeof(aBuf));
m_pStmt->execute(aBuf); m_pStmt->execute(aBuf);
str_format(aBuf, sizeof(aBuf), m_pCreateSaves, GetPrefix()); FormatCreateSaves(aBuf, sizeof(aBuf));
m_pStmt->execute(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_pStmt->execute(aBuf);
m_Setup = false; m_Setup = false;
} }

View file

@ -1,7 +1,6 @@
#include "sqlite.h" #include "sqlite.h"
#include <base/math.h> #include <base/math.h>
#include <engine/shared/protocol.h>
#include <stdexcept> #include <stdexcept>
#include <sqlite3.h> #include <sqlite3.h>
@ -51,19 +50,19 @@ IDbConnection::Status CSqliteConnection::Connect()
if(m_Setup) if(m_Setup)
{ {
char aBuf[1024]; char aBuf[1024];
str_format(aBuf, sizeof(aBuf), m_pCreateRace, GetPrefix(), MAX_NAME_LENGTH); FormatCreateRace(aBuf, sizeof(aBuf));
if(!Execute(aBuf)) if(!Execute(aBuf))
return Status::ERROR; return Status::ERROR;
str_format(aBuf, sizeof(aBuf), m_pCreateTeamrace, GetPrefix(), MAX_NAME_LENGTH); FormatCreateTeamrace(aBuf, sizeof(aBuf));
if(!Execute(aBuf)) if(!Execute(aBuf))
return Status::ERROR; return Status::ERROR;
str_format(aBuf, sizeof(aBuf), m_pCreateMaps, GetPrefix()); FormatCreateMaps(aBuf, sizeof(aBuf));
if(!Execute(aBuf)) if(!Execute(aBuf))
return Status::ERROR; return Status::ERROR;
str_format(aBuf, sizeof(aBuf), m_pCreateSaves, GetPrefix()); FormatCreateSaves(aBuf, sizeof(aBuf));
if(!Execute(aBuf)) if(!Execute(aBuf))
return Status::ERROR; return Status::ERROR;
str_format(aBuf, sizeof(aBuf), m_pCreatePoints, GetPrefix(), MAX_NAME_LENGTH); FormatCreatePoints(aBuf, sizeof(aBuf));
if(!Execute(aBuf)) if(!Execute(aBuf))
return Status::ERROR; return Status::ERROR;
m_Setup = false; m_Setup = false;