comphelper/source/misc/SelectionMultiplex.cxx | 15 -- dbaccess/source/core/api/RowSetCache.cxx | 175 ++++++++++++-------------- dbaccess/source/core/api/RowSetCache.hxx | 3 extensions/source/bibliography/framectr.cxx | 73 +++++----- extensions/source/bibliography/framectr.hxx | 3 include/comphelper/SelectionMultiplex.hxx | 7 - 6 files changed, 125 insertions(+), 151 deletions(-)
New commits: commit cd10956cb0a32962840aee20298ad8a97ad914f5 Author: Noel Grandin <[email protected]> Date: Fri Jan 20 12:18:13 2017 +0200 use rtl::Reference in ORowSetCache instead of storing both a raw pointer and a uno::Reference Change-Id: Ib3a4314a3d05e3c14a674b3d87baad245863ec6e diff --git a/dbaccess/source/core/api/RowSetCache.cxx b/dbaccess/source/core/api/RowSetCache.cxx index 28009d0..c1863f6 100644 --- a/dbaccess/source/core/api/RowSetCache.cxx +++ b/dbaccess/source/core/api/RowSetCache.cxx @@ -91,7 +91,6 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, :m_xSet(_xRs) ,m_xMetaData(Reference< XResultSetMetaDataSupplier >(_xRs,UNO_QUERY)->getMetaData()) ,m_aContext( _rContext ) - ,m_pCacheSet(nullptr) ,m_pMatrix(nullptr) ,m_pInsertMatrix(nullptr) ,m_nFetchSize(0) @@ -123,9 +122,8 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, xUp->cancelRowUpdates(); _xRs->beforeFirst(); m_nPrivileges = Privilege::SELECT|Privilege::DELETE|Privilege::INSERT|Privilege::UPDATE; - m_pCacheSet = new WrappedResultSet(i_nMaxRows); - m_xCacheSet = m_pCacheSet; - m_pCacheSet->construct(_xRs,i_sRowSetFilter); + m_xCacheSet = new WrappedResultSet(i_nMaxRows); + m_xCacheSet->construct(_xRs,i_sRowSetFilter); return; } } @@ -176,11 +174,10 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, {// here we have a join or union and nobody told us which table to update, so we update them all m_nPrivileges = Privilege::SELECT|Privilege::DELETE|Privilege::INSERT|Privilege::UPDATE; OptimisticSet* pCursor = new OptimisticSet(m_aContext,xConnection,_xAnalyzer,_aParameterValueForCache,i_nMaxRows,m_nRowCount); - m_pCacheSet = pCursor; - m_xCacheSet = m_pCacheSet; + m_xCacheSet = pCursor; try { - m_pCacheSet->construct(_xRs,i_sRowSetFilter); + m_xCacheSet->construct(_xRs,i_sRowSetFilter); if ( pCursor->isReadOnly() ) m_nPrivileges = Privilege::SELECT; m_aKeyColumns = pCursor->getJoinedKeyColumns(); @@ -190,7 +187,6 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, { SAL_WARN("dbaccess.core", "ORowSetCache: exception: " << e.Message); } - m_pCacheSet = nullptr; m_xCacheSet.clear(); } else @@ -238,9 +234,8 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, { try { - m_pCacheSet = new OBookmarkSet(i_nMaxRows); - m_xCacheSet = m_pCacheSet; - m_pCacheSet->construct(_xRs,i_sRowSetFilter); + m_xCacheSet = new OBookmarkSet(i_nMaxRows); + m_xCacheSet->construct(_xRs,i_sRowSetFilter); // check privileges m_nPrivileges = Privilege::SELECT; @@ -275,14 +270,12 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, // here I know that we have a read only bookmarkable cursor _xRs->beforeFirst(); m_nPrivileges = Privilege::SELECT; - m_pCacheSet = new WrappedResultSet(i_nMaxRows); - m_xCacheSet = m_pCacheSet; - m_pCacheSet->construct(_xRs,i_sRowSetFilter); + m_xCacheSet = new WrappedResultSet(i_nMaxRows); + m_xCacheSet->construct(_xRs,i_sRowSetFilter); return; } - m_pCacheSet = new OStaticSet(i_nMaxRows); - m_xCacheSet = m_pCacheSet; - m_pCacheSet->construct(_xRs,i_sRowSetFilter); + m_xCacheSet = new OStaticSet(i_nMaxRows); + m_xCacheSet->construct(_xRs,i_sRowSetFilter); m_nPrivileges = Privilege::SELECT; } else @@ -320,8 +313,7 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, OKeySet* pKeySet = new OKeySet(m_aUpdateTable,xUpdateTableKeys,aUpdateTableName ,_xAnalyzer,_aParameterValueForCache,i_nMaxRows,m_nRowCount); try { - m_pCacheSet = pKeySet; - m_xCacheSet = m_pCacheSet; + m_xCacheSet = pKeySet; pKeySet->construct(_xRs,i_sRowSetFilter); if(Reference<XResultSetUpdate>(_xRs,UNO_QUERY).is()) // this interface is optional so we have to check it @@ -342,12 +334,8 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, { SAL_WARN("dbaccess.core", "ORowSetCache: exception: " << e.Message); // we couldn't create a keyset here so we have to create a static cache - if ( m_pCacheSet ) - m_pCacheSet = nullptr; - m_xCacheSet = nullptr; - m_pCacheSet = new OStaticSet(i_nMaxRows); - m_xCacheSet = m_pCacheSet; - m_pCacheSet->construct(_xRs,i_sRowSetFilter); + m_xCacheSet = new OStaticSet(i_nMaxRows); + m_xCacheSet->construct(_xRs,i_sRowSetFilter); m_nPrivileges = Privilege::SELECT; } } @@ -361,8 +349,7 @@ ORowSetCache::ORowSetCache(const Reference< XResultSet >& _xRs, ORowSetCache::~ORowSetCache() { - m_pCacheSet = nullptr; - m_xCacheSet = nullptr; + m_xCacheSet.clear(); if(m_pMatrix) { m_pMatrix->clear(); @@ -501,15 +488,15 @@ Any ORowSetCache::getBookmark( ) return Any(); // this is allowed here because the rowset knows what it is doing } - return lcl_getBookmark(((*m_aMatrixIter)->get())[0],m_pCacheSet); + return lcl_getBookmark(((*m_aMatrixIter)->get())[0],m_xCacheSet.get()); } bool ORowSetCache::moveToBookmark( const Any& bookmark ) { - if ( m_pCacheSet->moveToBookmark(bookmark) ) + if ( m_xCacheSet->moveToBookmark(bookmark) ) { m_bBeforeFirst = false; - m_nPosition = m_pCacheSet->getRow(); + m_nPosition = m_xCacheSet->getRow(); checkPositionFlags(); @@ -539,7 +526,7 @@ bool ORowSetCache::moveRelativeToBookmark( const Any& bookmark, sal_Int32 rows ) bool bRet( moveToBookmark( bookmark ) ); if ( bRet ) { - m_nPosition = m_pCacheSet->getRow() + rows; + m_nPosition = m_xCacheSet->getRow() + rows; absolute(m_nPosition); bRet = m_aMatrixIter != m_pMatrix->end() && (*m_aMatrixIter).is(); @@ -550,17 +537,17 @@ bool ORowSetCache::moveRelativeToBookmark( const Any& bookmark, sal_Int32 rows ) sal_Int32 ORowSetCache::compareBookmarks( const Any& _first, const Any& _second ) { - return (!_first.hasValue() || !_second.hasValue()) ? CompareBookmark::NOT_COMPARABLE : m_pCacheSet->compareBookmarks(_first,_second); + return (!_first.hasValue() || !_second.hasValue()) ? CompareBookmark::NOT_COMPARABLE : m_xCacheSet->compareBookmarks(_first,_second); } bool ORowSetCache::hasOrderedBookmarks( ) { - return m_pCacheSet->hasOrderedBookmarks(); + return m_xCacheSet->hasOrderedBookmarks(); } sal_Int32 ORowSetCache::hashBookmark( const Any& bookmark ) { - return m_pCacheSet->hashBookmark(bookmark); + return m_xCacheSet->hashBookmark(bookmark); } // XRowUpdate @@ -578,7 +565,7 @@ void ORowSetCache::updateNull(sal_Int32 columnIndex,ORowSetValueVector::Vector& rInsert[columnIndex].setModified(); io_aRow[columnIndex].setNull(); - m_pCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); + m_xCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); impl_updateRowFromCache_throw(io_aRow,o_ChangedColumns); } } @@ -598,7 +585,7 @@ void ORowSetCache::updateValue(sal_Int32 columnIndex,const ORowSetValue& x rInsert[columnIndex].setModified(); io_aRow[columnIndex] = rInsert[columnIndex]; - m_pCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); + m_xCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); impl_updateRowFromCache_throw(io_aRow,o_ChangedColumns); } } @@ -620,7 +607,7 @@ void ORowSetCache::updateCharacterStream( sal_Int32 columnIndex, const Reference rInsert[columnIndex].setModified(); io_aRow[columnIndex] = makeAny(x); - m_pCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); + m_xCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); impl_updateRowFromCache_throw(io_aRow,o_ChangedColumns); } @@ -641,7 +628,7 @@ void ORowSetCache::updateObject( sal_Int32 columnIndex, const Any& x rInsert[columnIndex].setModified(); io_aRow[columnIndex] = rInsert[columnIndex]; - m_pCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); + m_xCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); impl_updateRowFromCache_throw(io_aRow,o_ChangedColumns); } } @@ -663,7 +650,7 @@ void ORowSetCache::updateNumericObject( sal_Int32 columnIndex, const Any& x, sal rInsert[columnIndex].setModified(); io_aRow[columnIndex] = rInsert[columnIndex]; - m_pCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); + m_xCacheSet->mergeColumnValues(columnIndex,rInsert,io_aRow,o_ChangedColumns); impl_updateRowFromCache_throw(io_aRow,o_ChangedColumns); } } @@ -709,7 +696,7 @@ bool ORowSetCache::beforeFirst( ) m_bAfterLast = false; m_nPosition = 0; m_bBeforeFirst = true; - m_pCacheSet->beforeFirst(); + m_xCacheSet->beforeFirst(); moveWindow(); m_aMatrixIter = m_pMatrix->end(); } @@ -725,11 +712,11 @@ bool ORowSetCache::afterLast( ) if(!m_bRowCountFinal) { - m_pCacheSet->last_checked(false); + m_xCacheSet->last_checked(false); m_bRowCountFinal = true; - m_nRowCount = m_pCacheSet->getRow();// + 1 removed + m_nRowCount = m_xCacheSet->getRow();// + 1 removed } - m_pCacheSet->afterLast(); + m_xCacheSet->afterLast(); m_nPosition = 0; m_aMatrixIter = m_pMatrix->end(); @@ -762,7 +749,7 @@ bool ORowSetCache::fillMatrix(sal_Int32& _nNewStartPos, sal_Int32 &_nNewEndPos) i = _nNewStartPos + 1; requestedStartPos = _nNewStartPos; } - bCheck = m_pCacheSet->absolute(i); + bCheck = m_xCacheSet->absolute(i); for(; i <= _nNewEndPos; ++i,++aIter) @@ -771,15 +758,15 @@ bool ORowSetCache::fillMatrix(sal_Int32& _nNewStartPos, sal_Int32 &_nNewEndPos) { if(!aIter->is()) *aIter = new ORowSetValueVector(m_xMetaData->getColumnCount()); - m_pCacheSet->fillValueRow(*aIter,i); + m_xCacheSet->fillValueRow(*aIter,i); } else { // there are no more rows found so we can fetch some before start if(!m_bRowCountFinal) { - if(m_pCacheSet->previous_checked(false)) // because we stand after the last row - m_nRowCount = m_pCacheSet->getRow(); // here we have the row count + if(m_xCacheSet->previous_checked(false)) // because we stand after the last row + m_nRowCount = m_xCacheSet->getRow(); // here we have the row count if(!m_nRowCount) m_nRowCount = i-1; // it can be that getRow return zero m_bRowCountFinal = true; @@ -798,29 +785,29 @@ bool ORowSetCache::fillMatrix(sal_Int32& _nNewStartPos, sal_Int32 &_nNewEndPos) _nNewStartPos = nPos; _nNewEndPos = m_nRowCount; ++nPos; - bCheck = m_pCacheSet->absolute(nPos); + bCheck = m_xCacheSet->absolute(nPos); for(;bCheck && nPos <= requestedStartPos && aIter != aRealEnd; ++aIter, ++nPos) { if(!aIter->is()) *aIter = new ORowSetValueVector(m_xMetaData->getColumnCount()); - m_pCacheSet->fillValueRow(*aIter, nPos); - bCheck = m_pCacheSet->next(); + m_xCacheSet->fillValueRow(*aIter, nPos); + bCheck = m_xCacheSet->next(); } if(aIter != aEnd) ::std::rotate(m_pMatrix->begin(),aEnd,aIter); break; } - bCheck = m_pCacheSet->next(); + bCheck = m_xCacheSet->next(); } // we have to read one row forward to ensure that we know when we are on last row // but only when we don't know it already if(!m_bRowCountFinal) { - if(!m_pCacheSet->next()) + if(!m_xCacheSet->next()) { - if(m_pCacheSet->previous_checked(false)) // because we stand after the last row - m_nRowCount = m_pCacheSet->getRow(); // here we have the row count + if(m_xCacheSet->previous_checked(false)) // because we stand after the last row + m_nRowCount = m_xCacheSet->getRow(); // here we have the row count m_bRowCountFinal = true; } else @@ -848,16 +835,16 @@ void ORowSetCache::moveWindow() OSL_ENSURE(m_aMatrixIter != m_pMatrix->end(), "New m_aMatrixIter is at end(), but should not."); if(!m_aMatrixIter->is()) { - bool bOk( m_pCacheSet->absolute( m_nPosition ) ); + bool bOk( m_xCacheSet->absolute( m_nPosition ) ); if ( bOk ) { *m_aMatrixIter = new ORowSetValueVector(m_xMetaData->getColumnCount()); - m_pCacheSet->fillValueRow(*m_aMatrixIter,m_nPosition); + m_xCacheSet->fillValueRow(*m_aMatrixIter,m_nPosition); // we have to read one row forward to ensure that we know when we are on last row // but only when we don't know it already if ( !m_bRowCountFinal ) { - bOk = m_pCacheSet->absolute_checked( m_nPosition + 1,false ); + bOk = m_xCacheSet->absolute_checked( m_nPosition + 1,false ); if ( bOk ) m_nRowCount = std::max(sal_Int32(m_nPosition+1),m_nRowCount); } @@ -865,7 +852,7 @@ void ORowSetCache::moveWindow() if(!bOk && !m_bRowCountFinal) { // because we stand after the last row - m_nRowCount = m_pCacheSet->previous_checked(false) ? m_pCacheSet->getRow() : 0; + m_nRowCount = m_xCacheSet->previous_checked(false) ? m_xCacheSet->getRow() : 0; m_bRowCountFinal = true; } } @@ -894,7 +881,7 @@ void ORowSetCache::moveWindow() // then we fill in the rows between new and old start pos. bool bCheck; - bCheck = m_pCacheSet->absolute(nNewStartPos + 1); + bCheck = m_xCacheSet->absolute(nNewStartPos + 1); // m_nEndPos < nNewEndPos when window not filled (e.g. there are less rows in total than window size) m_nEndPos = std::min(nNewEndPos, m_nEndPos); @@ -975,7 +962,7 @@ void ORowSetCache::moveWindow() // There is some unused space in *m_pMatrix; fill it CHECK_MATRIX_POS(nRowsInCache); sal_Int32 nPos = m_nEndPos + 1; - bool bCheck = m_pCacheSet->absolute(nPos); + bool bCheck = m_xCacheSet->absolute(nPos); ORowSetMatrix::iterator aIter = m_pMatrix->begin() + nRowsInCache; const sal_Int32 nRowsToFetch = std::min(nNewEndPos-m_nEndPos, m_nFetchSize-nRowsInCache); const ORowSetMatrix::const_iterator aEnd = aIter + nRowsToFetch; @@ -998,7 +985,7 @@ void ORowSetCache::moveWindow() ORowSetMatrix::iterator aDataEnd = m_pMatrix->begin() + (m_nEndPos - m_nStartPos); sal_Int32 nPos = m_nEndPos + 1; - bool bCheck = m_pCacheSet->absolute(nPos); + bool bCheck = m_xCacheSet->absolute(nPos); bCheck = fill(aIter, aEnd, nPos, bCheck); // refill the region we don't need anymore //aIter and nPos are now the position *after* last filled in one! @@ -1017,12 +1004,12 @@ void ORowSetCache::moveWindow() // but only when we don't know it already bool bOk = true; if(!m_bRowCountFinal) - bOk = m_pCacheSet->next(); + bOk = m_xCacheSet->next(); if(!bOk) { - m_pCacheSet->previous_checked(false); // because we stand after the last row + m_xCacheSet->previous_checked(false); // because we stand after the last row m_nRowCount = nPos; // here we have the row count - OSL_ENSURE(nPos == m_pCacheSet->getRow(),"nPos is not valid!"); + OSL_ENSURE(nPos == m_xCacheSet->getRow(),"nPos is not valid!"); m_bRowCountFinal = true; } else if(!m_bRowCountFinal) @@ -1047,9 +1034,9 @@ void ORowSetCache::moveWindow() if ( !m_bRowCountFinal ) { - m_pCacheSet->previous_checked(false); // because we stand after the last row + m_xCacheSet->previous_checked(false); // because we stand after the last row m_nRowCount = std::max(m_nRowCount, nPos); // here we have the row count - OSL_ENSURE(nPos == m_pCacheSet->getRow(),"nPos isn't valid!"); + OSL_ENSURE(nPos == m_xCacheSet->getRow(),"nPos isn't valid!"); m_bRowCountFinal = true; } @@ -1060,15 +1047,15 @@ void ORowSetCache::moveWindow() aIter = m_pMatrix->begin(); nPos = m_nStartPos + 1; - bCheck = m_pCacheSet->absolute_checked(nPos, true); + bCheck = m_xCacheSet->absolute_checked(nPos, true); for(; !aIter->is() && bCheck;++aIter, ++nPos) { OSL_ENSURE(aIter != m_pMatrix->end(),"Invalid iterator"); *aIter = new ORowSetValueVector(m_xMetaData->getColumnCount()); - m_pCacheSet->fillValueRow(*aIter, nPos); + m_xCacheSet->fillValueRow(*aIter, nPos); - bCheck = m_pCacheSet->next(); + bCheck = m_xCacheSet->next(); } } } @@ -1089,7 +1076,7 @@ bool ORowSetCache::first( ) // Then check if the cache window is at the beginning. // If not, then position the window and fill it with data. // We move the window smartly, i.e. we clear only the rows that are out of range - bool bRet = m_pCacheSet->first(); + bool bRet = m_xCacheSet->first(); if(bRet) { m_bBeforeFirst = m_bAfterLast = false; @@ -1110,19 +1097,19 @@ bool ORowSetCache::first( ) bool ORowSetCache::last( ) { - bool bRet = m_pCacheSet->last(); + bool bRet = m_xCacheSet->last(); if(bRet) { m_bBeforeFirst = m_bAfterLast = false; if(!m_bRowCountFinal) { m_bRowCountFinal = true; - m_nRowCount = m_pCacheSet->getRow(); // not + 1 + m_nRowCount = m_xCacheSet->getRow(); // not + 1 } - m_nPosition = m_pCacheSet->getRow(); + m_nPosition = m_xCacheSet->getRow(); moveWindow(); // we have to repositioning because moveWindow can modify the cache - m_pCacheSet->last(); + m_xCacheSet->last(); OSL_ENSURE(((m_nPosition - m_nStartPos) - 1) < (sal_Int32)m_pMatrix->size(),"Position is behind end()!"); m_aMatrixIter = calcPosition(); } @@ -1265,8 +1252,8 @@ void ORowSetCache::refreshRow( ) if(isAfterLast()) throw SQLException(DBACORE_RESSTRING(RID_STR_NO_REFESH_AFTERLAST),nullptr,SQLSTATE_GENERAL,1000,Any() ); OSL_ENSURE(m_aMatrixIter != m_pMatrix->end(),"refreshRow() called for invalid row!"); - m_pCacheSet->refreshRow(); - m_pCacheSet->fillValueRow(*m_aMatrixIter,m_nPosition); + m_xCacheSet->refreshRow(); + m_xCacheSet->fillValueRow(*m_aMatrixIter,m_nPosition); if ( m_bNew ) { cancelRowModification(); @@ -1275,12 +1262,12 @@ void ORowSetCache::refreshRow( ) bool ORowSetCache::rowUpdated( ) { - return m_pCacheSet->rowUpdated(); + return m_xCacheSet->rowUpdated(); } bool ORowSetCache::rowInserted( ) { - return m_pCacheSet->rowInserted(); + return m_xCacheSet->rowInserted(); } // XResultSetUpdate @@ -1289,7 +1276,7 @@ bool ORowSetCache::insertRow(::std::vector< Any >& o_aBookmarks) if ( !m_bNew || !m_aInsertRow->is() ) throw SQLException(DBACORE_RESSTRING(RID_STR_NO_MOVETOINSERTROW_CALLED),nullptr,SQLSTATE_GENERAL,1000,Any() ); - m_pCacheSet->insertRow(*m_aInsertRow,m_aUpdateTable); + m_xCacheSet->insertRow(*m_aInsertRow,m_aUpdateTable); bool bRet( rowInserted() ); if ( bRet ) @@ -1305,9 +1292,9 @@ bool ORowSetCache::insertRow(::std::vector< Any >& o_aBookmarks) ORowSetMatrix::const_iterator aIter = m_pMatrix->begin(); for(;aIter != m_pMatrix->end();++aIter) { - if ( m_aMatrixIter != aIter && aIter->is() && m_pCacheSet->columnValuesUpdated((*aIter)->get(),rCurrentRow) ) + if ( m_aMatrixIter != aIter && aIter->is() && m_xCacheSet->columnValuesUpdated((*aIter)->get(),rCurrentRow) ) { - o_aBookmarks.push_back(lcl_getBookmark((*aIter)->get()[0],m_pCacheSet)); + o_aBookmarks.push_back(lcl_getBookmark((*aIter)->get()[0], m_xCacheSet.get())); } } } @@ -1350,7 +1337,7 @@ void ORowSetCache::updateRow( ORowSetMatrix::iterator& _rUpdateRow,::std::vector // here we don't have to reposition our CacheSet, when we try to update a row, // the row was already fetched moveToBookmark(aBookmark); - m_pCacheSet->updateRow(*_rUpdateRow,*m_aMatrixIter,m_aUpdateTable); + m_xCacheSet->updateRow(*_rUpdateRow,*m_aMatrixIter,m_aUpdateTable); // refetch the whole row (*m_aMatrixIter) = nullptr; @@ -1361,9 +1348,9 @@ void ORowSetCache::updateRow( ORowSetMatrix::iterator& _rUpdateRow,::std::vector ORowSetMatrix::const_iterator aIter = m_pMatrix->begin(); for(;aIter != m_pMatrix->end();++aIter) { - if ( m_aMatrixIter != aIter && aIter->is() && m_pCacheSet->columnValuesUpdated((*aIter)->get(),rCurrentRow) ) + if ( m_aMatrixIter != aIter && aIter->is() && m_xCacheSet->columnValuesUpdated((*aIter)->get(),rCurrentRow) ) { - o_aBookmarks.push_back(lcl_getBookmark((*aIter)->get()[0],m_pCacheSet)); + o_aBookmarks.push_back(lcl_getBookmark((*aIter)->get()[0], m_xCacheSet.get())); } } } @@ -1376,8 +1363,8 @@ bool ORowSetCache::deleteRow( ) if(isAfterLast() || isBeforeFirst()) throw SQLException(DBACORE_RESSTRING(RID_STR_NO_DELETEROW),nullptr,SQLSTATE_GENERAL,1000,Any() ); - m_pCacheSet->deleteRow(*m_aMatrixIter,m_aUpdateTable); - if ( !m_pCacheSet->rowDeleted() ) + m_xCacheSet->deleteRow(*m_aMatrixIter,m_aUpdateTable); + if ( !m_xCacheSet->rowDeleted() ) return false; --m_nRowCount; @@ -1406,8 +1393,8 @@ void ORowSetCache::cancelRowUpdates( ) ::dbtools::throwFunctionSequenceException(nullptr); } - if(m_pCacheSet->absolute(m_nPosition)) - m_pCacheSet->fillValueRow(*m_aMatrixIter,m_nPosition); + if(m_xCacheSet->absolute(m_nPosition)) + m_xCacheSet->fillValueRow(*m_aMatrixIter,m_nPosition); else { OSL_FAIL("cancelRowUpdates couldn't position right with absolute"); @@ -1709,22 +1696,22 @@ bool ORowSetCache::fill(ORowSetMatrix::iterator& _aIter, const ORowSetMatrix::co *_aIter = new ORowSetValueVector(nColumnCount); } } - m_pCacheSet->fillValueRow(*_aIter, _nPos); - _bCheck = m_pCacheSet->next(); + m_xCacheSet->fillValueRow(*_aIter, _nPos); + _bCheck = m_xCacheSet->next(); } return _bCheck; } bool ORowSetCache::isResultSetChanged() const { - return m_pCacheSet->isResultSetChanged(); + return m_xCacheSet->isResultSetChanged(); } void ORowSetCache::reset(const Reference< XResultSet>& _xDriverSet) { m_xSet = _xDriverSet; m_xMetaData.set(Reference< XResultSetMetaDataSupplier >(_xDriverSet,UNO_QUERY)->getMetaData()); - m_pCacheSet->reset(_xDriverSet); + m_xCacheSet->reset(_xDriverSet); m_bRowCountFinal = false; m_nRowCount = 0; @@ -1739,7 +1726,7 @@ void ORowSetCache::impl_updateRowFromCache_throw(ORowSetValueVector::Vector& io_ ORowSetMatrix::const_iterator aIter = m_pMatrix->begin(); for(;aIter != m_pMatrix->end();++aIter) { - if ( aIter->is() && m_pCacheSet->updateColumnValues((*aIter)->get(),io_aRow,o_ChangedColumns)) + if ( aIter->is() && m_xCacheSet->updateColumnValues((*aIter)->get(),io_aRow,o_ChangedColumns)) { break; } @@ -1747,7 +1734,7 @@ void ORowSetCache::impl_updateRowFromCache_throw(ORowSetValueVector::Vector& io_ if ( aIter == m_pMatrix->end() ) { - m_pCacheSet->fillMissingValues(io_aRow); + m_xCacheSet->fillMissingValues(io_aRow); } } } diff --git a/dbaccess/source/core/api/RowSetCache.hxx b/dbaccess/source/core/api/RowSetCache.hxx index 3dec5b7..8838254 100644 --- a/dbaccess/source/core/api/RowSetCache.hxx +++ b/dbaccess/source/core/api/RowSetCache.hxx @@ -63,9 +63,8 @@ namespace dbaccess css::uno::Reference< css::sdbc::XResultSetMetaData > m_xMetaData; // must be before m_aInsertRow css::uno::Reference< css::uno::XComponentContext> m_aContext; - css::uno::Reference< css::sdbc::XRow> m_xCacheSet; + rtl::Reference<OCacheSet> m_xCacheSet; // is a bookmarkable, keyset or static resultset - OCacheSet* m_pCacheSet; // is a bookmarkable, keyset or static resultset ORowSetMatrix* m_pMatrix; // represent the table struct ORowSetMatrix::iterator m_aMatrixIter; // represent a row of the table ORowSetMatrix::iterator m_aMatrixEnd; // present the row behind the last row of the table commit 81253afdba52ed27eaf31f15757f7a07590353e8 Author: Noel Grandin <[email protected]> Date: Fri Jan 20 12:11:48 2017 +0200 use rtl::Reference in BibFrameCtrl_Impl instead of storing both a raw pointer and a uno::Reference Change-Id: I8caa56eade25561178aa6ffd144b00f452517974 diff --git a/extensions/source/bibliography/framectr.cxx b/extensions/source/bibliography/framectr.cxx index 4dbc7eb..98160bf 100644 --- a/extensions/source/bibliography/framectr.cxx +++ b/extensions/source/bibliography/framectr.cxx @@ -164,7 +164,6 @@ BibFrameController_Impl::BibFrameController_Impl( const uno::Reference< awt::XWi BibDataManager* pDataManager) :xWindow( xComponent ) ,m_xDatMan( pDataManager ) - ,pDatMan( pDataManager ) ,pBibMod(nullptr) { bDisposing=false; @@ -176,7 +175,7 @@ BibFrameController_Impl::BibFrameController_Impl( const uno::Reference< awt::XWi BibFrameController_Impl::~BibFrameController_Impl() { mxImpl->pController = nullptr; - delete pDatMan; + m_xDatMan.clear(); if(pBibMod) CloseBibModul(pBibMod); } @@ -244,8 +243,7 @@ void BibFrameController_Impl::dispose() throw (css::uno::RuntimeException, std:: lang::EventObject aObject; aObject.Source = static_cast<XController*>(this); mxImpl->aLC.disposeAndClear(aObject); - m_xDatMan = nullptr; - pDatMan = nullptr; + m_xDatMan.clear(); aStatusListeners.clear(); } @@ -267,7 +265,7 @@ uno::Reference< frame::XDispatch > BibFrameController_Impl::queryDispatch( cons CmdToInfoCache::const_iterator pIter = rCmdCache.find( aURL.Complete ); if ( pIter != rCmdCache.end() ) { - if (( pDatMan->HasActiveConnection() ) || + if (( m_xDatMan->HasActiveConnection() ) || ( !pIter->second.bActiveConnection )) return static_cast<frame::XDispatch*>(this); } @@ -403,7 +401,7 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen OUString aCommand( _rURL.Path); if(aCommand == "Bib/Mapping") { - pDatMan->CreateMappingDialog(pParent); + m_xDatMan->CreateMappingDialog(pParent); } else if(aCommand == "Bib/source") { @@ -411,7 +409,7 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen } else if(aCommand == "Bib/sdbsource") { - OUString aURL = pDatMan->CreateDBChangeDialog(pParent); + OUString aURL = m_xDatMan->CreateDBChangeDialog(pParent); if(!aURL.isEmpty()) { try @@ -456,7 +454,7 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen aValue >>= aQueryField; BibConfig* pConfig = BibModul::GetConfig(); pConfig->setQueryField(aQueryField); - pDatMan->startQueryWith(aQuery); + m_xDatMan->startQueryWith(aQuery); } else if(aCommand == "Bib/standardFilter") { @@ -465,15 +463,15 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen uno::Reference< uno::XComponentContext > xContext = ::comphelper::getProcessComponentContext(); // create the dialog object - uno::Reference< ui::dialogs::XExecutableDialog > xDialog = sdb::FilterDialog::createWithQuery(xContext, pDatMan->getParser(), - Reference<sdbc::XRowSet>(pDatMan->getForm(), uno::UNO_QUERY_THROW), xWindow); + uno::Reference< ui::dialogs::XExecutableDialog > xDialog = sdb::FilterDialog::createWithQuery(xContext, m_xDatMan->getParser(), + Reference<sdbc::XRowSet>(m_xDatMan->getForm(), uno::UNO_QUERY_THROW), xWindow); // execute it if ( xDialog->execute( ) ) { // the dialog has been executed successfully, and the filter on the query composer // has been changed - OUString sNewFilter = pDatMan->getParser()->getFilter(); - pDatMan->setFilter( sNewFilter ); + OUString sNewFilter = m_xDatMan->getParser()->getFilter(); + m_xDatMan->setFilter( sNewFilter ); } } catch( const uno::Exception& ) @@ -485,11 +483,11 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen for ( sal_uInt16 n=0; n<nCount; n++ ) { BibStatusDispatch *pObj = aStatusListeners[n].get(); - if ( pObj->aURL.Path == "Bib/removeFilter" && pDatMan->getParser().is()) + if ( pObj->aURL.Path == "Bib/removeFilter" && m_xDatMan->getParser().is()) { FeatureStateEvent aEvent; aEvent.FeatureURL = pObj->aURL; - aEvent.IsEnabled = !pDatMan->getParser()->getFilter().isEmpty(); + aEvent.IsEnabled = !m_xDatMan->getParser()->getFilter().isEmpty(); aEvent.Requery = false; aEvent.Source = static_cast<XDispatch *>(this); pObj->xListener->statusChanged( aEvent ); @@ -508,15 +506,15 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen } else if(aCommand == "Bib/InsertRecord") { - Reference<form::runtime::XFormController > xFormCtrl = pDatMan->GetFormController(); + Reference<form::runtime::XFormController > xFormCtrl = m_xDatMan->GetFormController(); if(SaveModified(xFormCtrl)) { try { - Reference< sdbc::XResultSet > xCursor( pDatMan->getForm(), UNO_QUERY ); + Reference< sdbc::XResultSet > xCursor( m_xDatMan->getForm(), UNO_QUERY ); xCursor->last(); - Reference< XResultSetUpdate > xUpdateCursor( pDatMan->getForm(), UNO_QUERY ); + Reference< XResultSetUpdate > xUpdateCursor( m_xDatMan->getForm(), UNO_QUERY ); xUpdateCursor->moveToInsertRow(); } catch(const Exception&) @@ -527,9 +525,9 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen } else if(aCommand == "Bib/DeleteRecord") { - Reference< css::sdbc::XResultSet > xCursor(pDatMan->getForm(), UNO_QUERY); + Reference< css::sdbc::XResultSet > xCursor(m_xDatMan->getForm(), UNO_QUERY); Reference< XResultSetUpdate > xUpdateCursor(xCursor, UNO_QUERY); - Reference< beans::XPropertySet > xSet(pDatMan->getForm(), UNO_QUERY); + Reference< beans::XPropertySet > xSet(m_xDatMan->getForm(), UNO_QUERY); bool bIsNew = ::comphelper::getBOOL(xSet->getPropertyValue("IsNew")); if(!bIsNew) { @@ -545,7 +543,7 @@ void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequen bRight= !xCursor->isLast(); // ask for confirmation Reference< frame::XController > xCtrl = mxImpl->pController; - Reference< form::XConfirmDeleteListener > xConfirm(pDatMan->GetFormController(),UNO_QUERY); + Reference< form::XConfirmDeleteListener > xConfirm(m_xDatMan->GetFormController(),UNO_QUERY); if (xConfirm.is()) { sdb::RowChangeEvent aEvent; @@ -650,17 +648,17 @@ void BibFrameController_Impl::addStatusListener( else if(aURL.Path == "Bib/MenuFilter") { aEvent.IsEnabled = true; - aEvent.FeatureDescriptor=pDatMan->getQueryField(); + aEvent.FeatureDescriptor=m_xDatMan->getQueryField(); - aEvent.State <<= pDatMan->getQueryFields(); + aEvent.State <<= m_xDatMan->getQueryFields(); } else if ( aURL.Path == "Bib/source") { aEvent.IsEnabled = true; - aEvent.FeatureDescriptor=pDatMan->getActiveDataTable(); + aEvent.FeatureDescriptor=m_xDatMan->getActiveDataTable(); - aEvent.State <<= pDatMan->getDataSources(); + aEvent.State <<= m_xDatMan->getDataSources(); } else if( aURL.Path == "Bib/sdbsource" || aURL.Path == "Bib/Mapping" || @@ -676,7 +674,7 @@ void BibFrameController_Impl::addStatusListener( } else if (aURL.Path == "Bib/removeFilter" ) { - OUString aFilterStr=pDatMan->getFilter(); + OUString aFilterStr=m_xDatMan->getFilter(); aEvent.IsEnabled = !aFilterStr.isEmpty(); } else if(aURL.Path == "Cut") @@ -734,9 +732,9 @@ void BibFrameController_Impl::addStatusListener( } else if(aURL.Path == "Bib/DeleteRecord") { - Reference< css::sdbc::XResultSet > xCursor(pDatMan->getForm(), UNO_QUERY); + Reference< css::sdbc::XResultSet > xCursor(m_xDatMan->getForm(), UNO_QUERY); Reference< XResultSetUpdate > xUpdateCursor(xCursor, UNO_QUERY); - Reference< beans::XPropertySet > xSet(pDatMan->getForm(), UNO_QUERY); + Reference< beans::XPropertySet > xSet(m_xDatMan->getForm(), UNO_QUERY); bool bIsNew = ::comphelper::getBOOL(xSet->getPropertyValue("IsNew")); if(!bIsNew) { @@ -747,7 +745,7 @@ void BibFrameController_Impl::addStatusListener( } else if (aURL.Path == "Bib/InsertRecord") { - Reference< beans::XPropertySet > xSet(pDatMan->getForm(), UNO_QUERY); + Reference< beans::XPropertySet > xSet(m_xDatMan->getForm(), UNO_QUERY); aEvent.IsEnabled = canInsertRecords(xSet); } aListener->statusChanged( aEvent ); @@ -779,7 +777,7 @@ void BibFrameController_Impl::removeStatusListener( void BibFrameController_Impl::RemoveFilter() { OUString aQuery; - pDatMan->startQueryWith(aQuery); + m_xDatMan->startQueryWith(aQuery); sal_uInt16 nCount = aStatusListeners.size(); @@ -830,15 +828,16 @@ void BibFrameController_Impl::ChangeDataSource(const uno::Sequence< beans::Prope uno::Any aDB = pPropertyValue[1].Value; OUString aURL; aDB >>= aURL; - pDatMan->setActiveDataSource(aURL); - aDBTableName = pDatMan->getActiveDataTable(); + m_xDatMan->setActiveDataSource(aURL); + aDBTableName = m_xDatMan->getActiveDataTable(); } else { - m_xDatMan->unload(); - pDatMan->setActiveDataTable(aDBTableName); - pDatMan->updateGridModel(); - m_xDatMan->load(); + Reference<css::form::XLoadable> xLoadable(m_xDatMan.get()); + xLoadable->unload(); + m_xDatMan->setActiveDataTable(aDBTableName); + m_xDatMan->updateGridModel(); + xLoadable->load(); } @@ -856,9 +855,9 @@ void BibFrameController_Impl::ChangeDataSource(const uno::Sequence< beans::Prope aEvent.IsEnabled = true; aEvent.Requery = false; aEvent.Source = static_cast<XDispatch *>(this); - aEvent.FeatureDescriptor=pDatMan->getQueryField(); + aEvent.FeatureDescriptor=m_xDatMan->getQueryField(); - uno::Sequence<OUString> aStringSeq=pDatMan->getQueryFields(); + uno::Sequence<OUString> aStringSeq=m_xDatMan->getQueryFields(); aEvent.State = makeAny( aStringSeq ); pObj->xListener->statusChanged( aEvent ); diff --git a/extensions/source/bibliography/framectr.hxx b/extensions/source/bibliography/framectr.hxx index 6810af9..5a51b04 100644 --- a/extensions/source/bibliography/framectr.hxx +++ b/extensions/source/bibliography/framectr.hxx @@ -66,8 +66,7 @@ friend class BibFrameCtrl_Impl; css::uno::Reference< css::frame::XFrame > xFrame; bool bDisposing; bool bHierarchical; - css::uno::Reference< css::form::XLoadable > m_xDatMan; - BibDataManager* pDatMan; + rtl::Reference<BibDataManager> m_xDatMan; HdlBibModul pBibMod; DECL_LINK( DisposeHdl, void*, void ); commit f7db2b5b3ffe7bff84636cdd0017e85a439b8c4f Author: Noel Grandin <[email protected]> Date: Fri Jan 20 12:05:56 2017 +0200 use rtl::Reference in OSelectionChangeListener instead of manual acquire/release Change-Id: I33e3018b5deb4240d4aff1d8136ae6f8f538c779 diff --git a/comphelper/source/misc/SelectionMultiplex.cxx b/comphelper/source/misc/SelectionMultiplex.cxx index f7122d4..15c2c94 100644 --- a/comphelper/source/misc/SelectionMultiplex.cxx +++ b/comphelper/source/misc/SelectionMultiplex.cxx @@ -44,19 +44,8 @@ void OSelectionChangeListener::_disposing(const EventObject&) void OSelectionChangeListener::setAdapter(OSelectionChangeMultiplexer* pAdapter) { - if (m_pAdapter) - { - ::osl::MutexGuard aGuard(m_rMutex); - m_pAdapter->release(); - m_pAdapter = nullptr; - } - - if (pAdapter) - { - ::osl::MutexGuard aGuard(m_rMutex); - m_pAdapter = pAdapter; - m_pAdapter->acquire(); - } + ::osl::MutexGuard aGuard(m_rMutex); + m_xAdapter = pAdapter; } OSelectionChangeMultiplexer::OSelectionChangeMultiplexer(OSelectionChangeListener* _pListener, const Reference< XSelectionSupplier>& _rxSet) diff --git a/include/comphelper/SelectionMultiplex.hxx b/include/comphelper/SelectionMultiplex.hxx index c63cd8f..552ce3b 100644 --- a/include/comphelper/SelectionMultiplex.hxx +++ b/include/comphelper/SelectionMultiplex.hxx @@ -24,6 +24,7 @@ #include <com/sun/star/view/XSelectionSupplier.hpp> #include <cppuhelper/implbase.hxx> #include <comphelper/comphelperdllapi.h> +#include <rtl/ref.hxx> //= selection helper classes @@ -43,12 +44,12 @@ namespace comphelper { friend class OSelectionChangeMultiplexer; - OSelectionChangeMultiplexer* m_pAdapter; - ::osl::Mutex& m_rMutex; + rtl::Reference<OSelectionChangeMultiplexer> m_xAdapter; + ::osl::Mutex& m_rMutex; public: OSelectionChangeListener(::osl::Mutex& _rMutex) - : m_pAdapter(nullptr), m_rMutex(_rMutex) { } + : m_rMutex(_rMutex) { } virtual ~OSelectionChangeListener(); /// @throws css::uno::RuntimeException _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
