summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrzej J.R. Hunt <andrzej@ahunt.org>2013-08-02 14:33:17 +0200
committerAndrzej J.R. Hunt <andrzej@ahunt.org>2013-08-02 15:39:52 +0200
commit03528afc5c21350b064d6a43fc57f1adc1c94c41 (patch)
tree0a6ce65e3d436af2bb257540ec7e24a68e827b0d
parent935eab83a92426d9fd9e335d8f16c7c4658491c1 (diff)
Clear Statements as appropriate. (firebird-sdbc)
Change-Id: Ied90fe623dff284179c88ae77392d641ba0b004b
-rw-r--r--connectivity/source/drivers/firebird/Connection.cxx25
-rw-r--r--connectivity/source/drivers/firebird/Connection.hxx1
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)