2 #include <mysql/mysql.h>
12 std::lock_guard<std::mutex> guard(this->
_mutex);
14 std::string query =
"";
16 query +=
" `profileid`, `rank` ";
18 query +=
" `ClanRanks` ";
20 query +=
" `clanid` = ?";
22 int input_clanid = clan.GetClanId();
28 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(1,
sizeof(MYSQL_BIND));
29 input_bind[0].buffer_type = MYSQL_TYPE_LONG;
30 input_bind[0].buffer = &input_clanid;
31 input_bind[0].is_unsigned =
false;
34 MYSQL_BIND* output_bind = (MYSQL_BIND *)calloc(2,
sizeof(MYSQL_BIND));
35 output_bind[0].buffer_type = MYSQL_TYPE_LONG;
36 output_bind[0].buffer = &output_profileid;
37 output_bind[0].is_unsigned =
false;
38 output_bind[1].buffer_type = MYSQL_TYPE_TINY;
39 output_bind[1].buffer = &output_rank;
40 output_bind[1].is_unsigned =
true;
43 MYSQL_STMT* statement;
46 !this->
_init(&statement) ||
47 !this->
_prepare(statement, query, input_bind) ||
48 !this->
_execute(statement, output_bind)
60 int status = mysql_stmt_fetch(statement);
62 if (status == 1 || status == MYSQL_NO_DATA)
67 clan.AddRank(output_profileid, output_rank);
71 mysql_stmt_free_result(statement);
72 mysql_stmt_close(statement);
81 std::lock_guard<std::mutex> guard(this->
_mutex);
83 std::string query =
"";
84 query +=
"INSERT INTO `ClanRanks` ";
85 query +=
" (`clanid`, `profileid`, `rank`) ";
87 query +=
" (?, ?, ?)";
89 int input_clanid = clan.GetClanId();
90 int input_profileid = player.GetProfileId();
91 uint8_t input_rank =
static_cast<uint8_t
>(rank);
94 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(3,
sizeof(MYSQL_BIND));
95 input_bind[0].buffer_type = MYSQL_TYPE_LONG;
96 input_bind[0].buffer = &input_clanid;
97 input_bind[0].is_unsigned =
false;
98 input_bind[1].buffer_type = MYSQL_TYPE_LONG;
99 input_bind[1].buffer = &input_profileid;
100 input_bind[1].is_unsigned =
false;
101 input_bind[2].buffer_type = MYSQL_TYPE_TINY;
102 input_bind[2].buffer = &input_rank;
103 input_bind[2].is_unsigned =
true;
106 MYSQL_STMT* statement;
109 !this->
_init(&statement) ||
110 !this->
_prepare(statement, query, input_bind) ||
121 mysql_stmt_free_result(statement);
122 mysql_stmt_close(statement);
130 std::lock_guard<std::mutex> guard(this->
_mutex);
132 std::string query =
"";
134 query +=
" `ClanRanks` ";
136 query +=
" `rank` = ? ";
138 query +=
" `clanid` = ? ";
140 query +=
" `profileid` = ?";
142 uint8_t input_rank =
static_cast<uint8_t
>(rank);
143 int input_clanid = clan.GetClanId();
144 int input_profileid = player.GetProfileId();
147 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(3,
sizeof(MYSQL_BIND));
148 input_bind[0].buffer_type = MYSQL_TYPE_TINY;
149 input_bind[0].buffer = &input_rank;
150 input_bind[0].is_unsigned =
true;
151 input_bind[1].buffer_type = MYSQL_TYPE_LONG;
152 input_bind[1].buffer = &input_clanid;
153 input_bind[1].is_unsigned =
false;
154 input_bind[2].buffer_type = MYSQL_TYPE_LONG;
155 input_bind[2].buffer = &input_profileid;
156 input_bind[2].is_unsigned =
false;
159 MYSQL_STMT* statement;
162 !this->
_init(&statement) ||
163 !this->
_prepare(statement, query, input_bind) ||
174 mysql_stmt_free_result(statement);
175 mysql_stmt_close(statement);
183 std::lock_guard<std::mutex> guard(this->
_mutex);
185 std::string query =
"";
186 query +=
"DELETE FROM ";
187 query +=
" `ClanRanks` ";
189 query +=
" `clanid` = ? ";
191 query +=
" `profileid` = ?";
193 int input_clanid = clan.GetClanId();
194 int input_profileid = player.GetProfileId();
197 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(2,
sizeof(MYSQL_BIND));
198 input_bind[0].buffer_type = MYSQL_TYPE_LONG;
199 input_bind[0].buffer = &input_clanid;
200 input_bind[0].is_unsigned =
false;
201 input_bind[1].buffer_type = MYSQL_TYPE_LONG;
202 input_bind[1].buffer = &input_profileid;
203 input_bind[1].is_unsigned =
false;
206 MYSQL_STMT* statement;
209 !this->
_init(&statement) ||
210 !this->
_prepare(statement, query, input_bind) ||
221 mysql_stmt_free_result(statement);
222 mysql_stmt_close(statement);
230 std::lock_guard<std::mutex> guard(this->
_mutex);
232 std::string query =
"";
233 query +=
"DELETE FROM ";
234 query +=
" `ClanRanks` ";
236 query +=
" `clanid` = ?";
238 int input_clanid = clan.GetClanId();
241 MYSQL_BIND* input_bind = (MYSQL_BIND *)calloc(1,
sizeof(MYSQL_BIND));
242 input_bind[0].buffer_type = MYSQL_TYPE_LONG;
243 input_bind[0].buffer = &input_clanid;
244 input_bind[0].is_unsigned =
false;
247 MYSQL_STMT* statement;
250 !this->
_init(&statement) ||
251 !this->
_prepare(statement, query, input_bind) ||
262 mysql_stmt_free_result(statement);
263 mysql_stmt_close(statement);
Represents a clan in the Battlefield game.
Ranks
Represents the ranks within a clan.
Represents a player with extended statistics.
bool removeClanRank(const Battlefield::Clan &clan, const Battlefield::Player &player)
Removes the rank of a player within a clan from the database.
bool _prepare(MYSQL_STMT *statement, const std::string &query)
Prepares a MySQL statement with a query.
bool updateClanRank(const Battlefield::Clan &clan, const Battlefield::Player &player, Battlefield::Clan::Ranks rank)
Updates the rank of a player within a clan in the database.
bool _init(MYSQL_STMT **statement)
Initializes a MySQL statement object.
bool removeClanRanksByClanId(const Battlefield::Clan &clan)
Removes all ranks associated with a clan from the database.
bool queryClanRanksByClanId(Battlefield::Clan &clan)
Queries the ranks of a clan by its clan ID.
bool _execute(MYSQL_STMT *statement)
Executes a prepared MySQL statement.
bool insertClanRank(const Battlefield::Clan &clan, const Battlefield::Player &player, Battlefield::Clan::Ranks rank)
Inserts a rank for a player within a clan into the database.
std::mutex _mutex
Mutex for thread-safe access to the database connection.