Skip to content

Commit

Permalink
Added dbPrepareString
Browse files Browse the repository at this point in the history
  • Loading branch information
ccw808 committed Jan 4, 2016
1 parent 1344d33 commit 8d16feb
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 0 deletions.
24 changes: 24 additions & 0 deletions MTA10_Server/mods/deathmatch/logic/CDatabaseManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ class CDatabaseManagerImpl : public CDatabaseManager
virtual void DoPulse ( void );
virtual SConnectionHandle Connect ( const SString& strType, const SString& strHost, const SString& strUsername, const SString& strPassword, const SString& strOptions );
virtual bool Disconnect ( SConnectionHandle hConnection );
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
virtual CDbJobData* Execf ( SConnectionHandle hConnection, const char* szQuery, ... );
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
Expand Down Expand Up @@ -183,6 +184,29 @@ bool CDatabaseManagerImpl::Disconnect ( uint hConnection )
}


///////////////////////////////////////////////////////////////
//
// CDatabaseManagerImpl::PrepareString
//
// Safely insert supplied arguments into string
//
///////////////////////////////////////////////////////////////
SString CDatabaseManagerImpl::PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs )
{
ClearLastErrorMessage ();

// Check connection
if ( !MapContains ( m_ConnectionTypeMap, hConnection ) )
{
SetLastErrorMessage ( "Invalid connection" );
return NULL;
}

// Insert arguments with correct escapement
return InsertQueryArguments ( hConnection, strQuery, pArgs );
}


///////////////////////////////////////////////////////////////
//
// CDatabaseManagerImpl::Exec
Expand Down
1 change: 1 addition & 0 deletions MTA10_Server/mods/deathmatch/logic/CDatabaseManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ class CDatabaseManager
virtual void DoPulse ( void ) = 0;
virtual SConnectionHandle Connect ( const SString& strType, const SString& strHost, const SString& strUsername = "", const SString& strPassword = "", const SString& strOptions = "" ) = 0;
virtual bool Disconnect ( SConnectionHandle hConnection ) = 0;
virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
virtual CDbJobData* Execf ( SConnectionHandle hConnection, const char* szQuery, ... ) = 0;
virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs ) = 0;
Expand Down
1 change: 1 addition & 0 deletions MTA10_Server/mods/deathmatch/logic/CResourceChecker.Data.h
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ namespace
{ "setElementCallPropagationEnabled", "1.3.5-9.06118" },
{ "isElementCallPropagationEnabled", "1.3.5-9.06118" },
{ "resendPlayerACInfo", "1.5.1-9.07633" },
{ "dbPrepareString", "1.5.2" },
};


Expand Down
31 changes: 31 additions & 0 deletions MTA10_Server/mods/deathmatch/logic/luadefs/CLuaDatabaseDefs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ void CLuaDatabaseDefs::LoadFunctions ()
CLuaCFunctions::AddFunction ( "dbQuery", DbQuery );
CLuaCFunctions::AddFunction ( "dbFree", DbFree );
CLuaCFunctions::AddFunction ( "dbPoll", DbPoll );
CLuaCFunctions::AddFunction ( "dbPrepareString", DbPrepareString );

CLuaCFunctions::AddFunction ( "executeSQLCreateTable", ExecuteSQLCreateTable );
CLuaCFunctions::AddFunction ( "executeSQLDropTable", ExecuteSQLDropTable );
Expand Down Expand Up @@ -590,6 +591,36 @@ int CLuaDatabaseDefs::DbPoll ( lua_State* luaVM )
}


int CLuaDatabaseDefs::DbPrepareString ( lua_State* luaVM )
{
// string dbPrepareString ( element connection, string query, ... )
CDatabaseConnectionElement* pElement; SString strQuery; CLuaArguments Args;

CScriptArgReader argStream ( luaVM );
argStream.ReadUserData ( pElement );
argStream.ReadString ( strQuery );
argStream.ReadLuaArguments ( Args );

if ( !argStream.HasErrors () )
{
SString strResult = g_pGame->GetDatabaseManager ()->PrepareString ( pElement->GetConnectionHandle (), strQuery, &Args );
SString strError = g_pGame->GetDatabaseManager ()->GetLastErrorMessage ();
if ( !strResult.empty () || strError.empty () )
{
lua_pushstring ( luaVM, strResult );
return 1;
}
if ( !g_pGame->GetDatabaseManager ()->IsLastErrorSuppressed () )
argStream.SetCustomError ( strError );
}
if ( argStream.HasErrors () )
m_pScriptDebugging->LogCustom ( luaVM, argStream.GetFullErrorMessage () );

lua_pushboolean ( luaVM, false );
return 1;
}


int CLuaDatabaseDefs::ExecuteSQLQuery ( lua_State* luaVM )
{
SString strQuery;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ class CLuaDatabaseDefs : public CLuaDefs
LUA_DECLARE_OOP ( DbQuery );
LUA_DECLARE ( DbFree );
LUA_DECLARE ( DbPoll );
LUA_DECLARE ( DbPrepareString );

LUA_DECLARE ( ExecuteSQLCreateTable );
LUA_DECLARE ( ExecuteSQLDropTable );
Expand Down

0 comments on commit 8d16feb

Please sign in to comment.