Skip to content

Commit cfa8535

Browse files
committed
fix(database): Invalid connection
1 parent c3b271e commit cfa8535

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

src/database/Database.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
#include "Database.h"
22

3-
std::string Database::QueryEscape(const char *query)
3+
std::string Database::QueryEscape(const char* query)
44
{
5-
char *newQuery = new char[strlen(query) * 2 + 1];
5+
char* newQuery = new char[strlen(query) * 2 + 1];
66
mysql_real_escape_string(this->connection, newQuery, query, strlen(query));
77
std::string str(newQuery);
88
delete[] newQuery;
@@ -39,7 +39,7 @@ bool Database::Connect()
3939

4040
static constexpr int MYSQL_JSON = 245;
4141

42-
std::any ParseFieldType(enum_field_types type, const char *value)
42+
std::any ParseFieldType(enum_field_types type, const char* value)
4343
{
4444
if (type == enum_field_types::MYSQL_TYPE_FLOAT || type == enum_field_types::MYSQL_TYPE_DOUBLE || type == enum_field_types::MYSQL_TYPE_DECIMAL)
4545
return atof(value);
@@ -56,9 +56,12 @@ std::any ParseFieldType(enum_field_types type, const char *value)
5656
}
5757
}
5858

59-
std::vector<std::map<const char *, std::any>> Database::Query(const char *query)
59+
std::vector<std::map<const char*, std::any>> Database::Query(const char* query)
6060
{
61-
std::vector<std::map<const char *, std::any>> values;
61+
std::vector<std::map<const char*, std::any>> values;
62+
63+
if (!this->connected)
64+
return {};
6265

6366
if (mysql_ping(this->connection))
6467
{
@@ -72,10 +75,10 @@ std::vector<std::map<const char *, std::any>> Database::Query(const char *query)
7275
return {};
7376
}
7477

75-
MYSQL_RES *result = mysql_store_result(this->connection);
78+
MYSQL_RES* result = mysql_store_result(this->connection);
7679
if (result == nullptr)
7780
{
78-
std::map<const char *, std::any> value;
81+
std::map<const char*, std::any> value;
7982

8083
if (mysql_field_count(this->connection) == 0)
8184
{
@@ -94,9 +97,9 @@ std::vector<std::map<const char *, std::any>> Database::Query(const char *query)
9497
{
9598
uint32 num_fields = mysql_num_fields(result);
9699
MYSQL_ROW row;
97-
MYSQL_FIELD *field;
100+
MYSQL_FIELD* field;
98101

99-
std::vector<const char *> fields;
102+
std::vector<const char*> fields;
100103
std::vector<enum_field_types> fieldTypes;
101104
while ((field = mysql_fetch_field(result)))
102105
{
@@ -106,7 +109,7 @@ std::vector<std::map<const char *, std::any>> Database::Query(const char *query)
106109

107110
while ((row = mysql_fetch_row(result)))
108111
{
109-
std::map<const char *, std::any> value;
112+
std::map<const char*, std::any> value;
110113
for (uint32 i = 0; i < num_fields; i++)
111114
value.insert(std::make_pair(fields[i], row[i] ? ParseFieldType(fieldTypes[i], row[i]) : "NULL"));
112115

src/plugins/core/scripting/database.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,13 @@ void DatabaseQueryThread()
2828
{
2929
DatabaseQueryQueue queue = queryQueue.front();
3030

31+
if (!queue.db->IsConnected()) {
32+
queryQueue.pop_front();
33+
continue;
34+
}
35+
3136
RegisterCallStack* callStack = new RegisterCallStack(queue.plugin->GetName(), string_format("database::Query(database=%p, query=\"%s\")", (void*)queue.db, queue.query.c_str()));
37+
3238
auto queryResult = queue.db->Query(queue.query.c_str());
3339
if (queue.plugin->GetKind() == PluginKind_t::Lua)
3440
{

0 commit comments

Comments
 (0)