Пример #1
0
//---------------------------------------------------------------------------
Database & Database::detach()
{
    intptr_t  i;
    for( i = eventHandlers_.count() - 1; i >= 0; i-- )
        eventHandlers_.objectOfIndex(i)->cancel();
    for( i = transactions_.count() - 1; i >= 0; i-- ) {
        Transaction * transaction = transactions_.objectOfIndex(0);
        while( transaction->active() ) transaction->rollback(true);
    }
    for( i = dsqlStatements_.count() - 1; i >= 0; i-- )
        dsqlStatements_.objectOfIndex(i)->free();
    if( attached() ) {
        ISC_STATUS_ARRAY status;
        api.isc_detach_database(status,&handle_);
        api.close();
    }
    return *this;
}
Пример #2
0
//---------------------------------------------------------------------------
Database & Database::detachHelper()
{
    while( eventHandlers_.count() > 0 ) {
        eventHandlers_.objectOfIndex(0)->cancel();
        eventHandlers_.removeByIndex(0);
    }
    while( dsqlStatements_.count() > 0 ) {
        DSQLStatement * dsqlStatement = dsqlStatements_.objectOfIndex(0);
        dsqlStatement->free();
        dsqlStatement->database_ = NULL;
        dsqlStatements_.removeByIndex(0);
    }
    while( transactions_.count() > 0 ) {
        Transaction * transaction = transactions_.objectOfIndex(0);
        while( transaction->active() ) transaction->rollback(true);
#if __GNUG__
#else
        transaction->databases_.removeByObject(this);
#endif
        transactions_.removeByIndex(0);
    }
    return *this;
}