Skip to content

Commit 9e606be

Browse files
committed
feat(database): GetCredentials & GetKind
1 parent c8786c1 commit 9e606be

File tree

5 files changed

+65
-15
lines changed

5 files changed

+65
-15
lines changed

generators/docsgen/functions/GenerateClassConstructor.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ ${lang == "cs" ? `using SwiftlyS2.API.${category.category.includes("sdk") ? cate
1313
if (lang == "cs") {
1414
let cls = category.data.title.split(" ").join("")
1515

16-
outString += `var ${pageContent.name.toLowerCase()} = new ${cls}.${pageContent.name}`
16+
outString += `var ${pageContent.name.toLowerCase()} = new ${pageContent.override_class ? pageContent.override_class["cs"] : `${cls}.${pageContent.name}`}`
1717
} else if (lang == "lua") {
1818
if (pageContent.override_variable) v = ""
1919
outString += `local ${pageContent.name.toLowerCase()} = ${v}${v == "" ? "" : ":"}${pageContent.name}`

generators/documentation/docs/database/database.json

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
{
22
"kind": "class",
33
"name": "Database",
4+
"override_class": {
5+
"lua": "Database",
6+
"cs": "Database.DB"
7+
},
48
"description": "This is the Database class.",
59
"constructor": {
610
"arguments": {
7-
"connection_name": "string"
11+
"connection_name": "string",
12+
"skip_default_connection": "bool?"
813
},
914
"return": "Database"
1015
},
@@ -58,6 +63,16 @@
5863
}
5964
},
6065
"return": "void"
66+
},
67+
{
68+
"name": "GetCredentials",
69+
"arguments": {},
70+
"return": "string:string"
71+
},
72+
{
73+
"name": "GetKind",
74+
"arguments": {},
75+
"return": "string"
6176
}
6277
]
6378
}

src/network/database/DatabaseManager.cpp

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,16 @@ void DatabaseManager::LoadDatabases()
6060
}
6161

6262
if (!db) {
63-
PLUGIN_PRINTF("Database", "Invalid database kind for \"%s\": %s.\n", connectionName, connection_details["kind"].c_str());
64-
continue;
63+
PLUGIN_PRINTF("Database", "Database kind %s used by \"%s\" doesn't have an extension. It will be registered but queries will not be executed.\n", connection_details["kind"].c_str(), connectionName);
64+
databases.insert({ connectionName, nullptr });
65+
}
66+
else {
67+
db->SetConnectionConfig(connection_details);
68+
databases.insert({ connectionName, db });
6569
}
6670

67-
db->SetConnectionConfig(connection_details);
68-
databases.insert({ connectionName, db });
71+
databases_credentials.insert({ connectionName, connection_details });
72+
database_kind.insert({ connectionName, connection_details["kind"] });
6973
}
7074

7175
if (modified) {
@@ -83,6 +87,20 @@ IDatabase* DatabaseManager::GetDatabase(std::string name)
8387
return databases.at(name);
8488
}
8589

90+
std::map<std::string, std::string> DatabaseManager::GetDatabaseCredentials(std::string name)
91+
{
92+
if (databases.find(name) == databases.end()) return {};
93+
94+
return databases_credentials[name];
95+
}
96+
97+
std::string DatabaseManager::GetDatabaseKind(std::string name)
98+
{
99+
if (databases.find(name) == databases.end()) return "unknown";
100+
101+
return database_kind[name];
102+
}
103+
86104
EXT_API void swiftly_RegisterDBDriver(void* driverPtr)
87105
{
88106
dbDrivers.push_back((DBDriver*)driverPtr);

src/network/database/DatabaseManager.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,15 @@ class DatabaseManager
99
private:
1010
const char* databasesPath = "addons/swiftly/configs/databases.json";
1111
std::map<std::string, IDatabase*> databases;
12+
std::map<std::string, std::map<std::string, std::string>> databases_credentials;
13+
std::map<std::string, std::string> database_kind;
1214

1315
public:
1416
void LoadDatabases();
1517
IDatabase* GetDatabase(std::string name);
18+
19+
std::map<std::string, std::string> GetDatabaseCredentials(std::string name);
20+
std::string GetDatabaseKind(std::string name);
1621
};
1722

1823
extern DatabaseManager g_dbManager;

src/scripting/network/database.cpp

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,17 @@ LoadScriptingComponent(database, [](PluginObject plugin, EContext* ctx) -> void
3636
bool shouldSkipDefaultConnection = context->GetArgumentOr<bool>(1, false);
3737

3838
auto db = g_dbManager.GetDatabase(connection_name);
39-
if (!db && connection_name != "default_connection") {
39+
if (!db && connection_name != "default_connection" && g_dbManager.GetDatabaseKind(connection_name) != "unknown") {
4040
PRINTF("Database connection \"%s\" doesn't exists inside the database configurations. Automatically falling back to \"default_connection\".\n", connection_name.c_str());
4141
if (!shouldSkipDefaultConnection) db = g_dbManager.GetDatabase("default_connection");
4242
}
4343

44-
if (!db) {
45-
PRINTF("An error has occured while trying to connect to database \"%s\":\nError: Invalid connection inside `addons/swiftly/configs/databases.json`\n", connection_name.c_str());
46-
}
47-
else if (!db->Connect()) {
44+
if (!db->Connect()) {
4845
PRINTF("An error has occured while trying to connect to database \"%s\":\nError: %s\n", connection_name.c_str(), db->GetError().c_str());
4946
}
5047

5148
data->SetData("db", db);
49+
data->SetData("connection_name", connection_name);
5250
});
5351

5452
ADD_CLASS_FUNCTION("DB", "IsConnected", [](FunctionContext* context, ClassData* data) -> void {
@@ -62,21 +60,24 @@ LoadScriptingComponent(database, [](PluginObject plugin, EContext* ctx) -> void
6260
IDatabase* db = data->GetData<IDatabase*>("db");
6361
std::string str = context->GetArgumentOr<std::string>(0, "");
6462

65-
if (!db || !db->IsConnected()) return context->SetReturn(str);
63+
if (!db) return context->SetReturn(str);
64+
if (!db->IsConnected()) return context->SetReturn(str);
6665

6766
context->SetReturn(db->EscapeValue(str));
6867
});
6968

7069
ADD_CLASS_FUNCTION("DB", "GetVersion", [](FunctionContext* context, ClassData* data) -> void {
7170
IDatabase* db = data->GetData<IDatabase*>("db");
72-
if (!db || !db->IsConnected()) return context->SetReturn("");
71+
if (!db) return context->SetReturn("");
72+
if (!db->IsConnected()) return context->SetReturn("");
7373

7474
context->SetReturn(db->GetVersion());
7575
});
7676

7777
ADD_CLASS_FUNCTION("DB", "Query", [](FunctionContext* context, ClassData* data) -> void {
7878
IDatabase* db = data->GetData<IDatabase*>("db");
79-
if (!db || !db->IsConnected()) return;
79+
if (!db) return;
80+
if (!db->IsConnected()) return;
8081

8182
std::string query = context->GetArgumentOr<std::string>(0, "");
8283
if (query == "") return;
@@ -87,8 +88,19 @@ LoadScriptingComponent(database, [](PluginObject plugin, EContext* ctx) -> void
8788

8889
ADD_CLASS_FUNCTION("DB", "QueryBuilder", [](FunctionContext* context, ClassData* data) -> void {
8990
IDatabase* db = data->GetData<IDatabase*>("db");
90-
if (!db || !db->IsConnected()) return context->SetReturn(nullptr);
91+
if (!db) return context->SetReturn(nullptr);
92+
if (!db->IsConnected()) return context->SetReturn(nullptr);
9193

9294
context->SetReturn(db->ProvideQueryBuilderTable());
9395
});
96+
97+
ADD_CLASS_FUNCTION("DB", "GetCredentials", [](FunctionContext* context, ClassData* data) -> void {
98+
std::string connection_name = data->GetData<std::string>("connection_name");
99+
context->SetReturn(g_dbManager.GetDatabaseCredentials(connection_name));
100+
});
101+
102+
ADD_CLASS_FUNCTION("DB", "GetKind", [](FunctionContext* context, ClassData* data) -> void {
103+
std::string connection_name = data->GetData<std::string>("connection_name");
104+
context->SetReturn(g_dbManager.GetDatabaseKind(connection_name));
105+
});
94106
})

0 commit comments

Comments
 (0)