dbaccess/source/core/api/RowSet.cxx | 49 ++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 21 deletions(-)
New commits: commit db7042cdbaf94250cd76b6aafd75c10c4a5a6900 Author: Lionel Elie Mamane <[email protected]> Date: Mon Jun 16 13:20:36 2014 +0200 janitorial: update function name in SAL_INFO output Change-Id: Ie01599c8f3ae465998113dd8bfd2a33b27d0a39d diff --git a/dbaccess/source/core/api/RowSet.cxx b/dbaccess/source/core/api/RowSet.cxx index 4b5b5db..629ebf5 100644 --- a/dbaccess/source/core/api/RowSet.cxx +++ b/dbaccess/source/core/api/RowSet.cxx @@ -1700,7 +1700,7 @@ Reference< XResultSet > ORowSet::impl_prepareAndExecute_throw() if ( !m_aUpdateTableName.isEmpty() ) aComposedUpdateTableName = composeTableName( m_xActiveConnection->getMetaData(), m_aUpdateCatalogName, m_aUpdateSchemaName, m_aUpdateTableName, false, ::dbtools::eInDataManipulation ); - SAL_INFO("dbaccess", "ORowSet::execute_NoApprove_NoNewConn: creating cache" ); + SAL_INFO("dbaccess", "ORowSet::impl_prepareAndExecute_throw: creating cache" ); m_pCache = new ORowSetCache( xResultSet, m_xComposer.get(), m_aContext, aComposedUpdateTableName, m_bModified, m_bNew,m_aParameterValueForCache,m_aFilter,m_nMaxRows ); if ( m_nResultSetConcurrency == ResultSetConcurrency::READ_ONLY ) { commit 21f2efbe5f2e8d86a027f04370f8100c4194ee16 Author: Lionel Elie Mamane <[email protected]> Date: Mon Jun 16 12:22:39 2014 +0200 dbaccess::ORowSet: separate impl_rebuild_throw Used by two different callers that wanted different things. Also, freeResources now always positions on BeforeFirst. It is only called with _bComplete==false by execute()-related code. Change-Id: I3e34f77ce37c239d8d3d6a8cd7514b125b049de6 diff --git a/dbaccess/source/core/api/RowSet.cxx b/dbaccess/source/core/api/RowSet.cxx index 9820287..4b5b5db 100644 --- a/dbaccess/source/core/api/RowSet.cxx +++ b/dbaccess/source/core/api/RowSet.cxx @@ -560,6 +560,15 @@ void ORowSet::freeResources( bool _bComplete ) } m_aClones.clear(); + m_aBookmark = Any(); + m_bBeforeFirst = true; + m_bAfterLast = false; + m_bNew = false; + m_bModified = false; + m_bIsInsertRow = false; + m_bLastKnownRowCountFinal = false; + m_nLastKnownRowCount = 0; + if ( _bComplete ) { // the columns must be disposed before the querycomposer is disposed because @@ -588,14 +597,6 @@ void ORowSet::freeResources( bool _bComplete ) m_xStatement = NULL; m_xTypeMap = NULL; - m_aBookmark = Any(); - m_bBeforeFirst = true; - m_bAfterLast = false; - m_bNew = false; - m_bModified = false; - m_bIsInsertRow = false; - m_bLastKnownRowCountFinal = false; - m_nLastKnownRowCount = 0; if ( m_aOldRow.is() ) m_aOldRow->clearRow(); @@ -2006,8 +2007,22 @@ void ORowSet::execute_NoApprove_NoNewConn(ResettableMutexGuard& _rClearForNotifi } else // !m_bCommandFacetsDirty { - impl_rebuild_throw(_rClearForNotification); - beforeFirst(); + Reference< XResultSet > xResultSet; + if(m_bParametersDirty) + { + xResultSet = impl_prepareAndExecute_throw(); + } + else + { + xResultSet = m_xStatement->executeQuery(); + m_pCache->reset(xResultSet); + } + // let our warnings container forget the reference to the (possibly disposed) old result set + m_aWarnings.setExternalWarnings( NULL ); + // clear all current warnings + m_aWarnings.clearWarnings(); + // let the warnings container know about the new "external warnings" + m_aWarnings.setExternalWarnings( Reference< XWarningsSupplier >( xResultSet, UNO_QUERY ) ); } checkCache(); // notify the rowset listeners @@ -2732,16 +2747,8 @@ void SAL_CALL ORowSet::refreshRow( ) throw(SQLException, RuntimeException, std: void ORowSet::impl_rebuild_throw(::osl::ResettableMutexGuard& _rGuard) { - Reference< XResultSet > xResultSet; - if(m_bParametersDirty) - { - xResultSet = impl_prepareAndExecute_throw(); - } - else - { - xResultSet = m_xStatement->executeQuery(); - m_pCache->reset(xResultSet); - } + Reference< XResultSet > xResultSet(m_xStatement->executeQuery()); + m_pCache->reset(xResultSet); m_aWarnings.setExternalWarnings( Reference< XWarningsSupplier >( xResultSet, UNO_QUERY ) ); notifyAllListeners(_rGuard); } commit 767e15343fdedffce513fd26ce17ee6003936117 Author: Lionel Elie Mamane <[email protected]> Date: Mon Jun 16 10:46:41 2014 +0200 clean up fdo#79427 fix: force BeforeFirst only at execute(), not updateRow() Change-Id: Iaa881d055923702acbb96862d187af41a6ded730 diff --git a/dbaccess/source/core/api/RowSet.cxx b/dbaccess/source/core/api/RowSet.cxx index d5e6411..9820287 100644 --- a/dbaccess/source/core/api/RowSet.cxx +++ b/dbaccess/source/core/api/RowSet.cxx @@ -2007,6 +2007,7 @@ void ORowSet::execute_NoApprove_NoNewConn(ResettableMutexGuard& _rClearForNotifi else // !m_bCommandFacetsDirty { impl_rebuild_throw(_rClearForNotification); + beforeFirst(); } checkCache(); // notify the rowset listeners @@ -2740,7 +2741,6 @@ void ORowSet::impl_rebuild_throw(::osl::ResettableMutexGuard& _rGuard) { xResultSet = m_xStatement->executeQuery(); m_pCache->reset(xResultSet); - beforeFirst(); } m_aWarnings.setExternalWarnings( Reference< XWarningsSupplier >( xResultSet, UNO_QUERY ) ); notifyAllListeners(_rGuard); _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
