diff options
author | Andrzej J.R. Hunt <andrzej@ahunt.org> | 2013-08-02 14:33:17 +0200 |
---|---|---|
committer | Andrzej J.R. Hunt <andrzej@ahunt.org> | 2013-08-02 15:39:52 +0200 |
commit | 03528afc5c21350b064d6a43fc57f1adc1c94c41 (patch) | |
tree | 0a6ce65e3d436af2bb257540ec7e24a68e827b0d | |
parent | 935eab83a92426d9fd9e335d8f16c7c4658491c1 (diff) |
Clear Statements as appropriate. (firebird-sdbc)
Change-Id: Ied90fe623dff284179c88ae77392d641ba0b004b
-rw-r--r-- | connectivity/source/drivers/firebird/Connection.cxx | 25 | ||||
-rw-r--r-- | connectivity/source/drivers/firebird/Connection.hxx | 1 |
2 files changed, 16 insertions, 10 deletions
diff --git a/connectivity/source/drivers/firebird/Connection.cxx b/connectivity/source/drivers/firebird/Connection.cxx index 96ed57c62d0c..02beb6b73fa5 100644 --- a/connectivity/source/drivers/firebird/Connection.cxx +++ b/connectivity/source/drivers/firebird/Connection.cxx @@ -421,6 +421,7 @@ void OConnection::setupTransaction() // is lost... if (m_transactionHandle) { + clearStatements(); isc_rollback_transaction(status_vector, &m_transactionHandle); } @@ -454,9 +455,6 @@ void OConnection::setupTransaction() isc_start_transaction(status_vector, &m_transactionHandle, 1, &m_DBHandler, (unsigned short) sizeof(isc_tpb), isc_tpb); - - //TODO: transmit to open statements? - } isc_tr_handle& OConnection::getTransaction() @@ -478,6 +476,7 @@ void SAL_CALL OConnection::commit() throw(SQLException, RuntimeException) if (!m_bAutoCommit && m_transactionHandle) { + clearStatements(); isc_commit_transaction(status_vector, &m_transactionHandle); } } @@ -613,6 +612,7 @@ void SAL_CALL OConnection::documentEventOccured( const DocumentEvent& _Event ) { if (_Event.EventName == "OnSave" || _Event.EventName == "OnSaveAs") { + commit(); // Commit and close transaction if ( m_bIsEmbedded && m_xEmbeddedStorage.is() ) { SAL_INFO("connectivity.firebird", "Writing .fdb into .odb" ); @@ -698,13 +698,7 @@ void OConnection::disposing() MutexGuard aGuard(m_aMutex); - for (OWeakRefArray::iterator i = m_aStatements.begin(); m_aStatements.end() != i; ++i) - { - Reference< XComponent > xComp(i->get(), UNO_QUERY); - if (xComp.is()) - xComp->dispose(); - } - m_aStatements.clear(); + clearStatements(); m_bClosed = sal_True; m_xMetaData = ::com::sun::star::uno::WeakReference< ::com::sun::star::sdbc::XDatabaseMetaData>(); @@ -734,4 +728,15 @@ void OConnection::disposing() cppu::WeakComponentImplHelperBase::disposing(); } +void OConnection::clearStatements() +{ + MutexGuard aGuard(m_aMutex); + for (OWeakRefArray::iterator i = m_aStatements.begin(); m_aStatements.end() != i; ++i) + { + Reference< XComponent > xComp(i->get(), UNO_QUERY); + if (xComp.is()) + xComp->dispose(); + } + m_aStatements.clear(); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx index 559bba9dafc4..fcc59efb7c4f 100644 --- a/connectivity/source/drivers/firebird/Connection.hxx +++ b/connectivity/source/drivers/firebird/Connection.hxx @@ -112,6 +112,7 @@ namespace connectivity void buildTypeInfo() throw( ::com::sun::star::sdbc::SQLException); void setupTransaction(); + void clearStatements(); public: virtual void construct( const ::rtl::OUString& url, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& info) |