/////////////////////////////////////////////////////////////// // // CDatabaseJobQueueImpl::ProcessQuery // // // /////////////////////////////////////////////////////////////// void CDatabaseJobQueueImpl::ProcessQuery ( CDbJobData* pJobData ) { // CDatabaseConnection* from handle CDatabaseConnection* pConnection = GetConnectionFromHandle ( pJobData->command.connectionHandle ); if ( !pConnection ) { pJobData->result.status = EJobResult::FAIL; pJobData->result.strReason = "Invalid connection"; return; } // And query if ( !pConnection->Query ( pJobData->command.strData, pJobData->result.registryResult ) ) { pJobData->result.status = EJobResult::FAIL; pJobData->result.strReason = pConnection->GetLastErrorMessage (); pJobData->result.uiErrorCode = pConnection->GetLastErrorCode (); pJobData->result.bErrorSuppressed = MapContains ( pConnection->m_SuppressedErrorCodes, pConnection->GetLastErrorCode () ); } else { pJobData->result.status = EJobResult::SUCCESS; } // And log if required LogResult ( pJobData ); }
//Disconnects a specific connection void ConnectionManager::Disconnect(u16 connectionHandle) { Connection* connection = GetConnectionFromHandle(connectionHandle); if (connection != NULL) { connection->Disconnect(); } }
/////////////////////////////////////////////////////////////// // // CDatabaseJobQueueImpl::ProcessFlush () // // Tell the connection to flush cached data // /////////////////////////////////////////////////////////////// void CDatabaseJobQueueImpl::ProcessFlush ( CDbJobData* pJobData ) { CDatabaseConnection* pConnection = GetConnectionFromHandle ( pJobData->command.connectionHandle ); if ( !pConnection ) { pJobData->result.status = EJobResult::FAIL; pJobData->result.strReason = "Invalid connection"; return; } // Do flush pConnection->Flush (); pJobData->result.status = EJobResult::SUCCESS; }
/////////////////////////////////////////////////////////////// // // CDatabaseJobQueueImpl::LogResult // // Log last job if connection has logging enabled // /////////////////////////////////////////////////////////////// void CDatabaseJobQueueImpl::LogResult ( CDbJobData* pJobData ) { // Early out if logging switched off globally if ( m_LogLevel == EJobLogLevel::NONE ) return; // Check logging status of connection CDatabaseConnection* pConnection = GetConnectionFromHandle ( pJobData->command.connectionHandle ); if ( !pConnection || !pConnection->m_bLoggingEnabled ) return; if ( pJobData->result.status == EJobResult::SUCCESS ) { if ( m_LogLevel >= EJobLogLevel::ALL ) { SString strLine ( "%s: [%s] SUCCESS: Affected rows:%d [Query:%s]\n" , *GetLocalTimeString ( true, true ) , *pConnection->m_strLogTag , pJobData->result.registryResult->uiNumAffectedRows , *pJobData->GetCommandStringForLog() ); LogString ( strLine ); } } else { if ( m_LogLevel >= EJobLogLevel::ERRORS ) { // Suppress requested errors unless logging is set to ALL if ( pJobData->result.bErrorSuppressed && m_LogLevel != EJobLogLevel::ALL ) return; SString strLine ( "%s: [%s] FAIL: (%d) %s [Query:%s]\n" , *GetLocalTimeString ( true, true ) , *pConnection->m_strLogTag , pJobData->result.uiErrorCode , *pJobData->result.strReason , *pJobData->GetCommandStringForLog() ); LogString ( strLine ); } } }
/////////////////////////////////////////////////////////////// // // CDatabaseJobQueueImpl::ProcessDisconnect // // // /////////////////////////////////////////////////////////////// void CDatabaseJobQueueImpl::ProcessDisconnect ( CDbJobData* pJobData ) { // CDatabaseConnection* from handle CDatabaseConnection* pConnection = GetConnectionFromHandle ( pJobData->command.connectionHandle ); if ( !pConnection ) { pJobData->result.status = EJobResult::FAIL; pJobData->result.strReason = "Invalid connection"; return; } // And disconnect RemoveHandleForConnection ( pJobData->command.connectionHandle, pConnection ); pConnection->Release (); pConnection = NULL; // Set result pJobData->result.status = EJobResult::SUCCESS; }
/////////////////////////////////////////////////////////////// // // CDatabaseJobQueueImpl::UsesConnection // // Return true if supplied connection is used by this queue // /////////////////////////////////////////////////////////////// bool CDatabaseJobQueueImpl::UsesConnection( SConnectionHandle connectionHandle ) { return GetConnectionFromHandle( connectionHandle ) != nullptr; }