/////////////////////////////////////////////////////////////// // // CDatabaseManagerImpl::Disconnect // // // /////////////////////////////////////////////////////////////// bool CDatabaseManagerImpl::Disconnect ( uint hConnection ) { ClearLastErrorMessage (); // Check connection if ( !MapContains ( m_ConnectionTypeMap, hConnection ) ) { SetLastErrorMessage ( "Invalid connection" ); return false; } // Start disconnect CDbJobData* pJobData = m_JobQueue->AddCommand ( EJobCommand::DISCONNECT, hConnection, "" ); // Complete disconnect m_JobQueue->PollCommand ( pJobData, -1 ); // Check for problems if ( pJobData->result.status == EJobResult::FAIL ) { SetLastErrorMessage ( pJobData->result.strReason ); return false; } // Remove connection refs MapRemove ( m_ConnectionTypeMap, hConnection ); m_JobQueue->IgnoreConnectionResults ( hConnection ); return true; }
/////////////////////////////////////////////////////////////// // // CDatabaseJobQueueManager::IgnoreConnectionResults // // Throw away results for all jobs using this connection // /////////////////////////////////////////////////////////////// void CDatabaseJobQueueManager::IgnoreConnectionResults(SConnectionHandle connectionHandle) { CDatabaseJobQueue* pJobQueue = FindQueueFromConnection(connectionHandle); if (!pJobQueue) return; pJobQueue->IgnoreConnectionResults(connectionHandle); }