diff options
Diffstat (limited to 'connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx')
-rw-r--r-- | connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx | 110 |
1 files changed, 54 insertions, 56 deletions
diff --git a/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx b/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx index 6b9ea06247f5..d8745f1a0d7e 100644 --- a/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx +++ b/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx @@ -27,6 +27,7 @@ #include <comphelper/sequence.hxx> #include <cppuhelper/supportsservice.hxx> #include <connectivity/dbexception.hxx> +#include <o3tl/safeint.hxx> #include <o3tl/unreachable.hxx> #include <TConnection.hxx> @@ -42,10 +43,8 @@ using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet() - :ODatabaseMetaDataResultSet_BASE(m_aMutex) - ,::comphelper::OPropertyContainer(ODatabaseMetaDataResultSet_BASE::rBHelper) - ,m_aStatement(nullptr) - ,m_nColPos(0) + : + m_nColPos(0) ,m_bBOF(true) ,m_bEOF(true) { @@ -54,10 +53,8 @@ ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet() ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet( MetaDataResultSetType _eType ) - :ODatabaseMetaDataResultSet_BASE(m_aMutex) - ,::comphelper::OPropertyContainer(ODatabaseMetaDataResultSet_BASE::rBHelper) - ,m_aStatement(nullptr) - ,m_nColPos(0) + : + m_nColPos(0) ,m_bBOF(true) ,m_bEOF(true) { @@ -106,12 +103,11 @@ void ODatabaseMetaDataResultSet::setType(MetaDataResultSetType _eType) } } -void ODatabaseMetaDataResultSet::disposing() +void ODatabaseMetaDataResultSet::disposing(std::unique_lock<std::mutex>& rGuard) { - OPropertySetHelper::disposing(); + OPropertySetHelper::disposing(rGuard); - ::osl::MutexGuard aGuard(m_aMutex); - m_aStatement = nullptr; + m_aStatement.clear(); m_xMetaData.clear(); m_aRowsIter = m_aRows.end(); m_aRows.clear(); @@ -152,11 +148,10 @@ void ODatabaseMetaDataResultSet::setRows(ORows&& _rRows) sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& columnName ) { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); + std::unique_lock aGuard( m_aMutex ); + throwIfDisposed(aGuard); - - Reference< XResultSetMetaData > xMeta = getMetaData(); + Reference< XResultSetMetaData > xMeta = getMetaData(aGuard); sal_Int32 nLen = xMeta->getColumnCount(); sal_Int32 i = 1; for(;i<=nLen;++i) @@ -171,9 +166,9 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::findColumn( const OUString& colum O3TL_UNREACHABLE; } -void ODatabaseMetaDataResultSet::checkIndex(sal_Int32 columnIndex ) +void ODatabaseMetaDataResultSet::checkIndex(std::unique_lock<std::mutex>& /*rGuard*/, sal_Int32 columnIndex ) { - if(columnIndex >= static_cast<sal_Int32>((*m_aRowsIter).size()) || columnIndex < 1) + if(columnIndex < 1 || o3tl::make_unsigned(columnIndex) >= (*m_aRowsIter).size()) ::dbtools::throwInvalidIndexException(*this); } @@ -244,9 +239,13 @@ sal_Int64 SAL_CALL ODatabaseMetaDataResultSet::getLong( sal_Int32 columnIndex ) Reference< XResultSetMetaData > SAL_CALL ODatabaseMetaDataResultSet::getMetaData( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); + std::unique_lock aGuard( m_aMutex ); + return getMetaData(aGuard); +} +Reference< XResultSetMetaData > ODatabaseMetaDataResultSet::getMetaData( std::unique_lock<std::mutex>& rGuard ) +{ + throwIfDisposed(rGuard); if(!m_xMetaData.is()) m_xMetaData = new ODatabaseMetaDataResultSetMetaData(); @@ -307,28 +306,28 @@ css::util::DateTime SAL_CALL ODatabaseMetaDataResultSet::getTimestamp( sal_Int32 } -sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isAfterLast( ) +sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isAfterLast() { return m_bEOF; } - -SAL_WNOUNREACHABLE_CODE_PUSH +bool ODatabaseMetaDataResultSet::isAfterLast( std::unique_lock<std::mutex>& /*rGuard*/) +{ + return m_bEOF; +} sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isFirst( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isLast( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } -SAL_WNOUNREACHABLE_CODE_POP - void SAL_CALL ODatabaseMetaDataResultSet::beforeFirst( ) { @@ -344,49 +343,44 @@ void SAL_CALL ODatabaseMetaDataResultSet::afterLast( ) void SAL_CALL ODatabaseMetaDataResultSet::close( ) { { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); - + std::unique_lock aGuard( m_aMutex ); + throwIfDisposed(aGuard); } dispose(); } -SAL_WNOUNREACHABLE_CODE_PUSH - sal_Bool SAL_CALL ODatabaseMetaDataResultSet::first( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } sal_Bool SAL_CALL ODatabaseMetaDataResultSet::last( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } sal_Bool SAL_CALL ODatabaseMetaDataResultSet::absolute( sal_Int32 /*row*/ ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } sal_Bool SAL_CALL ODatabaseMetaDataResultSet::relative( sal_Int32 /*row*/ ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } sal_Bool SAL_CALL ODatabaseMetaDataResultSet::previous( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } -SAL_WNOUNREACHABLE_CODE_POP - Reference< XInterface > SAL_CALL ODatabaseMetaDataResultSet::getStatement( ) { @@ -394,39 +388,44 @@ Reference< XInterface > SAL_CALL ODatabaseMetaDataResultSet::getStatement( ) } -SAL_WNOUNREACHABLE_CODE_PUSH - sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowDeleted( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowInserted( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } sal_Bool SAL_CALL ODatabaseMetaDataResultSet::rowUpdated( ) { ::dbtools::throwFunctionSequenceException(*this); - return false; + O3TL_UNREACHABLE; } -SAL_WNOUNREACHABLE_CODE_POP - -sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isBeforeFirst( ) +sal_Bool SAL_CALL ODatabaseMetaDataResultSet::isBeforeFirst() { return m_bBOF; } +bool ODatabaseMetaDataResultSet::isBeforeFirst(std::unique_lock<std::mutex>& /*rGuard*/) +{ + return m_bBOF; +} sal_Bool SAL_CALL ODatabaseMetaDataResultSet::next( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); + std::unique_lock aGuard( m_aMutex ); + return next(aGuard); +} + +bool ODatabaseMetaDataResultSet::next( std::unique_lock<std::mutex>& rGuard ) +{ + throwIfDisposed(rGuard); if ( m_bBOF ) { @@ -454,9 +453,8 @@ sal_Bool SAL_CALL ODatabaseMetaDataResultSet::next( ) sal_Bool SAL_CALL ODatabaseMetaDataResultSet::wasNull( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); - + std::unique_lock aGuard( m_aMutex ); + throwIfDisposed(aGuard); if(m_aRowsIter == m_aRows.end() || !(*m_aRowsIter)[m_nColPos].is()) return true; @@ -633,13 +631,13 @@ ORowSetValueDecorator& ORowSetValueDecorator::operator=(const ORowSetValue& _aVa const ORowSetValue& ODatabaseMetaDataResultSet::getValue(sal_Int32 columnIndex) { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); + std::unique_lock aGuard( m_aMutex ); + throwIfDisposed(aGuard); - if ( isBeforeFirst() || isAfterLast() ) + if ( isBeforeFirst(aGuard) || isAfterLast(aGuard) ) ::dbtools::throwFunctionSequenceException( *this ); - checkIndex(columnIndex ); + checkIndex(aGuard, columnIndex); m_nColPos = columnIndex; if(m_aRowsIter != m_aRows.end() && (*m_aRowsIter)[columnIndex].is()) |