1#include "connection.h"
2
3#include <base/str.h>
4
5IDbConnection::IDbConnection(const char *pPrefix)
6{
7 str_copy(dst&: m_aPrefix, src: pPrefix);
8}
9
10std::optional<float> IDbConnection::GetOptionalFloat(int Col)
11{
12 if(IsNull(Col))
13 return std::nullopt;
14 return GetInt(Col);
15}
16
17std::optional<int> IDbConnection::GetOptionalInt(int Col)
18{
19 if(IsNull(Col))
20 return std::nullopt;
21 return GetInt(Col);
22}
23
24std::optional<int64_t> IDbConnection::GetOptionalInt64(int Col)
25{
26 if(IsNull(Col))
27 return std::nullopt;
28 return GetInt64(Col);
29}
30
31void IDbConnection::FormatCreateRace(char *aBuf, unsigned int BufferSize, bool Backup) const
32{
33 str_format(buffer: aBuf, buffer_size: BufferSize,
34 format: "CREATE TABLE IF NOT EXISTS %s_race%s ("
35 " Map VARCHAR(128) COLLATE %s NOT NULL, "
36 " Name VARCHAR(%d) COLLATE %s NOT NULL, "
37 " Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, "
38 " Time FLOAT DEFAULT 0, "
39 " Server CHAR(4), "
40 " cp1 FLOAT DEFAULT 0, cp2 FLOAT DEFAULT 0, cp3 FLOAT DEFAULT 0, "
41 " cp4 FLOAT DEFAULT 0, cp5 FLOAT DEFAULT 0, cp6 FLOAT DEFAULT 0, "
42 " cp7 FLOAT DEFAULT 0, cp8 FLOAT DEFAULT 0, cp9 FLOAT DEFAULT 0, "
43 " cp10 FLOAT DEFAULT 0, cp11 FLOAT DEFAULT 0, cp12 FLOAT DEFAULT 0, "
44 " cp13 FLOAT DEFAULT 0, cp14 FLOAT DEFAULT 0, cp15 FLOAT DEFAULT 0, "
45 " cp16 FLOAT DEFAULT 0, cp17 FLOAT DEFAULT 0, cp18 FLOAT DEFAULT 0, "
46 " cp19 FLOAT DEFAULT 0, cp20 FLOAT DEFAULT 0, cp21 FLOAT DEFAULT 0, "
47 " cp22 FLOAT DEFAULT 0, cp23 FLOAT DEFAULT 0, cp24 FLOAT DEFAULT 0, "
48 " cp25 FLOAT DEFAULT 0, "
49 " GameId VARCHAR(64), "
50 " DDNet7 BOOL DEFAULT FALSE, "
51 " PRIMARY KEY (Map, Name, Time, Timestamp, Server)"
52 ")",
53 GetPrefix(), Backup ? "_backup" : "",
54 BinaryCollate(), MAX_NAME_LENGTH_SQL, BinaryCollate());
55}
56
57void IDbConnection::FormatCreateTeamrace(char *aBuf, unsigned int BufferSize, const char *pIdType, bool Backup) const
58{
59 str_format(buffer: aBuf, buffer_size: BufferSize,
60 format: "CREATE TABLE IF NOT EXISTS %s_teamrace%s ("
61 " Map VARCHAR(128) COLLATE %s NOT NULL, "
62 " Name VARCHAR(%d) COLLATE %s NOT NULL, "
63 " Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, "
64 " Time FLOAT DEFAULT 0, "
65 " ID %s NOT NULL, " // VARBINARY(16) for MySQL and BLOB for SQLite
66 " GameId VARCHAR(64), "
67 " DDNet7 BOOL DEFAULT FALSE, "
68 " PRIMARY KEY (Id, Name)"
69 ")",
70 GetPrefix(), Backup ? "_backup" : "",
71 BinaryCollate(), MAX_NAME_LENGTH_SQL, BinaryCollate(), pIdType);
72}
73
74void IDbConnection::FormatCreateMaps(char *aBuf, unsigned int BufferSize) const
75{
76 str_format(buffer: aBuf, buffer_size: BufferSize,
77 format: "CREATE TABLE IF NOT EXISTS %s_maps ("
78 " Map VARCHAR(128) COLLATE %s NOT NULL, "
79 " Server VARCHAR(32) COLLATE %s NOT NULL, "
80 " Mapper VARCHAR(128) COLLATE %s NOT NULL, "
81 " Points INT DEFAULT 0, "
82 " Stars INT DEFAULT 0, "
83 " Timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, "
84 " PRIMARY KEY (Map)"
85 ")",
86 GetPrefix(), BinaryCollate(), BinaryCollate(), BinaryCollate());
87}
88
89void IDbConnection::FormatCreateSaves(char *aBuf, unsigned int BufferSize, bool Backup) const
90{
91 str_format(buffer: aBuf, buffer_size: BufferSize,
92 format: "CREATE TABLE IF NOT EXISTS %s_saves%s ("
93 " Savegame TEXT COLLATE %s NOT NULL, "
94 " Map VARCHAR(128) COLLATE %s NOT NULL, "
95 " Code VARCHAR(128) COLLATE %s NOT NULL, "
96 " Timestamp TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, "
97 " Server CHAR(4), "
98 " DDNet7 BOOL DEFAULT FALSE, "
99 " SaveId VARCHAR(36) DEFAULT NULL, "
100 " PRIMARY KEY (Map, Code)"
101 ")",
102 GetPrefix(), Backup ? "_backup" : "",
103 BinaryCollate(), BinaryCollate(), BinaryCollate());
104}
105
106void IDbConnection::FormatCreatePoints(char *aBuf, unsigned int BufferSize) const
107{
108 str_format(buffer: aBuf, buffer_size: BufferSize,
109 format: "CREATE TABLE IF NOT EXISTS %s_points ("
110 " Name VARCHAR(%d) COLLATE %s NOT NULL, "
111 " Points INT DEFAULT 0, "
112 " PRIMARY KEY (Name)"
113 ")",
114 GetPrefix(), MAX_NAME_LENGTH_SQL, BinaryCollate());
115}
116