@@ -34,18 +34,19 @@ class CDatabaseManagerImpl : public CDatabaseManager
34
34
virtual void DoPulse ( void );
35
35
virtual SConnectionHandle Connect ( const SString& strType, const SString& strHost, const SString& strUsername, const SString& strPassword, const SString& strOptions );
36
36
virtual bool Disconnect ( SConnectionHandle hConnection );
37
- virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
37
+ virtual SString PrepareString ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr );
38
38
virtual SString PrepareStringf ( SConnectionHandle hConnection, const char * szQuery, ... );
39
- virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
39
+ virtual CDbJobData* Exec ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr );
40
40
virtual CDbJobData* Execf ( SConnectionHandle hConnection, const char * szQuery, ... );
41
- virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs );
41
+ virtual CDbJobData* QueryStart ( SConnectionHandle hConnection, const SString& strQuery, CLuaArguments* pArgs = nullptr );
42
42
virtual CDbJobData* QueryStartf ( SConnectionHandle hConnection, const char * szQuery, ... );
43
43
virtual bool QueryPoll ( CDbJobData* pJobData, uint ulTimeout );
44
44
virtual bool QueryFree ( CDbJobData* pJobData );
45
45
virtual CDbJobData* GetQueryFromId ( SDbJobId id );
46
46
virtual const SString& GetLastErrorMessage ( void ) { return m_strLastErrorMessage; }
47
47
virtual bool IsLastErrorSuppressed ( void ) { return m_bLastErrorSuppressed; }
48
48
virtual bool QueryWithResultf ( SConnectionHandle hConnection, CRegistryResult* pResult, const char * szQuery, ... );
49
+ virtual bool QueryWithCallback ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void * pCallbackContext, const SString& strQuery, CLuaArguments* pArgs = nullptr );
49
50
virtual bool QueryWithCallbackf ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void * pCallbackContext, const char * szQuery, ... );
50
51
virtual void SetLogLevel ( EJobLogLevelType logLevel, const SString& strLogFilename );
51
52
@@ -431,6 +432,42 @@ bool CDatabaseManagerImpl::QueryWithResultf ( SConnectionHandle hConnection, CRe
431
432
}
432
433
433
434
435
+ // /////////////////////////////////////////////////////////////
436
+ //
437
+ // CDatabaseManagerImpl::QueryWithCallback
438
+ //
439
+ // Start a query and direct the result through a callback
440
+ //
441
+ // /////////////////////////////////////////////////////////////
442
+ bool CDatabaseManagerImpl::QueryWithCallback ( SConnectionHandle hConnection, PFN_DBRESULT pfnDbResult, void * pCallbackContext, const SString& strQuery, CLuaArguments* pArgs )
443
+ {
444
+ ClearLastErrorMessage ();
445
+
446
+ // Check connection
447
+ if ( !MapContains ( m_ConnectionTypeMap, hConnection ) )
448
+ {
449
+ SetLastErrorMessage ( " Invalid connection" );
450
+ return false ;
451
+ }
452
+
453
+ // Insert arguments with correct escapement
454
+ SString strEscapedQuery = InsertQueryArguments ( hConnection, strQuery, pArgs );
455
+
456
+ // Start query
457
+ CDbJobData* pJobData = m_JobQueue->AddCommand ( EJobCommand::QUERY, hConnection, strEscapedQuery );
458
+ if ( !pJobData )
459
+ {
460
+ SetLastErrorMessage ( " Invalid connection" );
461
+ return false ;
462
+ }
463
+
464
+ // Set callback vars
465
+ pJobData->SetCallback ( pfnDbResult, pCallbackContext );
466
+
467
+ return true ;
468
+ }
469
+
470
+
434
471
// /////////////////////////////////////////////////////////////
435
472
//
436
473
// CDatabaseManagerImpl::QueryWithCallbackf
0 commit comments