Skip to content

Commit f61c89f

Browse files
committed
Added dbPrepareString
1 parent ad53849 commit f61c89f

File tree

5 files changed

+58
-0
lines changed

5 files changed

+58
-0
lines changed

MTA10_Server/mods/deathmatch/logic/CDatabaseManager.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class CDatabaseManagerImpl : public CDatabaseManager
3434
virtual void DoPulse ( void );
3535
virtual SConnectionHandle Connect ( const SString& strType, const SString& strHost, const SString& strUsername, const SString& strPassword, const SString& strOptions );
3636
virtual bool Disconnect ( SConnectionHandle hConnection );
37+
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
3738
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
3839
virtual CDbJobData* Execf ( SConnectionHandle hConnection, const char* szQuery, ... );
3940
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
@@ -183,6 +184,29 @@ bool CDatabaseManagerImpl::Disconnect ( uint hConnection )
183184
}
184185

185186

187+
///////////////////////////////////////////////////////////////
188+
//
189+
// CDatabaseManagerImpl::PrepareString
190+
//
191+
// Safely insert supplied arguments into string
192+
//
193+
///////////////////////////////////////////////////////////////
194+
SString CDatabaseManagerImpl::PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs )
195+
{
196+
ClearLastErrorMessage ();
197+
198+
// Check connection
199+
if ( !MapContains ( m_ConnectionTypeMap, hConnection ) )
200+
{
201+
SetLastErrorMessage ( "Invalid connection" );
202+
return NULL;
203+
}
204+
205+
// Insert arguments with correct escapement
206+
return InsertQueryArguments ( hConnection, strQuery, pArgs );
207+
}
208+
209+
186210
///////////////////////////////////////////////////////////////
187211
//
188212
// CDatabaseManagerImpl::Exec

MTA10_Server/mods/deathmatch/logic/CDatabaseManager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ class CDatabaseManager
148148
virtual void DoPulse ( void ) = 0;
149149
virtual SConnectionHandle Connect ( const SString& strType, const SString& strHost, const SString& strUsername = "", const SString& strPassword = "", const SString& strOptions = "" ) = 0;
150150
virtual bool Disconnect ( SConnectionHandle hConnection ) = 0;
151+
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
151152
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
152153
virtual CDbJobData* Execf ( SConnectionHandle hConnection, const char* szQuery, ... ) = 0;
153154
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;

MTA10_Server/mods/deathmatch/logic/CResourceChecker.Data.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ namespace
243243
{ "setElementCallPropagationEnabled", "1.3.5-9.06118" },
244244
{ "isElementCallPropagationEnabled", "1.3.5-9.06118" },
245245
{ "resendPlayerACInfo", "1.5.1-9.07633" },
246+
{ "dbPrepareString", "1.5.2" },
246247
};
247248

248249

MTA10_Server/mods/deathmatch/logic/luadefs/CLuaDatabaseDefs.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ void CLuaDatabaseDefs::LoadFunctions ()
1818
CLuaCFunctions::AddFunction ( "dbQuery", DbQuery );
1919
CLuaCFunctions::AddFunction ( "dbFree", DbFree );
2020
CLuaCFunctions::AddFunction ( "dbPoll", DbPoll );
21+
CLuaCFunctions::AddFunction ( "dbPrepareString", DbPrepareString );
2122

2223
CLuaCFunctions::AddFunction ( "executeSQLCreateTable", ExecuteSQLCreateTable );
2324
CLuaCFunctions::AddFunction ( "executeSQLDropTable", ExecuteSQLDropTable );
@@ -590,6 +591,36 @@ int CLuaDatabaseDefs::DbPoll ( lua_State* luaVM )
590591
}
591592

592593

594+
int CLuaDatabaseDefs::DbPrepareString ( lua_State* luaVM )
595+
{
596+
// string dbPrepareString ( element connection, string query, ... )
597+
CDatabaseConnectionElement* pElement; SString strQuery; CLuaArguments Args;
598+
599+
CScriptArgReader argStream ( luaVM );
600+
argStream.ReadUserData ( pElement );
601+
argStream.ReadString ( strQuery );
602+
argStream.ReadLuaArguments ( Args );
603+
604+
if ( !argStream.HasErrors () )
605+
{
606+
SString strResult = g_pGame->GetDatabaseManager ()->PrepareString ( pElement->GetConnectionHandle (), strQuery, &Args );
607+
SString strError = g_pGame->GetDatabaseManager ()->GetLastErrorMessage ();
608+
if ( !strResult.empty () || strError.empty () )
609+
{
610+
lua_pushstring ( luaVM, strResult );
611+
return 1;
612+
}
613+
if ( !g_pGame->GetDatabaseManager ()->IsLastErrorSuppressed () )
614+
argStream.SetCustomError ( strError );
615+
}
616+
if ( argStream.HasErrors () )
617+
m_pScriptDebugging->LogCustom ( luaVM, argStream.GetFullErrorMessage () );
618+
619+
lua_pushboolean ( luaVM, false );
620+
return 1;
621+
}
622+
623+
593624
int CLuaDatabaseDefs::ExecuteSQLQuery ( lua_State* luaVM )
594625
{
595626
SString strQuery;

MTA10_Server/mods/deathmatch/logic/luadefs/CLuaDatabaseDefs.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class CLuaDatabaseDefs : public CLuaDefs
2727
LUA_DECLARE_OOP ( DbQuery );
2828
LUA_DECLARE ( DbFree );
2929
LUA_DECLARE ( DbPoll );
30+
LUA_DECLARE ( DbPrepareString );
3031

3132
LUA_DECLARE ( ExecuteSQLCreateTable );
3233
LUA_DECLARE ( ExecuteSQLDropTable );

0 commit comments

Comments
 (0)