Skip to content

Commit 3a18a24

Browse files
committed
feat(scripting/database): QueryParams
1 parent 15b769c commit 3a18a24

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

src/plugins/core/scripting.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,7 @@ class PluginDatabase
334334
std::string EscapeString(std::string str);
335335

336336
void QueryLua(std::string query, luabridge::LuaRef callback, lua_State *L);
337+
void QueryParamsLua(std::string query, std::map<luabridge::LuaRef, luabridge::LuaRef> params, luabridge::LuaRef callback, lua_State *L);
337338
};
338339

339340
//////////////////////////////////////////////////////////////

src/plugins/core/scripting/database.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,28 @@ void PluginDatabase::QueryLua(std::string query, luabridge::LuaRef callback, lua
137137
dbThreadStarted = true;
138138
std::thread(DatabaseQueryThread).detach();
139139
}
140+
}
141+
142+
void PluginDatabase::QueryParamsLua(std::string query, std::map<luabridge::LuaRef, luabridge::LuaRef> params, luabridge::LuaRef callback, lua_State *L)
143+
{
144+
bool has_ats = (query.find_first_of("@") != std::string::npos);
145+
bool has_brace = (query.find_first_of("{") != std::string::npos);
146+
bool has_bracket = (query.find_first_of("[") != std::string::npos);
147+
148+
for (auto it = params.begin(); it != params.end(); ++it)
149+
{
150+
std::string key = it->first.tostring();
151+
std::string value = EscapeString(it->second.tostring());
152+
153+
if (has_ats)
154+
query = replace(query, "@" + key, value);
155+
156+
if (has_brace)
157+
query = replace(query, "{" + key + "}", value);
158+
159+
if (has_bracket)
160+
query = replace(query, "[" + key + "]", value);
161+
}
162+
163+
return QueryLua(query, callback, L);
140164
}

src/plugins/lua/scripting/database.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ void SetupLuaDatabase(LuaPlugin *plugin, lua_State *state)
88
.addFunction("IsConnected", &PluginDatabase::IsConnected)
99
.addFunction("EscapeString", &PluginDatabase::EscapeString)
1010
.addFunction("Query", &PluginDatabase::QueryLua)
11+
.addFunction("QueryParams", &PluginDatabase::QueryParamsLua)
1112
.endClass();
1213

1314
luabridge::setGlobal(state, luabridge::LuaRef(state), "db");

0 commit comments

Comments
 (0)