diff options
Diffstat (limited to 'connectivity/source')
593 files changed, 9347 insertions, 8149 deletions
diff --git a/connectivity/source/commontools/AutoRetrievingBase.cxx b/connectivity/source/commontools/AutoRetrievingBase.cxx index d1170fdd972b..99327f27eeb5 100644 --- a/connectivity/source/commontools/AutoRetrievingBase.cxx +++ b/connectivity/source/commontools/AutoRetrievingBase.cxx @@ -20,6 +20,7 @@ #include <AutoRetrievingBase.hxx> #include <osl/diagnose.h> +#include <o3tl/string_view.hxx> namespace connectivity { @@ -39,7 +40,7 @@ namespace connectivity { // we need a table name sal_Int32 nIntoIndex = sStmt.indexOf("INTO ") + 5; while (nIntoIndex<sStmt.getLength() && sStmt[nIntoIndex]==' ') ++nIntoIndex; - const OUString sTableName = sStmt.getToken(0, ' ', nIntoIndex); + const std::u16string_view sTableName = o3tl::getToken(sStmt, 0, ' ', nIntoIndex); return m_sGeneratedValueStatement.replaceAt(nTableIndex, strlen(sTable), sTableName); } return m_sGeneratedValueStatement; diff --git a/connectivity/source/commontools/BlobHelper.cxx b/connectivity/source/commontools/BlobHelper.cxx index 591fe961e517..f1f048a7318e 100644 --- a/connectivity/source/commontools/BlobHelper.cxx +++ b/connectivity/source/commontools/BlobHelper.cxx @@ -20,6 +20,7 @@ #include <comphelper/seqstream.hxx> #include <connectivity/dbexception.hxx> #include <com/sun/star/sdbc/SQLException.hpp> +#include <o3tl/unreachable.hxx> using namespace connectivity; using namespace dbtools; @@ -47,25 +48,16 @@ css::uno::Reference< css::io::XInputStream > SAL_CALL BlobHelper::getBinaryStrea return new ::comphelper::SequenceInputStream(m_aValue); } - -// The "return" after a call to throwFeatureNotImplementedSQLException() -// (which always throws) will be detected as unreachable when doing -// global inlining. - -SAL_WNOUNREACHABLE_CODE_PUSH - ::sal_Int64 SAL_CALL BlobHelper::position( const css::uno::Sequence< ::sal_Int8 >& /*pattern*/, ::sal_Int64 /*start*/ ) { ::dbtools::throwFeatureNotImplementedSQLException( "XBlob::position", *this ); - return 0; + O3TL_UNREACHABLE; } ::sal_Int64 SAL_CALL BlobHelper::positionOfBlob( const css::uno::Reference< css::sdbc::XBlob >& /*pattern*/, ::sal_Int64 /*start*/ ) { ::dbtools::throwFeatureNotImplementedSQLException( "XBlob::positionOfBlob", *this ); - return 0; + O3TL_UNREACHABLE; } -SAL_WNOUNREACHABLE_CODE_POP - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/commontools/CommonTools.cxx b/connectivity/source/commontools/CommonTools.cxx index 223129a71e92..b5f7ce50fe74 100644 --- a/connectivity/source/commontools/CommonTools.cxx +++ b/connectivity/source/commontools/CommonTools.cxx @@ -29,9 +29,8 @@ #include <osl/diagnose.h> #include <rtl/character.hxx> #include <rtl/process.h> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> -using namespace ::comphelper; static sal_Unicode rtl_ascii_toUpperCase( sal_Unicode ch ) { return ch >= 0x0061 && ch <= 0x007a ? ch + 0x20 : ch; @@ -40,8 +39,6 @@ static sal_Unicode rtl_ascii_toUpperCase( sal_Unicode ch ) namespace connectivity { using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; - using namespace ::com::sun::star::beans; using namespace ::com::sun::star::java; using namespace dbtools; @@ -120,10 +117,10 @@ namespace connectivity { Reference< XJavaVM > xVM = JavaVirtualMachine::create(_rxContext); - Sequence<sal_Int8> processID(16); - rtl_getGlobalProcessId( reinterpret_cast<sal_uInt8*>(processID.getArray()) ); - processID.realloc(17); - processID[16] = 0; + Sequence<sal_Int8> processID(17); // 16 + 1 + auto pprocessID = processID.getArray(); + rtl_getGlobalProcessId( reinterpret_cast<sal_uInt8*>(pprocessID) ); + pprocessID[16] = 0; // RETURN_VIRTUALMACHINE Any uaJVM = xVM->getJavaVM( processID ); sal_Int64 nTemp; @@ -165,15 +162,15 @@ namespace connectivity namespace dbtools { -static bool isCharOk(sal_Unicode c,const OUString& _rSpecials) +static bool isCharOk(sal_Unicode c, std::u16string_view _rSpecials) { return ( ((c >= 97) && (c <= 122)) || ((c >= 65) && (c <= 90)) || ((c >= 48) && (c <= 57)) || - c == '_' || _rSpecials.indexOf(c) != -1); + c == '_' || _rSpecials.find(c) != std::u16string_view::npos); } -bool isValidSQLName(const OUString& rName,const OUString& _rSpecials) +bool isValidSQLName(const OUString& rName, std::u16string_view _rSpecials) { // Test for correct naming (in SQL sense) // This is important for table names for example @@ -202,7 +199,7 @@ bool isValidSQLName(const OUString& rName,const OUString& _rSpecials) } // Creates a new name if necessary -OUString convertName2SQLName(const OUString& rName,const OUString& _rSpecials) +OUString convertName2SQLName(const OUString& rName, std::u16string_view _rSpecials) { if(isValidSQLName(rName,_rSpecials)) return rName; @@ -221,10 +218,10 @@ OUString convertName2SQLName(const OUString& rName,const OUString& _rSpecials) return aNewName.makeStringAndClear(); } -OUString quoteName(const OUString& _rQuote, const OUString& _rName) +OUString quoteName(std::u16string_view _rQuote, const OUString& _rName) { OUString sName = _rName; - if( !_rQuote.isEmpty() && _rQuote.toChar() != ' ') + if( !_rQuote.empty() && _rQuote[0] != ' ') sName = _rQuote + _rName + _rQuote; return sName; } diff --git a/connectivity/source/commontools/ConnectionWrapper.cxx b/connectivity/source/commontools/ConnectionWrapper.cxx index d7d999058a24..b8e45fb027e7 100644 --- a/connectivity/source/commontools/ConnectionWrapper.cxx +++ b/connectivity/source/commontools/ConnectionWrapper.cxx @@ -25,7 +25,6 @@ #include <comphelper/servicehelper.hxx> #include <comphelper/hash.hxx> #include <cppuhelper/supportsservice.hxx> -#include <cppuhelper/typeprovider.hxx> #include <com/sun/star/reflection/ProxyFactory.hpp> #include <algorithm> @@ -123,7 +122,7 @@ css::uno::Sequence< OUString > SAL_CALL OConnectionWrapper::getSupportedServiceN { sal_Int32 nLen = aSupported.getLength(); aSupported.realloc( nLen + 1 ); - aSupported[ nLen ] = sConnectionService; + aSupported.getArray()[ nLen ] = sConnectionService; } // outta here @@ -154,8 +153,8 @@ Sequence< Type > SAL_CALL OConnectionWrapper::getTypes( ) // css::lang::XUnoTunnel sal_Int64 SAL_CALL OConnectionWrapper::getSomething( const Sequence< sal_Int8 >& rId ) { - if (isUnoTunnelId<OConnectionWrapper>(rId)) - return reinterpret_cast< sal_Int64 >( this ); + if (comphelper::isUnoTunnelId<OConnectionWrapper>(rId)) + return comphelper::getSomething_cast(this); if(m_xUnoTunnel.is()) return m_xUnoTunnel->getSomething(rId); @@ -163,11 +162,10 @@ sal_Int64 SAL_CALL OConnectionWrapper::getSomething( const Sequence< sal_Int8 >& } -Sequence< sal_Int8 > OConnectionWrapper::getUnoTunnelId() +const Sequence< sal_Int8 > & OConnectionWrapper::getUnoTunnelId() { - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); + static const comphelper::UnoIdInit implId; + return implId.getSeq(); } namespace @@ -201,9 +199,10 @@ void OConnectionWrapper::createUniqueId( const OUString& _rURL if ( !_rPassword.isEmpty() ) sha1.update(reinterpret_cast<unsigned char const*>(_rPassword.getStr()), _rPassword.getLength() * sizeof(sal_Unicode)); // now we need to sort the properties - std::sort(_rInfo.begin(),_rInfo.end(),TPropertyValueLessFunctor()); + auto [begin, end] = asNonConstRange(_rInfo); + std::sort(begin,end,TPropertyValueLessFunctor()); - for (PropertyValue const & prop : std::as_const(_rInfo)) + for (PropertyValue const& prop : _rInfo) { // we only include strings an integer values OUString sValue; @@ -219,7 +218,7 @@ void OConnectionWrapper::createUniqueId( const OUString& _rURL Sequence< OUString> aSeq; if ( prop.Value >>= aSeq ) { - for(OUString const & s : std::as_const(aSeq)) + for (OUString const& s : aSeq) sha1.update(reinterpret_cast<unsigned char const*>(s.getStr()), s.getLength() * sizeof(sal_Unicode)); } } diff --git a/connectivity/source/commontools/DateConversion.cxx b/connectivity/source/commontools/DateConversion.cxx index 09b80f62653c..0895881d7ee3 100644 --- a/connectivity/source/commontools/DateConversion.cxx +++ b/connectivity/source/commontools/DateConversion.cxx @@ -33,7 +33,7 @@ #include <comphelper/types.hxx> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::connectivity; @@ -83,16 +83,7 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal, { OUString aTemp; _rxTypeConverter->convertToSimpleType(_rVal, TypeClass_STRING) >>= aTemp; - sal_Int32 nIndex = sal_Int32(-2); - const OUString sQuot("\'"); - do - { - nIndex += 2; - nIndex = aTemp.indexOf(sQuot,nIndex); - if(nIndex != -1) - aTemp = aTemp.replaceAt(nIndex,sQuot.getLength(), "\'\'"); - } while (nIndex != -1); - + aTemp = aTemp.replaceAll(u"\'", u"\'\'"); aRet.append(aTemp); } aRet.append("'"); @@ -134,9 +125,9 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal, // check if this is really a timestamp or only a date if ( bOk ) { - aRet.append("{ts '"); - aRet.append(DBTypeConversion::toDateTimeString(aDateTime)); - aRet.append("'}"); + aRet.append("{ts '" + + DBTypeConversion::toDateTimeString(aDateTime) + + "'}"); break; } break; @@ -162,9 +153,9 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal, else bOk = _rVal >>= aDate; OSL_ENSURE( bOk, "DBTypeConversion::toSQLString: _rVal is not date!"); - aRet.append("{d '"); - aRet.append(DBTypeConversion::toDateString(aDate)); - aRet.append("'}"); + aRet.append("{d '" + + DBTypeConversion::toDateString(aDate) + + "'}"); } break; case DataType::TIME: { @@ -187,9 +178,9 @@ OUString DBTypeConversion::toSQLString(sal_Int32 eType, const Any& _rVal, else bOk = _rVal >>= aTime; OSL_ENSURE( bOk,"DBTypeConversion::toSQLString: _rVal is not time!"); - aRet.append("{t '"); - aRet.append(DBTypeConversion::toTimeString(aTime)); - aRet.append("'}"); + aRet.append("{t '" + + DBTypeConversion::toTimeString(aTime) + + "'}"); } break; } } diff --git a/connectivity/source/commontools/DriversConfig.cxx b/connectivity/source/commontools/DriversConfig.cxx index c95d30091184..26a241e3f829 100644 --- a/connectivity/source/commontools/DriversConfig.cxx +++ b/connectivity/source/commontools/DriversConfig.cxx @@ -16,9 +16,13 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <config_fuzzers.h> + #include <connectivity/DriversConfig.hxx> +#include <o3tl/string_view.hxx> #include <tools/wldcrd.hxx> #include <comphelper/sequence.hxx> +#include <utility> using namespace connectivity; using namespace utl; @@ -117,8 +121,8 @@ const TInstalledDrivers& DriversConfigImpl::getInstalledDrivers(const uno::Refer return m_aDrivers; } -DriversConfig::DriversConfig(const uno::Reference< uno::XComponentContext >& _rxORB) -:m_xORB(_rxORB) +DriversConfig::DriversConfig(uno::Reference< uno::XComponentContext > _xORB) +:m_xORB(std::move(_xORB)) { } @@ -146,6 +150,11 @@ DriversConfig& DriversConfig::operator=( const DriversConfig& _rhs ) OUString DriversConfig::getDriverFactoryName(std::u16string_view _sURL) const { +#if ENABLE_FUZZERS + if (o3tl::starts_with(_sURL, u"sdbc:dbase:")) + return "com.sun.star.comp.sdbc.dbase.ODriver"; +#endif + const TInstalledDrivers& rDrivers = m_aNode->getInstalledDrivers(m_xORB); OUString sRet; OUString sOldPattern; diff --git a/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx b/connectivity/source/commontools/FDatabaseMetaDataResultSet.cxx index 24be4d72a6ce..3f59f4646bc1 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> @@ -36,16 +37,13 @@ using namespace cppu; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; 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 +52,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,24 +102,23 @@ 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(); m_aRowsIter = m_aRows.end(); } -void SAL_CALL ODatabaseMetaDataResultSet::acquire() throw() +void SAL_CALL ODatabaseMetaDataResultSet::acquire() noexcept { ODatabaseMetaDataResultSet_BASE::acquire(); } -void SAL_CALL ODatabaseMetaDataResultSet::release() throw() +void SAL_CALL ODatabaseMetaDataResultSet::release() noexcept { ODatabaseMetaDataResultSet_BASE::release(); } @@ -143,20 +138,19 @@ Sequence< Type > SAL_CALL ODatabaseMetaDataResultSet::getTypes( ) return ::comphelper::concatSequences(aTypes.getTypes(),ODatabaseMetaDataResultSet_BASE::getTypes()); } -void ODatabaseMetaDataResultSet::setRows(const ORows& _rRows) +void ODatabaseMetaDataResultSet::setRows(ORows&& _rRows) { - m_aRows = _rRows; + m_aRows = std::move(_rRows); m_bBOF = true; m_bEOF = m_aRows.empty(); } 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 +165,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); } @@ -190,43 +184,43 @@ Reference< css::io::XInputStream > SAL_CALL ODatabaseMetaDataResultSet::getChara sal_Bool SAL_CALL ODatabaseMetaDataResultSet::getBoolean( sal_Int32 columnIndex ) { - return bool(getValue(columnIndex)); + return getValue(columnIndex).getBool(); } sal_Int8 SAL_CALL ODatabaseMetaDataResultSet::getByte( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getInt8(); } Sequence< sal_Int8 > SAL_CALL ODatabaseMetaDataResultSet::getBytes( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getSequence(); } css::util::Date SAL_CALL ODatabaseMetaDataResultSet::getDate( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getDate(); } double SAL_CALL ODatabaseMetaDataResultSet::getDouble( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getDouble(); } float SAL_CALL ODatabaseMetaDataResultSet::getFloat( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getFloat(); } sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getInt( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getInt32(); } @@ -238,15 +232,19 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSet::getRow( ) sal_Int64 SAL_CALL ODatabaseMetaDataResultSet::getLong( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getLong(); } 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(); @@ -285,50 +283,50 @@ Any SAL_CALL ODatabaseMetaDataResultSet::getObject( sal_Int32 columnIndex, const sal_Int16 SAL_CALL ODatabaseMetaDataResultSet::getShort( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getInt16(); } OUString SAL_CALL ODatabaseMetaDataResultSet::getString( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getString(); } css::util::Time SAL_CALL ODatabaseMetaDataResultSet::getTime( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getTime(); } css::util::DateTime SAL_CALL ODatabaseMetaDataResultSet::getTimestamp( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getDateTime(); } -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 +342,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 +387,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 +452,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; @@ -496,128 +493,126 @@ Any SAL_CALL ODatabaseMetaDataResultSet::getWarnings( ) void ODatabaseMetaDataResultSet::setProceduresMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setProceduresMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setCatalogsMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setCatalogsMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setSchemasMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setSchemasMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setColumnPrivilegesMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setColumnPrivilegesMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setColumnsMap() { - - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setColumnsMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setTablesMap() { - - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setTablesMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setProcedureColumnsMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setProcedureColumnsMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setPrimaryKeysMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setPrimaryKeysMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setIndexInfoMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setIndexInfoMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setTablePrivilegesMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setTablePrivilegesMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setCrossReferenceMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setCrossReferenceMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setVersionColumnsMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setVersionColumnsMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setBestRowIdentifierMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setBestRowIdentifierMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setTypeInfoMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setTypeInfoMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setUDTsMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setUDTsMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setTableTypes() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setTableTypes(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setExportedKeysMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setExportedKeysMap(); m_xMetaData = pMetaData; } void ODatabaseMetaDataResultSet::setImportedKeysMap() { - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(); pMetaData->setImportedKeysMap(); m_xMetaData = pMetaData; } @@ -635,13 +630,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()) @@ -824,7 +819,7 @@ void SAL_CALL ODatabaseMetaDataResultSet::initialize( const Sequence< Any >& _aA } aRowsToSet.push_back(aRowToSet); } // for (; pRowsIter != pRowsEnd;++pRowsIter - setRows(aRowsToSet); + setRows(std::move(aRowsToSet)); } // XServiceInfo diff --git a/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx b/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx index 561953a0796c..291ce7a7d96b 100644 --- a/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx +++ b/connectivity/source/commontools/FDatabaseMetaDataResultSetMetaData.cxx @@ -22,9 +22,7 @@ #include <com/sun/star/sdbc/ColumnValue.hpp> using namespace connectivity; -using namespace ::com::sun::star::uno; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; ODatabaseMetaDataResultSetMetaData::~ODatabaseMetaDataResultSetMetaData() { diff --git a/connectivity/source/commontools/FValue.cxx b/connectivity/source/commontools/FValue.cxx index 2f1cabbd4520..4ac0235ac4e4 100644 --- a/connectivity/source/commontools/FValue.cxx +++ b/connectivity/source/commontools/FValue.cxx @@ -945,20 +945,20 @@ OUString ORowSetValue::getString( ) const aRet = m_aValue.m_pString; break; case DataType::FLOAT: - aRet = OUString::number(static_cast<float>(*this)); + aRet = OUString::number(getFloat()); break; case DataType::DOUBLE: case DataType::REAL: - aRet = OUString::number(static_cast<double>(*this)); + aRet = OUString::number(getDouble()); break; case DataType::DATE: - aRet = DBTypeConversion::toDateString(*this); + aRet = DBTypeConversion::toDateString(getDate()); break; case DataType::TIME: - aRet = DBTypeConversion::toTimeString(*this); + aRet = DBTypeConversion::toTimeString(getTime()); break; case DataType::TIMESTAMP: - aRet = DBTypeConversion::toDateTimeString(*this); + aRet = DBTypeConversion::toDateTimeString(getDateTime()); break; case DataType::BINARY: case DataType::VARBINARY: @@ -974,24 +974,24 @@ OUString ORowSetValue::getString( ) const } break; case DataType::BIT: - aRet = OUString::number(int(static_cast<bool>(*this))); + aRet = OUString::number(int(getBool())); break; case DataType::BOOLEAN: - aRet = OUString::boolean(static_cast<bool>(*this)); + aRet = OUString::boolean(getBool()); break; case DataType::TINYINT: case DataType::SMALLINT: case DataType::INTEGER: if ( m_bSigned ) - aRet = OUString::number(static_cast<sal_Int32>(*this)); + aRet = OUString::number(getInt32()); else - aRet = OUString::number(static_cast<sal_uInt32>(*this)); + aRet = OUString::number(getUInt32()); break; case DataType::BIGINT: if ( m_bSigned ) - aRet = OUString::number(static_cast<sal_Int64>(*this)); + aRet = OUString::number(getLong()); else - aRet = OUString::number(static_cast<sal_uInt64>(*this)); + aRet = OUString::number(getULong()); break; case DataType::CLOB: { @@ -1041,7 +1041,7 @@ bool ORowSetValue::getBool() const case DataType::DECIMAL: case DataType::NUMERIC: - bRet = OUString(m_aValue.m_pString).toInt32() != 0; + bRet = OUString::unacquired(&m_aValue.m_pString).toInt32() != 0; break; case DataType::FLOAT: bRet = m_aValue.m_nFloat != 0.0; @@ -1098,7 +1098,7 @@ sal_Int8 ORowSetValue::getInt8() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = sal_Int8(OUString(m_aValue.m_pString).toInt32()); + nRet = sal_Int8(OUString::unacquired(&m_aValue.m_pString).toInt32()); break; case DataType::FLOAT: nRet = sal_Int8(m_aValue.m_nFloat); @@ -1169,7 +1169,7 @@ sal_uInt8 ORowSetValue::getUInt8() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = sal_uInt8(OUString(m_aValue.m_pString).toInt32()); + nRet = sal_uInt8(OUString::unacquired(&m_aValue.m_pString).toInt32()); break; case DataType::FLOAT: nRet = sal_uInt8(m_aValue.m_nFloat); @@ -1244,7 +1244,7 @@ sal_Int16 ORowSetValue::getInt16() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = sal_Int16(OUString(m_aValue.m_pString).toInt32()); + nRet = sal_Int16(OUString::unacquired(&m_aValue.m_pString).toInt32()); break; case DataType::FLOAT: nRet = sal_Int16(m_aValue.m_nFloat); @@ -1315,7 +1315,7 @@ sal_uInt16 ORowSetValue::getUInt16() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = sal_uInt16(OUString(m_aValue.m_pString).toInt32()); + nRet = sal_uInt16(OUString::unacquired(&m_aValue.m_pString).toInt32()); break; case DataType::FLOAT: nRet = sal_uInt16(m_aValue.m_nFloat); @@ -1386,7 +1386,7 @@ sal_Int32 ORowSetValue::getInt32() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = OUString(m_aValue.m_pString).toInt32(); + nRet = OUString::unacquired(&m_aValue.m_pString).toInt32(); break; case DataType::FLOAT: nRet = sal_Int32(m_aValue.m_nFloat); @@ -1459,7 +1459,7 @@ sal_uInt32 ORowSetValue::getUInt32() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = OUString(m_aValue.m_pString).toUInt32(); + nRet = OUString::unacquired(&m_aValue.m_pString).toUInt32(); break; case DataType::FLOAT: nRet = sal_uInt32(m_aValue.m_nFloat); @@ -1532,7 +1532,7 @@ sal_Int64 ORowSetValue::getLong() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = OUString(m_aValue.m_pString).toInt64(); + nRet = OUString::unacquired(&m_aValue.m_pString).toInt64(); break; case DataType::FLOAT: nRet = sal_Int64(m_aValue.m_nFloat); @@ -1605,7 +1605,7 @@ sal_uInt64 ORowSetValue::getULong() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = OUString(m_aValue.m_pString).toUInt64(); + nRet = OUString::unacquired(&m_aValue.m_pString).toUInt64(); break; case DataType::FLOAT: nRet = sal_uInt64(m_aValue.m_nFloat); @@ -1678,7 +1678,7 @@ float ORowSetValue::getFloat() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = OUString(m_aValue.m_pString).toFloat(); + nRet = OUString::unacquired(&m_aValue.m_pString).toFloat(); break; case DataType::FLOAT: nRet = m_aValue.m_nFloat; @@ -1754,7 +1754,7 @@ double ORowSetValue::getDouble() const case DataType::DECIMAL: case DataType::NUMERIC: case DataType::LONGVARCHAR: - nRet = OUString(m_aValue.m_pString).toDouble(); + nRet = OUString::unacquired(&m_aValue.m_pString).toDouble(); break; case DataType::FLOAT: nRet = m_aValue.m_nFloat; @@ -1907,7 +1907,7 @@ css::util::Date ORowSetValue::getDate() const case DataType::FLOAT: case DataType::DOUBLE: case DataType::REAL: - aValue = DBTypeConversion::toDate(static_cast<double>(*this)); + aValue = DBTypeConversion::toDate(getDouble()); break; case DataType::DATE: @@ -1927,7 +1927,7 @@ css::util::Date ORowSetValue::getDate() const case DataType::SMALLINT: case DataType::INTEGER: case DataType::BIGINT: - aValue = DBTypeConversion::toDate( double( sal_Int64( *this ) ) ); + aValue = DBTypeConversion::toDate( double( getLong() ) ); break; case DataType::BLOB: @@ -1962,12 +1962,12 @@ css::util::Time ORowSetValue::getTime() const break; case DataType::DECIMAL: case DataType::NUMERIC: - aValue = DBTypeConversion::toTime(static_cast<double>(*this)); + aValue = DBTypeConversion::toTime(getDouble()); break; case DataType::FLOAT: case DataType::DOUBLE: case DataType::REAL: - aValue = DBTypeConversion::toTime(static_cast<double>(*this)); + aValue = DBTypeConversion::toTime(getDouble()); break; case DataType::TIMESTAMP: { @@ -2006,12 +2006,12 @@ css::util::DateTime ORowSetValue::getDateTime() const break; case DataType::DECIMAL: case DataType::NUMERIC: - aValue = DBTypeConversion::toDateTime(static_cast<double>(*this)); + aValue = DBTypeConversion::toDateTime(getDouble()); break; case DataType::FLOAT: case DataType::DOUBLE: case DataType::REAL: - aValue = DBTypeConversion::toDateTime(static_cast<double>(*this)); + aValue = DBTypeConversion::toDateTime(getDouble()); break; case DataType::DATE: { @@ -2285,11 +2285,11 @@ void ORowSetValue::impl_fill( const sal_Int32 _nType, bool _bNullable, const det (*this) = _rValueSource.getLong(); break; case DataType::CLOB: - (*this) = css::uno::makeAny(_rValueSource.getClob()); + (*this) = css::uno::Any(_rValueSource.getClob()); setTypeKind(DataType::CLOB); break; case DataType::BLOB: - (*this) = css::uno::makeAny(_rValueSource.getBlob()); + (*this) = css::uno::Any(_rValueSource.getBlob()); setTypeKind(DataType::BLOB); break; case DataType::OTHER: diff --git a/connectivity/source/commontools/ParameterSubstitution.cxx b/connectivity/source/commontools/ParameterSubstitution.cxx index ca96cf331406..6fa55780803f 100644 --- a/connectivity/source/commontools/ParameterSubstitution.cxx +++ b/connectivity/source/commontools/ParameterSubstitution.cxx @@ -20,6 +20,7 @@ #include <connectivity/sqlparse.hxx> #include <comphelper/sequenceashashmap.hxx> #include <cppuhelper/supportsservice.hxx> +#include <utility> namespace connectivity { @@ -28,7 +29,7 @@ namespace connectivity using namespace ::com::sun::star::lang; using namespace ::com::sun::star; - ParameterSubstitution::ParameterSubstitution(const css::uno::Reference< css::uno::XComponentContext >& _rxContext ) : m_xContext(_rxContext) + ParameterSubstitution::ParameterSubstitution(css::uno::Reference< css::uno::XComponentContext > _xContext ) : m_xContext(std::move(_xContext)) { } void SAL_CALL ParameterSubstitution::initialize( const uno::Sequence< uno::Any >& _aArguments ) diff --git a/connectivity/source/commontools/RowFunctionParser.cxx b/connectivity/source/commontools/RowFunctionParser.cxx index 21f5e638a651..f8799848de9b 100644 --- a/connectivity/source/commontools/RowFunctionParser.cxx +++ b/connectivity/source/commontools/RowFunctionParser.cxx @@ -38,6 +38,7 @@ #endif #include <algorithm> #include <stack> +#include <utility> namespace connectivity { @@ -56,8 +57,8 @@ class ConstantValueExpression : public ExpressionNode public: - explicit ConstantValueExpression( ORowSetValueDecoratorRef const & rValue ) : - maValue( rValue ) + explicit ConstantValueExpression(ORowSetValueDecoratorRef aValue) + : maValue(std::move(aValue)) { } virtual ORowSetValueDecoratorRef evaluate(const ODatabaseMetaDataResultSet::ORow& /*_aRow*/ ) const override @@ -81,10 +82,10 @@ class BinaryFunctionExpression : public ExpressionNode public: - BinaryFunctionExpression( const ExpressionFunct eFunct, const std::shared_ptr<ExpressionNode>& rFirstArg, const std::shared_ptr<ExpressionNode>& rSecondArg ) : + BinaryFunctionExpression( const ExpressionFunct eFunct, std::shared_ptr<ExpressionNode> xFirstArg, std::shared_ptr<ExpressionNode> xSecondArg ) : meFunct( eFunct ), - mpFirstArg( rFirstArg ), - mpSecondArg( rSecondArg ) + mpFirstArg(std::move( xFirstArg )), + mpSecondArg(std::move( xSecondArg )) { } virtual ORowSetValueDecoratorRef evaluate(const ODatabaseMetaDataResultSet::ORow& _aRow ) const override @@ -93,13 +94,13 @@ public: switch(meFunct) { case ExpressionFunct::Equation: - aRet = new ORowSetValueDecorator( mpFirstArg->evaluate(_aRow )->getValue() == mpSecondArg->evaluate(_aRow )->getValue() ); + aRet = new ORowSetValueDecorator( ORowSetValue(mpFirstArg->evaluate(_aRow )->getValue() == mpSecondArg->evaluate(_aRow )->getValue()) ); break; case ExpressionFunct::And: - aRet = new ORowSetValueDecorator( mpFirstArg->evaluate(_aRow )->getValue().getBool() && mpSecondArg->evaluate(_aRow )->getValue().getBool() ); + aRet = new ORowSetValueDecorator( ORowSetValue(mpFirstArg->evaluate(_aRow )->getValue().getBool() && mpSecondArg->evaluate(_aRow )->getValue().getBool()) ); break; case ExpressionFunct::Or: - aRet = new ORowSetValueDecorator( mpFirstArg->evaluate(_aRow )->getValue().getBool() || mpSecondArg->evaluate(_aRow )->getValue().getBool() ); + aRet = new ORowSetValueDecorator( ORowSetValue(mpFirstArg->evaluate(_aRow )->getValue().getBool() || mpSecondArg->evaluate(_aRow )->getValue().getBool()) ); break; default: break; @@ -148,14 +149,14 @@ class ConstantFunctor public: - explicit ConstantFunctor( const ParserContextSharedPtr& rContext ) : - mpContext( rContext ) + explicit ConstantFunctor( ParserContextSharedPtr xContext ) : + mpContext(std::move( xContext )) { } void operator()( StringIteratorT rFirst,StringIteratorT rSecond) const { OUString sVal( rFirst, rSecond - rFirst, RTL_TEXTENCODING_UTF8 ); - mpContext->maOperandStack.push( std::make_shared<ConstantValueExpression>( new ORowSetValueDecorator( sVal ) ) ); + mpContext->maOperandStack.push(std::make_shared<ConstantValueExpression>(ORowSetValueDecoratorRef(new ORowSetValueDecorator(sVal)))); } }; @@ -166,13 +167,13 @@ class IntConstantFunctor ParserContextSharedPtr mpContext; public: - explicit IntConstantFunctor( const ParserContextSharedPtr& rContext ) : - mpContext( rContext ) + explicit IntConstantFunctor( ParserContextSharedPtr xContext ) : + mpContext(std::move( xContext )) { } void operator()( sal_Int32 n ) const { - mpContext->maOperandStack.push( std::make_shared<ConstantValueExpression>( new ORowSetValueDecorator( n ) ) ); + mpContext->maOperandStack.push(std::make_shared<ConstantValueExpression>(ORowSetValueDecoratorRef(new ORowSetValueDecorator(n)))); } }; @@ -190,9 +191,9 @@ class BinaryFunctionFunctor public: - BinaryFunctionFunctor( const ExpressionFunct eFunct, const ParserContextSharedPtr& rContext ) : + BinaryFunctionFunctor( const ExpressionFunct eFunct, ParserContextSharedPtr xContext ) : meFunct( eFunct ), - mpContext( rContext ) + mpContext(std::move( xContext )) { } @@ -223,8 +224,8 @@ class UnaryFunctionExpression : public ExpressionNode std::shared_ptr<ExpressionNode> mpArg; public: - explicit UnaryFunctionExpression( const std::shared_ptr<ExpressionNode>& rArg ) : - mpArg( rArg ) + explicit UnaryFunctionExpression( std::shared_ptr<ExpressionNode> xArg ) : + mpArg(std::move( xArg )) { } virtual ORowSetValueDecoratorRef evaluate(const ODatabaseMetaDataResultSet::ORow& _aRow ) const override @@ -242,8 +243,8 @@ class UnaryFunctionFunctor public: - explicit UnaryFunctionFunctor(const ParserContextSharedPtr& rContext) - : mpContext(rContext) + explicit UnaryFunctionFunctor(ParserContextSharedPtr xContext) + : mpContext(std::move(xContext)) { } void operator()( StringIteratorT, StringIteratorT ) const @@ -290,8 +291,8 @@ public: @param rParserContext Contains context info for the parser */ - explicit ExpressionGrammar( const ParserContextSharedPtr& rParserContext ) : - mpParserContext( rParserContext ) + explicit ExpressionGrammar( ParserContextSharedPtr xParserContext ) : + mpParserContext(std::move( xParserContext )) { } diff --git a/connectivity/source/commontools/TColumnsHelper.cxx b/connectivity/source/commontools/TColumnsHelper.cxx index 8671df0b042f..aeb8b48a649a 100644 --- a/connectivity/source/commontools/TColumnsHelper.cxx +++ b/connectivity/source/commontools/TColumnsHelper.cxx @@ -34,10 +34,8 @@ using namespace connectivity; using namespace dbtools; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; namespace connectivity { @@ -111,7 +109,7 @@ sdbcx::ObjectType OColumnsHelper::createObject(const OUString& _rName) m_pTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_CATALOGNAME)) >>= aCatalog; m_pTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_SCHEMANAME)) >>= aSchema; m_pTable->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)) >>= aTable; - connectivity::sdbcx::OColumn* pRet = new connectivity::sdbcx::OColumn(_rName, + rtl::Reference<connectivity::sdbcx::OColumn> pRet = new connectivity::sdbcx::OColumn(_rName, pColDesc->aField6, pColDesc->sField13, pColDesc->sField12, diff --git a/connectivity/source/commontools/TConnection.cxx b/connectivity/source/commontools/TConnection.cxx index 134aa5960115..c730946a56b7 100644 --- a/connectivity/source/commontools/TConnection.cxx +++ b/connectivity/source/commontools/TConnection.cxx @@ -18,7 +18,6 @@ */ #include <TConnection.hxx> -#include <cppuhelper/typeprovider.hxx> #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> @@ -27,7 +26,6 @@ using namespace connectivity; using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::sdbc; -using namespace com::sun::star::beans; using namespace ::osl; @@ -57,16 +55,13 @@ void OMetaConnection::disposing() //XUnoTunnel sal_Int64 SAL_CALL OMetaConnection::getSomething( const css::uno::Sequence< sal_Int8 >& rId ) { - return (isUnoTunnelId<OMetaConnection>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : sal_Int64(0); + return comphelper::getSomethingImpl(rId, this); } -Sequence< sal_Int8 > OMetaConnection::getUnoTunnelId() +const Sequence< sal_Int8 > & OMetaConnection::getUnoTunnelId() { - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); + static const comphelper::UnoIdInit implId; + return implId.getSeq(); } ::dbtools::OPropertyMap& OMetaConnection::getPropMap() @@ -75,7 +70,7 @@ Sequence< sal_Int8 > OMetaConnection::getUnoTunnelId() return s_aPropertyNameMap; } -void OMetaConnection::throwGenericSQLException(const char* pErrorResourceId, const Reference< XInterface>& _xContext ) +void OMetaConnection::throwGenericSQLException(TranslateId pErrorResourceId, const Reference< XInterface>& _xContext ) { OUString sErrorMessage; if (pErrorResourceId) diff --git a/connectivity/source/commontools/TDatabaseMetaDataBase.cxx b/connectivity/source/commontools/TDatabaseMetaDataBase.cxx index e5823278095e..bd2b7a467142 100644 --- a/connectivity/source/commontools/TDatabaseMetaDataBase.cxx +++ b/connectivity/source/commontools/TDatabaseMetaDataBase.cxx @@ -17,6 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <sal/config.h> + +#include <cstddef> + #include <TDatabaseMetaDataBase.hxx> #include <RowFunctionParser.hxx> @@ -139,11 +143,11 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaDataBase::getTypeInfo( ) ::connectivity::ODatabaseMetaDataResultSet::ORow aRow; aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); const sal_Int32* pType = pTypes; - for (sal_Int32 i = 1; i <= sal_Int32(SAL_N_ELEMENTS(pTypes)); ++i,++pType) + for (std::size_t i = 1; i <= std::size(pTypes); ++i,++pType) { ORowSetValue aValue; aValue.fill(i,*pType,xRow); - aRow.push_back(new ORowSetValueDecorator(aValue)); + aRow.push_back(new ORowSetValueDecorator(std::move(aValue))); } std::vector<std::shared_ptr<ExpressionNode>>::iterator aIter = aConditions.begin(); @@ -163,10 +167,9 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaDataBase::getTypeInfo( ) m_aTypeInfoRows = aTypeInfoRows; } } - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); - Reference< XResultSet > xRet = pResult; - pResult->setRows(m_aTypeInfoRows); - return xRet; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); + pResult->setRows(std::vector(m_aTypeInfoRows)); + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaDataBase::getExportedKeys( diff --git a/connectivity/source/commontools/TIndex.cxx b/connectivity/source/commontools/TIndex.cxx index f7f891308e40..32112bcdbe17 100644 --- a/connectivity/source/commontools/TIndex.cxx +++ b/connectivity/source/commontools/TIndex.cxx @@ -27,10 +27,7 @@ using namespace connectivity; using namespace connectivity::sdbcx; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OIndexHelper::OIndexHelper( OTableHelper* _pTable) : connectivity::sdbcx::OIndex(true) , m_pTable(_pTable) diff --git a/connectivity/source/commontools/TIndexColumns.cxx b/connectivity/source/commontools/TIndexColumns.cxx index bbb5ca706f20..d190bb2af312 100644 --- a/connectivity/source/commontools/TIndexColumns.cxx +++ b/connectivity/source/commontools/TIndexColumns.cxx @@ -30,8 +30,6 @@ using namespace connectivity::sdbcx; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OIndexColumns::OIndexColumns( OIndexHelper* _pIndex, ::osl::Mutex& _rMutex, @@ -82,17 +80,16 @@ sdbcx::ObjectType OIndexColumns::createObject(const OUString& _rName) sal_Int32 nNull = xRow->getInt(11); OUString aColumnDef(xRow->getString(13)); - OIndexColumn* pRet = new OIndexColumn(bAsc, - _rName, - aTypeName, - aColumnDef, - nNull, - nSize, - nDec, - nDataType, - true, - aCatalog, aSchema, aTable); - xRet = pRet; + xRet = new OIndexColumn(bAsc, + _rName, + aTypeName, + aColumnDef, + nNull, + nSize, + nDec, + nDataType, + true, + aCatalog, aSchema, aTable); break; } } diff --git a/connectivity/source/commontools/TIndexes.cxx b/connectivity/source/commontools/TIndexes.cxx index 5a8c7c29a0f4..723b4a447a18 100644 --- a/connectivity/source/commontools/TIndexes.cxx +++ b/connectivity/source/commontools/TIndexes.cxx @@ -37,7 +37,6 @@ using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace cppu; @@ -101,10 +100,9 @@ sdbcx::ObjectType OIndexesHelper::createObject(const OUString& _rName) catch(const Exception&) { } - OIndexHelper* pRet = new OIndexHelper(m_pTable,aName,aQualifier,bUnique, + xRet = new OIndexHelper(m_pTable,aName,aQualifier,bUnique, bPrimarKeyIndex, nClustered == IndexType::CLUSTERED); - xRet = pRet; break; } } @@ -153,10 +151,10 @@ sdbcx::ObjectType OIndexesHelper::appendObject( const OUString& _rForName, const OUString aComposedName = dbtools::composeTableName(m_pTable->getMetaData(),aCatalog,aSchema,aTable, true, ::dbtools::EComposeRule::InIndexDefinitions); if (!_rForName.isEmpty() ) { - aSql.append( ::dbtools::quoteName( aQuote, _rForName ) ); - aSql.append(" ON "); - aSql.append(aComposedName); - aSql.append(" ( "); + aSql.append( ::dbtools::quoteName( aQuote, _rForName ) + + " ON " + + aComposedName + + " ( "); Reference<XColumnsSupplier> xColumnSup(descriptor,UNO_QUERY); Reference<XIndexAccess> xColumns(xColumnSup->getColumns(),UNO_QUERY); @@ -193,8 +191,8 @@ sdbcx::ObjectType OIndexesHelper::appendObject( const OUString& _rForName, const xColumns->getByIndex(0) >>= xColProp; - aSql.append("."); - aSql.append(::dbtools::quoteName( aQuote,comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME))))); + aSql.append("." + + ::dbtools::quoteName( aQuote,comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME))))); } Reference< XStatement > xStmt = m_pTable->getConnection()->createStatement( ); diff --git a/connectivity/source/commontools/TKey.cxx b/connectivity/source/commontools/TKey.cxx index 1341291abcf3..3a16cf86a5a0 100644 --- a/connectivity/source/commontools/TKey.cxx +++ b/connectivity/source/commontools/TKey.cxx @@ -26,10 +26,7 @@ using namespace connectivity; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OTableKeyHelper::OTableKeyHelper(OTableHelper* _pTable) : connectivity::sdbcx::OKey(true) ,m_pTable(_pTable) diff --git a/connectivity/source/commontools/TKeyColumns.cxx b/connectivity/source/commontools/TKeyColumns.cxx index acbfc54bf000..a26628765417 100644 --- a/connectivity/source/commontools/TKeyColumns.cxx +++ b/connectivity/source/commontools/TKeyColumns.cxx @@ -31,8 +31,6 @@ using namespace connectivity::sdbcx; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OKeyColumnsHelper::OKeyColumnsHelper( OTableKeyHelper* _pKey, @@ -99,19 +97,18 @@ sdbcx::ObjectType OKeyColumnsHelper::createObject(const OUString& _rName) // sometimes we get an error when asking for this param } - OKeyColumn* pRet = new OKeyColumn(aRefColumnName, - _rName, - aTypeName, - sColumnDef, - nNull, - nSize, - nDec, - nDataType, - isCaseSensitive(), - aCatalog, - aSchema, - aTable); - xRet = pRet; + xRet = new OKeyColumn(aRefColumnName, + _rName, + aTypeName, + sColumnDef, + nNull, + nSize, + nDec, + nDataType, + isCaseSensitive(), + aCatalog, + aSchema, + aTable); } } } diff --git a/connectivity/source/commontools/TKeys.cxx b/connectivity/source/commontools/TKeys.cxx index 4c223624dc3d..427ab524162e 100644 --- a/connectivity/source/commontools/TKeys.cxx +++ b/connectivity/source/commontools/TKeys.cxx @@ -40,7 +40,6 @@ using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OKeysHelper::OKeysHelper( OTableHelper* _pTable, @@ -57,14 +56,12 @@ sdbcx::ObjectType OKeysHelper::createObject(const OUString& _rName) if(!_rName.isEmpty()) { - OTableKeyHelper* pRet = new OTableKeyHelper(m_pTable,_rName,m_pTable->getKeyProperties(_rName)); - xRet = pRet; + xRet = new OTableKeyHelper(m_pTable,_rName,m_pTable->getKeyProperties(_rName)); } if(!xRet.is()) // we have a primary key with a system name { - OTableKeyHelper* pRet = new OTableKeyHelper(m_pTable,_rName,m_pTable->getKeyProperties(_rName)); - xRet = pRet; + xRet = new OTableKeyHelper(m_pTable,_rName,m_pTable->getKeyProperties(_rName)); } return xRet; @@ -157,12 +154,11 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re { // if we're here, we belong to a table which is not new, i.e. already exists in the database. // In this case, really append the new index. - OUStringBuffer aSql; - aSql.append("ALTER TABLE "); + OUStringBuffer aSql("ALTER TABLE "); OUString aQuote = m_pTable->getConnection()->getMetaData()->getIdentifierQuoteString( ); - aSql.append(composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable, ::dbtools::EComposeRule::InTableDefinitions, true )); - aSql.append(" ADD "); + aSql.append(composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable, ::dbtools::EComposeRule::InTableDefinitions, true ) + + " ADD "); if ( nKeyType == KeyType::PRIMARY ) { @@ -190,9 +186,9 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re if ( nKeyType == KeyType::FOREIGN ) { - aSql.append(" REFERENCES "); - aSql.append(::dbtools::quoteTableName(m_pTable->getConnection()->getMetaData(),sReferencedName,::dbtools::EComposeRule::InTableDefinitions)); - aSql.append(" ("); + aSql.append(" REFERENCES " + + ::dbtools::quoteTableName(m_pTable->getConnection()->getMetaData(),sReferencedName,::dbtools::EComposeRule::InTableDefinitions) + + " ("); for(sal_Int32 i=0;i<xColumns->getCount();++i) { @@ -202,9 +198,9 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re aSql.append(::dbtools::quoteName( aQuote,getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_RELATEDCOLUMN))))); } - aSql.append(")"); - aSql.append(getKeyRuleString(true ,nUpdateRule)); - aSql.append(getKeyRuleString(false ,nDeleteRule)); + aSql.append(")" + + getKeyRuleString(true ,nUpdateRule) + + getKeyRuleString(false ,nDeleteRule)); } Reference< XStatement > xStmt = m_pTable->getConnection()->createStatement( ); @@ -238,7 +234,7 @@ sdbcx::ObjectType OKeysHelper::appendObject( const OUString& _rForName, const Re OUString sName = xRow->getString(nColumn); if ( !m_pElements->exists(sName) ) // this name wasn't inserted yet so it must be the new one { - descriptor->setPropertyValue( rPropMap.getNameByIndex( PROPERTY_ID_NAME ), makeAny( sName ) ); + descriptor->setPropertyValue( rPropMap.getNameByIndex( PROPERTY_ID_NAME ), Any( sName ) ); sNewName = sName; break; } @@ -274,10 +270,9 @@ void OKeysHelper::dropObject(sal_Int32 _nPos, const OUString& _sElementName) } else { - OUStringBuffer aSql; - aSql.append("ALTER TABLE "); - - aSql.append( composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable,::dbtools::EComposeRule::InTableDefinitions, true )); + OUStringBuffer aSql( + "ALTER TABLE " + + composeTableName( m_pTable->getConnection()->getMetaData(), m_pTable,::dbtools::EComposeRule::InTableDefinitions, true )); sal_Int32 nKeyType = KeyType::PRIMARY; if ( xKey.is() ) diff --git a/connectivity/source/commontools/TPrivilegesResultSet.cxx b/connectivity/source/commontools/TPrivilegesResultSet.cxx index de255d3cb8c1..71a6986239f5 100644 --- a/connectivity/source/commontools/TPrivilegesResultSet.cxx +++ b/connectivity/source/commontools/TPrivilegesResultSet.cxx @@ -21,9 +21,7 @@ using namespace connectivity; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -38,11 +36,8 @@ OResultSetPrivileges::OResultSetPrivileges( const Reference< XDatabaseMetaData>& osl_atomic_increment( &m_refCount ); { OUString sUserWorkingFor; - Sequence< OUString > sTableTypes(3); // we want all catalogues, all schemas, all tables - sTableTypes[0] = "VIEW"; - sTableTypes[1] = "TABLE"; - sTableTypes[2] = "%"; // just to be sure to include anything else... + Sequence< OUString > sTableTypes {"VIEW", "TABLE", "%"}; // this last one is just to be sure to include anything else... try { m_xTables = _rxMeta->getTables(catalog,schemaPattern,tableNamePattern,sTableTypes); @@ -77,7 +72,7 @@ OResultSetPrivileges::OResultSetPrivileges( const Reference< XDatabaseMetaData>& aRow[6] = new ORowSetValueDecorator(OUString("REFERENCE")); aRows.push_back(aRow); - setRows(aRows); + setRows(std::move(aRows)); } osl_atomic_decrement( &m_refCount ); } @@ -107,17 +102,17 @@ const ORowSetValue& OResultSetPrivileges::getValue(sal_Int32 columnIndex) return ODatabaseMetaDataResultSet::getValue(columnIndex); } -void SAL_CALL OResultSetPrivileges::disposing() +void OResultSetPrivileges::disposing(std::unique_lock<std::mutex>& rGuard) { - ODatabaseMetaDataResultSet::disposing(); + ODatabaseMetaDataResultSet::disposing(rGuard); m_xTables.clear(); m_xRow.clear(); } sal_Bool SAL_CALL OResultSetPrivileges::next( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - checkDisposed(ODatabaseMetaDataResultSet_BASE::rBHelper.bDisposed ); + std::unique_lock aGuard( m_aMutex ); + throwIfDisposed(aGuard); bool bReturn = false; if ( m_xTables.is() ) @@ -129,7 +124,7 @@ sal_Bool SAL_CALL OResultSetPrivileges::next( ) return false; } - bReturn = ODatabaseMetaDataResultSet::next(); + bReturn = ODatabaseMetaDataResultSet::next(aGuard); if ( !bReturn ) { m_bBOF = false; diff --git a/connectivity/source/commontools/TSortIndex.cxx b/connectivity/source/commontools/TSortIndex.cxx index 6b94216a3719..44a883dc86c4 100644 --- a/connectivity/source/commontools/TSortIndex.cxx +++ b/connectivity/source/commontools/TSortIndex.cxx @@ -94,10 +94,10 @@ struct TKeyValueFunc return pKeySet; } -OSortIndex::OSortIndex( const std::vector<OKeyType>& _aKeyType, - const std::vector<TAscendingOrder>& _aAscending) - :m_aKeyType(_aKeyType) - ,m_aAscending(_aAscending) +OSortIndex::OSortIndex( std::vector<OKeyType>&& _aKeyType, + std::vector<TAscendingOrder>&& _aAscending) + :m_aKeyType(std::move(_aKeyType)) + ,m_aAscending(std::move(_aAscending)) ,m_bFrozen(false) { } diff --git a/connectivity/source/commontools/TTableHelper.cxx b/connectivity/source/commontools/TTableHelper.cxx index 03724d669704..27c874636069 100644 --- a/connectivity/source/commontools/TTableHelper.cxx +++ b/connectivity/source/commontools/TTableHelper.cxx @@ -181,7 +181,7 @@ void SAL_CALL OTableHelper::disposing() ::osl::MutexGuard aGuard(m_aMutex); if ( m_pImpl->m_xTablePropertyListener.is() ) { - m_pTables->removeContainerListener(m_pImpl->m_xTablePropertyListener.get()); + m_pTables->removeContainerListener(m_pImpl->m_xTablePropertyListener); m_pImpl->m_xTablePropertyListener->clear(); m_pImpl->m_xTablePropertyListener.clear(); } @@ -200,20 +200,17 @@ namespace void lcl_collectColumnDescs_throw( const Reference< XResultSet >& _rxResult, std::vector< ColumnDesc >& _out_rColumns ) { Reference< XRow > xRow( _rxResult, UNO_QUERY_THROW ); - OUString sName; - OrdinalPosition nOrdinalPosition( 0 ); while ( _rxResult->next() ) { - sName = xRow->getString( 4 ); // COLUMN_NAME - sal_Int32 nField5 = xRow->getInt(5); - OUString aField6 = xRow->getString(6); - sal_Int32 nField7 = xRow->getInt(7) - , nField9 = xRow->getInt(9) - , nField11= xRow->getInt(11); - OUString sField12 = xRow->getString(12) - ,sField13 = xRow->getString(13); - nOrdinalPosition = xRow->getInt( 17 ); // ORDINAL_POSITION - _out_rColumns.push_back( ColumnDesc( sName,nField5,aField6,nField7,nField9,nField11,sField12,sField13, nOrdinalPosition ) ); + _out_rColumns.emplace_back(xRow->getString(4), // COLUMN_NAME, + xRow->getInt(5), + xRow->getString(6), + xRow->getInt(7), + xRow->getInt(9), + xRow->getInt(11), + xRow->getString(12), + xRow->getString(13), + xRow->getInt(17)); // ORDINAL_POSITION } } @@ -296,7 +293,7 @@ void OTableHelper::refreshColumns() if(m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = createColumns(aVector); + m_xColumns.reset(createColumns(aVector)); } const ColumnDesc* OTableHelper::getColumnDescription(const OUString& _sName) const @@ -387,7 +384,7 @@ void OTableHelper::refreshForeignKeys(::std::vector< OUString>& _rNames) { if ( !m_pImpl->m_xTablePropertyListener.is() ) m_pImpl->m_xTablePropertyListener = new OTableContainerListener(this); - m_pTables->addContainerListener(m_pImpl->m_xTablePropertyListener.get()); + m_pTables->addContainerListener(m_pImpl->m_xTablePropertyListener); m_pImpl->m_xTablePropertyListener->add(sReferencedName); } // if ( m_pTables->hasByName(sReferencedName) ) sOldFKName = sFkName; @@ -413,10 +410,10 @@ void OTableHelper::refreshKeys() { refreshPrimaryKeys(aNames); refreshForeignKeys(aNames); - m_xKeys = createKeys(aNames); + m_xKeys.reset(createKeys(aNames)); } // if(!isNew()) else if (!m_xKeys ) - m_xKeys = createKeys(aNames); + m_xKeys.reset(createKeys(aNames)); /*if(m_pKeys) m_pKeys->reFill(aVector); else*/ @@ -460,7 +457,7 @@ void OTableHelper::refreshIndexes() if(m_xIndexes) m_xIndexes->reFill(aVector); else - m_xIndexes = createIndexes(aVector); + m_xIndexes.reset(createIndexes(aVector)); } OUString OTableHelper::getRenameStart() const @@ -549,6 +546,11 @@ OUString SAL_CALL OTableHelper::getName() return sComposedName; } +const OUString & OTableHelper::getTableName() +{ + return m_Name; +} + std::shared_ptr<sdbcx::KeyProperties> OTableHelper::getKeyProperties(const OUString& _sName) const { std::shared_ptr<sdbcx::KeyProperties> pKeyProps; diff --git a/connectivity/source/commontools/conncleanup.cxx b/connectivity/source/commontools/conncleanup.cxx index 210c618d6a60..7b703f093c80 100644 --- a/connectivity/source/commontools/conncleanup.cxx +++ b/connectivity/source/commontools/conncleanup.cxx @@ -23,7 +23,7 @@ #include <com/sun/star/sdbc/XRowSet.hpp> #include <com/sun/star/sdbc/XConnection.hpp> #include <osl/diagnose.h> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace dbtools @@ -35,7 +35,7 @@ namespace dbtools using namespace css::sdbc; using namespace css::lang; - constexpr OUStringLiteral ACTIVE_CONNECTION_PROPERTY_NAME = u"ActiveConnection"; + constexpr OUString ACTIVE_CONNECTION_PROPERTY_NAME = u"ActiveConnection"_ustr; OAutoConnectionDisposer::OAutoConnectionDisposer(const Reference< XRowSet >& _rxRowSet, const Reference< XConnection >& _rxConnection) :m_xRowSet( _rxRowSet ) @@ -50,7 +50,7 @@ namespace dbtools try { - xProps->setPropertyValue( ACTIVE_CONNECTION_PROPERTY_NAME, makeAny( _rxConnection ) ); + xProps->setPropertyValue( ACTIVE_CONNECTION_PROPERTY_NAME, Any( _rxConnection ) ); m_xOriginalConnection = _rxConnection; startPropertyListening( xProps ); } @@ -78,7 +78,7 @@ namespace dbtools void OAutoConnectionDisposer::stopPropertyListening( const Reference< XPropertySet >& _rxEventSource ) { // prevent deletion of ourself while we're herein - Reference< XInterface > xKeepAlive(static_cast< XWeak* >(this)); + Reference< XInterface > xKeepAlive(getXWeak()); try { // remove ourself as property change listener diff --git a/connectivity/source/commontools/dbcharset.cxx b/connectivity/source/commontools/dbcharset.cxx index ebe45c028207..381afa606e08 100644 --- a/connectivity/source/commontools/dbcharset.cxx +++ b/connectivity/source/commontools/dbcharset.cxx @@ -18,6 +18,7 @@ */ #include <connectivity/dbcharset.hxx> +#include <utility> #include <osl/diagnose.h> #include <rtl/tencinfo.h> @@ -92,15 +93,15 @@ namespace dbtools } - OCharsetMap::CharsetIterator OCharsetMap::findIanaName(const OUString& _rIanaName) const + OCharsetMap::CharsetIterator OCharsetMap::findIanaName(std::u16string_view _rIanaName) const { ensureConstructed( ); rtl_TextEncoding eEncoding = RTL_TEXTENCODING_DONTKNOW; - if ( !_rIanaName.isEmpty() ) + if ( !_rIanaName.empty() ) { // byte string conversion - OString sMimeByteString( _rIanaName.getStr(), _rIanaName.getLength(), RTL_TEXTENCODING_ASCII_US ); + OString sMimeByteString = OUStringToOString( _rIanaName, RTL_TEXTENCODING_ASCII_US ); // look up eEncoding = rtl_getTextEncodingFromMimeCharset( sMimeByteString.getStr() ); @@ -129,15 +130,15 @@ namespace dbtools } - CharsetIteratorDerefHelper:: CharsetIteratorDerefHelper(const rtl_TextEncoding _eEncoding, const OUString& _rIanaName ) + CharsetIteratorDerefHelper:: CharsetIteratorDerefHelper(const rtl_TextEncoding _eEncoding, OUString _aIanaName ) :m_eEncoding( _eEncoding ) - ,m_aIanaName( _rIanaName ) + ,m_aIanaName(std::move( _aIanaName )) { } - OCharsetMap::CharsetIterator::CharsetIterator(const OCharsetMap* _pContainer, OCharsetMap::TextEncBag::const_iterator const & _aPos ) + OCharsetMap::CharsetIterator::CharsetIterator(const OCharsetMap* _pContainer, OCharsetMap::TextEncBag::const_iterator _aPos ) :m_pContainer( _pContainer ) - ,m_aPos( _aPos ) + ,m_aPos(std::move( _aPos )) { OSL_ENSURE( m_pContainer, "OCharsetMap::CharsetIterator::CharsetIterator : invalid container!" ); } diff --git a/connectivity/source/commontools/dbconversion.cxx b/connectivity/source/commontools/dbconversion.cxx index dbe942a3fd01..4dd7d5b8e9f3 100644 --- a/connectivity/source/commontools/dbconversion.cxx +++ b/connectivity/source/commontools/dbconversion.cxx @@ -18,15 +18,16 @@ */ #include <connectivity/dbconversion.hxx> -#include <osl/diagnose.h> #include <com/sun/star/sdbc/SQLException.hpp> #include <com/sun/star/util/Date.hpp> #include <com/sun/star/util/Time.hpp> #include <com/sun/star/util/DateTime.hpp> #include <rtl/character.hxx> -#include <rtl/ustrbuf.hxx> #include <rtl/math.hxx> +#include <sal/log.hxx> #include <unotools/datetime.hxx> +#include <comphelper/date.hxx> +#include <o3tl/string_view.hxx> #include <sstream> #include <iomanip> @@ -61,7 +62,6 @@ namespace dbtools using namespace ::com::sun::star::uno; using namespace ::com::sun::star::util; using namespace ::com::sun::star::sdb; - using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; @@ -80,7 +80,7 @@ namespace dbtools ostr << setw(4) << rDate.Year << "-" << setw(2) << rDate.Month << "-" << setw(2) << rDate.Day; - return OUString::createFromAscii(ostr.str().c_str()); + return OUString::createFromAscii(ostr.str()); } OUString DBTypeConversion::toTimeStringS(const css::util::Time& rTime) @@ -91,7 +91,7 @@ namespace dbtools ostr << setw(2) << rTime.Hours << ":" << setw(2) << rTime.Minutes << ":" << setw(2) << rTime.Seconds; - return OUString::createFromAscii(ostr.str().c_str()); + return OUString::createFromAscii(ostr.str()); } OUString DBTypeConversion::toTimeString(const css::util::Time& rTime) @@ -103,18 +103,15 @@ namespace dbtools << setw(2) << rTime.Minutes << ":" << setw(2) << rTime.Seconds << "." << setw(9) << rTime.NanoSeconds; - return OUString::createFromAscii(ostr.str().c_str()); + return OUString::createFromAscii(ostr.str()); } OUString DBTypeConversion::toDateTimeString(const css::util::DateTime& _rDateTime) { css::util::Date aDate(_rDateTime.Day,_rDateTime.Month,_rDateTime.Year); - OUStringBuffer aTemp(toDateString(aDate)); - aTemp.append(" "); css::util::Time const aTime(_rDateTime.NanoSeconds, _rDateTime.Seconds, _rDateTime.Minutes, _rDateTime.Hours, _rDateTime.IsUTC); - aTemp.append( toTimeString(aTime) ); - return aTemp.makeStringAndClear(); + return toDateString(aDate) + " " + toTimeString(aTime); } css::util::Date DBTypeConversion::toDate(const sal_Int32 _nVal) @@ -151,93 +148,25 @@ namespace dbtools nHour * (minInHour * secInMin * nanoSecInSec); } - - const sal_Int32 aDaysInMonth[12] = { 31, 28, 31, 30, 31, 30, - 31, 31, 30, 31, 30, 31 }; - - - static bool implIsLeapYear(sal_Int32 _nYear) - { - return ( ((_nYear % 4) == 0) - && ((_nYear % 100) != 0) - ) - - || ((_nYear % 400) == 0) - ; - } - - - static sal_Int32 implDaysInMonth(sal_Int32 _nMonth, sal_Int32 _nYear) - { - OSL_ENSURE(_nMonth > 0 && _nMonth < 13,"Month as invalid value!"); - if (_nMonth != 2) - return aDaysInMonth[_nMonth-1]; - else - { - if (implIsLeapYear(_nYear)) - return aDaysInMonth[_nMonth-1] + 1; - else - return aDaysInMonth[_nMonth-1]; - } - } - - static sal_Int32 implRelativeToAbsoluteNull(const css::util::Date& _rDate) { - sal_Int32 nDays = 0; - - // ripped this code from the implementation of tools::Date - sal_Int32 nNormalizedYear = _rDate.Year - 1; - nDays = nNormalizedYear * 365; - // leap years - nDays += (nNormalizedYear / 4) - (nNormalizedYear / 100) + (nNormalizedYear / 400); - - for (sal_Int32 i = 1; i < _rDate.Month; ++i) - nDays += implDaysInMonth(i, _rDate.Year); - - nDays += _rDate.Day; - return nDays; - } - - static void implBuildFromRelative( const sal_Int32 nDays, sal_uInt16& rDay, sal_uInt16& rMonth, sal_Int16& rYear) - { - sal_Int32 nTempDays; - sal_Int32 i = 0; - bool bCalc; - - do + if (_rDate.Day == 0 && _rDate.Month == 0 && _rDate.Year == 0) { - nTempDays = nDays; - rYear = static_cast<sal_uInt16>((nTempDays / 365) - i); - nTempDays -= (rYear-1) * 365; - nTempDays -= ((rYear-1) / 4) - ((rYear-1) / 100) + ((rYear-1) / 400); - bCalc = false; - if ( nTempDays < 1 ) - { - i++; - bCalc = true; - } - else - { - if ( nTempDays > 365 ) - { - if ( (nTempDays != 366) || !implIsLeapYear( rYear ) ) - { - i--; - bCalc = true; - } - } - } + // 0000-00-00 is *NOT* a valid date and passing it to the date + // conversion even when normalizing rightly asserts. Whatever we + // return here, it will be wrong. The old before commit + // 52ff16771ac160d27fd7beb78a4cfba22ad84f06 wrong implementation + // calculated -365 for that, effectively that would be a date of + // -0001-01-01 now but it was likely assumed that would be + // 0000-00-01 or even 0000-00-00 instead. Try if we get away with 0 + // for -0001-12-31, the same that + // comphelper::date::convertDateToDaysNormalizing() + // would return if comphelper::date::normalize() wouldn't ignore + // such "empty" date. + + return 0; } - while ( bCalc ); - - rMonth = 1; - while ( nTempDays > implDaysInMonth( rMonth, rYear ) ) - { - nTempDays -= implDaysInMonth( rMonth, rYear ); - rMonth++; - } - rDay = static_cast<sal_uInt16>(nTempDays); + return comphelper::date::convertDateToDaysNormalizing( _rDate.Day, _rDate.Month, _rDate.Year); } sal_Int32 DBTypeConversion::toDays(const css::util::Date& _rVal, const css::util::Date& _rNullDate) @@ -273,7 +202,7 @@ namespace dbtools static void addDays(const sal_Int32 nDays, css::util::Date& _rDate) { - sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate ); + sal_Int64 nTempDays = implRelativeToAbsoluteNull(_rDate); nTempDays += nDays; if ( nTempDays > maxDays ) @@ -283,7 +212,6 @@ namespace dbtools _rDate.Year = 9999; } // TODO: can we replace that check by minDays? Would allow dates BCE - // implBuildFromRelative probably needs to be updated for the "no year 0" question else if ( nTempDays <= 0 ) { _rDate.Day = 1; @@ -291,12 +219,12 @@ namespace dbtools _rDate.Year = 1; } else - implBuildFromRelative( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year ); + comphelper::date::convertDaysToDate( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year ); } static void subDays(const sal_Int32 nDays, css::util::Date& _rDate ) { - sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate ); + sal_Int64 nTempDays = implRelativeToAbsoluteNull(_rDate); nTempDays -= nDays; if ( nTempDays > maxDays ) @@ -306,7 +234,6 @@ namespace dbtools _rDate.Year = 9999; } // TODO: can we replace that check by minDays? Would allow dates BCE - // implBuildFromRelative probably needs to be updated for the "no year 0" question else if ( nTempDays <= 0 ) { _rDate.Day = 1; @@ -314,7 +241,7 @@ namespace dbtools _rDate.Year = 1; } else - implBuildFromRelative( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year ); + comphelper::date::convertDaysToDate( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year ); } css::util::Date DBTypeConversion::toDate(const double dVal, const css::util::Date& _rNullDate) @@ -332,13 +259,10 @@ namespace dbtools css::util::Time DBTypeConversion::toTime(const double dVal, short nDigits) { - const sal_Int32 nDays = static_cast<sal_Int32>(dVal); - sal_Int64 nNS; - { - double fSeconds((dVal - static_cast<double>(nDays)) * (fNanoSecondsPerDay / nanoSecInSec)); - fSeconds = ::rtl::math::round( fSeconds, nDigits ); - nNS = fSeconds * nanoSecInSec; - } + const double nDays = std::trunc(dVal); + double fSeconds((dVal - nDays) * (fNanoSecondsPerDay / nanoSecInSec)); + fSeconds = ::rtl::math::round(fSeconds, nDigits); + sal_Int64 nNS = fSeconds * nanoSecInSec; sal_Int16 nSign; if ( nNS < 0 ) @@ -380,6 +304,14 @@ namespace dbtools css::util::DateTime DBTypeConversion::toDateTime(const double dVal, const css::util::Date& _rNullDate) { + css::util::DateTime aRet; + + if (!std::isfinite(dVal)) + { + SAL_WARN("connectivity.commontools", "DateTime has invalid value: " << dVal); + return aRet; + } + css::util::Date aDate = toDate(dVal, _rNullDate); // there is not enough precision in a double to have both a date // and a time up to nanoseconds -> limit to microseconds to have @@ -387,8 +319,6 @@ namespace dbtools // 12:59:59.999999790 css::util::Time aTime = toTime(dVal, 6); - css::util::DateTime aRet; - aRet.Day = aDate.Day; aRet.Month = aDate.Month; aRet.Year = aDate.Year; @@ -402,7 +332,7 @@ namespace dbtools return aRet; } - css::util::Date DBTypeConversion::toDate(const OUString& _sSQLString) + css::util::Date DBTypeConversion::toDate(std::u16string_view _sSQLString) { // get the token out of a string static const sal_Unicode sDateSep = '-'; @@ -411,12 +341,12 @@ namespace dbtools sal_uInt16 nYear = 0, nMonth = 0, nDay = 0; - nYear = static_cast<sal_uInt16>(_sSQLString.getToken(0,sDateSep,nIndex).toInt32()); + nYear = static_cast<sal_uInt16>(o3tl::toInt32(o3tl::getToken(_sSQLString, 0,sDateSep,nIndex))); if(nIndex != -1) { - nMonth = static_cast<sal_uInt16>(_sSQLString.getToken(0,sDateSep,nIndex).toInt32()); + nMonth = static_cast<sal_uInt16>(o3tl::toInt32(o3tl::getToken(_sSQLString, 0,sDateSep,nIndex))); if(nIndex != -1) - nDay = static_cast<sal_uInt16>(_sSQLString.getToken(0,sDateSep,nIndex).toInt32()); + nDay = static_cast<sal_uInt16>(o3tl::toInt32(o3tl::getToken(_sSQLString, 0,sDateSep,nIndex))); } return css::util::Date(nDay,nMonth,nYear); @@ -439,7 +369,7 @@ namespace dbtools const sal_Unicode *const begin = p; while (rtl::isAsciiWhiteSpace(*p)) { ++p; } nSeparation += p - begin; - aTime = toTime( _sSQLString.copy( nSeparation ) ); + aTime = toTime( _sSQLString.subView( nSeparation ) ); } return css::util::DateTime(aTime.NanoSeconds, aTime.Seconds, aTime.Minutes, aTime.Hours, @@ -447,7 +377,7 @@ namespace dbtools } - css::util::Time DBTypeConversion::toTime(const OUString& _sSQLString) + css::util::Time DBTypeConversion::toTime(std::u16string_view _sSQLString) { css::util::Time aTime; ::utl::ISO8601parseTime(_sSQLString, aTime); diff --git a/connectivity/source/commontools/dbexception.cxx b/connectivity/source/commontools/dbexception.cxx index 2efc4a6976b3..bc5a9be80804 100644 --- a/connectivity/source/commontools/dbexception.cxx +++ b/connectivity/source/commontools/dbexception.cxx @@ -27,7 +27,7 @@ #include <com/sun/star/sdb/SQLErrorEvent.hpp> #include <strings.hrc> #include <resource/sharedresources.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace dbtools { @@ -66,8 +66,7 @@ SQLExceptionInfo::SQLExceptionInfo(const css::sdb::SQLContext& _rError) SQLExceptionInfo::SQLExceptionInfo( const OUString& _rSimpleErrorMessage ) { - SQLException aError; - aError.Message = _rSimpleErrorMessage; + SQLException aError(_rSimpleErrorMessage, {}, {}, 0, {}); m_aContent <<= aError; implDetermineType(); } @@ -177,54 +176,59 @@ SQLExceptionInfo::operator const css::sdb::SQLContext*() const void SQLExceptionInfo::prepend( const OUString& _rErrorMessage ) { - SQLException aException; - aException.Message = _rErrorMessage; - aException.ErrorCode = 0; - aException.SQLState = "S1000"; - aException.NextException = m_aContent; + SQLException aException(_rErrorMessage, {}, "S1000", 0, m_aContent); m_aContent <<= aException; m_eType = TYPE::SQLException; } - -void SQLExceptionInfo::append( TYPE _eType, const OUString& _rErrorMessage, const OUString& _rSQLState, const sal_Int32 _nErrorCode ) +// create the to-be-appended exception +Any SQLExceptionInfo::createException(TYPE eType, const OUString& rErrorMessage, const OUString& rSQLState, const sal_Int32 nErrorCode) { - // create the to-be-appended exception Any aAppend; - switch ( _eType ) + switch (eType) { - case TYPE::SQLException: aAppend <<= SQLException(); break; - case TYPE::SQLWarning: aAppend <<= SQLWarning(); break; - case TYPE::SQLContext: aAppend <<= SQLContext(); break; - default: - TOOLS_WARN_EXCEPTION( "connectivity.commontools", "SQLExceptionInfo::append: invalid exception type: this will crash!" ); - break; + case TYPE::SQLException: + aAppend <<= SQLException(rErrorMessage, {}, rSQLState, nErrorCode, {}); + break; + case TYPE::SQLWarning: + aAppend <<= SQLWarning(rErrorMessage, {}, rSQLState, nErrorCode, {}); + break; + case TYPE::SQLContext: + aAppend <<= SQLContext(rErrorMessage, {}, rSQLState, nErrorCode, {}, {}); + break; + default: + TOOLS_WARN_EXCEPTION("connectivity.commontools", "SQLExceptionInfo::createException: invalid exception type: this will crash!"); + break; } - SQLException& pAppendException = const_cast<SQLException &>(*o3tl::forceAccess<SQLException>(aAppend)); - pAppendException.Message = _rErrorMessage; - pAppendException.SQLState = _rSQLState; - pAppendException.ErrorCode = _nErrorCode; + return aAppend; +} - // find the end of the current chain - Any* pChainIterator = &m_aContent; - SQLException* pLastException = nullptr; - const Type& aSQLExceptionType( cppu::UnoType<SQLException>::get() ); - while ( pChainIterator ) +// find the end of the exception chain +SQLException* SQLExceptionInfo::getLastException(SQLException* pLastException) +{ + SQLException* pException = pLastException; + while (pException) { - if ( !pChainIterator->hasValue() ) + pException = const_cast<SQLException*>(o3tl::tryAccess<SQLException>(pException->NextException)); + if (!pException) break; + pLastException = pException; + } + return pLastException; +} - if ( !isAssignableFrom( aSQLExceptionType, pChainIterator->getValueType() ) ) - break; +void SQLExceptionInfo::append( TYPE _eType, const OUString& _rErrorMessage, const OUString& _rSQLState, const sal_Int32 _nErrorCode ) +{ + // create the to-be-appended exception + Any aAppend = createException(_eType, _rErrorMessage, _rSQLState, _nErrorCode); - pLastException = const_cast< SQLException* >( o3tl::doAccess<SQLException>( *pChainIterator ) ); - pChainIterator = &pLastException->NextException; - } + // find the end of the current chain + SQLException* pLastException = getLastException(const_cast<SQLException*>(o3tl::tryAccess<SQLException>(m_aContent))); // append - if ( pLastException ) + if (pLastException) pLastException->NextException = aAppend; else { @@ -233,7 +237,6 @@ void SQLExceptionInfo::append( TYPE _eType, const OUString& _rErrorMessage, cons } } - void SQLExceptionInfo::doThrow() { if ( m_aContent.getValueTypeClass() == TypeClass_EXCEPTION ) diff --git a/connectivity/source/commontools/dbmetadata.cxx b/connectivity/source/commontools/dbmetadata.cxx index f8afdcda692c..8983ee25bada 100644 --- a/connectivity/source/commontools/dbmetadata.cxx +++ b/connectivity/source/commontools/dbmetadata.cxx @@ -33,7 +33,7 @@ #include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp> #include <com/sun/star/sdbc/DriverManager.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <comphelper/namedvaluecollection.hxx> #include <comphelper/processfactory.hxx> #include <sal/log.hxx> @@ -75,11 +75,7 @@ namespace dbtools ::std::optional< OUString > sCachedCatalogSeparator; DatabaseMetaData_Impl() - :xConnection() - ,xConnectionMetaData() - ,aDriverConfig( ::comphelper::getProcessComponentContext() ) - ,sCachedIdentifierQuoteString() - ,sCachedCatalogSeparator() + : aDriverConfig( ::comphelper::getProcessComponentContext() ) { } }; @@ -111,7 +107,7 @@ namespace dbtools } - bool lcl_getDriverSetting( const char* _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting ) + bool lcl_getDriverSetting( const OUString& _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting ) { lcl_checkConnected( _metaData ); const ::comphelper::NamedValueCollection& rDriverMetaData = _metaData.aDriverConfig.getMetaData( _metaData.xConnectionMetaData->getURL() ); @@ -122,7 +118,7 @@ namespace dbtools } - bool lcl_getConnectionSetting( const char* _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting ) + bool lcl_getConnectionSetting(const OUString& _asciiName, const DatabaseMetaData_Impl& _metaData, Any& _out_setting ) { try { @@ -134,13 +130,12 @@ namespace dbtools xDataSource->getPropertyValue("Settings"), UNO_QUERY_THROW ); - _out_setting = xDataSourceSettings->getPropertyValue( OUString::createFromAscii( _asciiName ) ); + _out_setting = xDataSourceSettings->getPropertyValue( _asciiName ); } else { Reference< XDatabaseMetaData2 > xExtendedMetaData( _metaData.xConnectionMetaData, UNO_QUERY_THROW ); - ::comphelper::NamedValueCollection aSettings( xExtendedMetaData->getConnectionInfo() ); - _out_setting = aSettings.get( _asciiName ); + _out_setting = ::comphelper::NamedValueCollection::get( xExtendedMetaData->getConnectionInfo(), _asciiName ); return _out_setting.hasValue(); } return true; diff --git a/connectivity/source/commontools/dbtools.cxx b/connectivity/source/commontools/dbtools.cxx index cd9f2c9fc48f..885e28c751f5 100644 --- a/connectivity/source/commontools/dbtools.cxx +++ b/connectivity/source/commontools/dbtools.cxx @@ -58,7 +58,6 @@ #include <com/sun/star/sdbcx/XKeysSupplier.hpp> #include <com/sun/star/sdbcx/XTablesSupplier.hpp> #include <com/sun/star/task/InteractionHandler.hpp> -#include <com/sun/star/task/XInteractionRequest.hpp> #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> #include <com/sun/star/util/NumberFormat.hpp> #include <com/sun/star/util/NumberFormatsSupplier.hpp> @@ -79,7 +78,7 @@ #include <osl/diagnose.h> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <tools/stream.hxx> #include <cppuhelper/implbase.hxx> #include <strings.hrc> @@ -279,9 +278,7 @@ static Reference< XConnection > getConnection_allowException( Reference<XInitialization> xIni(xDataSource, UNO_QUERY); if (xIni.is()) { - Sequence< Any > aArgs(1); - NamedValue aParam( "ParentWindow", makeAny(_rxParent) ); - aArgs[0] <<= aParam; + Sequence< Any > aArgs{ Any(NamedValue( "ParentWindow", Any(_rxParent) )) }; xIni->initialize(aArgs); } @@ -319,9 +316,7 @@ static Reference< XConnection > getConnection_allowException( if (xIni.is()) { - Sequence< Any > aArgs(1); - NamedValue aParam( "ParentWindow", makeAny(Reference<XWindow>()) ); - aArgs[0] <<= aParam; + Sequence< Any > aArgs{ Any(NamedValue( "ParentWindow", Any(Reference<XWindow>()) )) }; xIni->initialize(aArgs); } @@ -385,7 +380,7 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet, || ( xExistingConn = findConnection( _rxRowSet ) ).is() ) { - xRowSetProps->setPropertyValue("ActiveConnection", makeAny( xExistingConn ) ); + xRowSetProps->setPropertyValue("ActiveConnection", Any( xExistingConn ) ); // no auto disposer needed, since we did not create the connection xConnection.reset( xExistingConn, SharedConnection::NoTakeOwnership ); @@ -394,7 +389,7 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet, // build a connection with its current settings (4. data source name, or 5. URL) - const OUString sUserProp( "User" ); + static constexpr OUString sUserProp( u"User"_ustr ); OUString sDataSourceName; xRowSetProps->getPropertyValue("DataSourceName") >>= sDataSourceName; OUString sURL; @@ -430,8 +425,8 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet, if (!sUser.isEmpty()) { // use user and pwd together with the url auto aInfo(::comphelper::InitPropertySequence({ - { "user", makeAny(sUser) }, - { "password", makeAny(sPwd) } + { "user", Any(sUser) }, + { "password", Any(sPwd) } })); xPureConnection = xDriverManager->getConnectionWithInfo( sURL, aInfo ); } @@ -458,7 +453,7 @@ static SharedConnection lcl_connectRowSet(const Reference< XRowSet>& _rxRowSet, else xRowSetProps->setPropertyValue( "ActiveConnection", - makeAny( xConnection.getTyped() ) + Any( xConnection.getTyped() ) ); } catch(Exception&) @@ -688,7 +683,7 @@ Reference< XNameAccess > getFieldsByCommandDescriptor( const Reference< XConnect try { if ( xStatementProps.is() ) - xStatementProps->setPropertyValue( "MaxRows", makeAny( sal_Int32( 0 ) ) ); + xStatementProps->setPropertyValue( "MaxRows", Any( sal_Int32( 0 ) ) ); } catch( const Exception& ) { @@ -748,7 +743,7 @@ SQLException prependErrorInfo( const SQLException& _rChainedException, const Ref { return SQLException( _rAdditionalError, _rxContext, _eSQLState == StandardSQLState::ERROR_UNSPECIFIED ? OUString() : getStandardSQLState( _eSQLState ), - 0, makeAny( _rChainedException ) ); + 0, Any( _rChainedException ) ); } namespace @@ -820,13 +815,13 @@ static OUString impl_doComposeTableName( const Reference< XDatabaseMetaData >& _ OUStringBuffer aComposedName; OUString sCatalogSep; - bool bCatlogAtStart = true; + bool bCatalogAtStart = true; if ( !_rCatalog.isEmpty() && aNameComps.bCatalogs ) { sCatalogSep = _rxMetaData->getCatalogSeparator(); - bCatlogAtStart = _rxMetaData->isCatalogAtStart(); + bCatalogAtStart = _rxMetaData->isCatalogAtStart(); - if ( bCatlogAtStart && !sCatalogSep.isEmpty()) + if ( bCatalogAtStart && !sCatalogSep.isEmpty()) { aComposedName.append( _bQuote ? quoteName( sQuoteString, _rCatalog ) : _rCatalog ); aComposedName.append( sCatalogSep ); @@ -835,14 +830,15 @@ static OUString impl_doComposeTableName( const Reference< XDatabaseMetaData >& _ if ( !_rSchema.isEmpty() && aNameComps.bSchemas ) { - aComposedName.append( _bQuote ? quoteName( sQuoteString, _rSchema ) : _rSchema ); - aComposedName.append( "." ); + aComposedName.append( + (_bQuote ? quoteName( sQuoteString, _rSchema ) : _rSchema ) + + "." ); } aComposedName.append( _bQuote ? quoteName( sQuoteString, _rName ) : _rName ); if ( !_rCatalog.isEmpty() - && !bCatlogAtStart + && !bCatalogAtStart && !sCatalogSep.isEmpty() && aNameComps.bCatalogs ) @@ -917,7 +913,7 @@ Reference< XNumberFormatsSupplier> getNumberFormats( // ask the parent of the connection (should be a DatabaseAccess) Reference< XNumberFormatsSupplier> xReturn; Reference< XChild> xConnAsChild(_rxConn, UNO_QUERY); - static constexpr OUStringLiteral sPropFormatsSupplier( u"NumberFormatsSupplier" ); + static constexpr OUString sPropFormatsSupplier( u"NumberFormatsSupplier"_ustr ); if (xConnAsChild.is()) { Reference< XPropertySet> xConnParentProps(xConnAsChild->getParent(), UNO_QUERY); @@ -947,33 +943,30 @@ try Reference< XPropertySetInfo> xNewInfo( xNewProps->getPropertySetInfo()); const Sequence< Property> aOldProperties = xOldInfo->getProperties(); - Sequence< Property> aNewProperties = xNewInfo->getProperties(); - int nNewLen = aNewProperties.getLength(); - - Property* pNewProps = aNewProperties.getArray(); - - static constexpr OUStringLiteral sPropFormatsSupplier(u"FormatsSupplier"); - static constexpr OUStringLiteral sPropCurrencySymbol(u"CurrencySymbol"); - static constexpr OUStringLiteral sPropDecimals(u"Decimals"); - static constexpr OUStringLiteral sPropEffectiveMin(u"EffectiveMin"); - static constexpr OUStringLiteral sPropEffectiveMax(u"EffectiveMax"); - static constexpr OUStringLiteral sPropEffectiveDefault(u"EffectiveDefault"); - static constexpr OUStringLiteral sPropDefaultText(u"DefaultText"); - static constexpr OUStringLiteral sPropDefaultDate(u"DefaultDate"); - static constexpr OUStringLiteral sPropDefaultTime(u"DefaultTime"); - static constexpr OUStringLiteral sPropValueMin(u"ValueMin"); - static constexpr OUStringLiteral sPropValueMax(u"ValueMax"); - static constexpr OUStringLiteral sPropDecimalAccuracy(u"DecimalAccuracy"); - static constexpr OUStringLiteral sPropClassId(u"ClassId"); - static constexpr OUStringLiteral sFormattedServiceName( u"com.sun.star.form.component.FormattedField" ); + const Sequence< Property> aNewProperties = xNewInfo->getProperties(); + + static constexpr OUString sPropFormatsSupplier(u"FormatsSupplier"_ustr); + static constexpr OUString sPropCurrencySymbol(u"CurrencySymbol"_ustr); + static constexpr OUString sPropDecimals(u"Decimals"_ustr); + static constexpr OUString sPropEffectiveMin(u"EffectiveMin"_ustr); + static constexpr OUString sPropEffectiveMax(u"EffectiveMax"_ustr); + static constexpr OUString sPropEffectiveDefault(u"EffectiveDefault"_ustr); + static constexpr OUString sPropDefaultText(u"DefaultText"_ustr); + static constexpr OUString sPropDefaultDate(u"DefaultDate"_ustr); + static constexpr OUString sPropDefaultTime(u"DefaultTime"_ustr); + static constexpr OUString sPropValueMin(u"ValueMin"_ustr); + static constexpr OUString sPropValueMax(u"ValueMax"_ustr); + static constexpr OUString sPropDecimalAccuracy(u"DecimalAccuracy"_ustr); + static constexpr OUString sPropClassId(u"ClassId"_ustr); + static constexpr OUString sFormattedServiceName( u"com.sun.star.form.component.FormattedField"_ustr ); for (const Property& rOldProp : aOldProperties) { if ( rOldProp.Name != "DefaultControl" && rOldProp.Name != "LabelControl" ) { // binary search - Property* pResult = std::lower_bound( - pNewProps, pNewProps + nNewLen, rOldProp, ::comphelper::PropertyCompareByName()); + const Property* pResult = std::lower_bound( + aNewProperties.begin(), aNewProperties.end(), rOldProp, ::comphelper::PropertyCompareByName()); if ( ( pResult != aNewProperties.end() ) && ( pResult->Name == rOldProp.Name ) @@ -1066,13 +1059,13 @@ try { // (to convert an OUString into a date will not always succeed, because it might be bound to a text-column, // but we can work with a double) Date aDate = DBTypeConversion::toDate(getDouble(aEffectiveDefault)); - xNewProps->setPropertyValue(sPropDefaultDate, makeAny(aDate)); + xNewProps->setPropertyValue(sPropDefaultDate, Any(aDate)); } if (hasProperty(sPropDefaultTime, xNewProps) && !bIsString) { // Completely analogous to time css::util::Time aTime = DBTypeConversion::toTime(getDouble(aEffectiveDefault)); - xNewProps->setPropertyValue(sPropDefaultTime, makeAny(aTime)); + xNewProps->setPropertyValue(sPropDefaultTime, Any(aTime)); } if (hasProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE), xNewProps) && !bIsString) @@ -1142,7 +1135,7 @@ try nKey = xFormats->addNew(sNewFormat, _rLocale); } - xNewProps->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FORMATKEY), makeAny(nKey)); + xNewProps->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FORMATKEY), Any(nKey)); } // min-/max-Value @@ -1633,7 +1626,8 @@ namespace std::vector<bool, std::allocator<bool> > m_aSet; Reference<XIndexAccess> m_xSource; public: - OParameterWrapper(const std::vector<bool, std::allocator<bool> >& _aSet,const Reference<XIndexAccess>& _xSource) : m_aSet(_aSet),m_xSource(_xSource){} + OParameterWrapper(std::vector<bool, std::allocator<bool> >&& _aSet,const Reference<XIndexAccess>& _xSource) + : m_aSet(std::move(_aSet)), m_xSource(_xSource) {} private: // css::container::XElementAccess virtual Type SAL_CALL getElementType() override @@ -1713,21 +1707,20 @@ void askForParameters(const Reference< XSingleSelectQueryComposer >& _xComposer, } // build an interaction request // two continuations (Ok and Cancel) - OInteractionAbort* pAbort = new OInteractionAbort; - OParameterContinuation* pParams = new OParameterContinuation; + rtl::Reference<OInteractionAbort> pAbort = new OInteractionAbort; + rtl::Reference<OParameterContinuation> pParams = new OParameterContinuation; // the request ParametersRequest aRequest; - Reference<XIndexAccess> xWrappedParameters = new OParameterWrapper(aNewParameterSet,xParamsAsIndicies); + Reference<XIndexAccess> xWrappedParameters = new OParameterWrapper(std::move(aNewParameterSet),xParamsAsIndicies); aRequest.Parameters = xWrappedParameters; aRequest.Connection = _xConnection; - OInteractionRequest* pRequest = new OInteractionRequest(makeAny(aRequest)); - Reference< XInteractionRequest > xRequest(pRequest); + rtl::Reference<OInteractionRequest> pRequest = new OInteractionRequest(Any(aRequest)); // some knittings pRequest->addContinuation(pAbort); pRequest->addContinuation(pParams); // execute the request - _rxHandler->handle(xRequest); + _rxHandler->handle(pRequest); if (!pParams->wasSelected()) { @@ -1799,7 +1792,7 @@ void setObjectWithInfo(const Reference<XParameters>& _xParams, case DataType::CHAR: case DataType::VARCHAR: case DataType::LONGVARCHAR: - _xParams->setString(parameterIndex,_rValue); + _xParams->setString(parameterIndex,_rValue.getString()); break; case DataType::CLOB: { @@ -1823,26 +1816,26 @@ void setObjectWithInfo(const Reference<XParameters>& _xParams, break; case DataType::BIGINT: if ( _rValue.isSigned() ) - _xParams->setLong(parameterIndex,_rValue); + _xParams->setLong(parameterIndex,_rValue.getLong()); else - _xParams->setString(parameterIndex,_rValue); + _xParams->setString(parameterIndex,_rValue.getString()); break; case DataType::FLOAT: - _xParams->setFloat(parameterIndex,_rValue); + _xParams->setFloat(parameterIndex,_rValue.getFloat()); break; case DataType::REAL: case DataType::DOUBLE: - _xParams->setDouble(parameterIndex,_rValue); + _xParams->setDouble(parameterIndex,_rValue.getDouble()); break; case DataType::DATE: - _xParams->setDate(parameterIndex,_rValue); + _xParams->setDate(parameterIndex,_rValue.getDate()); break; case DataType::TIME: - _xParams->setTime(parameterIndex,_rValue); + _xParams->setTime(parameterIndex,_rValue.getTime()); break; case DataType::TIMESTAMP: - _xParams->setTimestamp(parameterIndex,_rValue); + _xParams->setTimestamp(parameterIndex,_rValue.getDateTime()); break; case DataType::BINARY: case DataType::VARBINARY: @@ -1875,25 +1868,25 @@ void setObjectWithInfo(const Reference<XParameters>& _xParams, break; case DataType::BIT: case DataType::BOOLEAN: - _xParams->setBoolean(parameterIndex,static_cast<bool>(_rValue)); + _xParams->setBoolean(parameterIndex,_rValue.getBool()); break; case DataType::TINYINT: if ( _rValue.isSigned() ) - _xParams->setByte(parameterIndex,_rValue); + _xParams->setByte(parameterIndex,_rValue.getInt8()); else - _xParams->setShort(parameterIndex,_rValue); + _xParams->setShort(parameterIndex,_rValue.getInt16()); break; case DataType::SMALLINT: if ( _rValue.isSigned() ) - _xParams->setShort(parameterIndex,_rValue); + _xParams->setShort(parameterIndex,_rValue.getInt16()); else - _xParams->setInt(parameterIndex,_rValue); + _xParams->setInt(parameterIndex,_rValue.getInt32()); break; case DataType::INTEGER: if ( _rValue.isSigned() ) - _xParams->setInt(parameterIndex,_rValue); + _xParams->setInt(parameterIndex,_rValue.getULong()); else - _xParams->setLong(parameterIndex,_rValue); + _xParams->setLong(parameterIndex,_rValue.getLong()); break; default: { @@ -1908,7 +1901,7 @@ void setObjectWithInfo(const Reference<XParameters>& _xParams, } } -void getBooleanComparisonPredicate( const OUString& _rExpression, const bool _bValue, const sal_Int32 _nBooleanComparisonMode, +void getBooleanComparisonPredicate( std::u16string_view _rExpression, const bool _bValue, const sal_Int32 _nBooleanComparisonMode, OUStringBuffer& _out_rSQLPredicate ) { switch ( _nBooleanComparisonMode ) @@ -2024,8 +2017,8 @@ namespace dbase case 0x65: eEncoding = RTL_TEXTENCODING_IBM_866; break; // Russian MS-DOS code page 866 case 0x66: eEncoding = RTL_TEXTENCODING_IBM_865; break; // Nordic MS-DOS code page 865 case 0x67: eEncoding = RTL_TEXTENCODING_IBM_861; break; // Icelandic MS-DOS - //case 0x68: eEncoding = ; break; // Kamenicky (Czech) MS-DOS - //case 0x69: eEncoding = ; break; // Mazovia (Polish) MS-DOS + case 0x68: eEncoding = RTL_TEXTENCODING_KAMENICKY; break; // Kamenicky (Czech) MS-DOS + case 0x69: eEncoding = RTL_TEXTENCODING_MAZOVIA; break; // Mazovia (Polish) MS-DOS case 0x6A: eEncoding = RTL_TEXTENCODING_IBM_737; break; // Greek MS-DOS (437G) case 0x6B: eEncoding = RTL_TEXTENCODING_IBM_857; break; // Turkish MS-DOS case 0x6C: eEncoding = RTL_TEXTENCODING_IBM_863; break; // MS-DOS, Canada diff --git a/connectivity/source/commontools/dbtools2.cxx b/connectivity/source/commontools/dbtools2.cxx index 01cdcc03aa76..8148b25ddca3 100644 --- a/connectivity/source/commontools/dbtools2.cxx +++ b/connectivity/source/commontools/dbtools2.cxx @@ -45,7 +45,7 @@ #include <com/sun/star/container/XChild.hpp> #include <comphelper/types.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <unotools/sharedunocomponent.hxx> #include <algorithm> #include <string_view> @@ -122,37 +122,45 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const { sal_Int32 nIndex = sTypeName.indexOf(sAutoIncrementValue); if (nIndex != -1) - sTypeName = sTypeName.replaceAt(nIndex,sTypeName.getLength() - nIndex,OUString()); + sTypeName = sTypeName.replaceAt(nIndex,sTypeName.getLength() - nIndex, u""); } if ( (nPrecision > 0 || nScale > 0) && bUseLiteral ) { - sal_Int32 nParenPos = sTypeName.indexOf('('); + bool bTimed = (nDataType == DataType::TIME || + nDataType == DataType::TIME_WITH_TIMEZONE || + nDataType == DataType::TIMESTAMP || + nDataType == DataType::TIMESTAMP_WITH_TIMEZONE); + + sal_Int32 nParenPos = (nDataType == DataType::TIME_WITH_TIMEZONE || + nDataType == DataType::TIMESTAMP_WITH_TIMEZONE) ? + sTypeName.indexOf(' ') : + sTypeName.indexOf('('); + if ( nParenPos == -1 ) - { aSql.append(sTypeName); - aSql.append("("); - } else - { - aSql.append(std::u16string_view(sTypeName).substr(0, ++nParenPos)); - } + aSql.append(sTypeName.subView(0, nParenPos)); + aSql.append("("); - if ( nPrecision > 0 && nDataType != DataType::TIMESTAMP ) + if ( nPrecision > 0 && !bTimed ) { aSql.append(nPrecision); if ( (nScale > 0) || (!_sCreatePattern.empty() && sCreateParams.indexOf(_sCreatePattern) != -1) ) aSql.append(","); } - if ( (nScale > 0) || ( !_sCreatePattern.empty() && sCreateParams.indexOf(_sCreatePattern) != -1 ) || nDataType == DataType::TIMESTAMP ) + if ( (nScale > 0) || ( !_sCreatePattern.empty() && sCreateParams.indexOf(_sCreatePattern) != -1 ) || bTimed ) aSql.append(nScale); if ( nParenPos == -1 ) aSql.append(")"); else { - nParenPos = sTypeName.indexOf(')',nParenPos); - aSql.append(std::u16string_view(sTypeName).substr(nParenPos)); + if ( bTimed ) + aSql.append(")"); + else + nParenPos = sTypeName.indexOf(')',nParenPos); + aSql.append(sTypeName.subView(nParenPos)); } } else @@ -161,10 +169,7 @@ OUString createStandardTypePart(const Reference< XPropertySet >& xColProp,const OUString aDefault = ::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_DEFAULTVALUE))); if ( !aDefault.isEmpty() ) { - aSql.append(" DEFAULT "); - aSql.append(sPrefix); - aSql.append(aDefault); - aSql.append(sPostfix); + aSql.append(" DEFAULT " + sPrefix + aDefault + sPostfix); } // if ( aDefault.getLength() ) return aSql.makeStringAndClear(); @@ -180,7 +185,7 @@ OUString createStandardColumnPart(const Reference< XPropertySet >& xColProp,cons xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT)) >>= bIsAutoIncrement; const OUString sQuoteString = xMetaData->getIdentifierQuoteString(); - OUStringBuffer aSql = ::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))); + OUStringBuffer aSql(::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME))))); // check if the user enter a specific string to create autoincrement values OUString sAutoIncrementValue; @@ -188,17 +193,14 @@ OUString createStandardColumnPart(const Reference< XPropertySet >& xColProp,cons if ( xPropInfo.is() && xPropInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) ) xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) >>= sAutoIncrementValue; - aSql.append(" "); - - aSql.append(createStandardTypePart(xColProp, _xConnection, _sCreatePattern)); + aSql.append(" " + createStandardTypePart(xColProp, _xConnection, _sCreatePattern)); if(::comphelper::getINT32(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISNULLABLE))) == ColumnValue::NO_NULLS) aSql.append(" NOT NULL"); if ( bIsAutoIncrement && !sAutoIncrementValue.isEmpty()) { - aSql.append(" "); - aSql.append(sAutoIncrementValue); + aSql.append(" " + sAutoIncrementValue); } if ( _pHelper ) @@ -224,8 +226,7 @@ OUString createStandardCreateStatement(const Reference< XPropertySet >& descript if ( sComposedName.isEmpty() ) ::dbtools::throwFunctionSequenceException(_xConnection); - aSql.append(sComposedName); - aSql.append(" ("); + aSql.append(sComposedName + " ("); // columns Reference<XColumnsSupplier> xColumnSup(descriptor,UNO_QUERY); @@ -241,8 +242,9 @@ OUString createStandardCreateStatement(const Reference< XPropertySet >& descript { if ( (xColumns->getByIndex(i) >>= xColProp) && xColProp.is() ) { - aSql.append(createStandardColumnPart(xColProp,_xConnection,_pHelper,_sCreatePattern)); - aSql.append(","); + aSql.append( + createStandardColumnPart(xColProp,_xConnection,_pHelper,_sCreatePattern) + + ","); } } return aSql.makeStringAndClear(); @@ -261,8 +263,8 @@ namespace for(sal_Int32 i=0;i<nColCount;++i) { if ( (_xColumns->getByIndex(i) >>= xColProp) && xColProp.is() ) - sSql.append( ::dbtools::quoteName(sQuote,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))) ) - .append(","); + sSql.append( ::dbtools::quoteName(sQuote,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))) + + ","); } if ( nColCount ) @@ -305,8 +307,7 @@ OUString createStandardKeyStatement(const Reference< XPropertySet >& descriptor, if(!xColumns.is() || !xColumns->getCount()) ::dbtools::throwFunctionSequenceException(_xConnection); - aSql.append(" PRIMARY KEY "); - aSql.append(generateColumnNames(xColumns,xMetaData)); + aSql.append(" PRIMARY KEY " + generateColumnNames(xColumns,xMetaData)); } else if(nKeyType == KeyType::UNIQUE) { @@ -315,8 +316,7 @@ OUString createStandardKeyStatement(const Reference< XPropertySet >& descriptor, if(!xColumns.is() || !xColumns->getCount()) ::dbtools::throwFunctionSequenceException(_xConnection); - aSql.append(" UNIQUE "); - aSql.append(generateColumnNames(xColumns,xMetaData)); + aSql.append(" UNIQUE " + generateColumnNames(xColumns,xMetaData)); } else if(nKeyType == KeyType::FOREIGN) { @@ -387,7 +387,7 @@ OUString createSqlCreateTableStatement( const Reference< XPropertySet >& descri else { if ( aSql.endsWith(",") ) - aSql = aSql.replaceAt(aSql.getLength()-1, 1, ")"); + aSql = aSql.replaceAt(aSql.getLength()-1, 1, u")"); else aSql += ")"; } @@ -484,7 +484,7 @@ namespace } } - connectivity::sdbcx::OColumn* pRet = new connectivity::sdbcx::OColumn(_rName, + xProp = new connectivity::sdbcx::OColumn(_rName, aField6, sField13, sField12, @@ -500,7 +500,6 @@ namespace _aSchema, _aTable); - xProp = pRet; break; } } @@ -575,6 +574,11 @@ Reference<XPropertySet> createSDBCXColumn(const Reference<XPropertySet>& _xTable bool getBooleanDataSourceSetting( const Reference< XConnection >& _rxConnection, const char* _pAsciiSettingName ) { + return getBooleanDataSourceSetting(_rxConnection, OUString::createFromAscii( _pAsciiSettingName )); +} + +bool getBooleanDataSourceSetting( const Reference< XConnection >& _rxConnection, const OUString & rSettingName ) +{ bool bValue( false ); try { @@ -586,7 +590,7 @@ bool getBooleanDataSourceSetting( const Reference< XConnection >& _rxConnection, xDataSourceProperties->getPropertyValue("Settings"), UNO_QUERY_THROW ); - OSL_VERIFY( xSettings->getPropertyValue( OUString::createFromAscii( _pAsciiSettingName ) ) >>= bValue ); + OSL_VERIFY( xSettings->getPropertyValue( rSettingName ) >>= bValue ); } } catch( const Exception& ) @@ -638,11 +642,11 @@ bool isDataSourcePropertyEnabled(const Reference<XInterface>& _xProp, const OUSt { Sequence< PropertyValue > aInfo; xProp->getPropertyValue("Info") >>= aInfo; - const PropertyValue* pValue =std::find_if(aInfo.begin(), - aInfo.end(), + const PropertyValue* pValue =std::find_if(std::cbegin(aInfo), + std::cend(aInfo), [&_sProperty](const PropertyValue& lhs) { return lhs.Name == _sProperty; }); - if ( pValue != aInfo.end() ) + if ( pValue != std::cend(aInfo) ) pValue->Value >>= bEnabled; } } @@ -810,7 +814,7 @@ void collectColumnInformation(const Reference< XConnection>& _xConnection, { ::utl::SharedUNOComponent< XStatement > xStmt( _xConnection->createStatement() ); Reference< XPropertySet > xStatementProps( xStmt, UNO_QUERY_THROW ); - xStatementProps->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_ESCAPEPROCESSING ), makeAny( false ) ); + xStatementProps->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex( PROPERTY_ID_ESCAPEPROCESSING ), Any( false ) ); Reference< XResultSet > xResult( xStmt->executeQuery( sSelect ), UNO_SET_THROW ); Reference< XResultSetMetaDataSupplier > xSuppMeta( xResult, UNO_QUERY_THROW ); Reference< XResultSetMetaData > xMeta( xSuppMeta->getMetaData(), UNO_SET_THROW ); @@ -941,33 +945,19 @@ sal_Int32 DBTypeConversion::convertUnicodeStringToLength( const OUString& _rSour return nLen; } -static OUString lcl_getReportEngines() -{ - return "org.openoffice.Office.DataAccess/ReportEngines"; -} - -static OUString lcl_getDefaultReportEngine() -{ - return "DefaultReportEngine"; -} - -static OUString lcl_getReportEngineNames() -{ - return "ReportEngineNames"; -} OUString getDefaultReportEngineServiceName(const Reference< XComponentContext >& _rxORB) { ::utl::OConfigurationTreeRoot aReportEngines = ::utl::OConfigurationTreeRoot::createWithComponentContext( - _rxORB, lcl_getReportEngines(), -1, ::utl::OConfigurationTreeRoot::CM_READONLY); + _rxORB, "org.openoffice.Office.DataAccess/ReportEngines", -1, ::utl::OConfigurationTreeRoot::CM_READONLY); if ( aReportEngines.isValid() ) { OUString sDefaultReportEngineName; - aReportEngines.getNodeValue(lcl_getDefaultReportEngine()) >>= sDefaultReportEngineName; + aReportEngines.getNodeValue("DefaultReportEngine") >>= sDefaultReportEngineName; if ( !sDefaultReportEngineName.isEmpty() ) { - ::utl::OConfigurationNode aReportEngineNames = aReportEngines.openNode(lcl_getReportEngineNames()); + ::utl::OConfigurationNode aReportEngineNames = aReportEngines.openNode("ReportEngineNames"); if ( aReportEngineNames.isValid() ) { ::utl::OConfigurationNode aReportEngine = aReportEngineNames.openNode(sDefaultReportEngineName); @@ -1014,7 +1004,7 @@ bool isAggregateColumn( const Reference< XPropertySet > &_xColumn ) { bool bAgg(false); - static constexpr OUStringLiteral sAgg = u"AggregateFunction"; + static constexpr OUString sAgg = u"AggregateFunction"_ustr; if ( _xColumn->getPropertySetInfo()->hasPropertyByName(sAgg) ) _xColumn->getPropertyValue(sAgg) >>= bAgg; diff --git a/connectivity/source/commontools/filtermanager.cxx b/connectivity/source/commontools/filtermanager.cxx index a6180dd00666..fa9fc7116d92 100644 --- a/connectivity/source/commontools/filtermanager.cxx +++ b/connectivity/source/commontools/filtermanager.cxx @@ -22,7 +22,7 @@ #include <com/sun/star/sdb/XSQLQueryComposerFactory.hpp> #include <TConnection.hxx> #include <osl/diagnose.h> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <rtl/ustrbuf.hxx> @@ -31,9 +31,6 @@ namespace dbtools using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::sdbc; - using namespace ::com::sun::star::sdb; - using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; using namespace connectivity; @@ -49,7 +46,7 @@ namespace dbtools OSL_ENSURE( m_xComponentAggregate.is(), "FilterManager::initialize: invalid arguments!" ); if ( m_xComponentAggregate.is() ) - m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_APPLYFILTER), makeAny( true ) ); + m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_APPLYFILTER), Any( true ) ); } @@ -74,7 +71,7 @@ namespace dbtools } assert(false); - static const OUString sErr("#FilterManager::getFilterComponent unknown component#"); + static constexpr OUString sErr(u"#FilterManager::getFilterComponent unknown component#"_ustr); return sErr; } @@ -108,14 +105,14 @@ namespace dbtools [[fallthrough]]; case FilterComponent::LinkFilter: if (propagate) - m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), makeAny( getComposedFilter() ) ); + m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), Any( getComposedFilter() ) ); break; case FilterComponent::PublicHaving: propagate = propagate && m_bApplyPublicFilter; [[fallthrough]]; case FilterComponent::LinkHaving: if (propagate) - m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), makeAny( getComposedHaving() ) ); + m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), Any( getComposedHaving() ) ); break; } } @@ -140,9 +137,9 @@ namespace dbtools { // only where/if something changed if (!getFilterComponent( FilterComponent::PublicFilter ).isEmpty()) - m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), makeAny( getComposedFilter() ) ); + m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FILTER), Any( getComposedFilter() ) ); if (!getFilterComponent( FilterComponent::PublicHaving ).isEmpty()) - m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), makeAny( getComposedHaving() ) ); + m_xComponentAggregate->setPropertyValue( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_HAVINGCLAUSE), Any( getComposedHaving() ) ); } } catch( const Exception& ) @@ -152,7 +149,7 @@ namespace dbtools } - void FilterManager::appendFilterComponent( OUStringBuffer& io_appendTo, const OUString& i_component ) + void FilterManager::appendFilterComponent( OUStringBuffer& io_appendTo, std::u16string_view i_component ) { if ( !io_appendTo.isEmpty() ) { diff --git a/connectivity/source/commontools/formattedcolumnvalue.cxx b/connectivity/source/commontools/formattedcolumnvalue.cxx index de317c43b4ab..32db3d7177c2 100644 --- a/connectivity/source/commontools/formattedcolumnvalue.cxx +++ b/connectivity/source/commontools/formattedcolumnvalue.cxx @@ -31,7 +31,7 @@ #include <com/sun/star/sdb/XColumn.hpp> #include <com/sun/star/sdb/XColumnUpdate.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <i18nlangtag/mslangid.hxx> #include <i18nlangtag/languagetag.hxx> #include <comphelper/numbers.hxx> @@ -76,14 +76,11 @@ namespace dbtools Reference< XColumnUpdate > m_xColumnUpdate; FormattedColumnValue_Data() - :m_xFormatter() - ,m_aNullDate( DBTypeConversion::getStandardDate() ) + :m_aNullDate( DBTypeConversion::getStandardDate() ) ,m_nFormatKey( 0 ) ,m_nFieldType( DataType::OTHER ) ,m_nKeyType( NumberFormat::UNDEFINED ) ,m_bNumericField( false ) - ,m_xColumn() - ,m_xColumnUpdate() { } }; @@ -129,7 +126,9 @@ namespace dbtools { case DataType::DATE: case DataType::TIME: + case DataType::TIME_WITH_TIMEZONE: case DataType::TIMESTAMP: + case DataType::TIMESTAMP_WITH_TIMEZONE: case DataType::BIT: case DataType::BOOLEAN: case DataType::TINYINT: @@ -150,7 +149,7 @@ namespace dbtools // get the format key of our bound field Reference< XPropertySetInfo > xPSI( _rxColumn->getPropertySetInfo(), UNO_SET_THROW ); bool bHaveFieldFormat = false; - const OUString sFormatKeyProperty( "FormatKey" ); + static constexpr OUString sFormatKeyProperty( u"FormatKey"_ustr ); if ( xPSI->hasPropertyByName( sFormatKeyProperty ) ) { bHaveFieldFormat = ( _rxColumn->getPropertyValue( sFormatKeyProperty ) >>= _rData.m_nFormatKey ); @@ -158,7 +157,7 @@ namespace dbtools if ( !bHaveFieldFormat ) { // fall back to a format key as indicated by the field type - Locale aSystemLocale( LanguageTag( MsLangId::getSystemLanguage() ).getLocale() ); + Locale aSystemLocale( LanguageTag( MsLangId::getConfiguredSystemLanguage() ).getLocale() ); Reference< XNumberFormatTypes > xNumTypes( xNumberFormatsSupp->getNumberFormats(), UNO_QUERY_THROW ); _rData.m_nFormatKey = getDefaultNumberFormat( _rxColumn, xNumTypes, aSystemLocale ); } diff --git a/connectivity/source/commontools/parameters.cxx b/connectivity/source/commontools/parameters.cxx index bd114ea19341..6c55b9884789 100644 --- a/connectivity/source/commontools/parameters.cxx +++ b/connectivity/source/commontools/parameters.cxx @@ -33,7 +33,7 @@ #include <connectivity/filtermanager.hxx> #include <TConnection.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <ParameterCont.hxx> #include <o3tl/safeint.hxx> @@ -46,7 +46,6 @@ namespace dbtools using namespace ::com::sun::star::sdb; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdbcx; - using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::task; using namespace ::com::sun::star::form; @@ -99,15 +98,13 @@ namespace dbtools m_pOuterParameters->dispose(); m_pOuterParameters = nullptr; m_nInnerCount = 0; - ParameterInformation aEmptyInfo; - m_aParameterInformation.swap( aEmptyInfo ); + ParameterInformation().swap(m_aParameterInformation); m_aMasterFields.clear(); m_aDetailFields.clear(); m_sIdentifierQuoteString.clear(); m_sSpecialCharacters.clear(); m_xConnectionMetadata.clear(); - std::vector< bool > aEmptyArray; - m_aParametersVisited.swap( aEmptyArray ); + std::vector< bool >().swap(m_aParametersVisited); m_bUpToDate = false; } @@ -395,9 +392,7 @@ namespace dbtools if ( !sAdditionalFilter.isEmpty() ) sAdditionalFilter.append(" AND "); - sAdditionalFilter.append("( "); - sAdditionalFilter.append(elem); - sAdditionalFilter.append(" )"); + sAdditionalFilter.append("( " + elem + " )"); } // now set this filter at the filter manager @@ -415,9 +410,7 @@ namespace dbtools if ( !sAdditionalHaving.isEmpty() ) sAdditionalHaving.append(" AND "); - sAdditionalHaving.append("( "); - sAdditionalHaving.append(elem); - sAdditionalHaving.append(" )"); + sAdditionalHaving.append("( " + elem + " )"); } // now set this having clause at the filter manager @@ -482,7 +475,7 @@ namespace dbtools // property, but the parameter listeners expect such a property. So we need an object "aggregating" // xParam and supplying an additional property ("Value") // (it's no real aggregation of course...) - m_pOuterParameters->push_back( new param::ParameterWrapper( aParam.second.xComposerColumn, m_xInnerParamUpdate, aParam.second.aInnerIndexes ) ); + m_pOuterParameters->push_back( new param::ParameterWrapper( aParam.second.xComposerColumn, m_xInnerParamUpdate, std::vector(aParam.second.aInnerIndexes) ) ); } #if OSL_DEBUG_LEVEL > 0 @@ -645,15 +638,14 @@ namespace dbtools OSL_ENSURE ( _rxCompletionHandler.is(), "ParameterManager::completeParameters: invalid interaction handler!" ); // two continuations (Ok and Cancel) - OInteractionAbort* pAbort = new OInteractionAbort; - OParameterContinuation* pParams = new OParameterContinuation; + rtl::Reference<OInteractionAbort> pAbort = new OInteractionAbort; + rtl::Reference<OParameterContinuation> pParams = new OParameterContinuation; // the request ParametersRequest aRequest; aRequest.Parameters = m_pOuterParameters.get(); aRequest.Connection = _rxConnection; - OInteractionRequest* pRequest = new OInteractionRequest( makeAny( aRequest ) ); - Reference< XInteractionRequest > xRequest( pRequest ); + rtl::Reference<OInteractionRequest> pRequest = new OInteractionRequest( Any( aRequest ) ); // some knittings pRequest->addContinuation( pAbort ); @@ -662,7 +654,7 @@ namespace dbtools // execute the request try { - _rxCompletionHandler->handle( xRequest ); + _rxCompletionHandler->handle( pRequest ); } catch( const Exception& ) { @@ -710,14 +702,14 @@ namespace dbtools // TODO: shouldn't we subtract all the parameters which were already visited? if ( nParamsLeft ) { - ::comphelper::OInterfaceIteratorHelper2 aIter( m_aParameterListeners ); + ::comphelper::OInterfaceIteratorHelper3 aIter( m_aParameterListeners ); Reference< XPropertySet > xProp = m_xComponent; OSL_ENSURE(xProp.is(),"Some already released my component!"); - DatabaseParameterEvent aEvent( xProp.get(), m_pOuterParameters.get() ); + DatabaseParameterEvent aEvent( xProp, m_pOuterParameters ); _rClearForNotifies.clear(); while ( aIter.hasMoreElements() && !bCanceled ) - bCanceled = !static_cast< XDatabaseParameterListener* >( aIter.next() )->approveParameter( aEvent ); + bCanceled = !aIter.next()->approveParameter( aEvent ); _rClearForNotifies.reset(); } @@ -959,144 +951,245 @@ namespace dbtools m_aParametersVisited[ _nIndex - 1 ] = true; } -#define VISIT_PARAMETER( method ) \ - ::osl::MutexGuard aGuard( m_rMutex ); \ - OSL_ENSURE( m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!" ); \ - if ( !m_xInnerParamUpdate.is() ) \ - return; \ - m_xInnerParamUpdate->method; \ - externalParameterVisited( _nIndex ) \ - - void ParameterManager::setNull( sal_Int32 _nIndex, sal_Int32 sqlType ) { - VISIT_PARAMETER( setNull( _nIndex, sqlType ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setNull(_nIndex, sqlType); + externalParameterVisited(_nIndex); } void ParameterManager::setObjectNull( sal_Int32 _nIndex, sal_Int32 sqlType, const OUString& typeName ) { - VISIT_PARAMETER( setObjectNull( _nIndex, sqlType, typeName ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setObjectNull(_nIndex, sqlType, typeName); + externalParameterVisited(_nIndex); } void ParameterManager::setBoolean( sal_Int32 _nIndex, bool x ) { - VISIT_PARAMETER( setBoolean( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setBoolean(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setByte( sal_Int32 _nIndex, sal_Int8 x ) { - VISIT_PARAMETER( setByte( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setByte(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setShort( sal_Int32 _nIndex, sal_Int16 x ) { - VISIT_PARAMETER( setShort( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setShort(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setInt( sal_Int32 _nIndex, sal_Int32 x ) { - VISIT_PARAMETER( setInt( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setInt(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setLong( sal_Int32 _nIndex, sal_Int64 x ) { - VISIT_PARAMETER( setLong( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setLong(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setFloat( sal_Int32 _nIndex, float x ) { - VISIT_PARAMETER( setFloat( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setFloat(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setDouble( sal_Int32 _nIndex, double x ) { - VISIT_PARAMETER( setDouble( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setDouble(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setString( sal_Int32 _nIndex, const OUString& x ) { - VISIT_PARAMETER( setString( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setString(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setBytes( sal_Int32 _nIndex, const css::uno::Sequence< sal_Int8 >& x ) { - VISIT_PARAMETER( setBytes( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setBytes(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setDate( sal_Int32 _nIndex, const css::util::Date& x ) { - VISIT_PARAMETER( setDate( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setDate(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setTime( sal_Int32 _nIndex, const css::util::Time& x ) { - VISIT_PARAMETER( setTime( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setTime(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setTimestamp( sal_Int32 _nIndex, const css::util::DateTime& x ) { - VISIT_PARAMETER( setTimestamp( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setTimestamp(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setBinaryStream( sal_Int32 _nIndex, const css::uno::Reference< css::io::XInputStream>& x, sal_Int32 length ) { - VISIT_PARAMETER( setBinaryStream( _nIndex, x, length ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setBinaryStream(_nIndex, x, length); + externalParameterVisited(_nIndex); } void ParameterManager::setCharacterStream( sal_Int32 _nIndex, const css::uno::Reference< css::io::XInputStream>& x, sal_Int32 length ) { - VISIT_PARAMETER( setCharacterStream( _nIndex, x, length ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setCharacterStream(_nIndex, x, length); + externalParameterVisited(_nIndex); } void ParameterManager::setObject( sal_Int32 _nIndex, const css::uno::Any& x ) { - VISIT_PARAMETER( setObject( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setObject(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setObjectWithInfo( sal_Int32 _nIndex, const css::uno::Any& x, sal_Int32 targetSqlType, sal_Int32 scale ) { - VISIT_PARAMETER( setObjectWithInfo( _nIndex, x, targetSqlType, scale ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setObjectWithInfo(_nIndex, x, targetSqlType, scale); + externalParameterVisited(_nIndex); } void ParameterManager::setRef( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XRef>& x ) { - VISIT_PARAMETER( setRef( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setRef(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setBlob( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XBlob>& x ) { - VISIT_PARAMETER( setBlob( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setBlob(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setClob( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XClob>& x ) { - VISIT_PARAMETER( setClob( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setClob(_nIndex, x); + externalParameterVisited(_nIndex); } void ParameterManager::setArray( sal_Int32 _nIndex, const css::uno::Reference< css::sdbc::XArray>& x ) { - VISIT_PARAMETER( setArray( _nIndex, x ) ); + ::osl::MutexGuard aGuard(m_rMutex); + OSL_ENSURE(m_xInnerParamUpdate.is(), "ParameterManager::XParameters::setXXX: no XParameters access to the RowSet!"); + if (!m_xInnerParamUpdate.is()) + return; + m_xInnerParamUpdate->setArray(_nIndex, x); + externalParameterVisited(_nIndex); } diff --git a/connectivity/source/commontools/paramwrapper.cxx b/connectivity/source/commontools/paramwrapper.cxx index ffe42419daa6..e25a3e7b4905 100644 --- a/connectivity/source/commontools/paramwrapper.cxx +++ b/connectivity/source/commontools/paramwrapper.cxx @@ -28,7 +28,8 @@ #include <com/sun/star/sdb/XSingleSelectQueryAnalyzer.hpp> #include <com/sun/star/lang/DisposedException.hpp> -#include <tools/diagnose_ex.h> +#include <o3tl/safeint.hxx> +#include <comphelper/diagnose_ex.hxx> #include <comphelper/enumhelper.hxx> #define PROPERTY_ID_VALUE 1000 @@ -75,9 +76,9 @@ namespace dbtools::param ParameterWrapper::ParameterWrapper( const Reference< XPropertySet >& _rxColumn, - const Reference< XParameters >& _rxAllParameters, const std::vector< sal_Int32 >& _rIndexes ) + const Reference< XParameters >& _rxAllParameters, std::vector< sal_Int32 >&& _rIndexes ) :PropertyBase( m_aBHelper ) - ,m_aIndexes( _rIndexes ) + ,m_aIndexes( std::move(_rIndexes) ) ,m_xDelegator( _rxColumn ) ,m_xValueDestination( _rxAllParameters ) { @@ -158,7 +159,7 @@ namespace dbtools::param aProperties = m_xDelegatorPSI->getProperties(); sal_Int32 nProperties( aProperties.getLength() ); aProperties.realloc( nProperties + 1 ); - aProperties[ nProperties ] = Property( + aProperties.getArray()[ nProperties ] = Property( "Value", PROPERTY_ID_VALUE, ::cppu::UnoType< Any >::get(), @@ -214,11 +215,7 @@ namespace dbtools::param } catch( SQLException& e ) { - WrappedTargetException aExceptionWrapper; - aExceptionWrapper.Context = e.Context; - aExceptionWrapper.Message = e.Message; - aExceptionWrapper.TargetException <<= e; - throw aExceptionWrapper; + throw WrappedTargetException(e.Message, e.Context, css::uno::Any(e)); } } else @@ -257,13 +254,11 @@ namespace dbtools::param } ParameterWrapperContainer::ParameterWrapperContainer() - :ParameterWrapperContainer_Base( m_aMutex ) { } ParameterWrapperContainer::ParameterWrapperContainer( const Reference< XSingleSelectQueryAnalyzer >& _rxComposer ) - :ParameterWrapperContainer_Base( m_aMutex ) { Reference< XParametersSupplier > xSuppParams( _rxComposer, UNO_QUERY_THROW ); Reference< XIndexAccess > xParameters( xSuppParams->getParameters(), css::uno::UNO_SET_THROW ); @@ -283,7 +278,7 @@ namespace dbtools::param Type SAL_CALL ParameterWrapperContainer::getElementType() { - ::osl::MutexGuard aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); impl_checkDisposed_throw(); return cppu::UnoType<XPropertySet>::get(); } @@ -291,7 +286,7 @@ namespace dbtools::param sal_Bool SAL_CALL ParameterWrapperContainer::hasElements() { - ::osl::MutexGuard aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); impl_checkDisposed_throw(); return !m_aParameters.empty(); } @@ -299,7 +294,7 @@ namespace dbtools::param sal_Int32 SAL_CALL ParameterWrapperContainer::getCount() { - ::osl::MutexGuard aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); impl_checkDisposed_throw(); return m_aParameters.size(); } @@ -307,19 +302,19 @@ namespace dbtools::param Any SAL_CALL ParameterWrapperContainer::getByIndex( sal_Int32 _nIndex ) { - ::osl::MutexGuard aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); impl_checkDisposed_throw(); - if ( ( _nIndex < 0 ) || ( _nIndex >= static_cast<sal_Int32>(m_aParameters.size()) ) ) + if ( ( _nIndex < 0 ) || ( o3tl::make_unsigned(_nIndex) >= m_aParameters.size() ) ) throw IndexOutOfBoundsException(); - return makeAny( Reference< XPropertySet >( m_aParameters[ _nIndex ].get() ) ); + return Any( Reference< XPropertySet >( m_aParameters[ _nIndex ] ) ); } Reference< XEnumeration > ParameterWrapperContainer::createEnumeration() { - ::osl::MutexGuard aGuard( m_aMutex ); + std::unique_lock aGuard( m_aMutex ); impl_checkDisposed_throw(); return new ::comphelper::OEnumerationByIndex( static_cast< XIndexAccess* >( this ) ); @@ -328,23 +323,19 @@ namespace dbtools::param void ParameterWrapperContainer::impl_checkDisposed_throw() { - if ( rBHelper.bDisposed ) + if ( m_bDisposed ) throw DisposedException( OUString(), *this ); } - void SAL_CALL ParameterWrapperContainer::disposing() + void ParameterWrapperContainer::disposing(std::unique_lock<std::mutex>& /*rGuard*/) { - ::osl::MutexGuard aGuard( m_aMutex ); - impl_checkDisposed_throw(); - for (const auto& rxParam : m_aParameters) { rxParam->dispose(); } - Parameters aEmpty; - m_aParameters.swap( aEmpty ); + Parameters().swap(m_aParameters); } diff --git a/connectivity/source/commontools/predicateinput.cxx b/connectivity/source/commontools/predicateinput.cxx index f34ad6228532..cbeaf511a943 100644 --- a/connectivity/source/commontools/predicateinput.cxx +++ b/connectivity/source/commontools/predicateinput.cxx @@ -30,7 +30,7 @@ #include <connectivity/sqlnode.hxx> #include <connectivity/PColumn.hxx> #include <comphelper/numbers.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <memory> #include <string_view> @@ -147,17 +147,7 @@ namespace dbtools ) ) { - static const char sSingleQuote[] = "'"; - - sal_Int32 nIndex = -1; - sal_Int32 nTemp = 0; - while ( -1 != ( nIndex = sQuoted.indexOf( '\'',nTemp ) ) ) - { - sQuoted = sQuoted.replaceAt( nIndex, 1, "''" ); - nTemp = nIndex+2; - } - - sQuoted = sSingleQuote + sQuoted + sSingleQuote; + sQuoted = u"'" + sQuoted.replaceAll(u"'", u"''") + u"'"; } pReturn = const_cast< OSQLParser& >( m_aParser ).predicateTree( _rErrorMessage, sQuoted, m_xFormatter, _rxField ); } @@ -308,7 +298,7 @@ namespace dbtools } Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData(); - parse::OParseColumn* pColumn = new parse::OParseColumn( sField, + rtl::Reference<parse::OParseColumn> pColumn = new parse::OParseColumn( sField, OUString(), OUString(), OUString(), diff --git a/connectivity/source/commontools/propertyids.cxx b/connectivity/source/commontools/propertyids.cxx index 90c6beeede6a..cedd0f5f0614 100644 --- a/connectivity/source/commontools/propertyids.cxx +++ b/connectivity/source/commontools/propertyids.cxx @@ -95,6 +95,7 @@ namespace dbtools const OUString& OPropertyMap::getNameByIndex(sal_Int32 _nIndex) const { std::map<sal_Int32, OUString>::const_iterator aIter = m_aPropertyMap.find(_nIndex); + assert(aIter != m_aPropertyMap.end()); return aIter->second; } } diff --git a/connectivity/source/commontools/sqlerror.cxx b/connectivity/source/commontools/sqlerror.cxx index dee6f36f0b61..50c5968cd7d6 100644 --- a/connectivity/source/commontools/sqlerror.cxx +++ b/connectivity/source/commontools/sqlerror.cxx @@ -25,7 +25,6 @@ #include <com/sun/star/sdb/ErrorCondition.hpp> #include <cppuhelper/exc_hlp.hxx> -#include <rtl/ustrbuf.hxx> #include <unotools/resmgr.hxx> #include <osl/diagnose.h> @@ -50,7 +49,7 @@ namespace connectivity // versions of the public SQLError methods which are just delegated to this impl-class static const OUString& getMessagePrefix(); - OUString getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ); + OUString getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ) const; static ErrorCode getErrorCode( const ErrorCondition _eCondition ); void raiseException( const ErrorCondition _eCondition, const Reference< XInterface >& _rxContext, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ); void raiseException( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ); @@ -59,8 +58,7 @@ namespace connectivity private: /// returns the basic error message associated with the given error condition, without any parameter replacements - OUString - impl_getErrorMessage( ErrorCondition _eCondition ); + OUString impl_getErrorMessage( ErrorCondition _eCondition ) const; /// returns the SQLState associated with the given error condition static OUString @@ -81,7 +79,7 @@ namespace connectivity const OUString& SQLError_Impl::getMessagePrefix() { - static const OUString s_sMessagePrefix( "[OOoBase]" ); + static constexpr OUString s_sMessagePrefix( u"[OOoBase]"_ustr ); return s_sMessagePrefix; } @@ -103,7 +101,7 @@ namespace connectivity _rMessage = _rMessage.replaceAt( nIndex, nPlaceholderLen, *rParamValue ); } - const char* lcl_getResourceErrorID(const ErrorCondition _eCondition) + TranslateId lcl_getResourceErrorID(const ErrorCondition _eCondition) { switch (_eCondition) { @@ -126,7 +124,7 @@ namespace connectivity case css::sdb::ErrorCondition::DATA_CANNOT_SELECT_UNFILTERED: return STR_DATA_CANNOT_SELECT_UNFILTERED; } - return nullptr; + return {}; } OUString lcl_getResourceState(const ErrorCondition _eCondition) @@ -142,7 +140,7 @@ namespace connectivity } } - OUString SQLError_Impl::getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ) + OUString SQLError_Impl::getErrorMessage( const ErrorCondition _eCondition, const std::optional<OUString>& _rParamValue1, const std::optional<OUString>& _rParamValue2, const std::optional<OUString>& _rParamValue3 ) const { OUString sErrorMessage( impl_getErrorMessage( _eCondition ) ); @@ -220,22 +218,19 @@ namespace connectivity ); } - OUString SQLError_Impl::impl_getErrorMessage( ErrorCondition _eCondition ) + OUString SQLError_Impl::impl_getErrorMessage( ErrorCondition _eCondition ) const { - OUStringBuffer aMessage; - OUString sResMessage(Translate::get(lcl_getResourceErrorID(_eCondition), m_aResources)); OSL_ENSURE( !sResMessage.isEmpty(), "SQLError_Impl::impl_getErrorMessage: illegal error condition, or invalid resource!" ); - aMessage.append( getMessagePrefix() ).append( " " ).append( sResMessage ); - - return aMessage.makeStringAndClear(); + return getMessagePrefix() + " " + sResMessage; } OUString SQLError_Impl::impl_getSQLState( ErrorCondition _eCondition ) { + static constexpr OUStringLiteral DEFAULT_STATE = u"S1000"; OUString sState = lcl_getResourceState(_eCondition); if (sState.isEmpty()) - sState = OUString::intern( RTL_CONSTASCII_USTRINGPARAM( "S1000" ) ); + sState = DEFAULT_STATE; return sState; } diff --git a/connectivity/source/commontools/statementcomposer.cxx b/connectivity/source/commontools/statementcomposer.cxx index 01f20e9c1e3c..8ebbd9ca8608 100644 --- a/connectivity/source/commontools/statementcomposer.cxx +++ b/connectivity/source/commontools/statementcomposer.cxx @@ -31,7 +31,7 @@ #include <com/sun/star/sdbc/XConnection.hpp> #include <unotools/sharedunocomponent.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <comphelper/property.hxx> @@ -69,9 +69,6 @@ namespace dbtools explicit StatementComposer_Data( const Reference< XConnection >& _rxConnection ) :xConnection( _rxConnection ) - ,sCommand() - ,sFilter() - ,sOrder() ,nCommandType( CommandType::COMMAND ) ,bEscapeProcessing( true ) ,bComposerDirty( true ) @@ -169,7 +166,7 @@ namespace dbtools xComposer->setElementaryQuery( sStatement ); // the sort order - const OUString sPropOrder( "Order" ); + static constexpr OUString sPropOrder( u"Order"_ustr ); if ( ::comphelper::hasProperty( sPropOrder, xQuery ) ) { OUString sOrder; @@ -179,7 +176,7 @@ namespace dbtools // the filter bool bApplyFilter = true; - const OUString sPropApply( "ApplyFilter" ); + static constexpr OUString sPropApply( u"ApplyFilter"_ustr ); if ( ::comphelper::hasProperty( sPropApply, xQuery ) ) { OSL_VERIFY( xQuery->getPropertyValue( sPropApply ) >>= bApplyFilter ); diff --git a/connectivity/source/commontools/warningscontainer.cxx b/connectivity/source/commontools/warningscontainer.cxx index 733bf5b4a450..ba7825612519 100644 --- a/connectivity/source/commontools/warningscontainer.cxx +++ b/connectivity/source/commontools/warningscontainer.cxx @@ -61,19 +61,19 @@ namespace dbtools void WarningsContainer::appendWarning(const SQLException& _rWarning) { - lcl_concatWarnings( m_aOwnWarnings, makeAny( _rWarning ) ); + lcl_concatWarnings( m_aOwnWarnings, Any( _rWarning ) ); } void WarningsContainer::appendWarning( const SQLContext& _rContext ) { - lcl_concatWarnings( m_aOwnWarnings, makeAny( _rContext )); + lcl_concatWarnings( m_aOwnWarnings, Any( _rContext )); } void WarningsContainer::appendWarning(const SQLWarning& _rWarning) { - lcl_concatWarnings( m_aOwnWarnings, makeAny( _rWarning ) ); + lcl_concatWarnings( m_aOwnWarnings, Any( _rWarning ) ); } diff --git a/connectivity/source/cpool/ZConnectionPool.cxx b/connectivity/source/cpool/ZConnectionPool.cxx index 2917ce019700..e9c447a0db58 100644 --- a/connectivity/source/cpool/ZConnectionPool.cxx +++ b/connectivity/source/cpool/ZConnectionPool.cxx @@ -24,6 +24,7 @@ #include "ZPoolCollection.hxx" #include <connectivity/ConnectionWrapper.hxx> #include <com/sun/star/beans/XPropertySet.hpp> +#include <algorithm> using namespace ::com::sun::star::uno; @@ -31,17 +32,15 @@ using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::container; -using namespace ::osl; using namespace connectivity; -#include <algorithm> void SAL_CALL OPoolTimer::onShot() { m_pPool->invalidatePooledConnections(); } -constexpr OUStringLiteral TIMEOUT_NODENAME = u"Timeout"; +constexpr OUString TIMEOUT_NODENAME = u"Timeout"_ustr; OConnectionPool::OConnectionPool(const Reference< XDriver >& _xDriver, const Reference< XInterface >& _xDriverNode, @@ -129,7 +128,7 @@ struct TConnectionPoolFunctor void OConnectionPool::clear(bool _bDispose) { - MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); if(m_xInvalidator->isTicking()) m_xInvalidator->stop(); @@ -153,7 +152,7 @@ void OConnectionPool::clear(bool _bDispose) Reference< XConnection > OConnectionPool::getConnectionWithInfo( const OUString& _rURL, const Sequence< PropertyValue >& _rInfo ) { - MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); Reference<XConnection> xConnection; @@ -177,7 +176,7 @@ void SAL_CALL OConnectionPool::disposing( const css::lang::EventObject& Source ) Reference<XConnection> xConnection(Source.Source,UNO_QUERY); if(xConnection.is()) { - MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); TActiveConnectionMap::iterator aIter = m_aActiveConnections.find(xConnection); OSL_ENSURE(aIter != m_aActiveConnections.end(),"OConnectionPool::disposing: Connection wasn't in pool"); if(aIter != m_aActiveConnections.end()) @@ -189,7 +188,7 @@ void SAL_CALL OConnectionPool::disposing( const css::lang::EventObject& Source ) } else { - m_xDriverNode.clear(); + m_xDriverNode.clear(); } } @@ -228,7 +227,7 @@ Reference< XConnection> OConnectionPool::createNewConnection(const OUString& _rU void OConnectionPool::invalidatePooledConnections() { - MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); TConnectionMap::iterator aIter = m_aPool.begin(); for (; aIter != m_aPool.end(); ) { @@ -282,7 +281,7 @@ void SAL_CALL OConnectionPool::propertyChange( const PropertyChangeEvent& evt ) { if(TIMEOUT_NODENAME == evt.PropertyName) { - evt.NewValue >>= m_nALiveCount; + OPoolCollection::getNodeValue(TIMEOUT_NODENAME, m_xDriverNode) >>= m_nALiveCount; calculateTimeOuts(); } } diff --git a/connectivity/source/cpool/ZConnectionPool.hxx b/connectivity/source/cpool/ZConnectionPool.hxx index e83d22849c0e..c5938f133f3c 100644 --- a/connectivity/source/cpool/ZConnectionPool.hxx +++ b/connectivity/source/cpool/ZConnectionPool.hxx @@ -20,6 +20,7 @@ #include <sal/config.h> #include <map> +#include <mutex> #include <vector> #include <com/sun/star/sdbc/XPooledConnection.hpp> @@ -105,8 +106,8 @@ namespace connectivity TConnectionMap m_aPool; // the pooled connections TActiveConnectionMap m_aActiveConnections; // the currently active connections - ::osl::Mutex m_aMutex; - ::rtl::Reference<OPoolTimer> m_xInvalidator; // invalidates the conntection pool when shot + std::mutex m_aMutex; + ::rtl::Reference<OPoolTimer> m_xInvalidator; // invalidates the connection pool when shot css::uno::Reference< css::sdbc::XDriver > m_xDriver; // the one and only driver for this connectionpool css::uno::Reference< css::uno::XInterface > m_xDriverNode; // config node entry diff --git a/connectivity/source/cpool/ZConnectionWrapper.cxx b/connectivity/source/cpool/ZConnectionWrapper.cxx index dd4519859f21..8b1db6f2cd2f 100644 --- a/connectivity/source/cpool/ZConnectionWrapper.cxx +++ b/connectivity/source/cpool/ZConnectionWrapper.cxx @@ -23,7 +23,6 @@ using namespace connectivity; using namespace com::sun::star::uno; using namespace com::sun::star::lang; -using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; OConnectionWeakWrapper::OConnectionWeakWrapper(Reference< XAggregation >& _xConnection) diff --git a/connectivity/source/cpool/ZDriverWrapper.cxx b/connectivity/source/cpool/ZDriverWrapper.cxx index 811f103bc9a6..9a1bdf971f97 100644 --- a/connectivity/source/cpool/ZDriverWrapper.cxx +++ b/connectivity/source/cpool/ZDriverWrapper.cxx @@ -48,7 +48,7 @@ namespace connectivity OSL_ENSURE(m_xDriver.is(), "ODriverWrapper::ODriverWrapper: invalid aggregate (no XDriver)!"); // set ourself as delegator - m_xDriverAggregate->setDelegator( static_cast< XWeak* >( this ) ); + m_xDriverAggregate->setDelegator( getXWeak() ); } osl_atomic_decrement( &m_refCount ); } diff --git a/connectivity/source/cpool/ZPoolCollection.cxx b/connectivity/source/cpool/ZPoolCollection.cxx index 34d24b0be4f9..adc15a3b2a50 100644 --- a/connectivity/source/cpool/ZPoolCollection.cxx +++ b/connectivity/source/cpool/ZPoolCollection.cxx @@ -31,7 +31,7 @@ #include <com/sun/star/beans/XPropertySet.hpp> #include <osl/diagnose.h> #include <sal/log.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; @@ -43,30 +43,11 @@ using namespace ::osl; using namespace connectivity; -static OUString getConnectionPoolNodeName() -{ - return "org.openoffice.Office.DataAccess/ConnectionPool"; -} - -static OUString getEnablePoolingNodeName() -{ - return "EnablePooling"; -} - -static OUString getDriverNameNodeName() -{ - return "DriverName"; -} - -static OUString getDriverSettingsNodeName() -{ - return "DriverSettings"; -} - -static OUString getEnableNodeName() -{ - return "Enable"; -} +constexpr OUString CONNECTIONPOOL_NODENAME = u"org.openoffice.Office.DataAccess/ConnectionPool"_ustr; +constexpr OUString ENABLE_POOLING = u"EnablePooling"_ustr; +constexpr OUString DRIVER_NAME = u"DriverName"_ustr; +constexpr OUString DRIVER_SETTINGS = u"DriverSettings"_ustr; +constexpr OUString ENABLE = u"Enable"_ustr; OPoolCollection::OPoolCollection(const Reference< XComponentContext >& _rxContext) @@ -76,10 +57,9 @@ OPoolCollection::OPoolCollection(const Reference< XComponentContext >& _rxContex m_xManager = DriverManager::create( m_xContext ); m_xProxyFactory = ProxyFactory::create( m_xContext ); - Reference<XPropertySet> xProp(getConfigPoolRoot(),UNO_QUERY); if ( xProp.is() ) - xProp->addPropertyChangeListener(getEnablePoolingNodeName(),this); + xProp->addPropertyChangeListener(ENABLE_POOLING,this); // attach as desktop listener to know when we have to release our pools osl_atomic_increment( &m_refCount ); { @@ -177,7 +157,7 @@ Reference< XDriver > SAL_CALL OPoolCollection::getDriverByURL( const OUString& _ else { // create a new proxy for the driver // this allows us to control the connections created by it - Reference< XAggregation > xDriverProxy = m_xProxyFactory->createProxy(xDriver.get()); + Reference< XAggregation > xDriverProxy = m_xProxyFactory->createProxy(xDriver); OSL_ENSURE(xDriverProxy.is(), "OConnectionPool::getDriverByURL: invalid proxy returned by the proxy factory!"); OConnectionPool* pConnectionPool = getConnectionPool(sImplName,xDriver,xDriverNode); @@ -194,7 +174,7 @@ bool OPoolCollection::isDriverPoolingEnabled(std::u16string_view _sDriverImplNam bool bEnabled = false; Reference<XInterface> xConnectionPoolRoot = getConfigPoolRoot(); // then look for which of them settings are stored in the configuration - Reference< XNameAccess > xDirectAccess(openNode(getDriverSettingsNodeName(),xConnectionPoolRoot),UNO_QUERY); + Reference< XNameAccess > xDirectAccess(openNode(DRIVER_SETTINGS,xConnectionPoolRoot),UNO_QUERY); if(xDirectAccess.is()) { @@ -208,7 +188,7 @@ bool OPoolCollection::isDriverPoolingEnabled(std::u16string_view _sDriverImplNam { _rxDriverNode = openNode(*pDriverKeys,xDirectAccess); if(_rxDriverNode.is()) - getNodeValue(getEnableNodeName(),_rxDriverNode) >>= bEnabled; + getNodeValue(ENABLE,_rxDriverNode) >>= bEnabled; break; } } @@ -224,7 +204,7 @@ bool OPoolCollection::isPoolingEnabled() // the global "enabled" flag bool bEnabled = false; if(xConnectionPoolRoot.is()) - getNodeValue(getEnablePoolingNodeName(),xConnectionPoolRoot) >>= bEnabled; + getNodeValue(ENABLE_POOLING,xConnectionPoolRoot) >>= bEnabled; return bEnabled; } @@ -233,7 +213,7 @@ Reference<XInterface> const & OPoolCollection::getConfigPoolRoot() if(!m_xConfigNode.is()) m_xConfigNode = createWithProvider( css::configuration::theDefaultProvider::get(m_xContext), - getConnectionPoolNodeName()); + CONNECTIONPOOL_NODENAME); return m_xConfigNode; } @@ -280,10 +260,10 @@ OConnectionPool* OPoolCollection::getConnectionPool(const OUString& _sImplName, { Reference<XPropertySet> xProp(_xDriverNode,UNO_QUERY); if(xProp.is()) - xProp->addPropertyChangeListener(getEnableNodeName(),this); - OConnectionPool* pConnectionPool = new OConnectionPool(_xDriver,_xDriverNode,m_xProxyFactory); - aFind = m_aPools.emplace(_sImplName,pConnectionPool).first; - pRet = aFind->second.get(); + xProp->addPropertyChangeListener(ENABLE,this); + rtl::Reference<OConnectionPool> pConnectionPool = new OConnectionPool(_xDriver,_xDriverNode,m_xProxyFactory); + m_aPools.emplace(_sImplName,pConnectionPool); + pRet = pConnectionPool.get(); } OSL_ENSURE(pRet, "Could not query DriverManager from ConnectionPool!"); @@ -295,8 +275,7 @@ Reference< XInterface > OPoolCollection::createWithProvider(const Reference< XMu const OUString& _rPath) { OSL_ASSERT(_rxConfProvider.is()); - Sequence< Any > args(1); - args[0] <<= NamedValue( "nodepath", makeAny(_rPath)); + Sequence< Any > args{ Any(NamedValue( "nodepath", Any(_rPath))) }; Reference< XInterface > xInterface( _rxConfProvider->createInstanceWithArguments( "com.sun.star.configuration.ConfigurationAccess", @@ -307,7 +286,7 @@ Reference< XInterface > OPoolCollection::createWithProvider(const Reference< XMu return xInterface; } -Reference<XInterface> OPoolCollection::openNode(const OUString& _rPath,const Reference<XInterface>& _xTreeNode) throw() +Reference<XInterface> OPoolCollection::openNode(const OUString& _rPath,const Reference<XInterface>& _xTreeNode) noexcept { Reference< XHierarchicalNameAccess > xHierarchyAccess(_xTreeNode, UNO_QUERY); Reference< XNameAccess > xDirectAccess(_xTreeNode, UNO_QUERY); @@ -345,7 +324,7 @@ Reference<XInterface> OPoolCollection::openNode(const OUString& _rPath,const Ref return xNode; } -Any OPoolCollection::getNodeValue(const OUString& _rPath,const Reference<XInterface>& _xTreeNode) throw() +Any OPoolCollection::getNodeValue(const OUString& _rPath,const Reference<XInterface>& _xTreeNode) noexcept { Reference< XHierarchicalNameAccess > xHierarchyAccess(_xTreeNode, UNO_QUERY); Reference< XNameAccess > xDirectAccess(_xTreeNode, UNO_QUERY); @@ -372,9 +351,9 @@ void SAL_CALL OPoolCollection::queryTermination( const EventObject& /*Event*/ ) { } -void SAL_CALL OPoolCollection::notifyTermination( const EventObject& /*Event*/ ) +void SAL_CALL OPoolCollection::notifyTermination( const EventObject& Event ) { - clearDesktop(); + disposing(Event); } void SAL_CALL OPoolCollection::disposing( const EventObject& Source ) @@ -392,17 +371,21 @@ void SAL_CALL OPoolCollection::disposing( const EventObject& Source ) if(Source.Source == m_xConfigNode) { if ( xProp.is() ) - xProp->removePropertyChangeListener(getEnablePoolingNodeName(),this); + xProp->removePropertyChangeListener(ENABLE_POOLING,this); m_xConfigNode.clear(); } else if ( xProp.is() ) - xProp->removePropertyChangeListener(getEnableNodeName(),this); + xProp->removePropertyChangeListener(ENABLE,this); } catch(const Exception&) { TOOLS_WARN_EXCEPTION("connectivity.cpool", ""); } } + m_xConfigNode.clear(); + m_xProxyFactory.clear(); + m_xManager.clear(); + m_xContext.clear(); } void SAL_CALL OPoolCollection::propertyChange( const css::beans::PropertyChangeEvent& evt ) @@ -426,7 +409,7 @@ void SAL_CALL OPoolCollection::propertyChange( const css::beans::PropertyChangeE if(!bEnabled) { OUString sThisDriverName; - getNodeValue(getDriverNameNodeName(),evt.Source) >>= sThisDriverName; + getNodeValue(DRIVER_NAME,evt.Source) >>= sThisDriverName; // 1st release the driver // look if we already have a proxy for this driver MapDriver2DriverRef::iterator aLookup = m_aDriverProxies.begin(); diff --git a/connectivity/source/cpool/ZPoolCollection.hxx b/connectivity/source/cpool/ZPoolCollection.hxx index 3da18ab86ab2..3fdade8a9db6 100644 --- a/connectivity/source/cpool/ZPoolCollection.hxx +++ b/connectivity/source/cpool/ZPoolCollection.hxx @@ -85,7 +85,7 @@ namespace connectivity static css::uno::Reference< css::uno::XInterface > createWithProvider( const css::uno::Reference< css::lang::XMultiServiceFactory >& _rxConfProvider, const OUString& _rPath); static css::uno::Reference< css::uno::XInterface > openNode( const OUString& _rPath, - const css::uno::Reference< css::uno::XInterface >& _xTreeNode) throw(); + const css::uno::Reference< css::uno::XInterface >& _xTreeNode) noexcept; bool isPoolingEnabled(); bool isDriverPoolingEnabled(std::u16string_view _sDriverImplName, css::uno::Reference< css::uno::XInterface >& _rxDriverNode); @@ -104,7 +104,7 @@ namespace connectivity public: static css::uno::Any getNodeValue( const OUString& _rPath, - const css::uno::Reference< css::uno::XInterface>& _xTreeNode)throw(); + const css::uno::Reference< css::uno::XInterface>& _xTreeNode)noexcept; // XDriverManager virtual css::uno::Reference< css::sdbc::XConnection > SAL_CALL getConnection( const OUString& url ) override; diff --git a/connectivity/source/cpool/ZPooledConnection.cxx b/connectivity/source/cpool/ZPooledConnection.cxx index 2d0b83707905..42e8d6c02db7 100644 --- a/connectivity/source/cpool/ZPooledConnection.cxx +++ b/connectivity/source/cpool/ZPooledConnection.cxx @@ -59,7 +59,7 @@ Reference< XConnection > OPooledConnection::getConnection() { if(!m_xComponent.is() && m_xRealConnection.is()) { - Reference< XAggregation > xConProxy = m_xProxyFactory->createProxy(m_xRealConnection.get()); + Reference< XAggregation > xConProxy = m_xProxyFactory->createProxy(m_xRealConnection); m_xComponent = new OConnectionWeakWrapper(xConProxy); // register as event listener for the new connection if (m_xComponent.is()) diff --git a/connectivity/source/drivers/ado/ACallableStatement.cxx b/connectivity/source/drivers/ado/ACallableStatement.cxx index d572a8f99d9e..94ad744d0134 100644 --- a/connectivity/source/drivers/ado/ACallableStatement.cxx +++ b/connectivity/source/drivers/ado/ACallableStatement.cxx @@ -30,12 +30,6 @@ using namespace com::sun::star::container; IMPLEMENT_SERVICE_INFO(OCallableStatement,"com.sun.star.sdbcx.ACallableStatement","com.sun.star.sdbc.CallableStatement"); -#define GET_PARAM() \ - ADOParameter* pParam = nullptr; \ - m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); \ - if(pParam) \ - pParam->get_Value(&m_aValue); - //************ Class: java.sql.CallableStatement OCallableStatement::OCallableStatement( OConnection* _pConnection, const OUString& sql ) @@ -60,52 +54,76 @@ sal_Bool SAL_CALL OCallableStatement::wasNull( ) sal_Bool SAL_CALL OCallableStatement::getBoolean( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getBool(); } sal_Int8 SAL_CALL OCallableStatement::getByte( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getInt8(); } Sequence< sal_Int8 > SAL_CALL OCallableStatement::getBytes( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getByteSequence(); } css::util::Date SAL_CALL OCallableStatement::getDate( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getDate(); } double SAL_CALL OCallableStatement::getDouble( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getDouble(); } float SAL_CALL OCallableStatement::getFloat( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getFloat(); } sal_Int32 SAL_CALL OCallableStatement::getInt( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getInt32(); } sal_Int64 SAL_CALL OCallableStatement::getLong( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return static_cast<sal_Int64>(m_aValue.getCurrency().int64); } @@ -119,28 +137,40 @@ Any SAL_CALL OCallableStatement::getObject( sal_Int32 /*columnIndex*/, const Ref sal_Int16 SAL_CALL OCallableStatement::getShort( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getInt16(); } OUString SAL_CALL OCallableStatement::getString( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getString(); } css::util::Time SAL_CALL OCallableStatement::getTime( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getTime(); } css::util::DateTime SAL_CALL OCallableStatement::getTimestamp( sal_Int32 columnIndex ) { - GET_PARAM() + ADOParameter* pParam = nullptr; + m_pParameters->get_Item(OLEVariant(sal_Int32(columnIndex-1)),&pParam); + if(pParam) + pParam->get_Value(&m_aValue); return m_aValue.getDateTime(); } @@ -209,12 +239,12 @@ Reference< XRef > SAL_CALL OCallableStatement::getRef( sal_Int32 /*columnIndex*/ } -void SAL_CALL OCallableStatement::acquire() throw() +void SAL_CALL OCallableStatement::acquire() noexcept { OPreparedStatement::acquire(); } -void SAL_CALL OCallableStatement::release() throw() +void SAL_CALL OCallableStatement::release() noexcept { OPreparedStatement::release(); } diff --git a/connectivity/source/drivers/ado/AColumn.cxx b/connectivity/source/drivers/ado/AColumn.cxx index c73e2cb245af..8e4dd370a023 100644 --- a/connectivity/source/drivers/ado/AColumn.cxx +++ b/connectivity/source/drivers/ado/AColumn.cxx @@ -24,7 +24,6 @@ #include <ado/AColumn.hxx> #include <ado/AConnection.hxx> #include <ado/Awrapado.hxx> -#include <cppuhelper/typeprovider.hxx> #include <com/sun/star/sdbc/ColumnValue.hpp> #include <comphelper/extract.hxx> #include <comphelper/servicehelper.hxx> @@ -41,19 +40,7 @@ using namespace com::sun::star::sdbc; void WpADOColumn::Create() { - _ADOColumn* pColumn = nullptr; - HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOCOLUMN_25, - nullptr, - CLSCTX_INPROC_SERVER, - ADOS::IID_ADOCOLUMN_25, - reinterpret_cast<void**>(&pColumn) ); - - - if( !FAILED( hr ) ) - { - operator=( pColumn ); - pColumn->Release( ); - } + pInterface.CoCreateInstance(ADOS::CLSID_ADOCOLUMN_25, nullptr, CLSCTX_INPROC_SERVER); } OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection,_ADOColumn* _pColumn) @@ -62,7 +49,7 @@ OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection,_ADOColumn* _pColum { construct(); OSL_ENSURE(_pColumn,"Column can not be null!"); - m_aColumn = WpADOColumn(_pColumn); + m_aColumn.set(_pColumn); // m_aColumn.put_ParentCatalog(_pConnection->getAdoCatalog()->getCatalog()); fillPropertyValues(); } @@ -79,22 +66,6 @@ OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection) } -Sequence< sal_Int8 > OAdoColumn::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoColumn::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OAdoColumn>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : OColumn_ADO::getSomething(rId); -} - void OAdoColumn::construct() { sal_Int32 nAttrib = isNew() ? 0 : PropertyAttribute::READONLY; @@ -170,7 +141,6 @@ void OAdoColumn::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& r getBOOL(rValue)); break; - case PROPERTY_ID_IM001: case PROPERTY_ID_DESCRIPTION: sAdoPropertyName = u"Description"; break; diff --git a/connectivity/source/drivers/ado/AColumns.cxx b/connectivity/source/drivers/ado/AColumns.cxx index 0ade4a071c45..f56a6d8d007a 100644 --- a/connectivity/source/drivers/ado/AColumns.cxx +++ b/connectivity/source/drivers/ado/AColumns.cxx @@ -29,6 +29,7 @@ #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> +#include <rtl/ref.hxx> #include <algorithm> #include <string_view> #include <strings.hrc> @@ -61,9 +62,9 @@ Reference< XPropertySet > OColumns::createDescriptor() // XAppend sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPropertySet >& descriptor ) { - OAdoColumn* pColumn = getUnoTunnelImplementation<OAdoColumn>( descriptor ); + rtl::Reference<OAdoColumn> pColumn = dynamic_cast<OAdoColumn*>( descriptor.get() ); Reference< XPropertySet > xColumn; - if ( pColumn == nullptr ) + if ( !pColumn.is() ) { // m_pConnection->throwGenericSQLException( STR_INVALID_COLUMN_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); pColumn = new OAdoColumn(isCaseSensitive(),m_pConnection); @@ -73,15 +74,6 @@ sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPro WpADOColumn aColumn = pColumn->getColumnImpl(); -#if OSL_DEBUG_LEVEL > 0 - sal_Int32 nPrecision; - sal_Int32 nScale; - sal_Int32 nType; - nPrecision = aColumn.get_Precision(); - nScale = aColumn.get_NumericScale(); - nType = ADOS::MapADOType2Jdbc(aColumn.get_Type()); -#endif - OUString sTypeName; pColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)) >>= sTypeName; @@ -117,7 +109,7 @@ sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPro aAddedColumn.put_RelatedColumn(aColumn.get_RelatedColumn()); } } - ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); return new OAdoColumn(isCaseSensitive(),m_pConnection,pColumn->getColumnImpl()); } @@ -126,7 +118,7 @@ sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPro void OColumns::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName) { if(!m_aCollection.Delete(_sElementName)) - ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); } diff --git a/connectivity/source/drivers/ado/AConnection.cxx b/connectivity/source/drivers/ado/AConnection.cxx index 6a26265c4d42..b879e1b11801 100644 --- a/connectivity/source/drivers/ado/AConnection.cxx +++ b/connectivity/source/drivers/ado/AConnection.cxx @@ -19,6 +19,7 @@ #include <sal/config.h> +#include <cstddef> #include <string_view> #include <ado/AConnection.hxx> @@ -33,9 +34,10 @@ #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/lang/DisposedException.hpp> #include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> #include <connectivity/dbexception.hxx> +#include <o3tl/string_view.hxx> #include <osl/file.hxx> +#include <systools/win32/oleauto.hxx> #include <strings.hrc> using namespace dbtools; @@ -52,7 +54,6 @@ IMPLEMENT_SERVICE_INFO(OConnection,"com.sun.star.sdbcx.AConnection","com.sun.sta OConnection::OConnection(ODriver* _pDriver) : m_xCatalog(nullptr), m_pDriver(_pDriver), - m_pAdoConnection(nullptr), m_pCatalog(nullptr), m_nEngineType(0), m_bClosed(false), @@ -60,36 +61,19 @@ OConnection::OConnection(ODriver* _pDriver) { osl_atomic_increment( &m_refCount ); - IClassFactory2* pIUnknown = nullptr; - HRESULT hr; - hr = CoGetClassObject( ADOS::CLSID_ADOCONNECTION_21, - CLSCTX_INPROC_SERVER, - nullptr, - IID_IClassFactory2, - reinterpret_cast<void**>(&pIUnknown) ); - - if( !FAILED( hr ) ) + sal::systools::COMReference<IClassFactory2> pIUnknown; + if (!FAILED(pIUnknown.CoGetClassObject(ADOS::CLSID_ADOCONNECTION_21, CLSCTX_INPROC_SERVER))) { - ADOConnection *pCon = nullptr; - IUnknown *pOuter = nullptr; - hr = pIUnknown->CreateInstanceLic( pOuter, + HRESULT hr = pIUnknown->CreateInstanceLic(nullptr, nullptr, ADOS::IID_ADOCONNECTION_21, - ADOS::GetKeyStr().asBSTR(), - reinterpret_cast<void**>(&pCon)); + ADOS::GetKeyStr(), + reinterpret_cast<void**>(&m_aAdoConnection)); if( !FAILED( hr ) ) { - OSL_ENSURE( pCon, "OConnection::OConnection: invalid ADO object!" ); - - m_pAdoConnection = new WpADOConnection( pCon ); - // CreateInstanceLic returned an object which was already acquired - pCon->Release( ); - + OSL_ENSURE(m_aAdoConnection, "OConnection::OConnection: invalid ADO object!"); } - - // Class Factory is no longer needed - pIUnknown->Release(); } osl_atomic_decrement( &m_refCount ); @@ -99,17 +83,17 @@ OConnection::~OConnection() { } -void OConnection::construct(const OUString& url,const Sequence< PropertyValue >& info) +void OConnection::construct(std::u16string_view url,const Sequence< PropertyValue >& info) { osl_atomic_increment( &m_refCount ); setConnectionInfo(info); - sal_Int32 nLen = url.indexOf(':'); - nLen = url.indexOf(':',nLen+1); - OUString aDSN(url.copy(nLen+1)),aUID,aPWD; - if ( aDSN.startsWith("access:") ) - aDSN = aDSN.copy(7); + std::size_t nLen = url.find(':'); + nLen = url.find(':',nLen == std::u16string_view::npos ? 0 : nLen+1); + std::u16string_view aDSN(url.substr(nLen == std::u16string_view::npos ? 0 : nLen+1)); + OUString aUID,aPWD; + o3tl::starts_with(aDSN, u"access:", &aDSN); sal_Int32 nTimeout = 20; const PropertyValue *pIter = info.getConstArray(); @@ -125,21 +109,21 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >& } try { - if(m_pAdoConnection) + if(m_aAdoConnection) { - if(m_pAdoConnection->Open(aDSN,aUID,aPWD,adConnectUnspecified)) - m_pAdoConnection->PutCommandTimeout(nTimeout); + if(m_aAdoConnection.Open(aDSN,aUID,aPWD,adConnectUnspecified)) + m_aAdoConnection.PutCommandTimeout(nTimeout); else - ADOS::ThrowException(*m_pAdoConnection,*this); - if(m_pAdoConnection->get_State() != adStateOpen) + ADOS::ThrowException(m_aAdoConnection,*this); + if(m_aAdoConnection.get_State() != adStateOpen) throwGenericSQLException( STR_NO_CONNECTION,*this ); - WpADOProperties aProps = m_pAdoConnection->get_Properties(); + WpADOProperties aProps = m_aAdoConnection.get_Properties(); if(aProps.IsValid()) { - OTools::putValue(aProps, std::u16string_view(u"Jet OLEDB:ODBC Parsing"), true); + OTools::putValue(aProps, std::u16string_view(u"ACE OLEDB:ODBC Parsing"), true); OLEVariant aVar( - OTools::getValue(aProps, std::u16string_view(u"Jet OLEDB:Engine Type"))); + OTools::getValue(aProps, std::u16string_view(u"ACE OLEDB:Engine Type"))); if(!aVar.isNull() && !aVar.isEmpty()) m_nEngineType = aVar.getInt32(); } @@ -163,10 +147,9 @@ Reference< XStatement > SAL_CALL OConnection::createStatement( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - OStatement* pStmt = new OStatement(this); - Reference< XStatement > xStmt = pStmt; - m_aStatements.push_back(WeakReferenceHelper(*pStmt)); - return pStmt; + Reference< XStatement > xStmt = new OStatement(this); + m_aStatements.push_back(WeakReferenceHelper(xStmt)); + return xStmt; } Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement( const OUString& sql ) @@ -175,9 +158,8 @@ Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement( const OU checkDisposed(OConnection_BASE::rBHelper.bDisposed); - OPreparedStatement* pStmt = new OPreparedStatement(this, sql); - Reference< XPreparedStatement > xPStmt = pStmt; - m_aStatements.push_back(WeakReferenceHelper(*pStmt)); + Reference< XPreparedStatement > xPStmt = new OPreparedStatement(this, sql); + m_aStatements.push_back(WeakReferenceHelper(xPStmt)); return xPStmt; } @@ -187,9 +169,8 @@ Reference< XPreparedStatement > SAL_CALL OConnection::prepareCall( const OUStrin checkDisposed(OConnection_BASE::rBHelper.bDisposed); - OCallableStatement* pStmt = new OCallableStatement(this, sql); - Reference< XPreparedStatement > xPStmt = pStmt; - m_aStatements.push_back(WeakReferenceHelper(*pStmt)); + Reference< XPreparedStatement > xPStmt = new OCallableStatement(this, sql); + m_aStatements.push_back(WeakReferenceHelper(xPStmt)); return xPStmt; } @@ -200,13 +181,13 @@ OUString SAL_CALL OConnection::nativeSQL( const OUString& _sql ) OUString sql = _sql; - WpADOProperties aProps = m_pAdoConnection->get_Properties(); + WpADOProperties aProps = m_aAdoConnection.get_Properties(); if(aProps.IsValid()) { - OTools::putValue(aProps, std::u16string_view(u"Jet OLEDB:ODBC Parsing"), true); + OTools::putValue(aProps, std::u16string_view(u"ACE OLEDB:ODBC Parsing"), true); WpADOCommand aCommand; aCommand.Create(); - aCommand.put_ActiveConnection(static_cast<IDispatch*>(*m_pAdoConnection)); + aCommand.put_ActiveConnection(static_cast<IDispatch*>(m_aAdoConnection)); aCommand.put_CommandText(sql); sql = aCommand.get_CommandText(); } @@ -222,9 +203,9 @@ void SAL_CALL OConnection::setAutoCommit( sal_Bool autoCommit ) m_bAutocommit = autoCommit; if(!autoCommit) - m_pAdoConnection->BeginTrans(); + m_aAdoConnection.BeginTrans(); else - m_pAdoConnection->RollbackTrans(); + m_aAdoConnection.RollbackTrans(); } sal_Bool SAL_CALL OConnection::getAutoCommit( ) @@ -242,7 +223,7 @@ void SAL_CALL OConnection::commit( ) checkDisposed(OConnection_BASE::rBHelper.bDisposed); - m_pAdoConnection->CommitTrans(); + m_aAdoConnection.CommitTrans(); } void SAL_CALL OConnection::rollback( ) @@ -251,14 +232,14 @@ void SAL_CALL OConnection::rollback( ) checkDisposed(OConnection_BASE::rBHelper.bDisposed); - m_pAdoConnection->RollbackTrans(); + m_aAdoConnection.RollbackTrans(); } sal_Bool SAL_CALL OConnection::isClosed( ) { ::osl::MutexGuard aGuard( m_aMutex ); - return OConnection_BASE::rBHelper.bDisposed && !m_pAdoConnection->get_State(); + return OConnection_BASE::rBHelper.bDisposed && !m_aAdoConnection.get_State(); } Reference< XDatabaseMetaData > SAL_CALL OConnection::getMetaData( ) @@ -283,8 +264,8 @@ void SAL_CALL OConnection::setReadOnly( sal_Bool readOnly ) checkDisposed(OConnection_BASE::rBHelper.bDisposed); - m_pAdoConnection->put_Mode(readOnly ? adModeRead : adModeReadWrite); - ADOS::ThrowException(*m_pAdoConnection,*this); + m_aAdoConnection.put_Mode(readOnly ? adModeRead : adModeReadWrite); + ADOS::ThrowException(m_aAdoConnection,*this); } sal_Bool SAL_CALL OConnection::isReadOnly( ) @@ -293,7 +274,7 @@ sal_Bool SAL_CALL OConnection::isReadOnly( ) checkDisposed(OConnection_BASE::rBHelper.bDisposed); - return m_pAdoConnection->get_Mode() == adModeRead; + return m_aAdoConnection.get_Mode() == adModeRead; } void SAL_CALL OConnection::setCatalog( const OUString& catalog ) @@ -301,8 +282,8 @@ void SAL_CALL OConnection::setCatalog( const OUString& catalog ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - m_pAdoConnection->PutDefaultDatabase(catalog); - ADOS::ThrowException(*m_pAdoConnection,*this); + m_aAdoConnection.PutDefaultDatabase(catalog); + ADOS::ThrowException(m_aAdoConnection,*this); } OUString SAL_CALL OConnection::getCatalog( ) @@ -310,7 +291,7 @@ OUString SAL_CALL OConnection::getCatalog( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - return m_pAdoConnection->GetDefaultDatabase(); + return m_aAdoConnection.GetDefaultDatabase(); } void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level ) @@ -341,8 +322,8 @@ void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level ) OSL_FAIL("OConnection::setTransactionIsolation invalid level"); return; } - m_pAdoConnection->put_IsolationLevel(eIso); - ADOS::ThrowException(*m_pAdoConnection,*this); + m_aAdoConnection.put_IsolationLevel(eIso); + ADOS::ThrowException(m_aAdoConnection,*this); } sal_Int32 SAL_CALL OConnection::getTransactionIsolation( ) @@ -352,7 +333,7 @@ sal_Int32 SAL_CALL OConnection::getTransactionIsolation( ) sal_Int32 nRet = 0; - switch(m_pAdoConnection->get_IsolationLevel()) + switch(m_aAdoConnection.get_IsolationLevel()) { case adXactUnspecified: nRet = TransactionIsolation::NONE; @@ -372,7 +353,7 @@ sal_Int32 SAL_CALL OConnection::getTransactionIsolation( ) default: OSL_FAIL("OConnection::setTransactionIsolation invalid level"); } - ADOS::ThrowException(*m_pAdoConnection,*this); + ADOS::ThrowException(m_aAdoConnection,*this); return nRet; } @@ -415,7 +396,7 @@ void OConnection::buildTypeInfo() { ::osl::MutexGuard aGuard( m_aMutex ); - ADORecordset *pRecordset = m_pAdoConnection->getTypeInfo(); + ADORecordset *pRecordset = m_aAdoConnection.getTypeInfo(); if ( pRecordset ) { pRecordset->AddRef(); @@ -480,31 +461,26 @@ void OConnection::disposing() m_xCatalog = css::uno::WeakReference< css::sdbcx::XTablesSupplier>(); m_pDriver = nullptr; - m_pAdoConnection->Close(); + m_aAdoConnection.Close(); for (auto& rEntry : m_aTypeInfo) delete rEntry.second; m_aTypeInfo.clear(); - delete m_pAdoConnection; - m_pAdoConnection = nullptr; + m_aAdoConnection.clear(); } sal_Int64 SAL_CALL OConnection::getSomething( const css::uno::Sequence< sal_Int8 >& rId ) { - return isUnoTunnelId<OConnection>(rId) - ? - reinterpret_cast< sal_Int64 >( this ) - : - OConnection_BASE::getSomething(rId); + return comphelper::getSomethingImpl(rId, this, + comphelper::FallbackToGetSomethingOf<OConnection_BASE>{}); } Sequence< sal_Int8 > OConnection::getUnoTunnelId() { - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); + static const comphelper::UnoIdInit implId; + return implId.getSeq(); } const OExtendedTypeInfo* OConnection::getTypeInfoFromType(const OTypeInfoMap& _rTypeInfo, diff --git a/connectivity/source/drivers/ado/ADatabaseMetaData.cxx b/connectivity/source/drivers/ado/ADatabaseMetaData.cxx index 8e46761e8c27..65e0a80f52a8 100644 --- a/connectivity/source/drivers/ado/ADatabaseMetaData.cxx +++ b/connectivity/source/drivers/ado/ADatabaseMetaData.cxx @@ -28,6 +28,7 @@ #include <FDatabaseMetaDataResultSet.hxx> #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> +#include <rtl/ref.hxx> using namespace ::comphelper; @@ -41,15 +42,15 @@ using namespace com::sun::star::sdbc; ODatabaseMetaData::ODatabaseMetaData(OConnection* _pCon) : ::connectivity::ODatabaseMetaDataBase(_pCon,_pCon->getConnectionInfo()) - ,m_pADOConnection(_pCon->getConnection()) + ,m_rADOConnection(_pCon->getConnection()) ,m_pConnection(_pCon) { } sal_Int32 ODatabaseMetaData::getInt32Property(const OUString& _aProperty) { - connectivity::ado::WpADOProperties aProps(m_pADOConnection->get_Properties()); - // ADOS::ThrowException(*m_pADOConnection,*this); + connectivity::ado::WpADOProperties aProps(m_rADOConnection.get_Properties()); + // ADOS::ThrowException(m_rADOConnection,*this); OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection"); ADO_PROP(_aProperty); sal_Int32 nValue(0); @@ -61,8 +62,8 @@ sal_Int32 ODatabaseMetaData::getInt32Property(const OUString& _aProperty) bool ODatabaseMetaData::getBoolProperty(const OUString& _aProperty) { - connectivity::ado::WpADOProperties aProps(m_pADOConnection->get_Properties()); - ADOS::ThrowException(*m_pADOConnection,*this); + connectivity::ado::WpADOProperties aProps(m_rADOConnection.get_Properties()); + ADOS::ThrowException(m_rADOConnection,*this); OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection"); ADO_PROP(_aProperty); return !aVar.isNull() && !aVar.isEmpty() && aVar.getBool(); @@ -70,8 +71,8 @@ bool ODatabaseMetaData::getBoolProperty(const OUString& _aProperty) OUString ODatabaseMetaData::getStringProperty(const OUString& _aProperty) { - connectivity::ado::WpADOProperties aProps(m_pADOConnection->get_Properties()); - ADOS::ThrowException(*m_pADOConnection,*this); + connectivity::ado::WpADOProperties aProps(m_rADOConnection.get_Properties()); + ADOS::ThrowException(m_rADOConnection,*this); OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection"); ADO_PROP(_aProperty); @@ -84,12 +85,11 @@ OUString ODatabaseMetaData::getStringProperty(const OUString& _aProperty) Reference< XResultSet > ODatabaseMetaData::impl_getTypeInfo_throw( ) { - ADORecordset *pRecordset = m_pADOConnection->getTypeInfo(); + ADORecordset *pRecordset = m_rADOConnection.getTypeInfo(); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setTypeInfoMap(ADOS::isJetEngine(m_pConnection->getEngineType())); - Reference< XResultSet > xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs( ) @@ -98,16 +98,13 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs( ) vtEmpty.setNoArg(); ADORecordset *pRecordset = nullptr; - m_pADOConnection->OpenSchema(adSchemaCatalogs,vtEmpty,vtEmpty,&pRecordset); - ADOS::ThrowException(*m_pADOConnection,*this); - - Reference< XResultSet > xRef; + m_rADOConnection.OpenSchema(adSchemaCatalogs,vtEmpty,vtEmpty,&pRecordset); + ADOS::ThrowException(m_rADOConnection,*this); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCatalogsMap(); - xRef = pResult; - return xRef; + return pResult; } OUString ODatabaseMetaData::impl_getCatalogSeparator_throw( ) @@ -121,78 +118,63 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas( ) vtEmpty.setNoArg(); ADORecordset *pRecordset = nullptr; - m_pADOConnection->OpenSchema(adSchemaSchemata,vtEmpty,vtEmpty,&pRecordset); - ADOS::ThrowException(*m_pADOConnection,*this); - - Reference< XResultSet > xRef; + m_rADOConnection.OpenSchema(adSchemaSchemata,vtEmpty,vtEmpty,&pRecordset); + ADOS::ThrowException(m_rADOConnection,*this); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setSchemasMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges( const Any& catalog, const OUString& schema, const OUString& table, const OUString& columnNamePattern ) { - ADORecordset *pRecordset = m_pADOConnection->getColumnPrivileges(catalog,schema,table,columnNamePattern); - ADOS::ThrowException(*m_pADOConnection,*this); - - Reference< XResultSet > xRef; + ADORecordset *pRecordset = m_rADOConnection.getColumnPrivileges(catalog,schema,table,columnNamePattern); + ADOS::ThrowException(m_rADOConnection,*this); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setColumnPrivilegesMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern ) { - ADORecordset *pRecordset = m_pADOConnection->getColumns(catalog,schemaPattern,tableNamePattern,columnNamePattern); - ADOS::ThrowException(*m_pADOConnection,*this); + ADORecordset *pRecordset = m_rADOConnection.getColumns(catalog,schemaPattern,tableNamePattern,columnNamePattern); + ADOS::ThrowException(m_rADOConnection,*this); - Reference< XResultSet > xRef; - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setColumnsMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const Sequence< OUString >& types ) { - ADORecordset *pRecordset = m_pADOConnection->getTables(catalog,schemaPattern,tableNamePattern,types); - ADOS::ThrowException(*m_pADOConnection,*this); + ADORecordset *pRecordset = m_rADOConnection.getTables(catalog,schemaPattern,tableNamePattern,types); + ADOS::ThrowException(m_rADOConnection,*this); - Reference< XResultSet > xRef; - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setTablesMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedureColumns( const Any& catalog, const OUString& schemaPattern, const OUString& procedureNamePattern, const OUString& columnNamePattern ) { - ADORecordset *pRecordset = m_pADOConnection->getProcedureColumns(catalog,schemaPattern,procedureNamePattern,columnNamePattern); - ADOS::ThrowException(*m_pADOConnection,*this); + ADORecordset *pRecordset = m_rADOConnection.getProcedureColumns(catalog,schemaPattern,procedureNamePattern,columnNamePattern); + ADOS::ThrowException(m_rADOConnection,*this); - Reference< XResultSet > xRef; - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setProcedureColumnsMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures( @@ -200,16 +182,13 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures( const OUString& procedureNamePattern ) { // Create elements used in the array - ADORecordset *pRecordset = m_pADOConnection->getProcedures(catalog,schemaPattern,procedureNamePattern); - ADOS::ThrowException(*m_pADOConnection,*this); - - Reference< XResultSet > xRef; + ADORecordset *pRecordset = m_rADOConnection.getProcedures(catalog,schemaPattern,procedureNamePattern); + ADOS::ThrowException(m_rADOConnection,*this); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setProceduresMap(); - xRef = pResult; - return xRef; + return pResult; } sal_Int32 SAL_CALL ODatabaseMetaData::getMaxBinaryLiteralLength( ) @@ -275,61 +254,50 @@ sal_Int32 ODatabaseMetaData::impl_getMaxTablesInSelect_throw( ) Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys( const Any& catalog, const OUString& schema, const OUString& table ) { - ADORecordset *pRecordset = m_pADOConnection->getExportedKeys(catalog,schema,table); - ADOS::ThrowException(*m_pADOConnection,*this); + ADORecordset *pRecordset = m_rADOConnection.getExportedKeys(catalog,schema,table); + ADOS::ThrowException(m_rADOConnection,*this); - Reference< XResultSet > xRef; - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCrossReferenceMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys( const Any& catalog, const OUString& schema, const OUString& table ) { - ADORecordset *pRecordset = m_pADOConnection->getImportedKeys(catalog,schema,table); - ADOS::ThrowException(*m_pADOConnection,*this); + ADORecordset *pRecordset = m_rADOConnection.getImportedKeys(catalog,schema,table); + ADOS::ThrowException(m_rADOConnection,*this); - Reference< XResultSet > xRef; - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCrossReferenceMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys( const Any& catalog, const OUString& schema, const OUString& table ) { - ADORecordset *pRecordset = m_pADOConnection->getPrimaryKeys(catalog,schema,table); - ADOS::ThrowException(*m_pADOConnection,*this); + ADORecordset *pRecordset = m_rADOConnection.getPrimaryKeys(catalog,schema,table); + ADOS::ThrowException(m_rADOConnection,*this); - Reference< XResultSet > xRef; - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setPrimaryKeysMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo( const Any& catalog, const OUString& schema, const OUString& table, sal_Bool unique, sal_Bool approximate ) { - ADORecordset *pRecordset = m_pADOConnection->getIndexInfo(catalog,schema,table,unique,approximate); - ADOS::ThrowException(*m_pADOConnection,*this); - - Reference< XResultSet > xRef; + ADORecordset *pRecordset = m_rADOConnection.getIndexInfo(catalog,schema,table,unique,approximate); + ADOS::ThrowException(m_rADOConnection,*this); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setIndexInfoMap(); - xRef = pResult; - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( @@ -340,16 +308,16 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( { // the jet provider doesn't support this method // Create elements used in the array - ADORecordset *pRecordset = m_pADOConnection->getTablePrivileges(catalog,schemaPattern,tableNamePattern); - ADOS::ThrowException(*m_pADOConnection,*this); + ADORecordset *pRecordset = m_rADOConnection.getTablePrivileges(catalog,schemaPattern,tableNamePattern); + ADOS::ThrowException(m_rADOConnection,*this); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setTablePrivilegesMap(); xRef = pResult; } else { - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTablePrivileges); + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTablePrivileges); xRef = pResult; ::connectivity::ODatabaseMetaDataResultSet::ORows aRows; ::connectivity::ODatabaseMetaDataResultSet::ORow aRow(8); @@ -379,7 +347,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( aRows.push_back(aRow); aRow[6] = ::connectivity::ODatabaseMetaDataResultSet::getDropValue(); aRows.push_back(aRow); - pResult->setRows(aRows); + pResult->setRows(std::move(aRows)); } return xRef; @@ -390,16 +358,13 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference( const OUString& primaryTable, const Any& foreignCatalog, const OUString& foreignSchema, const OUString& foreignTable ) { - ADORecordset *pRecordset = m_pADOConnection->getCrossReference(primaryCatalog,primarySchema,primaryTable,foreignCatalog,foreignSchema,foreignTable); - ADOS::ThrowException(*m_pADOConnection,*this); - - Reference< XResultSet > xRef; + ADORecordset *pRecordset = m_rADOConnection.getCrossReference(primaryCatalog,primarySchema,primaryTable,foreignCatalog,foreignSchema,foreignTable); + ADOS::ThrowException(m_rADOConnection,*this); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(pRecordset); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCrossReferenceMap(); - xRef = pResult; - return xRef; + return pResult; } sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs( ) @@ -825,7 +790,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsANSI92IntermediateSQL( ) OUString SAL_CALL ODatabaseMetaData::getURL( ) { - return "sdbc:ado:"+ m_pADOConnection->GetConnectionString(); + return "sdbc:ado:"+ m_rADOConnection.GetConnectionString(); } OUString SAL_CALL ODatabaseMetaData::getUserName( ) @@ -871,7 +836,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion( ) sal_Int32 SAL_CALL ODatabaseMetaData::getDefaultTransactionIsolation( ) { sal_Int32 nRet = TransactionIsolation::NONE; - switch(m_pADOConnection->get_IsolationLevel()) + switch(m_rADOConnection.get_IsolationLevel()) { case adXactReadCommitted: nRet = TransactionIsolation::READ_COMMITTED; @@ -898,22 +863,20 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion( ) OUString SAL_CALL ODatabaseMetaData::getSQLKeywords( ) { - ADORecordset *pRecordset = nullptr; + WpADORecordset aRecordset; OLEVariant vtEmpty; vtEmpty.setNoArg(); - m_pADOConnection->OpenSchema(adSchemaDBInfoKeywords,vtEmpty,vtEmpty,&pRecordset); - OSL_ENSURE(pRecordset,"getSQLKeywords: no resultset!"); - ADOS::ThrowException(*m_pADOConnection,*this); - if ( pRecordset ) + m_rADOConnection.OpenSchema(adSchemaDBInfoKeywords,vtEmpty,vtEmpty,&aRecordset); + OSL_ENSURE(aRecordset,"getSQLKeywords: no resultset!"); + ADOS::ThrowException(m_rADOConnection,*this); + if ( aRecordset ) { - WpADORecordset aRecordset(pRecordset); - aRecordset.MoveFirst(); OLEVariant aValue; OUString aRet; while(!aRecordset.IsAtEOF()) { - WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(aRecordset.GetFields()); + WpOLEAppendCollection<ADOFields, WpADOField> aFields(aRecordset.GetFields()); WpADOField aField(aFields.GetItem(0)); aField.get_Value(aValue); aRet += aValue.getString() + ","; @@ -933,8 +896,7 @@ OUString SAL_CALL ODatabaseMetaData::getSearchStringEscape( ) OUString SAL_CALL ODatabaseMetaData::getStringFunctions( ) { - OUString aValue; - return aValue.copy(0,aValue.lastIndexOf(',')); + return OUString(); } OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions( ) @@ -944,8 +906,7 @@ OUString SAL_CALL ODatabaseMetaData::getTimeDateFunctions( ) OUString SAL_CALL ODatabaseMetaData::getSystemFunctions( ) { - OUString aValue; - return aValue.copy(0,aValue.lastIndexOf(',')); + return OUString(); } OUString SAL_CALL ODatabaseMetaData::getNumericFunctions( ) diff --git a/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx b/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx index 8972a4f2dee1..b7872070603f 100644 --- a/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx +++ b/connectivity/source/drivers/ado/ADatabaseMetaDataImpl.cxx @@ -29,6 +29,9 @@ #include <ado/AIndex.hxx> #include <ado/AKey.hxx> #include <ado/ATable.hxx> + +#include <systools/win32/oleauto.hxx> + #include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/sdbc/ProcedureResult.hpp> #include <com/sun/star/sdbc/ColumnValue.hpp> @@ -48,24 +51,22 @@ using namespace ::com::sun::star::uno; void ODatabaseMetaData::fillLiterals() { - ADORecordset *pRecordset = nullptr; + WpADORecordset aRecordset; OLEVariant vtEmpty; vtEmpty.setNoArg(); - m_pADOConnection->OpenSchema(adSchemaDBInfoLiterals,vtEmpty,vtEmpty,&pRecordset); + m_rADOConnection.OpenSchema(adSchemaDBInfoLiterals,vtEmpty,vtEmpty,&aRecordset); - ADOS::ThrowException(*m_pADOConnection,*this); + ADOS::ThrowException(m_rADOConnection,*this); - OSL_ENSURE(pRecordset,"fillLiterals: no resultset!"); - if ( pRecordset ) + OSL_ENSURE(aRecordset,"fillLiterals: no resultset!"); + if ( aRecordset ) { - WpADORecordset aRecordset(pRecordset); - aRecordset.MoveFirst(); OLEVariant aValue; LiteralInfo aInfo; while(!aRecordset.IsAtEOF()) { - WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(aRecordset.GetFields()); + WpOLEAppendCollection<ADOFields, WpADOField> aFields(aRecordset.GetFields()); WpADOField aField(aFields.GetItem(1)); aInfo.pwszLiteralValue = aField.get_Value().getString(); aField = aFields.GetItem(5); @@ -387,19 +388,7 @@ RightsEnum OAdoGroup::Map2Right(sal_Int32 _eNum) void WpADOIndex::Create() { - _ADOIndex* pIndex = nullptr; - HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOINDEX_25, - nullptr, - CLSCTX_INPROC_SERVER, - ADOS::IID_ADOINDEX_25, - reinterpret_cast<void**>(&pIndex) ); - - - if( !FAILED( hr ) ) - { - operator=( pIndex ); - pIndex->Release(); - } + pInterface.CoCreateInstance(ADOS::CLSID_ADOINDEX_25, nullptr, CLSCTX_INPROC_SERVER); } void OAdoIndex::fillPropertyValues() @@ -415,19 +404,7 @@ void OAdoIndex::fillPropertyValues() void WpADOKey::Create() { - _ADOKey* pKey = nullptr; - HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOKEY_25, - nullptr, - CLSCTX_INPROC_SERVER, - ADOS::IID_ADOKEY_25, - reinterpret_cast<void**>(&pKey) ); - - - if( !FAILED( hr ) ) - { - operator=( pKey ); - pKey->Release(); - } + pInterface.CoCreateInstance(ADOS::CLSID_ADOKEY_25, nullptr, CLSCTX_INPROC_SERVER); } void OAdoKey::fillPropertyValues() @@ -524,29 +501,17 @@ KeyTypeEnum OAdoKey::Map2KeyRule(sal_Int32 _eNum) void WpADOTable::Create() { - _ADOTable* pTable = nullptr; - HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOTABLE_25, - nullptr, - CLSCTX_INPROC_SERVER, - ADOS::IID_ADOTABLE_25, - reinterpret_cast<void**>(&pTable) ); - - - if( !FAILED( hr ) ) - { - operator=( pTable ); - pTable->Release(); - } + pInterface.CoCreateInstance(ADOS::CLSID_ADOTABLE_25, nullptr, CLSCTX_INPROC_SERVER); } OUString WpADOCatalog::GetObjectOwner(std::u16string_view _rName, ObjectTypeEnum _eNum) { OLEVariant _rVar; _rVar.setNoArg(); - OLEString aBSTR; - OLEString sStr1(_rName); - pInterface->GetObjectOwner(sStr1.asBSTR(),_eNum,_rVar,aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + sal::systools::BStr sStr1(_rName); + pInterface->GetObjectOwner(sStr1, _eNum, _rVar, &aBSTR); + return OUString(aBSTR); } void OAdoTable::fillPropertyValues() @@ -571,19 +536,7 @@ void OAdoTable::fillPropertyValues() void WpADOUser::Create() { - _ADOUser* pUser = nullptr; - HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOUSER_25, - nullptr, - CLSCTX_INPROC_SERVER, - ADOS::IID_ADOUSER_25, - reinterpret_cast<void**>(&pUser) ); - - - if( !FAILED( hr ) ) - { - operator=( pUser ); - pUser->Release(); - } + pInterface.CoCreateInstance(ADOS::CLSID_ADOUSER_25, nullptr, CLSCTX_INPROC_SERVER); } diff --git a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx index a12f6e1fd6c4..bb5bda634cfc 100644 --- a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx +++ b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx @@ -34,7 +34,7 @@ #include <cppuhelper/typeprovider.hxx> #include <comphelper/seqstream.hxx> #include <connectivity/dbexception.hxx> - +#include <rtl/ref.hxx> #include <oledb.h> @@ -53,7 +53,6 @@ ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet(ADORecordset* _pRecordSet :ODatabaseMetaDataResultSet_BASE(m_aMutex) ,OPropertySetHelper(ODatabaseMetaDataResultSet_BASE::rBHelper) ,m_pRecordSet(_pRecordSet) - ,m_aStatement(nullptr) ,m_nRowPos(0) ,m_bWasNull(false) ,m_bEOF(false) @@ -88,7 +87,7 @@ void ODatabaseMetaDataResultSet::disposing() ::osl::MutexGuard aGuard(m_aMutex); if(m_pRecordSet) m_pRecordSet->Close(); - m_aStatement = nullptr; + m_aStatement.clear(); m_xMetaData.clear(); } @@ -691,21 +690,41 @@ void ODatabaseMetaDataResultSet::setFetchSize(sal_Int32 _par0) ::cppu::IPropertyArrayHelper* ODatabaseMetaDataResultSet::createArrayHelper( ) const { - Sequence< css::beans::Property > aProps(5); - css::beans::Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + 0 + } + } + }; } ::cppu::IPropertyArrayHelper & ODatabaseMetaDataResultSet::getInfoHelper() @@ -780,7 +799,6 @@ void ODatabaseMetaDataResultSet::getFastPropertyValue( void ODatabaseMetaDataResultSet::setProceduresMap() { - for(sal_Int32 i=1;i<4;i++) m_aColMapping.push_back(i); m_aColMapping.push_back(5); @@ -789,13 +807,15 @@ void ODatabaseMetaDataResultSet::setProceduresMap() m_aColMapping.push_back(6); m_aColMapping.push_back(4); - ::std::map<sal_Int32,sal_Int32> aMap; - aMap[DB_PT_UNKNOWN] = ProcedureResult::UNKNOWN; - aMap[DB_PT_PROCEDURE] = ProcedureResult::NONE; - aMap[DB_PT_FUNCTION] = ProcedureResult::RETURN; + ::std::map<sal_Int32,sal_Int32> aMap + { + {DB_PT_UNKNOWN, ProcedureResult::UNKNOWN}, + {DB_PT_PROCEDURE, ProcedureResult::NONE}, + {DB_PT_FUNCTION, ProcedureResult::RETURN} + }; m_aValueRange[4] = aMap; - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setProceduresMap(); m_xMetaData = pMetaData; } @@ -825,7 +845,7 @@ void ODatabaseMetaDataResultSet::setColumnPrivilegesMap() m_aColMapping.push_back(9); m_aColMapping.push_back(10); - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setColumnPrivilegesMap(); m_xMetaData = pMetaData; } @@ -854,55 +874,56 @@ void ODatabaseMetaDataResultSet::setColumnsMap() m_aColMapping.push_back(7); m_aColMapping.push_back(11); - ::std::map<sal_Int32,sal_Int32> aMap; - aMap[adEmpty] = ADOS::MapADOType2Jdbc(adEmpty); - aMap[adTinyInt] = ADOS::MapADOType2Jdbc(adTinyInt); - aMap[adSmallInt] = ADOS::MapADOType2Jdbc(adSmallInt); - aMap[adInteger] = ADOS::MapADOType2Jdbc(adInteger); - aMap[adBigInt] = ADOS::MapADOType2Jdbc(adBigInt); - aMap[adUnsignedTinyInt] = ADOS::MapADOType2Jdbc(adUnsignedTinyInt); - aMap[adUnsignedSmallInt]= ADOS::MapADOType2Jdbc(adUnsignedSmallInt); - aMap[adUnsignedInt] = ADOS::MapADOType2Jdbc(adUnsignedInt); - aMap[adUnsignedBigInt] = ADOS::MapADOType2Jdbc(adUnsignedBigInt); - aMap[adSingle] = ADOS::MapADOType2Jdbc(adSingle); - aMap[adDouble] = ADOS::MapADOType2Jdbc(adDouble); - aMap[adCurrency] = ADOS::MapADOType2Jdbc(adCurrency); - aMap[adDecimal] = ADOS::MapADOType2Jdbc(adDecimal); - aMap[adNumeric] = ADOS::MapADOType2Jdbc(adNumeric); - aMap[adBoolean] = ADOS::MapADOType2Jdbc(adBoolean); - aMap[adError] = ADOS::MapADOType2Jdbc(adError); - aMap[adUserDefined] = ADOS::MapADOType2Jdbc(adUserDefined); - aMap[adVariant] = ADOS::MapADOType2Jdbc(adVariant); - aMap[adIDispatch] = ADOS::MapADOType2Jdbc(adIDispatch); - aMap[adIUnknown] = ADOS::MapADOType2Jdbc(adIUnknown); - aMap[adGUID] = ADOS::MapADOType2Jdbc(adGUID); - aMap[adDate] = ADOS::MapADOType2Jdbc(adDate); - aMap[adDBDate] = ADOS::MapADOType2Jdbc(adDBDate); - aMap[adDBTime] = ADOS::MapADOType2Jdbc(adDBTime); - aMap[adDBTimeStamp] = ADOS::MapADOType2Jdbc(adDBTimeStamp); - aMap[adBSTR] = ADOS::MapADOType2Jdbc(adBSTR); - aMap[adChar] = ADOS::MapADOType2Jdbc(adChar); - aMap[adVarChar] = ADOS::MapADOType2Jdbc(adVarChar); - aMap[adLongVarChar] = ADOS::MapADOType2Jdbc(adLongVarChar); - aMap[adWChar] = ADOS::MapADOType2Jdbc(adWChar); - aMap[adVarWChar] = ADOS::MapADOType2Jdbc(adVarWChar); - aMap[adLongVarWChar] = ADOS::MapADOType2Jdbc(adLongVarWChar); - aMap[adBinary] = ADOS::MapADOType2Jdbc(adBinary); - aMap[adVarBinary] = ADOS::MapADOType2Jdbc(adVarBinary); - aMap[adLongVarBinary] = ADOS::MapADOType2Jdbc(adLongVarBinary); - aMap[adChapter] = ADOS::MapADOType2Jdbc(adChapter); - aMap[adFileTime] = ADOS::MapADOType2Jdbc(adFileTime); - aMap[adPropVariant] = ADOS::MapADOType2Jdbc(adPropVariant); - aMap[adVarNumeric] = ADOS::MapADOType2Jdbc(adVarNumeric); - + ::std::map<sal_Int32,sal_Int32> aMap { + {adEmpty, ADOS::MapADOType2Jdbc(adEmpty)}, + {adTinyInt, ADOS::MapADOType2Jdbc(adTinyInt)}, + {adSmallInt, ADOS::MapADOType2Jdbc(adSmallInt)}, + {adInteger, ADOS::MapADOType2Jdbc(adInteger)}, + {adBigInt, ADOS::MapADOType2Jdbc(adBigInt)}, + {adUnsignedTinyInt, ADOS::MapADOType2Jdbc(adUnsignedTinyInt)}, + {adUnsignedSmallInt, ADOS::MapADOType2Jdbc(adUnsignedSmallInt)}, + {adUnsignedInt, ADOS::MapADOType2Jdbc(adUnsignedInt)}, + {adUnsignedBigInt, ADOS::MapADOType2Jdbc(adUnsignedBigInt)}, + {adSingle, ADOS::MapADOType2Jdbc(adSingle)}, + {adDouble, ADOS::MapADOType2Jdbc(adDouble)}, + {adCurrency, ADOS::MapADOType2Jdbc(adCurrency)}, + {adDecimal, ADOS::MapADOType2Jdbc(adDecimal)}, + {adNumeric, ADOS::MapADOType2Jdbc(adNumeric)}, + {adBoolean, ADOS::MapADOType2Jdbc(adBoolean)}, + {adError, ADOS::MapADOType2Jdbc(adError)}, + {adUserDefined, ADOS::MapADOType2Jdbc(adUserDefined)}, + {adVariant, ADOS::MapADOType2Jdbc(adVariant)}, + {adIDispatch, ADOS::MapADOType2Jdbc(adIDispatch)}, + {adIUnknown, ADOS::MapADOType2Jdbc(adIUnknown)}, + {adGUID, ADOS::MapADOType2Jdbc(adGUID)}, + {adDate, ADOS::MapADOType2Jdbc(adDate)}, + {adDBDate, ADOS::MapADOType2Jdbc(adDBDate)}, + {adDBTime, ADOS::MapADOType2Jdbc(adDBTime)}, + {adDBTimeStamp, ADOS::MapADOType2Jdbc(adDBTimeStamp)}, + {adBSTR, ADOS::MapADOType2Jdbc(adBSTR)}, + {adChar, ADOS::MapADOType2Jdbc(adChar)}, + {adVarChar, ADOS::MapADOType2Jdbc(adVarChar)}, + {adLongVarChar, ADOS::MapADOType2Jdbc(adLongVarChar)}, + {adWChar, ADOS::MapADOType2Jdbc(adWChar)}, + {adVarWChar, ADOS::MapADOType2Jdbc(adVarWChar)}, + {adLongVarWChar, ADOS::MapADOType2Jdbc(adLongVarWChar)}, + {adBinary, ADOS::MapADOType2Jdbc(adBinary)}, + {adVarBinary, ADOS::MapADOType2Jdbc(adVarBinary)}, + {adLongVarBinary, ADOS::MapADOType2Jdbc(adLongVarBinary)}, + {adChapter, ADOS::MapADOType2Jdbc(adChapter)}, + {adFileTime, ADOS::MapADOType2Jdbc(adFileTime)}, + {adPropVariant, ADOS::MapADOType2Jdbc(adPropVariant)}, + {adVarNumeric, ADOS::MapADOType2Jdbc(adVarNumeric)} + }; m_aValueRange[12] = aMap; - std::map< sal_Int32,OUString> aMap2; - aMap2[0] = "YES"; - aMap2[1] = "NO"; + std::map< sal_Int32,OUString> aMap2 { + {0, "YES"}, + {1, "NO"} + }; m_aIntValueRange[18] = aMap2; - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setColumnsMap(); m_xMetaData = pMetaData; } @@ -914,7 +935,7 @@ void ODatabaseMetaDataResultSet::setTablesMap() m_aColMapping.push_back(i); m_aColMapping.push_back(6); - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setTablesMap(); m_xMetaData = pMetaData; } @@ -934,54 +955,56 @@ void ODatabaseMetaDataResultSet::setProcedureColumnsMap() m_aColMapping.push_back(9); m_aColMapping.push_back(14); - ::std::map<sal_Int32,sal_Int32> aMap; - aMap[DBTYPE_EMPTY] = DataType::SQLNULL; - aMap[DBTYPE_NULL] = DataType::SQLNULL; - aMap[DBTYPE_I2] = DataType::SMALLINT; - aMap[DBTYPE_I4] = DataType::INTEGER; - aMap[DBTYPE_R4] = DataType::FLOAT; - aMap[DBTYPE_R8] = DataType::DOUBLE; - aMap[DBTYPE_CY] = DataType::BIGINT; - aMap[DBTYPE_DATE] = DataType::DATE; - aMap[DBTYPE_BSTR] = DataType::VARCHAR; - aMap[DBTYPE_IDISPATCH] = DataType::OBJECT; - aMap[DBTYPE_ERROR] = DataType::OTHER; - aMap[DBTYPE_BOOL] = DataType::BIT; - aMap[DBTYPE_VARIANT] = DataType::STRUCT; - aMap[DBTYPE_IUNKNOWN] = DataType::OTHER; - aMap[DBTYPE_DECIMAL] = DataType::DECIMAL; - aMap[DBTYPE_UI1] = DataType::TINYINT; - aMap[DBTYPE_ARRAY] = DataType::ARRAY; - aMap[DBTYPE_BYREF] = DataType::REF; - aMap[DBTYPE_I1] = DataType::CHAR; - aMap[DBTYPE_UI2] = DataType::SMALLINT; - aMap[DBTYPE_UI4] = DataType::INTEGER; - - // aMap[The] = ; - // aMap[in] = ; - aMap[DBTYPE_I8] = DataType::BIGINT; - aMap[DBTYPE_UI8] = DataType::BIGINT; - aMap[DBTYPE_GUID] = DataType::OTHER; - aMap[DBTYPE_VECTOR] = DataType::OTHER; - aMap[DBTYPE_FILETIME] = DataType::OTHER; - aMap[DBTYPE_RESERVED] = DataType::OTHER; - - // aMap[The] = ; - aMap[DBTYPE_BYTES] = DataType::VARBINARY; - aMap[DBTYPE_STR] = DataType::LONGVARCHAR; - aMap[DBTYPE_WSTR] = DataType::LONGVARCHAR; - aMap[DBTYPE_NUMERIC] = DataType::NUMERIC; - aMap[DBTYPE_UDT] = DataType::OTHER; - aMap[DBTYPE_DBDATE] = DataType::DATE; - aMap[DBTYPE_DBTIME] = DataType::TIME; - aMap[DBTYPE_DBTIMESTAMP] = DataType::TIMESTAMP; - aMap[DBTYPE_HCHAPTER] = DataType::OTHER; - aMap[DBTYPE_PROPVARIANT] = DataType::OTHER; - aMap[DBTYPE_VARNUMERIC] = DataType::NUMERIC; + ::std::map<sal_Int32,sal_Int32> aMap + { + {DBTYPE_EMPTY, DataType::SQLNULL}, + {DBTYPE_NULL, DataType::SQLNULL}, + {DBTYPE_I2, DataType::SMALLINT}, + {DBTYPE_I4, DataType::INTEGER}, + {DBTYPE_R4, DataType::FLOAT}, + {DBTYPE_R8, DataType::DOUBLE}, + {DBTYPE_CY, DataType::BIGINT}, + {DBTYPE_DATE, DataType::DATE}, + {DBTYPE_BSTR, DataType::VARCHAR}, + {DBTYPE_IDISPATCH, DataType::OBJECT}, + {DBTYPE_ERROR, DataType::OTHER}, + {DBTYPE_BOOL, DataType::BIT}, + {DBTYPE_VARIANT, DataType::STRUCT}, + {DBTYPE_IUNKNOWN, DataType::OTHER}, + {DBTYPE_DECIMAL, DataType::DECIMAL}, + {DBTYPE_UI1, DataType::TINYINT}, + {DBTYPE_ARRAY, DataType::ARRAY}, + {DBTYPE_BYREF, DataType::REF}, + {DBTYPE_I1, DataType::CHAR}, + {DBTYPE_UI2, DataType::SMALLINT}, + {DBTYPE_UI4, DataType::INTEGER}, + + // aMap[The] = ; + // aMap[in] = ; + {DBTYPE_I8, DataType::BIGINT}, + {DBTYPE_UI8, DataType::BIGINT}, + {DBTYPE_GUID, DataType::OTHER}, + {DBTYPE_VECTOR, DataType::OTHER}, + {DBTYPE_FILETIME, DataType::OTHER}, + {DBTYPE_RESERVED, DataType::OTHER}, + + // aMap[The] = ; + {DBTYPE_BYTES, DataType::VARBINARY}, + {DBTYPE_STR, DataType::LONGVARCHAR}, + {DBTYPE_WSTR, DataType::LONGVARCHAR}, + {DBTYPE_NUMERIC, DataType::NUMERIC}, + {DBTYPE_UDT, DataType::OTHER}, + {DBTYPE_DBDATE, DataType::DATE}, + {DBTYPE_DBTIME, DataType::TIME}, + {DBTYPE_DBTIMESTAMP, DataType::TIMESTAMP}, + {DBTYPE_HCHAPTER, DataType::OTHER}, + {DBTYPE_PROPVARIANT, DataType::OTHER}, + {DBTYPE_VARNUMERIC, DataType::NUMERIC} + }; m_aValueRange[10] = aMap; - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setProcedureColumnsMap(); m_xMetaData = pMetaData; } @@ -995,7 +1018,7 @@ void ODatabaseMetaDataResultSet::setPrimaryKeysMap() m_aColMapping.push_back(7); m_aColMapping.push_back(8); - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setProcedureColumnsMap(); m_xMetaData = pMetaData; } @@ -1017,27 +1040,33 @@ void ODatabaseMetaDataResultSet::setIndexInfoMap() m_aColMapping.push_back(23); m_aColMapping.push_back(24); - ::std::map<sal_Int32,sal_Int32> aMap; - aMap[DBPROPVAL_IT_HASH] = IndexType::HASHED; - aMap[DBPROPVAL_IT_CONTENT] = IndexType::OTHER; - aMap[DBPROPVAL_IT_OTHER] = IndexType::OTHER; - aMap[DBPROPVAL_IT_BTREE] = IndexType::OTHER; + ::std::map<sal_Int32,sal_Int32> aMap + { + { DBPROPVAL_IT_HASH, IndexType::HASHED }, + { DBPROPVAL_IT_CONTENT, IndexType::OTHER }, + { DBPROPVAL_IT_OTHER, IndexType::OTHER }, + { DBPROPVAL_IT_BTREE, IndexType::OTHER } + }; m_aValueRange[10] = aMap; - ::std::map<sal_Int32,sal_Int32> aMap2; - aMap[0] = 1; - aMap[1] = 0; + ::std::map<sal_Int32,sal_Int32> aMap2 + { + { 0, 1 }, + { 1, 0 } + }; m_aValueRange[8] = aMap2; - std::map< sal_Int32,OUString> aMap3; - aMap3[0] = ""; - aMap3[DB_COLLATION_ASC] = "A"; - aMap3[DB_COLLATION_DESC] = "D"; + std::map< sal_Int32,OUString> aMap3 + { + { 0, "" }, + { DB_COLLATION_ASC, "A" }, + { DB_COLLATION_DESC, "D" } + }; m_aIntValueRange[21] = aMap3; - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setIndexInfoMap(); m_xMetaData = pMetaData; } @@ -1053,13 +1082,15 @@ void ODatabaseMetaDataResultSet::setTablePrivilegesMap() m_aColMapping.push_back(6); m_aColMapping.push_back(7); - std::map< sal_Int32,OUString> aMap; - aMap[0] = "YES"; - aMap[1] = "NO"; + std::map< sal_Int32,OUString> aMap + { + { 0, "YES" }, + { 1, "NO" } + }; m_aIntValueRange[7] = aMap; - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setTablePrivilegesMap(); m_xMetaData = pMetaData; } @@ -1080,17 +1111,19 @@ void ODatabaseMetaDataResultSet::setCrossReferenceMap() m_aColMapping.push_back(16); m_aColMapping.push_back(18); - std::map< OUString,sal_Int32> aMap; - aMap[ OUString("CASCADE")] = KeyRule::CASCADE; - aMap[ OUString("RESTRICT")] = KeyRule::RESTRICT; - aMap[ OUString("SET NULL")] = KeyRule::SET_NULL; - aMap[ OUString("SET DEFAULT")] = KeyRule::SET_DEFAULT; - aMap[ OUString("NO ACTION")] = KeyRule::NO_ACTION; + std::map< OUString,sal_Int32> aMap + { + { "CASCADE", KeyRule::CASCADE }, + { "RESTRICT", KeyRule::RESTRICT }, + { "SET NULL", KeyRule::SET_NULL }, + { "SET DEFAULT", KeyRule::SET_DEFAULT }, + { "NO ACTION", KeyRule::NO_ACTION } + }; m_aStrValueRange[14] = aMap; m_aStrValueRange[15] = aMap; - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setCrossReferenceMap(); m_xMetaData = pMetaData; } @@ -1101,84 +1134,89 @@ void ODatabaseMetaDataResultSet::setTypeInfoMap(bool _bJetEngine) for(;i<19;i++) m_aColMapping.push_back(i); - std::map< OUString,sal_Int32> aMap1; - aMap1[ OUString()] = 10; + std::map< OUString,sal_Int32> aMap1 { { OUString(), 10 } }; m_aStrValueRange[18] = aMap1; - ::std::map<sal_Int32,sal_Int32> aMap; - aMap[adEmpty] = ADOS::MapADOType2Jdbc(adEmpty); - aMap[adTinyInt] = ADOS::MapADOType2Jdbc(adTinyInt); - aMap[adSmallInt] = ADOS::MapADOType2Jdbc(adSmallInt); - aMap[adInteger] = ADOS::MapADOType2Jdbc(adInteger); - aMap[adBigInt] = ADOS::MapADOType2Jdbc(adBigInt); - aMap[adUnsignedTinyInt] = ADOS::MapADOType2Jdbc(adUnsignedTinyInt); - aMap[adUnsignedSmallInt]= ADOS::MapADOType2Jdbc(adUnsignedSmallInt); - aMap[adUnsignedInt] = ADOS::MapADOType2Jdbc(adUnsignedInt); - aMap[adUnsignedBigInt] = ADOS::MapADOType2Jdbc(adUnsignedBigInt); - aMap[adSingle] = ADOS::MapADOType2Jdbc(adSingle); - aMap[adDouble] = ADOS::MapADOType2Jdbc(adDouble); - aMap[adCurrency] = ADOS::MapADOType2Jdbc(adCurrency); - aMap[adDecimal] = ADOS::MapADOType2Jdbc(adDecimal); - aMap[adNumeric] = ADOS::MapADOType2Jdbc(adNumeric); - aMap[adBoolean] = ADOS::MapADOType2Jdbc(adBoolean); - aMap[adError] = ADOS::MapADOType2Jdbc(adError); - aMap[adUserDefined] = ADOS::MapADOType2Jdbc(adUserDefined); - aMap[adVariant] = ADOS::MapADOType2Jdbc(adVariant); - aMap[adIDispatch] = ADOS::MapADOType2Jdbc(adIDispatch); - aMap[adIUnknown] = ADOS::MapADOType2Jdbc(adIUnknown); - aMap[adGUID] = ADOS::MapADOType2Jdbc(adGUID); - aMap[adDate] = _bJetEngine ? ADOS::MapADOType2Jdbc(adDBTimeStamp) : ADOS::MapADOType2Jdbc(adDate); - aMap[adDBDate] = ADOS::MapADOType2Jdbc(adDBDate); - aMap[adDBTime] = ADOS::MapADOType2Jdbc(adDBTime); - aMap[adDBTimeStamp] = ADOS::MapADOType2Jdbc(adDBTimeStamp); - aMap[adBSTR] = ADOS::MapADOType2Jdbc(adBSTR); - aMap[adChar] = ADOS::MapADOType2Jdbc(adChar); - aMap[adVarChar] = ADOS::MapADOType2Jdbc(adVarChar); - aMap[adLongVarChar] = ADOS::MapADOType2Jdbc(adLongVarChar); - aMap[adWChar] = ADOS::MapADOType2Jdbc(adWChar); - aMap[adVarWChar] = ADOS::MapADOType2Jdbc(adVarWChar); - aMap[adLongVarWChar] = ADOS::MapADOType2Jdbc(adLongVarWChar); - aMap[adBinary] = ADOS::MapADOType2Jdbc(adBinary); - aMap[adVarBinary] = ADOS::MapADOType2Jdbc(adVarBinary); - aMap[adLongVarBinary] = ADOS::MapADOType2Jdbc(adLongVarBinary); - aMap[adChapter] = ADOS::MapADOType2Jdbc(adChapter); - aMap[adFileTime] = ADOS::MapADOType2Jdbc(adFileTime); - aMap[adPropVariant] = ADOS::MapADOType2Jdbc(adPropVariant); - aMap[adVarNumeric] = ADOS::MapADOType2Jdbc(adVarNumeric); -// aMap[adArray] = ADOS::MapADOType2Jdbc(adArray); + ::std::map<sal_Int32,sal_Int32> aMap + { + {adEmpty, ADOS::MapADOType2Jdbc(adEmpty)}, + {adTinyInt, ADOS::MapADOType2Jdbc(adTinyInt)}, + {adSmallInt, ADOS::MapADOType2Jdbc(adSmallInt)}, + {adInteger, ADOS::MapADOType2Jdbc(adInteger)}, + {adBigInt, ADOS::MapADOType2Jdbc(adBigInt)}, + {adUnsignedTinyInt, ADOS::MapADOType2Jdbc(adUnsignedTinyInt)}, + {adUnsignedSmallInt, ADOS::MapADOType2Jdbc(adUnsignedSmallInt)}, + {adUnsignedInt, ADOS::MapADOType2Jdbc(adUnsignedInt)}, + {adUnsignedBigInt, ADOS::MapADOType2Jdbc(adUnsignedBigInt)}, + {adSingle, ADOS::MapADOType2Jdbc(adSingle)}, + {adDouble, ADOS::MapADOType2Jdbc(adDouble)}, + {adCurrency, ADOS::MapADOType2Jdbc(adCurrency)}, + {adDecimal, ADOS::MapADOType2Jdbc(adDecimal)}, + {adNumeric, ADOS::MapADOType2Jdbc(adNumeric)}, + {adBoolean, ADOS::MapADOType2Jdbc(adBoolean)}, + {adError, ADOS::MapADOType2Jdbc(adError)}, + {adUserDefined, ADOS::MapADOType2Jdbc(adUserDefined)}, + {adVariant, ADOS::MapADOType2Jdbc(adVariant)}, + {adIDispatch, ADOS::MapADOType2Jdbc(adIDispatch)}, + {adIUnknown, ADOS::MapADOType2Jdbc(adIUnknown)}, + {adGUID, ADOS::MapADOType2Jdbc(adGUID)}, + {adDate, ADOS::MapADOType2Jdbc(_bJetEngine?adDBTimeStamp:adDate)}, + {adDBDate, ADOS::MapADOType2Jdbc(adDBDate)}, + {adDBTime, ADOS::MapADOType2Jdbc(adDBTime)}, + {adDBTimeStamp, ADOS::MapADOType2Jdbc(adDBTimeStamp)}, + {adBSTR, ADOS::MapADOType2Jdbc(adBSTR)}, + {adChar, ADOS::MapADOType2Jdbc(adChar)}, + {adVarChar, ADOS::MapADOType2Jdbc(adVarChar)}, + {adLongVarChar, ADOS::MapADOType2Jdbc(adLongVarChar)}, + {adWChar, ADOS::MapADOType2Jdbc(adWChar)}, + {adVarWChar, ADOS::MapADOType2Jdbc(adVarWChar)}, + {adLongVarWChar, ADOS::MapADOType2Jdbc(adLongVarWChar)}, + {adBinary, ADOS::MapADOType2Jdbc(adBinary)}, + {adVarBinary, ADOS::MapADOType2Jdbc(adVarBinary)}, + {adLongVarBinary, ADOS::MapADOType2Jdbc(adLongVarBinary)}, + {adChapter, ADOS::MapADOType2Jdbc(adChapter)}, + {adFileTime, ADOS::MapADOType2Jdbc(adFileTime)}, + {adPropVariant, ADOS::MapADOType2Jdbc(adPropVariant)}, + {adVarNumeric, ADOS::MapADOType2Jdbc(adVarNumeric)} +// {adArray, ADOS::MapADOType2Jdbc(adArray)} + }; m_aValueRange[2] = aMap; - ::std::map<sal_Int32,sal_Int32> aColumnValueMapping; - aColumnValueMapping[VARIANT_FALSE] = ColumnValue::NO_NULLS; - aColumnValueMapping[VARIANT_TRUE] = ColumnValue::NULLABLE; + ::std::map<sal_Int32,sal_Int32> aColumnValueMapping + { + { VARIANT_FALSE, ColumnValue::NO_NULLS }, + { VARIANT_TRUE, ColumnValue::NULLABLE } + }; m_aValueRange[7] = aColumnValueMapping; // now adjust the column mapping // OJ 24.01.2002 96860 - ::std::map<sal_Int32,sal_Int32> aSearchMapping; - aSearchMapping[DB_UNSEARCHABLE] = ColumnSearch::NONE; - aSearchMapping[DB_LIKE_ONLY] = ColumnSearch::CHAR; - aSearchMapping[DB_ALL_EXCEPT_LIKE] = ColumnSearch::BASIC; - aSearchMapping[DB_SEARCHABLE] = ColumnSearch::FULL; + ::std::map<sal_Int32,sal_Int32> aSearchMapping + { + { DB_UNSEARCHABLE, ColumnSearch::NONE }, + { DB_LIKE_ONLY, ColumnSearch::CHAR }, + { DB_ALL_EXCEPT_LIKE, ColumnSearch::BASIC }, + { DB_SEARCHABLE, ColumnSearch::FULL } + }; m_aValueRange[9] = aSearchMapping; ::std::map<sal_Int32,sal_Int32> aCurrencyMapping; m_aValueRange[11] = aCurrencyMapping; - ODatabaseMetaDataResultSetMetaData* pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); + rtl::Reference<ODatabaseMetaDataResultSetMetaData> pMetaData = new ODatabaseMetaDataResultSetMetaData(m_pRecordSet,this); pMetaData->setTypeInfoMap(); m_xMetaData = pMetaData; } -void SAL_CALL ODatabaseMetaDataResultSet::acquire() throw() +void SAL_CALL ODatabaseMetaDataResultSet::acquire() noexcept { ODatabaseMetaDataResultSet_BASE::acquire(); } -void SAL_CALL ODatabaseMetaDataResultSet::release() throw() +void SAL_CALL ODatabaseMetaDataResultSet::release() noexcept { ODatabaseMetaDataResultSet_BASE::release(); } diff --git a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx index 94dbfddb34f9..3fa13d06b84a 100644 --- a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx +++ b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSetMetaData.cxx @@ -71,9 +71,8 @@ sal_Int32 SAL_CALL ODatabaseMetaDataResultSetMetaData::getColumnCount() if (m_vMapping.size()) return m_mColumns.size(); - ADOFields* pFields = nullptr; - m_pRecordSet->get_Fields(&pFields); - WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields); + WpOLEAppendCollection<ADOFields, WpADOField> aFields; + m_pRecordSet->get_Fields(&aFields); m_nColCount = aFields.GetItemCount(); return m_nColCount; } diff --git a/connectivity/source/drivers/ado/ADriver.cxx b/connectivity/source/drivers/ado/ADriver.cxx index ee4ec27b6f05..6568f7a1ee84 100644 --- a/connectivity/source/drivers/ado/ADriver.cxx +++ b/connectivity/source/drivers/ado/ADriver.cxx @@ -24,16 +24,16 @@ #include <ado/Awrapado.hxx> #include <ado/adoimp.hxx> #include <com/sun/star/lang/DisposedException.hpp> +#include <comphelper/servicehelper.hxx> #include <connectivity/dbexception.hxx> #include <cppuhelper/supportsservice.hxx> #include <o3tl/safeCoInitUninit.hxx> +#include <rtl/ref.hxx> #include <strings.hrc> #include <objbase.h> #include <resource/sharedresources.hxx> -#include <memory> - using namespace connectivity; using namespace connectivity::ado; using namespace com::sun::star::uno; @@ -94,13 +94,12 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const S return nullptr; // we need to wrap the connection as the construct call might throw - std::unique_ptr<OConnection> pCon(new OConnection(this)); + rtl::Reference<OConnection> pCon(new OConnection(this)); pCon->construct(url,info); OConnection* pPtr = pCon.get(); - Reference< XConnection > xCon = pCon.release(); m_xConnections.push_back(WeakReferenceHelper(*pPtr)); - return xCon; + return pCon; } sal_Bool SAL_CALL ODriver::acceptsURL( const OUString& url ) @@ -123,34 +122,32 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString impl_checkURL_throw(url); if ( acceptsURL(url) ) { - std::vector< DriverPropertyInfo > aDriverInfo; - - Sequence< OUString > aBooleanValues(2); - aBooleanValues[0] = "false"; - aBooleanValues[1] = "true"; + Sequence< OUString > aBooleanValues{ "false", "true" }; - aDriverInfo.push_back(DriverPropertyInfo( - "IgnoreDriverPrivileges" - ,"Ignore the privileges from the database driver." - ,false - ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "EscapeDateTime" - ,"Escape date time format." - ,false - ,"true" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "TypeInfoSettings" - ,"Defines how the type info of the database metadata should be manipulated." - ,false - ,OUString( ) - ,Sequence< OUString > ()) - ); - return Sequence< DriverPropertyInfo >(aDriverInfo.data(),aDriverInfo.size()); + return + { + { + "IgnoreDriverPrivileges", + "Ignore the privileges from the database driver.", + false, + "false", + aBooleanValues + }, + { + "EscapeDateTime", + "Escape date time format.", + false, + "true", + aBooleanValues + }, + { + "TypeInfoSettings", + "Defines how the type info of the database metadata should be manipulated.", + false, + {}, + {} + } + }; } return Sequence< DriverPropertyInfo >(); } @@ -174,13 +171,11 @@ Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByConnection( co OConnection* pConnection = nullptr; Reference< css::lang::XUnoTunnel> xTunnel(connection,UNO_QUERY); - if(xTunnel.is()) + if (auto pSearchConnection = comphelper::getFromUnoTunnel<OConnection>(xTunnel)) { - OConnection* pSearchConnection = reinterpret_cast< OConnection* >( xTunnel->getSomething(OConnection::getUnoTunnelId()) ); - auto foundConnection = std::any_of(m_xConnections.begin(), m_xConnections.end(), [&pSearchConnection](const css::uno::WeakReferenceHelper& rxConnection) { - return static_cast<OConnection*>(Reference< XConnection >::query(rxConnection.get().get()).get()) == pSearchConnection; }); + return static_cast<OConnection*>(Reference< XConnection >::query(rxConnection.get()).get()) == pSearchConnection; }); if (foundConnection) pConnection = pSearchConnection; } @@ -192,11 +187,11 @@ Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByConnection( co aCatalog.Create(); if(aCatalog.IsValid()) { - aCatalog.putref_ActiveConnection(*pConnection->getConnection()); - OCatalog* pCatalog = new OCatalog(aCatalog,pConnection); + aCatalog.putref_ActiveConnection(pConnection->getConnection()); + rtl::Reference<OCatalog> pCatalog = new OCatalog(aCatalog,pConnection); xTab = pCatalog; pConnection->setCatalog(xTab); - pConnection->setCatalog(pCatalog); + pConnection->setCatalog(pCatalog.get()); } } return xTab; @@ -211,13 +206,11 @@ Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByURL( const OUS void ADOS::ThrowException(ADOConnection* _pAdoCon,const Reference< XInterface >& _xInterface) { - ADOErrors *pErrors = nullptr; + sal::systools::COMReference<ADOErrors> pErrors; _pAdoCon->get_Errors(&pErrors); if(!pErrors) return; // no error found - pErrors->AddRef( ); - // read all noted errors and issue them sal_Int32 nLen; pErrors->get_Count(&nLen); @@ -227,28 +220,25 @@ void ADOS::ThrowException(ADOConnection* _pAdoCon,const Reference< XInterface >& aException.ErrorCode = 1000; for (sal_Int32 i = nLen-1; i>=0; --i) { - ADOError *pError = nullptr; - pErrors->get_Item(OLEVariant(i),&pError); - WpADOError aErr(pError); - OSL_ENSURE(pError,"No error in collection found! BAD!"); - if(pError) + WpADOError aErr; + pErrors->get_Item(OLEVariant(i),&aErr); + OSL_ENSURE(aErr,"No error in collection found! BAD!"); + if(aErr) { if(i==nLen-1) aException = SQLException(aErr.GetDescription(),_xInterface,aErr.GetSQLState(),aErr.GetNumber(),Any()); else { SQLException aTemp(aErr.GetDescription(), - _xInterface,aErr.GetSQLState(),aErr.GetNumber(),makeAny(aException)); + _xInterface,aErr.GetSQLState(),aErr.GetNumber(),Any(aException)); aTemp.NextException <<= aException; aException = aTemp; } } } pErrors->Clear(); - pErrors->Release(); throw aException; } - pErrors->Release(); } extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* diff --git a/connectivity/source/drivers/ado/AGroup.cxx b/connectivity/source/drivers/ado/AGroup.cxx index b41fbdbba05d..02cd239d7682 100644 --- a/connectivity/source/drivers/ado/AGroup.cxx +++ b/connectivity/source/drivers/ado/AGroup.cxx @@ -21,7 +21,6 @@ #include <ado/AGroup.hxx> #include <ado/AUsers.hxx> #include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> #include <ado/AConnection.hxx> @@ -37,26 +36,14 @@ using namespace com::sun::star::sdbcx; void WpADOGroup::Create() { - ADOGroup* pGroup = nullptr; - HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOGROUP_25, - nullptr, - CLSCTX_INPROC_SERVER, - ADOS::IID_ADOGROUP_25, - reinterpret_cast<void**>(&pGroup) ); - - - if( !FAILED( hr ) ) - { - operator=( pGroup ); - pGroup->Release(); - } + pInterface.CoCreateInstance(ADOS::CLSID_ADOGROUP_25, nullptr, CLSCTX_INPROC_SERVER); } OAdoGroup::OAdoGroup(OCatalog* _pParent,bool _bCase, ADOGroup* _pGroup) : OGroup_ADO(_bCase),m_pCatalog(_pParent) { construct(); if(_pGroup) - m_aGroup = WpADOGroup(_pGroup); + m_aGroup.set(_pGroup); else m_aGroup.Create(); @@ -82,23 +69,6 @@ void OAdoGroup::refreshUsers() m_pUsers.reset(new OUsers(m_pCatalog, m_aMutex, aVector, aUsers, isCaseSensitive())); } -Sequence< sal_Int8 > OAdoGroup::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoGroup::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OAdoGroup>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : OGroup_ADO::getSomething(rId); -} - - void OAdoGroup::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) { if(m_aGroup.IsValid()) diff --git a/connectivity/source/drivers/ado/AGroups.cxx b/connectivity/source/drivers/ado/AGroups.cxx index 211f34f6bebe..6f7c8b2da8d0 100644 --- a/connectivity/source/drivers/ado/AGroups.cxx +++ b/connectivity/source/drivers/ado/AGroups.cxx @@ -58,7 +58,7 @@ Reference< XPropertySet > OGroups::createDescriptor() // XAppend sdbcx::ObjectType OGroups::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - OAdoGroup* pGroup = getUnoTunnelImplementation<OAdoGroup>(descriptor); + OAdoGroup* pGroup = dynamic_cast<OAdoGroup*>(descriptor.get()); if ( pGroup == nullptr ) m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_GROUP_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); diff --git a/connectivity/source/drivers/ado/AIndex.cxx b/connectivity/source/drivers/ado/AIndex.cxx index 61a047bc9b00..b183d49c2435 100644 --- a/connectivity/source/drivers/ado/AIndex.cxx +++ b/connectivity/source/drivers/ado/AIndex.cxx @@ -20,7 +20,6 @@ #include <ado/AIndex.hxx> #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> -#include <cppuhelper/typeprovider.hxx> #include <ado/AColumns.hxx> #include <TConnection.hxx> #include <comphelper/servicehelper.hxx> @@ -40,7 +39,7 @@ OAdoIndex::OAdoIndex(bool _bCase,OConnection* _pConnection,ADOIndex* _pIndex) ,m_pConnection(_pConnection) { construct(); - m_aIndex = WpADOIndex(_pIndex); + m_aIndex.set(_pIndex); fillPropertyValues(); } @@ -71,22 +70,6 @@ void OAdoIndex::refreshColumns() } -Sequence< sal_Int8 > OAdoIndex::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoIndex::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OAdoIndex>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : sdbcx::OIndex::getSomething(rId); -} - void SAL_CALL OAdoIndex::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) { if(m_aIndex.IsValid()) diff --git a/connectivity/source/drivers/ado/AIndexes.cxx b/connectivity/source/drivers/ado/AIndexes.cxx index 616cd863ada4..1e427a2f0782 100644 --- a/connectivity/source/drivers/ado/AIndexes.cxx +++ b/connectivity/source/drivers/ado/AIndexes.cxx @@ -58,14 +58,14 @@ Reference< XPropertySet > OIndexes::createDescriptor() // XAppend sdbcx::ObjectType OIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - OAdoIndex* pIndex = getUnoTunnelImplementation<OAdoIndex>(descriptor); + OAdoIndex* pIndex = dynamic_cast<OAdoIndex*>(descriptor.get()); if ( pIndex == nullptr ) m_pConnection->throwGenericSQLException( STR_INVALID_INDEX_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); ADOIndexes* pIndexes = m_aCollection; if ( FAILED( pIndexes->Append( OLEVariant( _rForName ), OLEVariant( pIndex->getImpl() ) ) ) ) { - ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); m_pConnection->throwGenericSQLException( STR_INVALID_INDEX_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); } diff --git a/connectivity/source/drivers/ado/AKey.cxx b/connectivity/source/drivers/ado/AKey.cxx index 764765b35620..9c2734ede8f1 100644 --- a/connectivity/source/drivers/ado/AKey.cxx +++ b/connectivity/source/drivers/ado/AKey.cxx @@ -21,7 +21,6 @@ #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> #include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> #include <ado/AColumns.hxx> #include <ado/AConnection.hxx> @@ -38,7 +37,7 @@ OAdoKey::OAdoKey(bool _bCase,OConnection* _pConnection, ADOKey* _pKey) ,m_pConnection(_pConnection) { construct(); - m_aKey = WpADOKey(_pKey); + m_aKey.set(_pKey); fillPropertyValues(); } @@ -67,22 +66,6 @@ void OAdoKey::refreshColumns() m_pColumns.reset(new OColumns(*this, m_aMutex, aVector, aColumns, isCaseSensitive(), m_pConnection)); } -Sequence< sal_Int8 > OAdoKey::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoKey::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OAdoKey>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : OKey_ADO::getSomething(rId); -} - void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) { if(m_aKey.IsValid()) @@ -94,7 +77,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal OUString aVal; rValue >>= aVal; m_aKey.put_Name(aVal); - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); } break; case PROPERTY_ID_TYPE: @@ -102,7 +85,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal sal_Int32 nVal=0; rValue >>= nVal; m_aKey.put_Type(Map2KeyRule(nVal)); - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); } break; case PROPERTY_ID_REFERENCEDTABLE: @@ -110,7 +93,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal OUString aVal; rValue >>= aVal; m_aKey.put_RelatedTable(aVal); - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); } break; case PROPERTY_ID_UPDATERULE: @@ -118,7 +101,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal sal_Int32 nVal=0; rValue >>= nVal; m_aKey.put_UpdateRule(Map2Rule(nVal)); - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); } break; case PROPERTY_ID_DELETERULE: @@ -126,7 +109,7 @@ void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rVal sal_Int32 nVal=0; rValue >>= nVal; m_aKey.put_DeleteRule(Map2Rule(nVal)); - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); } break; } diff --git a/connectivity/source/drivers/ado/AKeys.cxx b/connectivity/source/drivers/ado/AKeys.cxx index 0d921c39842b..32d02bc743e7 100644 --- a/connectivity/source/drivers/ado/AKeys.cxx +++ b/connectivity/source/drivers/ado/AKeys.cxx @@ -58,7 +58,7 @@ Reference< XPropertySet > OKeys::createDescriptor() // XAppend sdbcx::ObjectType OKeys::appendObject( const OUString&, const Reference< XPropertySet >& descriptor ) { - OAdoKey* pKey = getUnoTunnelImplementation<OAdoKey>( descriptor ); + OAdoKey* pKey = dynamic_cast<OAdoKey*>( descriptor.get() ); if ( pKey == nullptr) m_pConnection->throwGenericSQLException( STR_INVALID_KEY_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); @@ -78,7 +78,7 @@ sdbcx::ObjectType OKeys::appendObject( const OUString&, const Reference< XProper adKeyPrimary, // must be every time adKeyPrimary vOptional)) ) { - ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); // just make sure that an SQLExceptionis thrown here m_pConnection->throwGenericSQLException( STR_INVALID_KEY_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); } @@ -90,7 +90,7 @@ sdbcx::ObjectType OKeys::appendObject( const OUString&, const Reference< XProper void OKeys::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName) { if(!m_aCollection.Delete(OLEVariant(_sElementName).getString())) - ADOS::ThrowException(*m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pConnection->getConnection(),static_cast<XTypeProvider*>(this)); } diff --git a/connectivity/source/drivers/ado/APreparedStatement.cxx b/connectivity/source/drivers/ado/APreparedStatement.cxx index 34697fa4388a..9e17d71b0bed 100644 --- a/connectivity/source/drivers/ado/APreparedStatement.cxx +++ b/connectivity/source/drivers/ado/APreparedStatement.cxx @@ -31,13 +31,14 @@ #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> #include <connectivity/dbtools.hxx> +#include <rtl/ref.hxx> #include <strings.hrc> #include <limits> #define CHECK_RETURN(x) \ if(!x) \ - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); #ifdef max # undef max @@ -144,21 +145,18 @@ sal_Bool SAL_CALL OPreparedStatement::execute( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OStatement_BASE::rBHelper.bDisposed); - SQLWarning warning; clearWarnings (); // Call SQLExecute try { ADORecordset* pSet=nullptr; CHECK_RETURN(m_Command.Execute(m_RecordsAffected,m_Parameters,adCmdUnknown,&pSet)) - m_RecordSet = WpADORecordset(pSet); + m_RecordSet.set(pSet); } - catch (SQLWarning& ex) + catch (SQLWarning&) { - // Save pointer to warning and save with ResultSet + //TODO: Save pointer to warning and save with ResultSet // object once it is created. - - warning = ex; } return m_RecordSet.IsValid(); } @@ -173,11 +171,11 @@ sal_Int32 SAL_CALL OPreparedStatement::executeUpdate( ) CHECK_RETURN(m_Command.Execute(m_RecordsAffected,m_Parameters,adCmdUnknown,&pSet)) if ( VT_ERROR == m_RecordsAffected.getType() ) { - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); // to be sure that we get the error really thrown throw SQLException(); } - m_RecordSet = WpADORecordset(pSet); + m_RecordSet.set(pSet); return m_RecordsAffected.getInt32(); } @@ -201,10 +199,9 @@ void OPreparedStatement::setParameter(sal_Int32 parameterIndex, const DataTypeEn } else { - ADOParameter* pParam = nullptr; - m_pParameters->get_Item(OLEVariant(sal_Int32(parameterIndex-1)),&pParam); - WpADOParameter aParam(pParam); - if(pParam) + WpADOParameter aParam; + m_pParameters->get_Item(OLEVariant(sal_Int32(parameterIndex-1)),&aParam); + if(aParam) { DataTypeEnum eType = aParam.GetADOType(); if ( _eType != eType && _eType != adDBTimeStamp ) @@ -222,7 +219,7 @@ void OPreparedStatement::setParameter(sal_Int32 parameterIndex, const DataTypeEn CHECK_RETURN(aParam.PutValue(Val)); } } - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); } void SAL_CALL OPreparedStatement::setString( sal_Int32 parameterIndex, const OUString& x ) @@ -264,13 +261,12 @@ Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery( ) CHECK_RETURN(m_RecordSet.get_CursorType(m_eCursorType)) CHECK_RETURN(m_RecordSet.get_LockType(m_eLockType)) - OResultSet* pSet = new OResultSet(m_RecordSet,this); - Reference< XResultSet > xRs = pSet; + rtl::Reference<OResultSet> pSet = new OResultSet(m_RecordSet,this); pSet->construct(); pSet->setMetaData(getMetaData()); - m_xResultSet = WeakReference<XResultSet>(xRs); + m_xResultSet = WeakReference<XResultSet>(pSet); - return xRs; + return pSet; } void SAL_CALL OPreparedStatement::setBoolean( sal_Int32 parameterIndex, sal_Bool x ) @@ -415,10 +411,9 @@ void SAL_CALL OPreparedStatement::clearParameters( ) aVal.setEmpty(); for(sal_Int32 i=0;i<nCount;++i) { - ADOParameter* pParam = nullptr; - m_pParameters->get_Item(OLEVariant(i),&pParam); - WpADOParameter aParam(pParam); - if(pParam) + WpADOParameter aParam; + m_pParameters->get_Item(OLEVariant(i),&aParam); + if(aParam) { CHECK_RETURN(aParam.PutValue(aVal)); } @@ -426,12 +421,12 @@ void SAL_CALL OPreparedStatement::clearParameters( ) } } -void SAL_CALL OPreparedStatement::acquire() throw() +void SAL_CALL OPreparedStatement::acquire() noexcept { OStatement_Base::acquire(); } -void SAL_CALL OPreparedStatement::release() throw() +void SAL_CALL OPreparedStatement::release() noexcept { OStatement_Base::release(); } @@ -447,7 +442,7 @@ void OPreparedStatement::replaceParameterNodeName(OSQLParseNode const * _pNode, if(SQL_ISRULE(pChildNode,parameter) && pChildNode->count() == 1) { OSQLParseNode* pNewNode = new OSQLParseNode(OUString(":") ,SQLNodeType::Punctuation,0); - delete pChildNode->replace(pChildNode->getChild(0),pNewNode); + pChildNode->replaceAndDelete(pChildNode->getChild(0), pNewNode); OUString sParameterName = _sDefaultName + OUString::number(++_rParameterCount); pChildNode->append(new OSQLParseNode( sParameterName,SQLNodeType::Name,0)); } diff --git a/connectivity/source/drivers/ado/AResultSet.cxx b/connectivity/source/drivers/ado/AResultSet.cxx index bf33edbd4528..85ca2b081a07 100644 --- a/connectivity/source/drivers/ado/AResultSet.cxx +++ b/connectivity/source/drivers/ado/AResultSet.cxx @@ -44,7 +44,7 @@ using namespace ::comphelper; #define CHECK_RETURN(x) \ if(!SUCCEEDED(x)) \ - ADOS::ThrowException(*m_pStmt->m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pStmt->m_pConnection->getConnection(),*this); using namespace connectivity::ado; using namespace com::sun::star::uno; @@ -596,7 +596,7 @@ sal_Bool SAL_CALL OResultSet::next( ) ++m_nRowPos; } else - ADOS::ThrowException(*m_pStmt->m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pStmt->m_pConnection->getConnection(),*this); } return bRet; @@ -818,12 +818,12 @@ Any SAL_CALL OResultSet::getBookmark( ) checkDisposed(OResultSet_BASE::rBHelper.bDisposed); if(m_nRowPos < static_cast<sal_Int32>(m_aBookmarks.size())) // this bookmark was already fetched - return makeAny(sal_Int32(m_nRowPos-1)); + return Any(sal_Int32(m_nRowPos-1)); OLEVariant aVar; m_pRecordSet->get_Bookmark(&aVar); m_aBookmarks.push_back(aVar); - return makeAny(static_cast<sal_Int32>(m_aBookmarks.size()-1)); + return Any(static_cast<sal_Int32>(m_aBookmarks.size()-1)); } @@ -882,11 +882,9 @@ sal_Bool SAL_CALL OResultSet::hasOrderedBookmarks( ) checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - ADOProperties* pProps = nullptr; - m_pRecordSet->get_Properties(&pProps); WpADOProperties aProps; - aProps.setWithOutAddRef(pProps); - ADOS::ThrowException(*static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this); + m_pRecordSet->get_Properties(&aProps); + ADOS::ThrowException(static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this); OSL_ENSURE(aProps.IsValid(),"There are no properties at the connection"); WpADOProperty aProp(aProps.GetItem(OUString("Bookmarks Ordered"))); @@ -894,7 +892,7 @@ sal_Bool SAL_CALL OResultSet::hasOrderedBookmarks( ) if(aProp.IsValid()) aVar = aProp.GetValue(); else - ADOS::ThrowException(*static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this); + ADOS::ThrowException(static_cast<OConnection*>(m_pStmt->getConnection().get())->getConnection(),*this); bool bValue(false); if(!aVar.isNull() && !aVar.isEmpty()) @@ -1035,26 +1033,31 @@ void OResultSet::setFetchSize(sal_Int32 _par0) ::cppu::IPropertyArrayHelper* OResultSet::createArrayHelper( ) const { - Sequence< css::beans::Property > aProps(5); - css::beans::Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE), - PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE), + PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY + } + } + }; } ::cppu::IPropertyArrayHelper & OResultSet::getInfoHelper() @@ -1136,12 +1139,12 @@ void OResultSet::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const } } -void SAL_CALL OResultSet::acquire() throw() +void SAL_CALL OResultSet::acquire() noexcept { OResultSet_BASE::acquire(); } -void SAL_CALL OResultSet::release() throw() +void SAL_CALL OResultSet::release() noexcept { OResultSet_BASE::release(); } diff --git a/connectivity/source/drivers/ado/AResultSetMetaData.cxx b/connectivity/source/drivers/ado/AResultSetMetaData.cxx index e64c1c45b6e9..d43ee5da9216 100644 --- a/connectivity/source/drivers/ado/AResultSetMetaData.cxx +++ b/connectivity/source/drivers/ado/AResultSetMetaData.cxx @@ -72,10 +72,9 @@ sal_Int32 SAL_CALL OResultSetMetaData::getColumnCount( ) if ( !m_pRecordSet ) return 0; - ADOFields* pFields = nullptr; + WpOLEAppendCollection<ADOFields, WpADOField> pFields; m_pRecordSet->get_Fields(&pFields); - WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields); - m_nColCount = aFields.GetItemCount(); + m_nColCount = pFields.GetItemCount(); return m_nColCount; } diff --git a/connectivity/source/drivers/ado/AStatement.cxx b/connectivity/source/drivers/ado/AStatement.cxx index 599df13aba36..c2a09385dee6 100644 --- a/connectivity/source/drivers/ado/AStatement.cxx +++ b/connectivity/source/drivers/ado/AStatement.cxx @@ -30,6 +30,7 @@ #include <com/sun/star/sdbc/FetchDirection.hpp> #include <connectivity/dbexception.hxx> #include <comphelper/types.hxx> +#include <rtl/ref.hxx> #undef max @@ -40,7 +41,7 @@ using namespace ::comphelper; #define CHECK_RETURN(x) \ if(!x) \ - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); using namespace connectivity::ado; @@ -50,7 +51,6 @@ using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; -using namespace ::std; OStatement_Base::OStatement_Base(OConnection* _pConnection ) : OStatement_BASE(m_aMutex) ,OPropertySetHelper(OStatement_BASE::rBHelper) @@ -66,7 +66,7 @@ OStatement_Base::OStatement_Base(OConnection* _pConnection ) : OStatement_BASE( if(m_Command.IsValid()) m_Command.putref_ActiveConnection(m_pConnection->getConnection()); else - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); m_RecordsAffected.setNoArg(); m_Parameters.setNoArg(); @@ -94,7 +94,7 @@ void OStatement_Base::disposing() disposeResultSet(); if ( m_Command.IsValid() ) - m_Command.putref_ActiveConnection( nullptr ); + m_Command.putref_ActiveConnection({}); m_Command.clear(); if ( m_RecordSet.IsValid() ) @@ -107,7 +107,7 @@ void OStatement_Base::disposing() OStatement_BASE::disposing(); } -void SAL_CALL OStatement_Base::release() throw() +void SAL_CALL OStatement_Base::release() noexcept { OStatement_BASE::release(); } @@ -239,7 +239,7 @@ void OStatement_Base::setWarning (const SQLWarning &ex) void OStatement_Base::assignRecordSet( ADORecordset* _pRS ) { WpADORecordset aOldRS( m_RecordSet ); - m_RecordSet = WpADORecordset( _pRS ); + m_RecordSet.set( _pRS ); if ( aOldRS.IsValid() ) aOldRS.PutRefDataSource( nullptr ); @@ -305,13 +305,12 @@ Reference< XResultSet > SAL_CALL OStatement_Base::executeQuery( const OUString& CHECK_RETURN(aSet.get_CursorType(m_eCursorType)) CHECK_RETURN(aSet.get_LockType(m_eLockType)) - OResultSet* pSet = new OResultSet(aSet,this); - Reference< XResultSet > xRs = pSet; + rtl::Reference<OResultSet> pSet = new OResultSet(aSet,this); pSet->construct(); - m_xResultSet = WeakReference<XResultSet>(xRs); + m_xResultSet = WeakReference<XResultSet>(pSet); - return xRs; + return pSet; } @@ -441,8 +440,6 @@ sal_Bool SAL_CALL OStatement_Base::getMoreResults( ) checkDisposed(OStatement_BASE::rBHelper.bDisposed); - SQLWarning warning; - // clear previous warnings clearWarnings (); @@ -456,13 +453,11 @@ sal_Bool SAL_CALL OStatement_Base::getMoreResults( ) if(m_RecordSet.IsValid() && m_RecordSet.NextRecordset(aRecordsAffected,&pSet) && pSet) assignRecordSet( pSet ); } - catch (SQLWarning &ex) + catch (SQLWarning &) { - // Save pointer to warning and save with ResultSet + //TODO: Save pointer to warning and save with ResultSet // object once it is created. - - warning = ex; } return m_RecordSet.IsValid(); } @@ -474,7 +469,7 @@ Any SAL_CALL OStatement_Base::getWarnings( ) checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return makeAny(m_aLastWarning); + return Any(m_aLastWarning); } @@ -645,31 +640,71 @@ void OStatement_Base::setCursorName(std::u16string_view _par0) ::cppu::IPropertyArrayHelper* OStatement_Base::createArrayHelper( ) const { - Sequence< css::beans::Property > aProps(10); - css::beans::Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), - PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), - PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), - PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), - PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), - PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), + PROPERTY_ID_ESCAPEPROCESSING, + cppu::UnoType<bool>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), + PROPERTY_ID_MAXFIELDSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), + PROPERTY_ID_MAXROWS, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), + PROPERTY_ID_QUERYTIMEOUT, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), + PROPERTY_ID_USEBOOKMARKS, + cppu::UnoType<bool>::get(), + 0 + } + } + }; } @@ -809,17 +844,17 @@ OStatement::~OStatement() } IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbcx.AStatement","com.sun.star.sdbc.Statement"); -void SAL_CALL OStatement_Base::acquire() throw() +void SAL_CALL OStatement_Base::acquire() noexcept { OStatement_BASE::acquire(); } -void SAL_CALL OStatement::acquire() throw() +void SAL_CALL OStatement::acquire() noexcept { OStatement_Base::acquire(); } -void SAL_CALL OStatement::release() throw() +void SAL_CALL OStatement::release() noexcept { OStatement_Base::release(); } diff --git a/connectivity/source/drivers/ado/ATable.cxx b/connectivity/source/drivers/ado/ATable.cxx index 92f28ce56a06..47e22e125398 100644 --- a/connectivity/source/drivers/ado/ATable.cxx +++ b/connectivity/source/drivers/ado/ATable.cxx @@ -31,7 +31,6 @@ #include <com/sun/star/sdbc/XResultSet.hpp> #include <com/sun/star/sdbcx/KeyType.hpp> #include <com/sun/star/sdbc/KeyRule.hpp> -#include <cppuhelper/typeprovider.hxx> #include <com/sun/star/lang/DisposedException.hpp> #include <com/sun/star/sdbc/ColumnValue.hpp> #include <ado/Awrapado.hxx> @@ -55,7 +54,7 @@ OAdoTable::OAdoTable(sdbcx::OCollection* _pTables,bool _bCase,OCatalog* _pCatalo ,m_pCatalog(_pCatalog) { construct(); - m_aTable = WpADOTable(_pTable); + m_aTable.set(_pTable); // m_aTable.putref_ParentCatalog(_pCatalog->getCatalog()); fillPropertyValues(); @@ -91,7 +90,7 @@ void OAdoTable::refreshColumns() if(m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = new OColumns(*this,m_aMutex,aVector,aColumns,isCaseSensitive(),m_pCatalog->getConnection()); + m_xColumns.reset(new OColumns(*this,m_aMutex,aVector,aColumns,isCaseSensitive(),m_pCatalog->getConnection())); } void OAdoTable::refreshKeys() @@ -108,7 +107,7 @@ void OAdoTable::refreshKeys() if(m_xKeys) m_xKeys->reFill(aVector); else - m_xKeys = new OKeys(*this,m_aMutex,aVector,aKeys,isCaseSensitive(),m_pCatalog->getConnection()); + m_xKeys.reset(new OKeys(*this,m_aMutex,aVector,aKeys,isCaseSensitive(),m_pCatalog->getConnection())); } void OAdoTable::refreshIndexes() @@ -125,23 +124,7 @@ void OAdoTable::refreshIndexes() if(m_xIndexes) m_xIndexes->reFill(aVector); else - m_xIndexes = new OIndexes(*this,m_aMutex,aVector,aIndexes,isCaseSensitive(),m_pCatalog->getConnection()); -} - -Sequence< sal_Int8 > OAdoTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OAdoTable>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : OTable_TYPEDEF::getSomething(rId); + m_xIndexes.reset(new OIndexes(*this,m_aMutex,aVector,aIndexes,isCaseSensitive(),m_pCatalog->getConnection())); } // XRename @@ -151,7 +134,7 @@ void SAL_CALL OAdoTable::rename( const OUString& newName ) checkDisposed(OTableDescriptor_BASE_TYPEDEF::rBHelper.bDisposed); m_aTable.put_Name(newName); - ADOS::ThrowException(*(m_pCatalog->getConnection()->getConnection()),*this); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this); OTable_TYPEDEF::rename(newName); } @@ -168,7 +151,7 @@ void SAL_CALL OAdoTable::alterColumnByName( const OUString& colName, const Refer checkDisposed(OTableDescriptor_BASE_TYPEDEF::rBHelper.bDisposed); bool bError = true; - OAdoColumn* pColumn = comphelper::getUnoTunnelImplementation<OAdoColumn>(descriptor); + OAdoColumn* pColumn = dynamic_cast<OAdoColumn*>(descriptor.get()); if(pColumn != nullptr) { WpADOColumns aColumns = m_aTable.get_Columns(); @@ -176,7 +159,7 @@ void SAL_CALL OAdoTable::alterColumnByName( const OUString& colName, const Refer bError = bError || !aColumns.Append(pColumn->getColumnImpl()); } if(bError) - ADOS::ThrowException(*(m_pCatalog->getConnection()->getConnection()),*this); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this); m_xColumns->refresh(); refreshColumns(); diff --git a/connectivity/source/drivers/ado/ATables.cxx b/connectivity/source/drivers/ado/ATables.cxx index 9ce87634e425..07910462fb17 100644 --- a/connectivity/source/drivers/ado/ATables.cxx +++ b/connectivity/source/drivers/ado/ATables.cxx @@ -65,13 +65,13 @@ Reference< XPropertySet > OTables::createDescriptor() // XAppend sdbcx::ObjectType OTables::appendObject( const OUString&, const Reference< XPropertySet >& descriptor ) { - OAdoTable* pTable = getUnoTunnelImplementation<OAdoTable>( descriptor ); + OAdoTable* pTable = dynamic_cast<OAdoTable*>( descriptor.get() ); if ( pTable == nullptr ) m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_TABLE_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); OSL_ENSURE(m_aCollection.IsValid(),"Collection isn't valid"); if(!m_aCollection.Append(pTable->getImpl())) - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); m_aCollection.Refresh(); return new OAdoTable(this,isCaseSensitive(),m_pCatalog,pTable->getImpl()); @@ -82,7 +82,7 @@ void OTables::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName) { OSL_ENSURE(m_aCollection.IsValid(),"Collection isn't valid"); if ( !m_aCollection.Delete(_sElementName) ) - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); } void OTables::appendNew(const OUString& _rsNewTable) @@ -93,10 +93,10 @@ void OTables::appendNew(const OUString& _rsNewTable) insertElement(_rsNewTable,nullptr); // notify our container listeners - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any()); - OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any()); + OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) - static_cast<XContainerListener*>(aListenerLoop.next())->elementInserted(aEvent); + aListenerLoop.next()->elementInserted(aEvent); } diff --git a/connectivity/source/drivers/ado/AUser.cxx b/connectivity/source/drivers/ado/AUser.cxx index 724334cea696..eb7a5803f60c 100644 --- a/connectivity/source/drivers/ado/AUser.cxx +++ b/connectivity/source/drivers/ado/AUser.cxx @@ -21,7 +21,6 @@ #include <ado/ACatalog.hxx> #include <ado/AGroups.hxx> #include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> #include <ado/AConnection.hxx> @@ -41,7 +40,7 @@ OAdoUser::OAdoUser(OCatalog* _pParent,bool _bCase, ADOUser* _pUser) construct(); if(_pUser) - m_aUser = WpADOUser(_pUser); + m_aUser.set(_pUser); else m_aUser.Create(); } @@ -66,23 +65,6 @@ void OAdoUser::refreshGroups() m_pGroups.reset(new OGroups(m_pCatalog, m_aMutex, aVector, aGroups, isCaseSensitive())); } -Sequence< sal_Int8 > OAdoUser::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoUser::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OAdoUser>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : OUser_TYPEDEF::getSomething(rId); -} - - void OAdoUser::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) { if(m_aUser.IsValid()) @@ -160,7 +142,7 @@ sal_Int32 SAL_CALL OAdoUser::getGrantablePrivileges( const OUString& objName, sa RightsEnum eRights = m_aUser.GetPermissions(objName, ADOS::mapObjectType2Ado(objType)); if((eRights & adRightWithGrant) == adRightWithGrant) nRights = ADOS::mapAdoRights2Sdbc(eRights); - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this); return nRights; } @@ -169,7 +151,7 @@ void SAL_CALL OAdoUser::grantPrivileges( const OUString& objName, sal_Int32 objT ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessGrant,RightsEnum(ADOS::mapRights2Ado(objPrivileges))); - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this); } void SAL_CALL OAdoUser::revokePrivileges( const OUString& objName, sal_Int32 objType, sal_Int32 objPrivileges ) @@ -177,7 +159,7 @@ void SAL_CALL OAdoUser::revokePrivileges( const OUString& objName, sal_Int32 obj ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); m_aUser.SetPermissions(objName,ADOS::mapObjectType2Ado(objType),adAccessRevoke,RightsEnum(ADOS::mapRights2Ado(objPrivileges))); - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this); } // XUser @@ -186,7 +168,7 @@ void SAL_CALL OAdoUser::changePassword( const OUString& objPassword, const OUStr ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE_TYPEDEF::rBHelper.bDisposed); m_aUser.ChangePassword(objPassword,newPassword); - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),*this); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),*this); } diff --git a/connectivity/source/drivers/ado/AUsers.cxx b/connectivity/source/drivers/ado/AUsers.cxx index 2620e915a89e..4b050d239237 100644 --- a/connectivity/source/drivers/ado/AUsers.cxx +++ b/connectivity/source/drivers/ado/AUsers.cxx @@ -27,6 +27,7 @@ #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> +#include <systools/win32/oleauto.hxx> #include <strings.hrc> using namespace comphelper; @@ -56,12 +57,12 @@ Reference< XPropertySet > OUsers::createDescriptor() // XAppend sdbcx::ObjectType OUsers::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - OUserExtend* pUser = getUnoTunnelImplementation<OUserExtend>( descriptor ); + OUserExtend* pUser = dynamic_cast<OUserExtend*>( descriptor.get() ); if ( pUser == nullptr ) m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_USER_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); ADOUsers* pUsers = m_aCollection; - pUsers->Append(OLEVariant(pUser->getImpl()),OLEString(pUser->getPassword()).asBSTR()); + pUsers->Append(OLEVariant(pUser->getImpl()), sal::systools::BStr(pUser->getPassword())); return createObject( _rForName ); } diff --git a/connectivity/source/drivers/ado/AView.cxx b/connectivity/source/drivers/ado/AView.cxx index b53c1a026200..10a5524db95b 100644 --- a/connectivity/source/drivers/ado/AView.cxx +++ b/connectivity/source/drivers/ado/AView.cxx @@ -20,10 +20,11 @@ #include <ado/AView.hxx> #include <com/sun/star/lang/DisposedException.hpp> #include <ado/adoimp.hxx> -#include <cppuhelper/typeprovider.hxx> #include <ado/Awrapado.hxx> #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> +#include <systools/win32/oleauto.hxx> + #include <TConnection.hxx> @@ -41,23 +42,6 @@ OAdoView::OAdoView(bool _bCase,ADOView* _pView) : OView_ADO(_bCase,nullptr) { } -Sequence< sal_Int8 > OAdoView::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoView::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OAdoView>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : OView_ADO::getSomething(rId); -} - - void OAdoView::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const { if(m_aView.IsValid()) @@ -79,9 +63,9 @@ void OAdoView::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const if(!aVar.isNull() && !aVar.isEmpty()) { ADOCommand* pCom = static_cast<ADOCommand*>(aVar.getIDispatch()); - OLEString aBSTR; - pCom->get_CommandText(aBSTR.getAddress()); - rValue <<= aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pCom->get_CommandText(&aBSTR); + rValue <<= OUString(aBSTR); } } break; diff --git a/connectivity/source/drivers/ado/AViews.cxx b/connectivity/source/drivers/ado/AViews.cxx index 77cc5abfae0f..943422289627 100644 --- a/connectivity/source/drivers/ado/AViews.cxx +++ b/connectivity/source/drivers/ado/AViews.cxx @@ -27,6 +27,9 @@ #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> +#include <rtl/ref.hxx> +#include <systools/win32/oleauto.hxx> + #include <strings.hrc> using namespace ::comphelper; @@ -41,7 +44,7 @@ using namespace com::sun::star::container; sdbcx::ObjectType OViews::createObject(const OUString& _rName) { - OAdoView* pView = new OAdoView(isCaseSensitive(),m_aCollection.GetItem(_rName)); + rtl::Reference<OAdoView> pView = new OAdoView(isCaseSensitive(),m_aCollection.GetItem(_rName)); pView->setNew(false); return pView; } @@ -60,7 +63,7 @@ Reference< XPropertySet > OViews::createDescriptor() // XAppend sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - OAdoView* pView = getUnoTunnelImplementation<OAdoView>( descriptor ); + OAdoView* pView = dynamic_cast<OAdoView*>( descriptor.get() ); if ( pView == nullptr ) m_pCatalog->getConnection()->throwGenericSQLException( STR_INVALID_VIEW_DESCRIPTOR_ERROR,static_cast<XTypeProvider*>(this) ); @@ -73,8 +76,8 @@ sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Referen aCommand.put_Name(sName); aCommand.put_CommandText(getString(descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_COMMAND)))); ADOViews* pViews = m_aCollection; - if(FAILED(pViews->Append(OLEString(sName).asBSTR(),aCommand))) - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); + if (FAILED(pViews->Append(sal::systools::BStr(sName), aCommand))) + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); OTables* pTables = static_cast<OTables*>(static_cast<OCatalog&>(m_rParent).getPrivateTables()); if ( pTables ) @@ -87,7 +90,7 @@ sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Referen void OViews::dropObject(sal_Int32 /*_nPos*/,const OUString& _sElementName) { if(!m_aCollection.Delete(_sElementName)) - ADOS::ThrowException(*m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); + ADOS::ThrowException(m_pCatalog->getConnection()->getConnection(),static_cast<XTypeProvider*>(this)); } diff --git a/connectivity/source/drivers/ado/Aolevariant.cxx b/connectivity/source/drivers/ado/Aolevariant.cxx index 8b6ad10b4662..c082c1987ff0 100644 --- a/connectivity/source/drivers/ado/Aolevariant.cxx +++ b/connectivity/source/drivers/ado/Aolevariant.cxx @@ -37,64 +37,6 @@ using namespace com::sun::star::uno; using namespace com::sun::star::bridge::oleautomation; using namespace connectivity::ado; -OLEString::OLEString() - :m_sStr(nullptr) -{ -} -OLEString::OLEString(const BSTR& _sBStr) - :m_sStr(_sBStr) -{ -} -OLEString::OLEString(std::u16string_view _sBStr) -{ - m_sStr = SysAllocStringLen(o3tl::toW(_sBStr.data()), _sBStr.length()); -} -OLEString::~OLEString() -{ - if(m_sStr) - ::SysFreeString(m_sStr); -} -OLEString& OLEString::operator=(std::u16string_view _rSrc) -{ - if(m_sStr) - ::SysFreeString(m_sStr); - m_sStr = SysAllocStringLen(o3tl::toW(_rSrc.data()), _rSrc.length()); - return *this; -} -OLEString& OLEString::operator=(const OLEString& _rSrc) -{ - if(this != &_rSrc) - { - if(m_sStr) - ::SysFreeString(m_sStr); - m_sStr = ::SysAllocString(_rSrc.m_sStr); - } - return *this; -} -OLEString& OLEString::operator=(const BSTR& _rSrc) -{ - if(m_sStr) - ::SysFreeString(m_sStr); - m_sStr = _rSrc; - return *this; -} -OUString OLEString::asOUString() const -{ - return (m_sStr != nullptr) ? OUString(o3tl::toU(m_sStr),::SysStringLen(m_sStr)) : OUString(); -} -BSTR OLEString::asBSTR() const -{ - return m_sStr; -} -BSTR* OLEString::getAddress() -{ - return &m_sStr; -} -sal_Int32 OLEString::length() const -{ - return (m_sStr != nullptr) ? ::SysStringLen(m_sStr) : 0; -} - OLEVariant::OLEVariant() { VariantInit(this); @@ -427,8 +369,8 @@ css::uno::Sequence< sal_Int8 > OLEVariant::getByteSequence() const css::uno::Sequence< sal_Int8 > aRet; if(V_VT(this) == VT_BSTR) { - OLEString sStr(V_BSTR(this)); - aRet = css::uno::Sequence<sal_Int8>(reinterpret_cast<const sal_Int8*>(sStr.asBSTR()),sizeof(sal_Unicode)*sStr.length()); + aRet = css::uno::Sequence<sal_Int8>(reinterpret_cast<sal_Int8*>(V_BSTR(this)), + ::SysStringByteLen(V_BSTR(this))); } else if(!isNull()) { diff --git a/connectivity/source/drivers/ado/Awrapado.cxx b/connectivity/source/drivers/ado/Awrapado.cxx index 6f4dd5ce1c20..eebdc5d8c5a7 100644 --- a/connectivity/source/drivers/ado/Awrapado.cxx +++ b/connectivity/source/drivers/ado/Awrapado.cxx @@ -21,48 +21,39 @@ #include <ado/Awrapado.hxx> #include <ado/Awrapadox.hxx> #include <comphelper/types.hxx> +#include <o3tl/string_view.hxx> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> +#include <systools/win32/oleauto.hxx> using namespace connectivity::ado; void WpADOCatalog::Create() { - _ADOCatalog* pCommand; - HRESULT hr = CoCreateInstance(ADOS::CLSID_ADOCATALOG_25, - nullptr, - CLSCTX_INPROC_SERVER, - ADOS::IID_ADOCATALOG_25, - reinterpret_cast<void**>(&pCommand) ); - - - if( !FAILED( hr ) ) - setWithOutAddRef(pCommand); + pInterface.CoCreateInstance(ADOS::CLSID_ADOCATALOG_25, nullptr, CLSCTX_INPROC_SERVER); } WpADOProperties WpADOConnection::get_Properties() const { - ADOProperties* pProps=nullptr; + WpADOProperties pProps; pInterface->get_Properties(&pProps); - WpADOProperties aProps; - aProps.setWithOutAddRef(pProps); - return aProps; + return pProps; } OUString WpADOConnection::GetConnectionString() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_ConnectionString(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_ConnectionString(&aBSTR); + return OUString(aBSTR); } bool WpADOConnection::PutConnectionString(std::u16string_view aCon) const { assert(pInterface); - OLEString bstr(aCon); - bool bErg = SUCCEEDED(pInterface->put_ConnectionString(bstr.asBSTR())); + sal::systools::BStr bstr(aCon); + bool bErg = SUCCEEDED(pInterface->put_ConnectionString(bstr)); return bErg; } @@ -104,8 +95,8 @@ bool WpADOConnection::Close() bool WpADOConnection::Execute(std::u16string_view CommandText,OLEVariant& RecordsAffected,long Options, WpADORecordset** ppiRset) { assert(pInterface); - OLEString sStr1(CommandText); - bool bErg = SUCCEEDED(pInterface->Execute(sStr1.asBSTR(),&RecordsAffected,Options,reinterpret_cast<ADORecordset**>(ppiRset))); + sal::systools::BStr sStr1(CommandText); + bool bErg = SUCCEEDED(pInterface->Execute(sStr1,&RecordsAffected,Options,reinterpret_cast<ADORecordset**>(ppiRset))); return bErg; } @@ -131,10 +122,10 @@ bool WpADOConnection::RollbackTrans( ) bool WpADOConnection::Open(std::u16string_view ConnectionString, std::u16string_view UserID,std::u16string_view Password,long Options) { assert(pInterface); - OLEString sStr1(ConnectionString); - OLEString sStr2(UserID); - OLEString sStr3(Password); - bool bErg = SUCCEEDED(pInterface->Open(sStr1.asBSTR(),sStr2.asBSTR(),sStr3.asBSTR(),Options)); + sal::systools::BStr sStr1(ConnectionString); + sal::systools::BStr sStr2(UserID); + sal::systools::BStr sStr3(Password); + bool bErg = SUCCEEDED(pInterface->Open(sStr1, sStr2, sStr3, Options)); return bErg; } @@ -147,15 +138,15 @@ bool WpADOConnection::GetErrors(ADOErrors** pErrors) OUString WpADOConnection::GetDefaultDatabase() const { assert(pInterface); - OLEString aBSTR; pInterface->get_DefaultDatabase(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; pInterface->get_DefaultDatabase(&aBSTR); + return OUString(aBSTR); } bool WpADOConnection::PutDefaultDatabase(std::u16string_view _bstr) { assert(pInterface); - OLEString bstr(_bstr); - bool bErg = SUCCEEDED(pInterface->put_DefaultDatabase(bstr.asBSTR())); + sal::systools::BStr bstr(_bstr); + bool bErg = SUCCEEDED(pInterface->put_DefaultDatabase(bstr)); return bErg; } @@ -219,15 +210,15 @@ bool WpADOConnection::put_Mode(const ConnectModeEnum &eNum) OUString WpADOConnection::get_Provider() const { assert(pInterface); - OLEString aBSTR; pInterface->get_Provider(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; pInterface->get_Provider(&aBSTR); + return OUString(aBSTR); } bool WpADOConnection::put_Provider(std::u16string_view _bstr) { assert(pInterface); - OLEString bstr(_bstr); - return SUCCEEDED(pInterface->put_Provider(bstr.asBSTR())); + sal::systools::BStr bstr(_bstr); + return SUCCEEDED(pInterface->put_Provider(bstr)); } sal_Int32 WpADOConnection::get_State() const @@ -247,18 +238,15 @@ bool WpADOConnection::OpenSchema(SchemaEnum eNum,OLEVariant const & Restrictions OUString WpADOConnection::get_Version() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Version(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Version(&aBSTR); + return OUString(aBSTR); } -bool WpADOCommand::putref_ActiveConnection( WpADOConnection *pCon) +bool WpADOCommand::putref_ActiveConnection(const WpADOConnection& rCon) { assert(pInterface); - if(pCon) - return SUCCEEDED(pInterface->putref_ActiveConnection(pCon->pInterface)); - else - return SUCCEEDED(pInterface->putref_ActiveConnection(nullptr)); + return SUCCEEDED(pInterface->putref_ActiveConnection(rCon)); } void WpADOCommand::put_ActiveConnection(/* [in] */ const OLEVariant& vConn) @@ -269,31 +257,19 @@ void WpADOCommand::put_ActiveConnection(/* [in] */ const OLEVariant& vConn) void WpADOCommand::Create() { - IClassFactory2* pInterface2 = nullptr; - HRESULT hr = CoGetClassObject( ADOS::CLSID_ADOCOMMAND_21, - CLSCTX_INPROC_SERVER, - nullptr, - IID_IClassFactory2, - reinterpret_cast<void**>(&pInterface2) ); - - if( !FAILED( hr ) ) + sal::systools::COMReference<IClassFactory2> pInterface2; + if (!FAILED(pInterface2.CoGetClassObject(ADOS::CLSID_ADOCOMMAND_21, CLSCTX_INPROC_SERVER))) { - ADOCommand* pCommand=nullptr; - IUnknown* pOuter=nullptr; + sal::systools::COMReference<ADOCommand> pCommand; - hr = pInterface2->CreateInstanceLic( pOuter, + HRESULT hr = pInterface2->CreateInstanceLic(nullptr, nullptr, ADOS::IID_ADOCOMMAND_21, - ADOS::GetKeyStr().asBSTR(), + ADOS::GetKeyStr(), reinterpret_cast<void**>(&pCommand)); if( !FAILED( hr ) ) - { - operator=(pCommand); - pCommand->Release(); - } - - pInterface2->Release(); + pInterface = std::move(pCommand); } } @@ -308,16 +284,16 @@ sal_Int32 WpADOCommand::get_State() const OUString WpADOCommand::get_CommandText() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_CommandText(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_CommandText(&aBSTR); + return OUString(aBSTR); } bool WpADOCommand::put_CommandText(std::u16string_view aCon) { assert(pInterface); - OLEString bstr(aCon); - bool bErg = SUCCEEDED(pInterface->put_CommandText(bstr.asBSTR())); + sal::systools::BStr bstr(aCon); + bool bErg = SUCCEEDED(pInterface->put_CommandText(bstr)); return bErg; } @@ -360,8 +336,8 @@ ADOParameter* WpADOCommand::CreateParameter(std::u16string_view _bstr,DataTypeEn { assert(pInterface); ADOParameter* pPara = nullptr; - OLEString bstr(_bstr); - bool bErg = SUCCEEDED(pInterface->CreateParameter(bstr.asBSTR(),Type,Direction,nSize,Value,&pPara)); + sal::systools::BStr bstr(_bstr); + bool bErg = SUCCEEDED(pInterface->CreateParameter(bstr, Type, Direction, nSize, Value, &pPara)); return bErg ? pPara : nullptr; } @@ -392,16 +368,16 @@ CommandTypeEnum WpADOCommand::get_CommandType() const OUString WpADOCommand::GetName() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } bool WpADOCommand::put_Name(std::u16string_view Name) { assert(pInterface); - OLEString bstr(Name); - bool bErg = SUCCEEDED(pInterface->put_Name(bstr.asBSTR())); + sal::systools::BStr bstr(Name); + bool bErg = SUCCEEDED(pInterface->put_Name(bstr)); return bErg; } @@ -414,17 +390,17 @@ bool WpADOCommand::Cancel() OUString WpADOError::GetDescription() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Description(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Description(&aBSTR); + return OUString(aBSTR); } OUString WpADOError::GetSource() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Source(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Source(&aBSTR); + return OUString(aBSTR); } sal_Int32 WpADOError::GetNumber() const @@ -438,9 +414,9 @@ sal_Int32 WpADOError::GetNumber() const OUString WpADOError::GetSQLState() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_SQLState(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_SQLState(&aBSTR); + return OUString(aBSTR); } sal_Int32 WpADOError::GetNativeError() const @@ -454,12 +430,9 @@ sal_Int32 WpADOError::GetNativeError() const WpADOProperties WpADOField::get_Properties() { assert(pInterface); - ADOProperties* pProps = nullptr; + WpADOProperties pProps; pInterface->get_Properties(&pProps); - WpADOProperties aProps; - - aProps.setWithOutAddRef(pProps); - return aProps; + return pProps; } sal_Int32 WpADOField::GetActualSize() const @@ -497,9 +470,9 @@ sal_Int32 WpADOField::GetDefinedSize() const OUString WpADOField::GetName() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } DataTypeEnum WpADOField::GetADOType() const @@ -649,9 +622,9 @@ bool WpADOProperty::PutValue(const OLEVariant &aValVar) OUString WpADOProperty::GetName() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } DataTypeEnum WpADOProperty::GetADOType() const @@ -677,30 +650,18 @@ bool WpADOProperty::PutAttributes(sal_Int32 _nDefSize) } void WpADORecordset::Create() { - IClassFactory2* pInterface2 = nullptr; - HRESULT hr = CoGetClassObject( ADOS::CLSID_ADORECORDSET_21, - CLSCTX_INPROC_SERVER, - nullptr, - IID_IClassFactory2, - reinterpret_cast<void**>(&pInterface2) ); - - if( !FAILED( hr ) ) + sal::systools::COMReference<IClassFactory2> pInterface2; + if (!FAILED(pInterface2.CoGetClassObject(ADOS::CLSID_ADORECORDSET_21, CLSCTX_INPROC_SERVER))) { - ADORecordset *pRec = nullptr; - IUnknown *pOuter = nullptr; - hr = pInterface2->CreateInstanceLic( pOuter, + sal::systools::COMReference<ADORecordset> pRec; + HRESULT hr = pInterface2->CreateInstanceLic(nullptr, nullptr, ADOS::IID_ADORECORDSET_21, - ADOS::GetKeyStr().asBSTR(), + ADOS::GetKeyStr(), reinterpret_cast<void**>(&pRec)); if( !FAILED( hr ) ) - { - operator=(pRec); - pRec->Release(); - } - - pInterface2->Release(); + pInterface = std::move(pRec); } } @@ -804,11 +765,9 @@ bool WpADORecordset::SetBookmark(const OLEVariant &pSafeAr) WpADOFields WpADORecordset::GetFields() const { assert(pInterface); - ADOFields* pFields=nullptr; + WpADOFields pFields; pInterface->get_Fields(&pFields); - WpADOFields aFields; - aFields.setWithOutAddRef(pFields); - return aFields; + return pFields; } @@ -861,11 +820,9 @@ bool WpADORecordset::CancelUpdate() WpADOProperties WpADORecordset::get_Properties() const { assert(pInterface); - ADOProperties* pProps=nullptr; + WpADOProperties pProps; pInterface->get_Properties(&pProps); - WpADOProperties aProps; - aProps.setWithOutAddRef(pProps); - return aProps; + return pProps; } bool WpADORecordset::NextRecordset(OLEVariant& RecordsAffected,ADORecordset** ppiRset) @@ -937,9 +894,9 @@ bool WpADORecordset::UpdateBatch(AffectEnum AffectRecords) OUString WpADOParameter::GetName() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } DataTypeEnum WpADOParameter::GetADOType() const @@ -1021,30 +978,30 @@ bool WpADOParameter::put_Size(sal_Int32 _nSize) OUString WpADOColumn::get_Name() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } OUString WpADOColumn::get_RelatedColumn() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_RelatedColumn(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_RelatedColumn(&aBSTR); + return OUString(aBSTR); } void WpADOColumn::put_Name(std::u16string_view _rName) { assert(pInterface); - OLEString bstr(_rName); - pInterface->put_Name(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_Name(bstr); } void WpADOColumn::put_RelatedColumn(std::u16string_view _rName) { assert(pInterface); - OLEString bstr(_rName); - pInterface->put_RelatedColumn(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_RelatedColumn(bstr); } DataTypeEnum WpADOColumn::get_Type() const @@ -1127,27 +1084,24 @@ bool WpADOColumn::put_Attributes(const ColumnAttributesEnum& _eNum) WpADOProperties WpADOColumn::get_Properties() const { assert(pInterface); - ADOProperties* pProps = nullptr; + WpADOProperties pProps; pInterface->get_Properties(&pProps); - WpADOProperties aProps; - - aProps.setWithOutAddRef(pProps); - return aProps; + return pProps; } OUString WpADOKey::get_Name() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } void WpADOKey::put_Name(std::u16string_view _rName) { assert(pInterface); - OLEString bstr(_rName); - pInterface->put_Name(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_Name(bstr); } KeyTypeEnum WpADOKey::get_Type() const @@ -1167,16 +1121,16 @@ void WpADOKey::put_Type(const KeyTypeEnum& _eNum) OUString WpADOKey::get_RelatedTable() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_RelatedTable(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_RelatedTable(&aBSTR); + return OUString(aBSTR); } void WpADOKey::put_RelatedTable(std::u16string_view _rName) { assert(pInterface); - OLEString bstr(_rName); - pInterface->put_RelatedTable(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_RelatedTable(bstr); } RuleEnum WpADOKey::get_DeleteRule() const @@ -1210,26 +1164,24 @@ void WpADOKey::put_UpdateRule(const RuleEnum& _eNum) WpADOColumns WpADOKey::get_Columns() const { assert(pInterface); - ADOColumns* pCols = nullptr; + WpADOColumns pCols; pInterface->get_Columns(&pCols); - WpADOColumns aCols; - aCols.setWithOutAddRef(pCols); - return aCols; + return pCols; } OUString WpADOIndex::get_Name() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } void WpADOIndex::put_Name(std::u16string_view _rName) { assert(pInterface); - OLEString bstr(_rName); - pInterface->put_Name(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_Name(bstr); } bool WpADOIndex::get_Clustered() const @@ -1277,11 +1229,9 @@ void WpADOIndex::put_PrimaryKey(bool _b) WpADOColumns WpADOIndex::get_Columns() const { assert(pInterface); - ADOColumns* pCols = nullptr; + WpADOColumns pCols; pInterface->get_Columns(&pCols); - WpADOColumns aCols; - aCols.setWithOutAddRef(pCols); - return aCols; + return pCols; } void WpADOCatalog::putref_ActiveConnection(IDispatch* pCon) @@ -1293,41 +1243,33 @@ void WpADOCatalog::putref_ActiveConnection(IDispatch* pCon) WpADOTables WpADOCatalog::get_Tables() { assert(pInterface); - ADOTables* pRet = nullptr; + WpADOTables pRet; pInterface->get_Tables(&pRet); - WpADOTables aRet; - aRet.setWithOutAddRef(pRet); - return aRet; + return pRet; } WpADOViews WpADOCatalog::get_Views() { assert(pInterface); - ADOViews* pRet = nullptr; + WpADOViews pRet; pInterface->get_Views(&pRet); - WpADOViews aRet; - aRet.setWithOutAddRef(pRet); - return aRet; + return pRet; } WpADOGroups WpADOCatalog::get_Groups() { assert(pInterface); - ADOGroups* pRet = nullptr; + WpADOGroups pRet; pInterface->get_Groups(&pRet); - WpADOGroups aRet; - aRet.setWithOutAddRef(pRet); - return aRet; + return pRet; } WpADOUsers WpADOCatalog::get_Users() { assert(pInterface); - ADOUsers* pRet = nullptr; + WpADOUsers pRet; pInterface->get_Users(&pRet); - WpADOUsers aRet; - aRet.setWithOutAddRef(pRet); - return aRet; + return pRet; } ADOProcedures* WpADOCatalog::get_Procedures() @@ -1341,82 +1283,72 @@ ADOProcedures* WpADOCatalog::get_Procedures() OUString WpADOTable::get_Name() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } void WpADOTable::put_Name(std::u16string_view _rName) { assert(pInterface); - OLEString bstr(_rName); - pInterface->put_Name(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_Name(bstr); } OUString WpADOTable::get_Type() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Type(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Type(&aBSTR); + return OUString(aBSTR); } WpADOColumns WpADOTable::get_Columns() const { assert(pInterface); - ADOColumns* pCols = nullptr; + WpADOColumns pCols; pInterface->get_Columns(&pCols); - WpADOColumns aCols; - aCols.setWithOutAddRef(pCols); - return aCols; + return pCols; } WpADOIndexes WpADOTable::get_Indexes() const { assert(pInterface); - ADOIndexes* pCols = nullptr; - pInterface->get_Indexes(&pCols); - WpADOIndexes aRet; - aRet.setWithOutAddRef(pCols); - return aRet; + WpADOIndexes pRet; + pInterface->get_Indexes(&pRet); + return pRet; } WpADOKeys WpADOTable::get_Keys() const { assert(pInterface); - ADOKeys* pCols = nullptr; - pInterface->get_Keys(&pCols); - WpADOKeys aRet; - aRet.setWithOutAddRef(pCols); - return aRet; + WpADOKeys pRet; + pInterface->get_Keys(&pRet); + return pRet; } WpADOCatalog WpADOTable::get_ParentCatalog() const { assert(pInterface); - ADOCatalog* pCat = nullptr; + WpADOCatalog pCat; pInterface->get_ParentCatalog(&pCat); - WpADOCatalog aRet; - aRet.setWithOutAddRef(pCat); - return aRet; + return pCat; } WpADOProperties WpADOTable::get_Properties() const { assert(pInterface); - ADOProperties* pProps = nullptr; + WpADOProperties pProps; pInterface->get_Properties(&pProps); - WpADOProperties aProps; - aProps.setWithOutAddRef(pProps); - return aProps; + return pProps; } OUString WpADOView::get_Name() const { assert(pInterface); - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } void WpADOView::get_Command(OLEVariant& _rVar) const @@ -1433,15 +1365,15 @@ void WpADOView::put_Command(OLEVariant const & _rVar) OUString WpADOGroup::get_Name() const { - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } void WpADOGroup::put_Name(std::u16string_view _rName) { - OLEString bstr(_rName); - pInterface->put_Name(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_Name(bstr); } RightsEnum WpADOGroup::GetPermissions( @@ -1468,41 +1400,37 @@ bool WpADOGroup::SetPermissions( WpADOUsers WpADOGroup::get_Users( ) { - ADOUsers* pRet = nullptr; + WpADOUsers pRet; pInterface->get_Users( &pRet); - WpADOUsers aRet; - aRet.setWithOutAddRef(pRet); - return aRet; + return pRet; } OUString WpADOUser::get_Name() const { - OLEString aBSTR; - pInterface->get_Name(aBSTR.getAddress()); - return aBSTR.asOUString(); + sal::systools::BStr aBSTR; + pInterface->get_Name(&aBSTR); + return OUString(aBSTR); } void WpADOUser::put_Name(std::u16string_view _rName) { - OLEString bstr(_rName); - pInterface->put_Name(bstr.asBSTR()); + sal::systools::BStr bstr(_rName); + pInterface->put_Name(bstr); } bool WpADOUser::ChangePassword(std::u16string_view _rPwd,std::u16string_view _rNewPwd) { - OLEString sStr1(_rPwd); - OLEString sStr2(_rNewPwd); - bool bErg = SUCCEEDED(pInterface->ChangePassword(sStr1.asBSTR(),sStr2.asBSTR())); + sal::systools::BStr sStr1(_rPwd); + sal::systools::BStr sStr2(_rNewPwd); + bool bErg = SUCCEEDED(pInterface->ChangePassword(sStr1, sStr2)); return bErg; } WpADOGroups WpADOUser::get_Groups() { - ADOGroups* pRet = nullptr; + WpADOGroups pRet; pInterface->get_Groups(&pRet); - WpADOGroups aRet; - aRet.setWithOutAddRef(pRet); - return aRet; + return pRet; } RightsEnum WpADOUser::GetPermissions( @@ -1527,73 +1455,6 @@ bool WpADOUser::SetPermissions( return SUCCEEDED(pInterface->SetPermissions(Name,ObjectType,Action,Rights,adInheritNone,ObjectTypeId)); } -WpBase::WpBase() : pIUnknown(nullptr) -{ -} -WpBase::WpBase(IDispatch* pInt) - :pIUnknown(pInt) -{ - if (pIUnknown) - { - pIUnknown->AddRef(); - } -} - -WpBase::WpBase(const WpBase& aWrapper) - :pIUnknown(aWrapper.pIUnknown) -{ - if (pIUnknown) - pIUnknown->AddRef(); -} - -//inline -WpBase& WpBase::operator=(const WpBase& rhs) -{ - operator=(rhs.pIUnknown); - return *this; -}; - -WpBase& WpBase::operator=(IDispatch* rhs) -{ - if (pIUnknown != rhs) - { - if (pIUnknown) - pIUnknown->Release(); - pIUnknown = rhs; - if (pIUnknown) - pIUnknown->AddRef(); - } - return *this; -} - -WpBase::~WpBase() -{ - if (pIUnknown) - { - pIUnknown->Release(); - pIUnknown = nullptr; - } -} - -void WpBase::clear() -{ - if (pIUnknown) - { - pIUnknown->Release(); - pIUnknown = nullptr; - } -} - - -bool WpBase::IsValid() const -{ - return pIUnknown != nullptr; -} -WpBase::operator IDispatch*() -{ - return pIUnknown; -} - ADORecordset* WpADOConnection::getExportedKeys( const css::uno::Any& catalog, const OUString& schema, std::u16string_view table ) { // Create elements used in the array @@ -1603,7 +1464,7 @@ ADORecordset* WpADOConnection::getExportedKeys( const css::uno::Any& catalog, co // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1643,7 +1504,7 @@ ADORecordset* WpADOConnection::getImportedKeys( const css::uno::Any& catalog, co // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1685,7 +1546,7 @@ ADORecordset* WpADOConnection::getPrimaryKeys( const css::uno::Any& catalog, con // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1725,7 +1586,7 @@ ADORecordset* WpADOConnection::getIndexInfo( // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1759,7 +1620,7 @@ ADORecordset* WpADOConnection::getIndexInfo( ADORecordset* WpADOConnection::getTablePrivileges( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& tableNamePattern ) + std::u16string_view tableNamePattern ) { SAFEARRAYBOUND rgsabound[1]; SAFEARRAY *psa = nullptr; @@ -1767,7 +1628,7 @@ ADORecordset* WpADOConnection::getTablePrivileges( const css::uno::Any& catalog, // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1779,7 +1640,7 @@ ADORecordset* WpADOConnection::getTablePrivileges( const css::uno::Any& catalog, varCriteria[nPos].setString(schemaPattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA - if(tableNamePattern.toChar() != '%') + if(!o3tl::starts_with(tableNamePattern, u"%")) varCriteria[nPos].setString(tableNamePattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME @@ -1813,7 +1674,7 @@ ADORecordset* WpADOConnection::getCrossReference( const css::uno::Any& primaryCa // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1854,7 +1715,7 @@ ADORecordset* WpADOConnection::getCrossReference( const css::uno::Any& primaryCa ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& procedureNamePattern ) + std::u16string_view procedureNamePattern ) { SAFEARRAYBOUND rgsabound[1]; SAFEARRAY *psa = nullptr; @@ -1862,7 +1723,7 @@ ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog, // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1874,7 +1735,7 @@ ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog, varCriteria[nPos].setString(schemaPattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA - if(procedureNamePattern.toChar() != '%') + if(!o3tl::starts_with(procedureNamePattern, u"%")) varCriteria[nPos].setString(procedureNamePattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME @@ -1893,8 +1754,8 @@ ADORecordset* WpADOConnection::getProcedures( const css::uno::Any& catalog, ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& procedureNamePattern, - const OUString& columnNamePattern ) + std::u16string_view procedureNamePattern, + std::u16string_view columnNamePattern ) { // Create elements used in the array SAFEARRAYBOUND rgsabound[1]; @@ -1903,7 +1764,7 @@ ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -1915,11 +1776,11 @@ ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog varCriteria[nPos].setString(schemaPattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA - if(procedureNamePattern.toChar() != '%') + if(!o3tl::starts_with(procedureNamePattern, u"%")) varCriteria[nPos].setString(procedureNamePattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME - if(columnNamePattern.toChar() != '%') + if(!o3tl::starts_with(columnNamePattern, u"%")) varCriteria[nPos].setString(columnNamePattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// COLUMN_NAME @@ -1938,7 +1799,7 @@ ADORecordset* WpADOConnection::getProcedureColumns( const css::uno::Any& catalog ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& tableNamePattern, + std::u16string_view tableNamePattern, const css::uno::Sequence< OUString >& types ) { // Create elements used in the array @@ -1955,7 +1816,7 @@ ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog, varCriteria[nPos].setString(schemaPattern); ++nPos; - if(tableNamePattern.toChar() != '%') + if(!o3tl::starts_with(tableNamePattern, u"%")) varCriteria[nPos].setString(tableNamePattern); ++nPos; @@ -1974,7 +1835,7 @@ ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog, varCriteria[nPos].setString(sTypeNames); // Create SafeArray Bounds and initialize the array - const sal_Int32 nCrit = SAL_N_ELEMENTS(varCriteria); + const sal_Int32 nCrit = std::size(varCriteria); SAFEARRAYBOUND rgsabound[1]; rgsabound[0].lLbound = 0; rgsabound[0].cElements = nCrit; @@ -2001,7 +1862,7 @@ ADORecordset* WpADOConnection::getTables( const css::uno::Any& catalog, ADORecordset* WpADOConnection::getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& tableNamePattern, + std::u16string_view tableNamePattern, std::u16string_view columnNamePattern ) { // Create elements used in the array @@ -2011,7 +1872,7 @@ ADORecordset* WpADOConnection::getColumns( const css::uno::Any& catalog, // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -2023,7 +1884,7 @@ ADORecordset* WpADOConnection::getColumns( const css::uno::Any& catalog, varCriteria[nPos].setString(schemaPattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_SCHEMA - if(tableNamePattern.toChar() != '%') + if(!o3tl::starts_with(tableNamePattern, u"%")) varCriteria[nPos].setString(tableNamePattern); SafeArrayPutElement(psa,&nPos,&varCriteria[nPos]);nPos++;// TABLE_NAME @@ -2055,7 +1916,7 @@ ADORecordset* WpADOConnection::getColumnPrivileges( const css::uno::Any& catalog // Create SafeArray Bounds and initialize the array rgsabound[0].lLbound = 0; - rgsabound[0].cElements = SAL_N_ELEMENTS(varCriteria); + rgsabound[0].cElements = std::size(varCriteria); psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound ); sal_Int32 nPos=0; @@ -2090,7 +1951,7 @@ ADORecordset* WpADOConnection::getTypeInfo(DataTypeEnum /*_eType*/) { // Create elements used in the array OLEVariant varCriteria[2]; - const int nCrit = SAL_N_ELEMENTS(varCriteria); + const int nCrit = std::size(varCriteria); // Create SafeArray Bounds and initialize the array SAFEARRAYBOUND rgsabound[1]; rgsabound[0].lLbound = 0; @@ -2128,11 +1989,6 @@ void WpADOTable::putref_ParentCatalog(/* [in] */ _ADOCatalog __RPC_FAR *ppvObjec SAL_WARN_IF(!bRet, "connectivity.ado", "Could not set ParentCatalog!"); } -void WpBase::setIDispatch(IDispatch* _pIUnknown) -{ - pIUnknown = _pIUnknown; -} - void OTools::putValue(const WpADOProperties& _rProps,const OLEVariant &_aPosition,const OLEVariant &_aValVar) { SAL_WARN_IF(!_rProps.IsValid(), "connectivity.ado", "Properties are not valid!"); diff --git a/connectivity/source/drivers/ado/adoimp.cxx b/connectivity/source/drivers/ado/adoimp.cxx index 0b4936e734f2..0f0d022681ea 100644 --- a/connectivity/source/drivers/ado/adoimp.cxx +++ b/connectivity/source/drivers/ado/adoimp.cxx @@ -23,6 +23,7 @@ #include <ado/Awrapado.hxx> #include <ado/adoimp.hxx> #include <osl/diagnose.h> +#include <systools/win32/oleauto.hxx> #include <com/sun/star/sdbc/DataType.hpp> @@ -67,9 +68,9 @@ const IID ADOS::IID_ADOUSER_25 = MYADOID(0x00000619); const CLSID ADOS::CLSID_ADOVIEW_25 = MYADOID(0x00000612); const IID ADOS::IID_ADOVIEW_25 = MYADOID(0x00000613); -OLEString& ADOS::GetKeyStr() +sal::systools::BStr& ADOS::GetKeyStr() { - static OLEString sKeyStr(u"gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz"); + static sal::systools::BStr sKeyStr(u"gxwaezucfyqpwjgqbcmtsncuhwsnyhiohwxz"); return sKeyStr; } @@ -310,9 +311,8 @@ WpADOField ADOS::getField(ADORecordset* _pRecordSet,sal_Int32 _nColumnIndex) if ( !_pRecordSet ) return WpADOField(); - ADOFields* pFields = nullptr; - _pRecordSet->get_Fields(&pFields); - WpOLEAppendCollection<ADOFields, ADOField, WpADOField> aFields(pFields); + WpOLEAppendCollection<ADOFields, WpADOField> aFields; + _pRecordSet->get_Fields(&aFields); if(_nColumnIndex <= 0 || _nColumnIndex > aFields.GetItemCount()) ::dbtools::throwInvalidIndexException(nullptr); WpADOField aField(aFields.GetItem(_nColumnIndex-1)); diff --git a/connectivity/source/drivers/calc/CCatalog.cxx b/connectivity/source/drivers/calc/CCatalog.cxx index 03c4358b9b65..3a8493ac290a 100644 --- a/connectivity/source/drivers/calc/CCatalog.cxx +++ b/connectivity/source/drivers/calc/CCatalog.cxx @@ -24,7 +24,6 @@ #include <com/sun/star/sdbc/XResultSet.hpp> using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; diff --git a/connectivity/source/drivers/calc/CConnection.cxx b/connectivity/source/drivers/calc/CConnection.cxx index 9b03d473bda1..5dc725e70ed9 100644 --- a/connectivity/source/drivers/calc/CConnection.cxx +++ b/connectivity/source/drivers/calc/CConnection.cxx @@ -62,9 +62,9 @@ void OCalcConnection::construct(const OUString& url,const Sequence< PropertyValu sal_Int32 nLen = url.indexOf(':'); nLen = url.indexOf(':',nLen+1); - OUString aDSN(url.copy(nLen+1)); - m_aFileName = aDSN; + m_aFileName = url.copy(nLen+1); // DSN + INetURLObject aURL; aURL.SetSmartProtocol(INetProtocol::File); { @@ -104,18 +104,17 @@ Reference< XSpreadsheetDocument> const & OCalcConnection::acquireDoc() return m_xDoc; } // open read-only as long as updating isn't implemented - Sequence<PropertyValue> aArgs(2); - aArgs[0].Name = "Hidden"; - aArgs[0].Value <<= true; - aArgs[1].Name = "ReadOnly"; - aArgs[1].Value <<= true; + Sequence<PropertyValue> aArgs(m_sPassword.isEmpty() ? 2 : 3); + auto pArgs = aArgs.getArray(); + pArgs[0].Name = "Hidden"; + pArgs[0].Value <<= true; + pArgs[1].Name = "ReadOnly"; + pArgs[1].Value <<= true; if ( !m_sPassword.isEmpty() ) { - const sal_Int32 nPos = aArgs.getLength(); - aArgs.realloc(nPos+1); - aArgs[nPos].Name = "Password"; - aArgs[nPos].Value <<= m_sPassword; + pArgs[2].Name = "Password"; + pArgs[2].Value <<= m_sPassword; } Reference< XDesktop2 > xDesktop = Desktop::create( getDriver()->getComponentContext() ); @@ -143,12 +142,11 @@ Reference< XSpreadsheetDocument> const & OCalcConnection::acquireDoc() Exception aLoaderError; OSL_VERIFY( aLoaderException >>= aLoaderError ); - SQLException aDetailException; - aDetailException.Message = m_aResources.getResourceStringWithSubstitution( - STR_LOAD_FILE_ERROR_MESSAGE, - "$exception_type$", aLoaderException.getValueTypeName(), - "$error_message$", aLoaderError.Message - ); + SQLException aDetailException(m_aResources.getResourceStringWithSubstitution( + STR_LOAD_FILE_ERROR_MESSAGE, "$exception_type$", + aLoaderException.getValueTypeName(), + "$error_message$", aLoaderError.Message), + {}, {}, 0, {}); aErrorDetails <<= aDetailException; } @@ -221,8 +219,7 @@ css::uno::Reference< XTablesSupplier > OCalcConnection::createCatalog() Reference< XTablesSupplier > xTab = m_xCatalog; if(!xTab.is()) { - OCalcCatalog *pCat = new OCalcCatalog(this); - xTab = pCat; + xTab = new OCalcCatalog(this); m_xCatalog = xTab; } return xTab; @@ -247,8 +244,7 @@ Reference< XPreparedStatement > SAL_CALL OCalcConnection::prepareStatement( cons checkDisposed(OConnection_BASE::rBHelper.bDisposed); - auto pStmt = new connectivity::component::OComponentPreparedStatement(this); - Reference< XPreparedStatement > xHoldAlive = pStmt; + rtl::Reference<connectivity::component::OComponentPreparedStatement> pStmt = new connectivity::component::OComponentPreparedStatement(this); pStmt->construct(sql); m_aStatements.push_back(WeakReferenceHelper(*pStmt)); return pStmt; diff --git a/connectivity/source/drivers/calc/CDatabaseMetaData.cxx b/connectivity/source/drivers/calc/CDatabaseMetaData.cxx index cea1b32c7a94..aad5b4e50193 100644 --- a/connectivity/source/drivers/calc/CDatabaseMetaData.cxx +++ b/connectivity/source/drivers/calc/CDatabaseMetaData.cxx @@ -34,7 +34,6 @@ using namespace connectivity::file; using namespace connectivity::component; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; using namespace ::com::sun::star::table; @@ -59,37 +58,37 @@ static bool lcl_IsEmptyOrHidden( const Reference<XSpreadsheets>& xSheets, const { Any aAny = xSheets->getByName( rName ); Reference<XSpreadsheet> xSheet; - if ( aAny >>= xSheet ) + if ( !(aAny >>= xSheet) ) + return false; + + // test if sheet is hidden + + Reference<XPropertySet> xProp( xSheet, UNO_QUERY ); + if (xProp.is()) { - // test if sheet is hidden + bool bVisible; + Any aVisAny = xProp->getPropertyValue("IsVisible"); + if ( (aVisAny >>= bVisible) && !bVisible) + return true; // hidden + } - Reference<XPropertySet> xProp( xSheet, UNO_QUERY ); - if (xProp.is()) - { - bool bVisible; - Any aVisAny = xProp->getPropertyValue("IsVisible"); - if ( (aVisAny >>= bVisible) && !bVisible) - return true; // hidden - } + // use the same data area as in OCalcTable to test for empty table - // use the same data area as in OCalcTable to test for empty table + Reference<XSheetCellCursor> xCursor = xSheet->createCursor(); + Reference<XCellRangeAddressable> xRange( xCursor, UNO_QUERY ); + if ( xRange.is() ) + { + xCursor->collapseToSize( 1, 1 ); // single (first) cell + xCursor->collapseToCurrentRegion(); // contiguous data area - Reference<XSheetCellCursor> xCursor = xSheet->createCursor(); - Reference<XCellRangeAddressable> xRange( xCursor, UNO_QUERY ); - if ( xRange.is() ) + CellRangeAddress aRangeAddr = xRange->getRangeAddress(); + if ( aRangeAddr.StartColumn == aRangeAddr.EndColumn && + aRangeAddr.StartRow == aRangeAddr.EndRow ) { - xCursor->collapseToSize( 1, 1 ); // single (first) cell - xCursor->collapseToCurrentRegion(); // contiguous data area - - CellRangeAddress aRangeAddr = xRange->getRangeAddress(); - if ( aRangeAddr.StartColumn == aRangeAddr.EndColumn && - aRangeAddr.StartRow == aRangeAddr.EndRow ) - { - // single cell -> check content - Reference<XCell> xCell = xCursor->getCellByPosition( 0, 0 ); - if ( xCell.is() && xCell->getType() == CellContentType_EMPTY ) - return true; - } + // single cell -> check content + Reference<XCell> xCell = xCursor->getCellByPosition( 0, 0 ); + if ( xCell.is() && xCell->getType() == CellContentType_EMPTY ) + return true; } } @@ -130,8 +129,7 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables( { ::osl::MutexGuard aGuard( m_aMutex ); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); // check if ORowSetValue type is given // when no types are given then we have to return all tables e.g. TABLE @@ -156,7 +154,7 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables( } } if(!bTableFound) - return xRef; + return pResult; // get the sheet names from the document @@ -176,12 +174,11 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables( OUString aName = aSheetNames[nSheet]; if ( !lcl_IsEmptyOrHidden( xSheets, aName ) && match(tableNamePattern,aName,'\0') ) { - ODatabaseMetaDataResultSet::ORow aRow { nullptr, nullptr, nullptr }; - aRow.reserve(6); - aRow.push_back(new ORowSetValueDecorator(aName)); - aRow.push_back(new ORowSetValueDecorator(aTable)); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRows.push_back(aRow); + aRows.push_back( { nullptr, nullptr, nullptr, + new ORowSetValueDecorator(aName), + new ORowSetValueDecorator(aTable), + ODatabaseMetaDataResultSet::getEmptyValue() + } ); } } @@ -201,20 +198,19 @@ Reference< XResultSet > SAL_CALL OCalcDatabaseMetaData::getTables( OUString aName = aDBNames[nRange]; if ( !lcl_IsUnnamed( xRanges, aName ) && match(tableNamePattern,aName,'\0') ) { - ODatabaseMetaDataResultSet::ORow aRow { nullptr, nullptr, nullptr }; - aRow.reserve(6); - aRow.push_back(new ORowSetValueDecorator(aName)); - aRow.push_back(new ORowSetValueDecorator(aTable)); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRows.push_back(aRow); + aRows.push_back( { nullptr, nullptr, nullptr, + new ORowSetValueDecorator(aName), + new ORowSetValueDecorator(aTable), + ODatabaseMetaDataResultSet::getEmptyValue() + } ); } } } } - pResult->setRows(aRows); + pResult->setRows(std::move(aRows)); - return xRef; + return pResult; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/calc/CDriver.cxx b/connectivity/source/drivers/calc/CDriver.cxx index 324094ac04df..eccf97751c8f 100644 --- a/connectivity/source/drivers/calc/CDriver.cxx +++ b/connectivity/source/drivers/calc/CDriver.cxx @@ -53,7 +53,7 @@ connectivity_calc_ODriver( } if (ret) ret->acquire(); - return static_cast<cppu::OWeakObject*>(ret.get()); + return getXWeak(ret.get()); } @@ -68,12 +68,11 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, if ( ! acceptsURL(url) ) return nullptr; - OCalcConnection* pCon = new OCalcConnection(this); + rtl::Reference<OCalcConnection> pCon = new OCalcConnection(this); pCon->construct(url,info); - Reference< XConnection > xCon = pCon; m_xConnections.push_back(WeakReferenceHelper(*pCon)); - return xCon; + return pCon; } sal_Bool SAL_CALL ODriver::acceptsURL( const OUString& url ) diff --git a/connectivity/source/drivers/calc/CTable.cxx b/connectivity/source/drivers/calc/CTable.cxx index 56214c9f3881..879a2902d00c 100644 --- a/connectivity/source/drivers/calc/CTable.cxx +++ b/connectivity/source/drivers/calc/CTable.cxx @@ -41,7 +41,6 @@ #include <rtl/math.hxx> #include <tools/time.hxx> #include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> using namespace connectivity; using namespace connectivity::calc; @@ -50,10 +49,8 @@ using namespace ::cppu; using namespace ::dbtools; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sheet; using namespace ::com::sun::star::table; using namespace ::com::sun::star::text; @@ -192,24 +189,23 @@ static bool lcl_HasTextInColumn( const Reference<XSpreadsheet>& xSheet, sal_Int3 // look for any text cell or text result in the column Reference<XCellRangeAddressable> xAddr( xSheet, UNO_QUERY ); - if (xAddr.is()) - { - CellRangeAddress aTotalRange = xAddr->getRangeAddress(); - sal_Int32 nLastRow = aTotalRange.EndRow; - Reference<XCellRangesQuery> xQuery( xSheet->getCellRangeByPosition( nDocColumn, nDocRow, nDocColumn, nLastRow ), UNO_QUERY ); - if (xQuery.is()) - { - // are there text cells in the column? - Reference<XSheetCellRanges> xTextContent = xQuery->queryContentCells( CellFlags::STRING ); - if ( xTextContent.is() && xTextContent->hasElements() ) - return true; - - // are there formulas with text results in the column? - Reference<XSheetCellRanges> xTextFormula = xQuery->queryFormulaCells( FormulaResult::STRING ); - if ( xTextFormula.is() && xTextFormula->hasElements() ) - return true; - } - } + if (!xAddr) + return false; + CellRangeAddress aTotalRange = xAddr->getRangeAddress(); + sal_Int32 nLastRow = aTotalRange.EndRow; + Reference<XCellRangesQuery> xQuery( xSheet->getCellRangeByPosition( nDocColumn, nDocRow, nDocColumn, nLastRow ), UNO_QUERY ); + if (!xQuery) + return false; + + // are there text cells in the column? + Reference<XSheetCellRanges> xTextContent = xQuery->queryContentCells( CellFlags::STRING ); + if ( xTextContent.is() && xTextContent->hasElements() ) + return true; + + // are there formulas with text results in the column? + Reference<XSheetCellRanges> xTextFormula = xQuery->queryFormulaCells( FormulaResult::STRING ); + if ( xTextFormula.is() && xTextFormula->hasElements() ) + return true; return false; } @@ -486,13 +482,12 @@ void OCalcTable::fillColumns() aFind = connectivity::find(m_aColumns->begin(),m_aColumns->end(),aAlias,aCase); } - sdbcx::OColumn* pColumn = new sdbcx::OColumn( aAlias, aTypeName, OUString(),OUString(), + rtl::Reference<sdbcx::OColumn> pColumn = new sdbcx::OColumn( aAlias, aTypeName, OUString(),OUString(), ColumnValue::NULLABLE, nPrecision, nDecimals, eType, false, false, bCurrency, bStoresMixedCaseQuotedIdentifiers, m_CatalogName, getSchema(), getName()); - Reference< XPropertySet> xCol = pColumn; - m_aColumns->push_back(xCol); + m_aColumns->push_back(pColumn); m_aTypes.push_back(eType); } } @@ -611,22 +606,6 @@ void SAL_CALL OCalcTable::disposing() } -Sequence< sal_Int8 > OCalcTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OCalcTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return (isUnoTunnelId<OCalcTable>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : OCalcTable_BASE::getSomething(rId); -} - bool OCalcTable::fetchRow( OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData ) { diff --git a/connectivity/source/drivers/calc/CTables.cxx b/connectivity/source/drivers/calc/CTables.cxx index 703ab27120c5..1f626f7b10d0 100644 --- a/connectivity/source/drivers/calc/CTables.cxx +++ b/connectivity/source/drivers/calc/CTables.cxx @@ -25,24 +25,18 @@ #include <file/FCatalog.hxx> #include <file/FConnection.hxx> -using namespace ::comphelper; using namespace connectivity; using namespace connectivity::calc; using namespace connectivity::file; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; using namespace ::com::sun::star::container; sdbcx::ObjectType OCalcTables::createObject(const OUString& _rName) { - OCalcTable* pTable = new OCalcTable(this, static_cast<OCalcConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()), + rtl::Reference<OCalcTable> pTable = new OCalcTable(this, static_cast<OCalcConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()), _rName,"TABLE"); - sdbcx::ObjectType xRet = pTable; pTable->construct(); - return xRet; + return pTable; } diff --git a/connectivity/source/drivers/component/CColumns.cxx b/connectivity/source/drivers/component/CColumns.cxx index 9f802b6e4c57..7726d3a326d0 100644 --- a/connectivity/source/drivers/component/CColumns.cxx +++ b/connectivity/source/drivers/component/CColumns.cxx @@ -23,10 +23,6 @@ using namespace connectivity::component; using namespace connectivity; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; sdbcx::ObjectType OComponentColumns::createObject(const OUString& _rName) diff --git a/connectivity/source/drivers/component/CDatabaseMetaData.cxx b/connectivity/source/drivers/component/CDatabaseMetaData.cxx index f225747a6486..49d83e36af12 100644 --- a/connectivity/source/drivers/component/CDatabaseMetaData.cxx +++ b/connectivity/source/drivers/component/CDatabaseMetaData.cxx @@ -46,80 +46,72 @@ OComponentDatabaseMetaData::~OComponentDatabaseMetaData() Reference< XResultSet > OComponentDatabaseMetaData::impl_getTypeInfo_throw( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); - static ODatabaseMetaDataResultSet::ORows aRows; - if(aRows.empty()) + ODatabaseMetaDataResultSet::ORows aRows; + aRows.reserve(6); + ODatabaseMetaDataResultSet::ORow aRow { - ODatabaseMetaDataResultSet::ORow aRow; - - aRows.reserve(6); - aRow.reserve(18); - - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(OUString("VARCHAR"))); - aRow.push_back(new ORowSetValueDecorator(DataType::VARCHAR)); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(65535))); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); // ORowSetValue((sal_Int32)ColumnValue::NULLABLE) - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(ColumnSearch::CHAR))); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(10))); - - - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL")); - aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); - aRow[3] = ODatabaseMetaDataResultSet::get0Value(); - aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); - aRow[15] = ODatabaseMetaDataResultSet::get0Value(); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("BOOL")); - aRow[2] = new ORowSetValueDecorator(DataType::BIT); - aRow[3] = new ORowSetValueDecorator(sal_Int32(20)); - aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); - aRow[15] = new ORowSetValueDecorator(sal_Int32(15)); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("DATE")); - aRow[2] = new ORowSetValueDecorator(DataType::DATE); - aRow[3] = ODatabaseMetaDataResultSet::get0Value(); - aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); - aRow[15] = ODatabaseMetaDataResultSet::get0Value(); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("TIME")); - aRow[2] = new ORowSetValueDecorator(DataType::TIME); - aRow[3] = ODatabaseMetaDataResultSet::get0Value(); - aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); - aRow[15] = ODatabaseMetaDataResultSet::get0Value(); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP")); - aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP); - aRow[3] = ODatabaseMetaDataResultSet::get0Value(); - aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); - aRow[15] = ODatabaseMetaDataResultSet::get0Value(); - aRows.push_back(aRow); - } - - pResult->setRows(aRows); - return xRef; + ODatabaseMetaDataResultSet::getEmptyValue(), + new ORowSetValueDecorator(OUString("VARCHAR")), + new ORowSetValueDecorator(DataType::VARCHAR), + new ORowSetValueDecorator(sal_Int32(65535)), + ODatabaseMetaDataResultSet::getQuoteValue(), + ODatabaseMetaDataResultSet::getQuoteValue(), + ODatabaseMetaDataResultSet::getEmptyValue(), + ODatabaseMetaDataResultSet::get1Value(), // ORowSetValue((sal_Int32)ColumnValue::NULLABLE + ODatabaseMetaDataResultSet::get1Value(), + new ORowSetValueDecorator(sal_Int32(ColumnSearch::CHAR)), + ODatabaseMetaDataResultSet::get1Value(), + ODatabaseMetaDataResultSet::get0Value(), + ODatabaseMetaDataResultSet::get0Value(), + ODatabaseMetaDataResultSet::getEmptyValue(), + ODatabaseMetaDataResultSet::get0Value(), + ODatabaseMetaDataResultSet::get0Value(), + ODatabaseMetaDataResultSet::getEmptyValue(), + ODatabaseMetaDataResultSet::getEmptyValue(), + new ORowSetValueDecorator(sal_Int32(10)) + }; + + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL")); + aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); + aRow[3] = ODatabaseMetaDataResultSet::get0Value(); + aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); + aRow[15] = ODatabaseMetaDataResultSet::get0Value(); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("BOOL")); + aRow[2] = new ORowSetValueDecorator(DataType::BIT); + aRow[3] = new ORowSetValueDecorator(sal_Int32(20)); + aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); + aRow[15] = new ORowSetValueDecorator(sal_Int32(15)); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("DATE")); + aRow[2] = new ORowSetValueDecorator(DataType::DATE); + aRow[3] = ODatabaseMetaDataResultSet::get0Value(); + aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); + aRow[15] = ODatabaseMetaDataResultSet::get0Value(); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("TIME")); + aRow[2] = new ORowSetValueDecorator(DataType::TIME); + aRow[3] = ODatabaseMetaDataResultSet::get0Value(); + aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); + aRow[15] = ODatabaseMetaDataResultSet::get0Value(); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP")); + aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP); + aRow[3] = ODatabaseMetaDataResultSet::get0Value(); + aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); + aRow[15] = ODatabaseMetaDataResultSet::get0Value(); + aRows.push_back(aRow); + + pResult->setRows(std::move(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns( @@ -179,7 +171,7 @@ Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns( aRow[13] = new ORowSetValueDecorator(::comphelper::getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE)))); // aRow[14] = xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)); // aRow[15] = xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME)); - switch(sal_Int32(aRow[5]->getValue())) + switch(aRow[5]->getValue().getInt32()) { case DataType::CHAR: case DataType::VARCHAR: @@ -192,7 +184,7 @@ Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns( aRow[16] = new ORowSetValueDecorator(sal_Int32(0)); } aRow[17] = new ORowSetValueDecorator(i); - switch(sal_Int32(aRow[11]->getValue())) + switch(aRow[11]->getValue().getInt32()) { case ColumnValue::NO_NULLS: aRow[18] = new ORowSetValueDecorator(OUString("NO")); @@ -209,11 +201,10 @@ Reference< XResultSet > SAL_CALL OComponentDatabaseMetaData::getColumns( } } - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); - Reference< XResultSet > xRef = pResult; - pResult->setRows(aRows); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); + pResult->setRows(std::move(aRows)); - return xRef; + return pResult; } sal_Int32 SAL_CALL OComponentDatabaseMetaData::getMaxBinaryLiteralLength( ) diff --git a/connectivity/source/drivers/component/CPreparedStatement.cxx b/connectivity/source/drivers/component/CPreparedStatement.cxx index bc3af3e8c9b8..82935cbd747d 100644 --- a/connectivity/source/drivers/component/CPreparedStatement.cxx +++ b/connectivity/source/drivers/component/CPreparedStatement.cxx @@ -22,9 +22,8 @@ using namespace connectivity::component; using namespace connectivity::file; -using namespace com::sun::star::uno; -OResultSet* OComponentPreparedStatement::createResultSet() +rtl::Reference<OResultSet> OComponentPreparedStatement::createResultSet() { return new connectivity::component::OComponentResultSet(this,m_aSQLIterator); } diff --git a/connectivity/source/drivers/component/CResultSet.cxx b/connectivity/source/drivers/component/CResultSet.cxx index 050b4034da45..08e6e04aca70 100644 --- a/connectivity/source/drivers/component/CResultSet.cxx +++ b/connectivity/source/drivers/component/CResultSet.cxx @@ -77,7 +77,7 @@ Any SAL_CALL OComponentResultSet::getBookmark( ) checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - return makeAny(static_cast<sal_Int32>((*m_aRow)[0]->getValue())); + return Any((*m_aRow)[0]->getValue().getInt32()); } sal_Bool SAL_CALL OComponentResultSet::moveToBookmark( const Any& bookmark ) @@ -153,12 +153,12 @@ bool OComponentResultSet::fillIndexValues(const Reference< XColumnsSupplier> &/* } -void SAL_CALL OComponentResultSet::acquire() throw() +void SAL_CALL OComponentResultSet::acquire() noexcept { OComponentResultSet_BASE2::acquire(); } -void SAL_CALL OComponentResultSet::release() throw() +void SAL_CALL OComponentResultSet::release() noexcept { OComponentResultSet_BASE2::release(); } diff --git a/connectivity/source/drivers/component/CStatement.cxx b/connectivity/source/drivers/component/CStatement.cxx index 8a1a2fa92287..ff072ab5f548 100644 --- a/connectivity/source/drivers/component/CStatement.cxx +++ b/connectivity/source/drivers/component/CStatement.cxx @@ -22,9 +22,8 @@ using namespace connectivity::component; using namespace connectivity::file; -using namespace com::sun::star::uno; -OResultSet* OComponentStatement::createResultSet() +rtl::Reference<OResultSet> OComponentStatement::createResultSet() { return new connectivity::component::OComponentResultSet(this, m_aSQLIterator); } diff --git a/connectivity/source/drivers/component/CTable.cxx b/connectivity/source/drivers/component/CTable.cxx index 9b5354d266d1..1fe32c339faa 100644 --- a/connectivity/source/drivers/component/CTable.cxx +++ b/connectivity/source/drivers/component/CTable.cxx @@ -25,7 +25,6 @@ using namespace connectivity; using namespace connectivity::component; using namespace connectivity::file; using namespace ::cppu; -using namespace ::dbtools; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; @@ -33,7 +32,6 @@ using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sheet; -using namespace ::com::sun::star::util; OComponentTable::OComponentTable(sdbcx::OCollection* _pTables,file::OConnection* _pConnection, @@ -63,7 +61,7 @@ void OComponentTable::refreshColumns() if(m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = new component::OComponentColumns(this,m_aMutex,aVector); + m_xColumns.reset(new component::OComponentColumns(this,m_aMutex,aVector)); } void OComponentTable::refreshIndexes() @@ -104,8 +102,7 @@ Any SAL_CALL OComponentTable::queryInterface( const Type & rType ) rType == cppu::UnoType<XDataDescriptorFactory>::get()) return Any(); - const Any aRet = ::cppu::queryInterface(rType,static_cast< css::lang::XUnoTunnel*> (this)); - return aRet.hasValue() ? aRet : OTable_TYPEDEF::queryInterface(rType); + return OTable_TYPEDEF::queryInterface(rType); } diff --git a/connectivity/source/drivers/dbase/DCatalog.cxx b/connectivity/source/drivers/dbase/DCatalog.cxx index a8aaf89c529a..79dce7ba2ce0 100644 --- a/connectivity/source/drivers/dbase/DCatalog.cxx +++ b/connectivity/source/drivers/dbase/DCatalog.cxx @@ -24,7 +24,6 @@ #include <com/sun/star/sdbc/XResultSet.hpp> using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; diff --git a/connectivity/source/drivers/dbase/DColumns.cxx b/connectivity/source/drivers/dbase/DColumns.cxx index b997ec8d9087..402ec4e41c07 100644 --- a/connectivity/source/drivers/dbase/DColumns.cxx +++ b/connectivity/source/drivers/dbase/DColumns.cxx @@ -25,10 +25,6 @@ using namespace connectivity::dbase; using namespace connectivity; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; sdbcx::ObjectType ODbaseColumns::createObject(const OUString& _rName) { diff --git a/connectivity/source/drivers/dbase/DConnection.cxx b/connectivity/source/drivers/dbase/DConnection.cxx index 7c577b7c9541..7498f23e4bf7 100644 --- a/connectivity/source/drivers/dbase/DConnection.cxx +++ b/connectivity/source/drivers/dbase/DConnection.cxx @@ -33,10 +33,8 @@ typedef connectivity::file::OConnection OConnection_BASE; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; ODbaseConnection::ODbaseConnection(ODriver* _pDriver) : OConnection(_pDriver) { @@ -74,8 +72,7 @@ css::uno::Reference< XTablesSupplier > ODbaseConnection::createCatalog() Reference< XTablesSupplier > xTab = m_xCatalog; if(!xTab.is()) { - ODbaseCatalog *pCat = new ODbaseCatalog(this); - xTab = pCat; + xTab = new ODbaseCatalog(this); m_xCatalog = xTab; } return xTab; @@ -97,9 +94,7 @@ Reference< XPreparedStatement > SAL_CALL ODbaseConnection::prepareStatement( con ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - - ODbasePreparedStatement* pStmt = new ODbasePreparedStatement(this); - Reference< XPreparedStatement > xHoldAlive = pStmt; + rtl::Reference<ODbasePreparedStatement> pStmt = new ODbasePreparedStatement(this); pStmt->construct(sql); m_aStatements.push_back(WeakReferenceHelper(*pStmt)); return pStmt; diff --git a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx index b896e942cb01..b3791f7d85d1 100644 --- a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx +++ b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx @@ -54,101 +54,96 @@ ODbaseDatabaseMetaData::~ODbaseDatabaseMetaData() Reference< XResultSet > ODbaseDatabaseMetaData::impl_getTypeInfo_throw( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); - Reference< XResultSet > xRef = pResult; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); - static ODatabaseMetaDataResultSet::ORows aRows; - if(aRows.empty()) + ODatabaseMetaDataResultSet::ORows aRows; + aRows.reserve(10); + ODatabaseMetaDataResultSet::ORow aRow { - ODatabaseMetaDataResultSet::ORow aRow; - aRow.reserve(19); - - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(OUString("VARCHAR"))); - aRow.push_back(new ORowSetValueDecorator(DataType::VARCHAR)); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(254))); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(new ORowSetValueDecorator(OUString("length"))); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(ColumnValue::NULLABLE))); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(ColumnSearch::FULL))); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(new ORowSetValueDecorator(OUString("C"))); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(10))); - - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("LONGVARCHAR")); - aRow[2] = new ORowSetValueDecorator(DataType::LONGVARCHAR); - aRow[3] = new ORowSetValueDecorator(sal_Int32(2147483647)); - aRow[6] = new ORowSetValueDecorator(); - aRow[13] = new ORowSetValueDecorator(OUString("M")); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("DATE")); - aRow[2] = new ORowSetValueDecorator(DataType::DATE); - aRow[3] = new ORowSetValueDecorator(sal_Int32(10)); - aRow[13] = new ORowSetValueDecorator(OUString("D")); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("BOOLEAN")); - aRow[2] = new ORowSetValueDecorator(DataType::BIT); - aRow[3] = ODatabaseMetaDataResultSet::get1Value(); - aRow[4] = ODatabaseMetaDataResultSet::getEmptyValue(); - aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); - aRow[6] = new ORowSetValueDecorator(OUString()); - aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); - aRow[13] = new ORowSetValueDecorator(OUString("L")); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("DOUBLE")); - aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE); - aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); - aRow[13] = new ORowSetValueDecorator(OUString("B")); - aRows.push_back(aRow); - - aRow[11] = new ORowSetValueDecorator(true); - aRow[13] = new ORowSetValueDecorator(OUString("Y")); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP")); - aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP); - aRow[11] = new ORowSetValueDecorator(false); - aRow[13] = new ORowSetValueDecorator(OUString("T")); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("INTEGER")); - aRow[2] = new ORowSetValueDecorator(DataType::INTEGER); - aRow[3] = new ORowSetValueDecorator(sal_Int32(10)); - aRow[13] = new ORowSetValueDecorator(OUString("I")); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL")); - aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); - aRow[3] = new ORowSetValueDecorator(sal_Int32(20)); - aRow[6] = new ORowSetValueDecorator(OUString("length,scale")); - aRow[13] = new ORowSetValueDecorator(OUString("F")); - aRows.push_back(aRow); - - aRow[1] = new ORowSetValueDecorator(OUString("NUMERIC")); - aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); - aRow[3] = new ORowSetValueDecorator(sal_Int32(16)); - aRow[13] = new ORowSetValueDecorator(OUString("N")); - aRow[15] = new ORowSetValueDecorator(sal_Int32(16)); - aRows.push_back(aRow); - } - - pResult->setRows(aRows); - return xRef; + ODatabaseMetaDataResultSet::getEmptyValue(), + new ORowSetValueDecorator(OUString("VARCHAR")), + new ORowSetValueDecorator(DataType::VARCHAR), + new ORowSetValueDecorator(sal_Int32(254)), + ODatabaseMetaDataResultSet::getQuoteValue(), + ODatabaseMetaDataResultSet::getQuoteValue(), + new ORowSetValueDecorator(OUString("length")), + new ORowSetValueDecorator(sal_Int32(ColumnValue::NULLABLE)), + ODatabaseMetaDataResultSet::get1Value(), + new ORowSetValueDecorator(sal_Int32(ColumnSearch::FULL)), + ODatabaseMetaDataResultSet::get1Value(), + ODatabaseMetaDataResultSet::get0Value(), + ODatabaseMetaDataResultSet::get0Value(), + new ORowSetValueDecorator(OUString("C")), + ODatabaseMetaDataResultSet::get0Value(), + ODatabaseMetaDataResultSet::get0Value(), + ODatabaseMetaDataResultSet::getEmptyValue(), + ODatabaseMetaDataResultSet::getEmptyValue(), + new ORowSetValueDecorator(sal_Int32(10)) + }; + + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("LONGVARCHAR")); + aRow[2] = new ORowSetValueDecorator(DataType::LONGVARCHAR); + aRow[3] = new ORowSetValueDecorator(sal_Int32(2147483647)); + aRow[6] = new ORowSetValueDecorator(); + aRow[13] = new ORowSetValueDecorator(OUString("M")); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("DATE")); + aRow[2] = new ORowSetValueDecorator(DataType::DATE); + aRow[3] = new ORowSetValueDecorator(sal_Int32(10)); + aRow[13] = new ORowSetValueDecorator(OUString("D")); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("BOOLEAN")); + aRow[2] = new ORowSetValueDecorator(DataType::BIT); + aRow[3] = ODatabaseMetaDataResultSet::get1Value(); + aRow[4] = ODatabaseMetaDataResultSet::getEmptyValue(); + aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); + aRow[6] = new ORowSetValueDecorator(OUString()); + aRow[9] = ODatabaseMetaDataResultSet::getBasicValue(); + aRow[13] = new ORowSetValueDecorator(OUString("L")); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("DOUBLE")); + aRow[2] = new ORowSetValueDecorator(DataType::DOUBLE); + aRow[3] = new ORowSetValueDecorator(sal_Int32(8)); + aRow[13] = new ORowSetValueDecorator(OUString("B")); + aRows.push_back(aRow); + + aRow[11] = new ORowSetValueDecorator(ORowSetValue(true)); + aRow[13] = new ORowSetValueDecorator(OUString("Y")); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("TIMESTAMP")); + aRow[2] = new ORowSetValueDecorator(DataType::TIMESTAMP); + aRow[11] = new ORowSetValueDecorator(ORowSetValue(false)); + aRow[13] = new ORowSetValueDecorator(OUString("T")); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("INTEGER")); + aRow[2] = new ORowSetValueDecorator(DataType::INTEGER); + aRow[3] = new ORowSetValueDecorator(sal_Int32(10)); + aRow[13] = new ORowSetValueDecorator(OUString("I")); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("DECIMAL")); + aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); + aRow[3] = new ORowSetValueDecorator(sal_Int32(20)); + aRow[6] = new ORowSetValueDecorator(OUString("length,scale")); + aRow[13] = new ORowSetValueDecorator(OUString("F")); + aRows.push_back(aRow); + + aRow[1] = new ORowSetValueDecorator(OUString("NUMERIC")); + aRow[2] = new ORowSetValueDecorator(DataType::DECIMAL); + aRow[3] = new ORowSetValueDecorator(sal_Int32(16)); + aRow[13] = new ORowSetValueDecorator(OUString("N")); + aRow[15] = new ORowSetValueDecorator(sal_Int32(16)); + aRows.push_back(aRow); + + pResult->setRows(std::move(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns( @@ -207,7 +202,7 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns( aRow[9] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_SCALE)))); aRow[11] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE)))); aRow[13] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE)))); - switch(static_cast<sal_Int32>(aRow[5]->getValue())) + switch(aRow[5]->getValue().getInt32()) { case DataType::CHAR: case DataType::VARCHAR: @@ -220,7 +215,7 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns( aRow[16] = new ORowSetValueDecorator(sal_Int32(0)); } aRow[17] = new ORowSetValueDecorator(i); - switch(sal_Int32(aRow[11]->getValue())) + switch(aRow[11]->getValue().getInt32()) { case ColumnValue::NO_NULLS: aRow[18] = new ORowSetValueDecorator(OUString("NO")); @@ -244,11 +239,10 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getColumns( throw aSql; throw WrappedTargetRuntimeException(e.Message, e.Context, e.TargetException); } - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); - Reference< XResultSet > xRef = pResult; - pResult->setRows(aRows); + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); + pResult->setRows(std::move(aRows)); - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo( @@ -292,10 +286,10 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo( if(unique && !getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE)))) continue; - aRow[4] = new ORowSetValueDecorator(getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE)))); + aRow[4] = new ORowSetValueDecorator(ORowSetValue(getBOOL(xIndex->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISUNIQUE))))); aRow[6] = new ORowSetValueDecorator(*pBegin); - auto pIndex = comphelper::getUnoTunnelImplementation<ODbaseIndex>(xIndex); + auto pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get()); if(pIndex) { aRow[11] = new ORowSetValueDecorator(static_cast<sal_Int32>(pIndex->getHeader().db_maxkeys)); @@ -316,10 +310,9 @@ Reference< XResultSet > SAL_CALL ODbaseDatabaseMetaData::getIndexInfo( } } - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eIndexInfo); - Reference< XResultSet > xRef = pResult; - pResult->setRows(aRows); - return xRef; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eIndexInfo); + pResult->setRows(std::move(aRows)); + return pResult; } OUString SAL_CALL ODbaseDatabaseMetaData::getURL( ) diff --git a/connectivity/source/drivers/dbase/DDriver.cxx b/connectivity/source/drivers/dbase/DDriver.cxx index 5d9d56dcd5cf..ff0ec256e18a 100644 --- a/connectivity/source/drivers/dbase/DDriver.cxx +++ b/connectivity/source/drivers/dbase/DDriver.cxx @@ -51,7 +51,7 @@ connectivity_dbase_ODriver( } if (ret) ret->acquire(); - return static_cast<cppu::OWeakObject*>(ret.get()); + return getXWeak(ret.get()); } @@ -64,12 +64,11 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const S if ( ! acceptsURL(url) ) return nullptr; - ODbaseConnection* pCon = new ODbaseConnection(this); + rtl::Reference<ODbaseConnection> pCon = new ODbaseConnection(this); pCon->construct(url,info); - Reference< XConnection > xCon = pCon; m_xConnections.push_back(WeakReferenceHelper(*pCon)); - return xCon; + return pCon; } sal_Bool SAL_CALL ODriver::acceptsURL( const OUString& url ) @@ -81,11 +80,10 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString { if ( acceptsURL(url) ) { - Sequence< OUString > aBoolean(2); - aBoolean[0] = "0"; - aBoolean[1] = "1"; + Sequence< OUString > aBoolean { "0", "1" }; - DriverPropertyInfo aDriverInfo[] = { + return + { { "CharSet" ,"CharSet of the database." @@ -108,8 +106,6 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString ,aBoolean } }; - - return Sequence< DriverPropertyInfo >(aDriverInfo, std::size(aDriverInfo)); } SharedResources aResources; diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx index d168de39eb77..a3ee4a2688df 100644 --- a/connectivity/source/drivers/dbase/DIndex.cxx +++ b/connectivity/source/drivers/dbase/DIndex.cxx @@ -30,7 +30,6 @@ #include <unotools/ucbhelper.hxx> #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> -#include <cppuhelper/typeprovider.hxx> #include <connectivity/dbexception.hxx> #include <dbase/DResultSet.hxx> #include <strings.hrc> @@ -42,13 +41,10 @@ using namespace connectivity; using namespace utl; using namespace ::cppu; using namespace connectivity::file; -using namespace connectivity::sdbcx; using namespace connectivity::dbase; using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; using namespace com::sun::star::uno; using namespace com::sun::star::beans; -using namespace com::sun::star::lang; IMPLEMENT_SERVICE_INFO(ODbaseIndex,"com.sun.star.sdbcx.driver.dbase.Index","com.sun.star.sdbcx.Index"); @@ -100,22 +96,6 @@ void ODbaseIndex::refreshColumns() m_pColumns.reset(new ODbaseIndexColumns(this,m_aMutex,aVector)); } -Sequence< sal_Int8 > ODbaseIndex::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// XUnoTunnel - -sal_Int64 ODbaseIndex::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return (isUnoTunnelId<ODbaseIndex>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : ODbaseIndex_BASE::getSomething(rId); -} - ONDXPagePtr const & ODbaseIndex::getRoot() { openIndexFile(); @@ -357,7 +337,7 @@ SvStream& connectivity::dbase::operator >> (SvStream &rStream, ODbaseIndex& rInd return rStream; } -SvStream& connectivity::dbase::WriteODbaseIndex(SvStream &rStream, ODbaseIndex& rIndex) +SvStream& connectivity::dbase::WriteODbaseIndex(SvStream &rStream, const ODbaseIndex& rIndex) { rStream.Seek(0); rStream.WriteUInt32(rIndex.m_aHeader.db_rootpage); @@ -404,8 +384,7 @@ void ODbaseIndex::createINFEntry() bool bCase = isCaseSensitive(); while (aNewEntry.isEmpty()) { - aNewEntry = OString("NDX"); - aNewEntry += OString::number(++nSuffix); + aNewEntry = "NDX" + OString::number(++nSuffix); for (sal_uInt16 i = 0; i < aInfFile.GetKeyCount(); i++) { aKeyName = aInfFile.GetKeyName(i); @@ -461,7 +440,7 @@ void ODbaseIndex::DropImpl() } } -void ODbaseIndex::impl_killFileAndthrowError_throw(const char* pErrorId, const OUString& _sFile) +void ODbaseIndex::impl_killFileAndthrowError_throw(TranslateId pErrorId, const OUString& _sFile) { closeImpl(); if(UCBContentHelper::Exists(_sFile)) @@ -568,15 +547,13 @@ void ODbaseIndex::CreateImpl() if(xSet->last()) { - Reference< XUnoTunnel> xTunnel(xSet, UNO_QUERY_THROW); - ODbaseResultSet* pDbaseRes = reinterpret_cast< ODbaseResultSet* >( xTunnel->getSomething(ODbaseResultSet::getUnoTunnelId()) ); + ODbaseResultSet* pDbaseRes = dynamic_cast<ODbaseResultSet*>(xSet.getTyped().get()); assert(pDbaseRes); //"No dbase resultset found? What's going on here! nRowsLeft = xSet->getRow(); xSet->beforeFirst(); - ORowSetValue atmpValue; - ONDXKey aKey(atmpValue, nType, 0); - ONDXKey aInsertKey(atmpValue, nType, 0); + ONDXKey aKey(ORowSetValue(), nType, 0); + ONDXKey aInsertKey(ORowSetValue(), nType, 0); // Create the index structure while (xSet->next()) { diff --git a/connectivity/source/drivers/dbase/DIndexColumns.cxx b/connectivity/source/drivers/dbase/DIndexColumns.cxx index 886c7273db31..8b20903fa1d3 100644 --- a/connectivity/source/drivers/dbase/DIndexColumns.cxx +++ b/connectivity/source/drivers/dbase/DIndexColumns.cxx @@ -28,9 +28,7 @@ using namespace connectivity::dbase; using namespace connectivity; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; sdbcx::ObjectType ODbaseIndexColumns::createObject(const OUString& _rName) diff --git a/connectivity/source/drivers/dbase/DIndexes.cxx b/connectivity/source/drivers/dbase/DIndexes.cxx index 1ebce2612098..df630c531c3e 100644 --- a/connectivity/source/drivers/dbase/DIndexes.cxx +++ b/connectivity/source/drivers/dbase/DIndexes.cxx @@ -24,18 +24,12 @@ #include <unotools/ucbhelper.hxx> #include <strings.hrc> -using namespace ::comphelper; - using namespace utl; using namespace ::connectivity; using namespace ::dbtools; using namespace ::connectivity::dbase; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName) { @@ -63,7 +57,7 @@ sdbcx::ObjectType ODbaseIndexes::createObject(const OUString& _rName) ReadHeader(*pFileStream, aHeader); pFileStream.reset(); - ODbaseIndex* pIndex = new ODbaseIndex(m_pTable,aHeader,_rName); + rtl::Reference<ODbaseIndex> pIndex = new ODbaseIndex(m_pTable,aHeader,_rName); xRet = pIndex; pIndex->openIndexFile(); } @@ -92,14 +86,9 @@ Reference< XPropertySet > ODbaseIndexes::createDescriptor() // XAppend sdbcx::ObjectType ODbaseIndexes::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - Reference<XUnoTunnel> xTunnel(descriptor,UNO_QUERY); - if(xTunnel.is()) - { - ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) ); - if(!pIndex) - throw SQLException(); + ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(descriptor.get()); + if(pIndex) pIndex->CreateImpl(); - } return createObject( _rForName ); } @@ -107,7 +96,7 @@ sdbcx::ObjectType ODbaseIndexes::appendObject( const OUString& _rForName, const // XDrop void ODbaseIndexes::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/) { - auto pIndex = comphelper::getUnoTunnelImplementation<ODbaseIndex>(getObject(_nPos)); + rtl::Reference<ODbaseIndex> pIndex = dynamic_cast<ODbaseIndex*>(getObject(_nPos).get()); if ( pIndex ) pIndex->DropImpl(); } diff --git a/connectivity/source/drivers/dbase/DPreparedStatement.cxx b/connectivity/source/drivers/dbase/DPreparedStatement.cxx index 852c98acf509..f349701e620b 100644 --- a/connectivity/source/drivers/dbase/DPreparedStatement.cxx +++ b/connectivity/source/drivers/dbase/DPreparedStatement.cxx @@ -22,9 +22,8 @@ using namespace connectivity::dbase; using namespace connectivity::file; -using namespace com::sun::star::uno; -OResultSet* ODbasePreparedStatement::createResultSet() +rtl::Reference<OResultSet> ODbasePreparedStatement::createResultSet() { return new ODbaseResultSet(this, m_aSQLIterator); } diff --git a/connectivity/source/drivers/dbase/DResultSet.cxx b/connectivity/source/drivers/dbase/DResultSet.cxx index f9395a359465..123a29b8b069 100644 --- a/connectivity/source/drivers/dbase/DResultSet.cxx +++ b/connectivity/source/drivers/dbase/DResultSet.cxx @@ -81,7 +81,7 @@ Any SAL_CALL ODbaseResultSet::getBookmark( ) checkDisposed(OResultSet_BASE::rBHelper.bDisposed); OSL_ENSURE((m_bShowDeleted || !m_aRow->isDeleted()),"getBookmark called for deleted row"); - return makeAny(static_cast<sal_Int32>((*m_aRow)[0]->getValue())); + return Any((*m_aRow)[0]->getValue().getInt32()); } sal_Bool SAL_CALL ODbaseResultSet::moveToBookmark( const Any& bookmark ) @@ -155,7 +155,7 @@ Sequence< sal_Int32 > SAL_CALL ODbaseResultSet::deleteRows( const Sequence< An bool ODbaseResultSet::fillIndexValues(const Reference< XColumnsSupplier> &_xIndex) { - auto pIndex = comphelper::getUnoTunnelImplementation<dbase::ODbaseIndex>(_xIndex); + auto pIndex = dynamic_cast<dbase::ODbaseIndex*>(_xIndex.get()); if(pIndex) { std::unique_ptr<dbase::OIndexIterator> pIter = pIndex->createIterator(); @@ -187,12 +187,12 @@ bool ODbaseResultSet::fillIndexValues(const Reference< XColumnsSupplier> &_xInde return new ::cppu::OPropertyArrayHelper(aProps); } -void SAL_CALL ODbaseResultSet::acquire() throw() +void SAL_CALL ODbaseResultSet::acquire() noexcept { ODbaseResultSet_BASE2::acquire(); } -void SAL_CALL ODbaseResultSet::release() throw() +void SAL_CALL ODbaseResultSet::release() noexcept { ODbaseResultSet_BASE2::release(); } diff --git a/connectivity/source/drivers/dbase/DStatement.cxx b/connectivity/source/drivers/dbase/DStatement.cxx index 096878e3e245..0da788f98e54 100644 --- a/connectivity/source/drivers/dbase/DStatement.cxx +++ b/connectivity/source/drivers/dbase/DStatement.cxx @@ -22,10 +22,9 @@ using namespace connectivity::dbase; using namespace connectivity::file; -using namespace com::sun::star::uno; -OResultSet* ODbaseStatement::createResultSet() +rtl::Reference<OResultSet> ODbaseStatement::createResultSet() { return new ODbaseResultSet(this,m_aSQLIterator); } diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx index fece1bf7fb21..98d598d0478f 100644 --- a/connectivity/source/drivers/dbase/DTable.cxx +++ b/connectivity/source/drivers/dbase/DTable.cxx @@ -28,7 +28,7 @@ #include <dbase/DConnection.hxx> #include <dbase/DColumns.hxx> #include <tools/config.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <dbase/DIndex.hxx> #include <dbase/DIndexes.hxx> #include <comphelper/processfactory.hxx> @@ -39,11 +39,12 @@ #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> #include <comphelper/property.hxx> #include <comphelper/servicehelper.hxx> +#include <o3tl/string_view.hxx> #include <comphelper/string.hxx> +#include <comphelper/configuration.hxx> #include <unotools/tempfile.hxx> #include <unotools/ucbhelper.hxx> #include <comphelper/types.hxx> -#include <cppuhelper/typeprovider.hxx> #include <cppuhelper/exc_hlp.hxx> #include <cppuhelper/queryinterface.hxx> #include <connectivity/dbtools.hxx> @@ -54,6 +55,7 @@ #include <rtl/strbuf.hxx> #include <sal/log.hxx> #include <tools/date.hxx> +#include <i18nutil/calendar.hxx> #include <algorithm> #include <cassert> @@ -132,13 +134,13 @@ void lcl_CalcJulDate(sal_Int32& _nJulianDate,sal_Int32& _nJulianTime, const css: if ( aDateTime.Year <= 0 ) { _nJulianDate = static_cast<sal_Int32>((365.25 * iy0) - 0.75) - + static_cast<sal_Int32>(30.6001 * (im0 + 1) ) + + static_cast<sal_Int32>(i18nutil::monthDaysWithoutJanFeb * (im0 + 1) ) + aDateTime.Day + 1720994; } // if ( rDateTime.Year <= 0 ) else { _nJulianDate = static_cast<sal_Int32>(365.25 * iy0) - + static_cast<sal_Int32>(30.6001 * (im0 + 1)) + + static_cast<sal_Int32>(i18nutil::monthDaysWithoutJanFeb * (im0 + 1)) + aDateTime.Day + 1720994; } double JD = _nJulianDate + 0.5; @@ -155,17 +157,17 @@ void lcl_CalDate(sal_Int32 _nJulianDate,sal_Int32 _nJulianTime,css::util::DateTi { if ( _nJulianDate ) { - sal_Int32 ka = _nJulianDate; + sal_Int64 ka = _nJulianDate; if ( _nJulianDate >= 2299161 ) { - sal_Int32 ialp = static_cast<sal_Int32>( (static_cast<double>(_nJulianDate) - 1867216.25 ) / 36524.25 ); - ka = _nJulianDate + 1 + ialp - ( ialp >> 2 ); + sal_Int64 ialp = static_cast<sal_Int64>( (static_cast<double>(_nJulianDate) - 1867216.25 ) / 36524.25 ); + ka = ka + 1 + ialp - ( ialp >> 2 ); } - sal_Int32 kb = ka + 1524; - sal_Int32 kc = static_cast<sal_Int32>( (static_cast<double>(kb) - 122.1 ) / 365.25 ); - sal_Int32 kd = static_cast<sal_Int32>(static_cast<double>(kc) * 365.25); - sal_Int32 ke = static_cast<sal_Int32>(static_cast<double>( kb - kd ) / 30.6001 ); - _rDateTime.Day = static_cast<sal_uInt16>(kb - kd - static_cast<sal_Int32>( static_cast<double>(ke) * 30.6001 )); + sal_Int64 kb = ka + 1524; + sal_Int64 kc = static_cast<sal_Int64>((static_cast<double>(kb) - 122.1) / 365.25); + sal_Int64 kd = static_cast<sal_Int64>(static_cast<double>(kc) * 365.25); + sal_Int64 ke = static_cast<sal_Int64>(static_cast<double>(kb - kd) / i18nutil::monthDaysWithoutJanFeb); + _rDateTime.Day = static_cast<sal_uInt16>(kb - kd - static_cast<sal_Int64>( static_cast<double>(ke) * i18nutil::monthDaysWithoutJanFeb )); if ( ke > 13 ) _rDateTime.Month = static_cast<sal_uInt16>(ke - 13); else @@ -273,7 +275,11 @@ void ODbaseTable::readHeader() void ODbaseTable::fillColumns() { m_pFileStream->Seek(STREAM_SEEK_TO_BEGIN); - m_pFileStream->Seek(32); + if (!checkSeek(*m_pFileStream, 32)) + { + SAL_WARN("connectivity.drivers", "ODbaseTable::fillColumns: bad offset!"); + return; + } if(!m_aColumns.is()) m_aColumns = new OSQLColumns(); @@ -285,8 +291,21 @@ void ODbaseTable::fillColumns() m_aScales.clear(); // Number of fields: - const sal_Int32 nFieldCount = (m_aHeader.headerLength - 1) / 32 - 1; - OSL_ENSURE(nFieldCount,"No columns in table!"); + sal_Int32 nFieldCount = (m_aHeader.headerLength - 1) / 32 - 1; + if (nFieldCount <= 0) + { + SAL_WARN("connectivity.drivers", "No columns in table!"); + return; + } + + auto nRemainingsize = m_pFileStream->remainingSize(); + auto nMaxPossibleRecords = nRemainingsize / 32; + if (o3tl::make_unsigned(nFieldCount) > nMaxPossibleRecords) + { + SAL_WARN("connectivity.drivers", "Parsing error: " << nMaxPossibleRecords << + " max possible entries, but " << nFieldCount << " claimed, truncating"); + nFieldCount = nMaxPossibleRecords; + } m_aColumns->reserve(nFieldCount); m_aTypes.reserve(nFieldCount); @@ -301,17 +320,13 @@ void ODbaseTable::fillColumns() for (; i < nFieldCount; i++) { DBFColumn aDBFColumn; -#if !defined(NDEBUG) - sal_uInt64 const nOldPos(m_pFileStream->Tell()); -#endif m_pFileStream->ReadBytes(aDBFColumn.db_fnm, 11); m_pFileStream->ReadUChar(aDBFColumn.db_typ); m_pFileStream->ReadUInt32(aDBFColumn.db_adr); m_pFileStream->ReadUChar(aDBFColumn.db_flng); m_pFileStream->ReadUChar(aDBFColumn.db_dez); m_pFileStream->ReadBytes(aDBFColumn.db_free2, 14); - assert(m_pFileStream->GetError() || m_pFileStream->Tell() == nOldPos + sizeof(aDBFColumn)); - if (m_pFileStream->GetError()) + if (!m_pFileStream->good()) { SAL_WARN("connectivity.drivers", "ODbaseTable::fillColumns: short read!"); break; @@ -455,7 +470,6 @@ ODbaseTable::ODbaseTable(sdbcx::OCollection* _pTables, ODbaseConnection* _pConne m_eEncoding = getConnection()->getTextEncoding(); } - void ODbaseTable::construct() { // initialize the header @@ -483,19 +497,47 @@ void ODbaseTable::construct() m_pFileStream = createStream_simpleError( sFileName, StreamMode::READ | StreamMode::NOCREATE | StreamMode::SHARE_DENYNONE); } - if(!m_pFileStream) + if (!m_pFileStream) return; readHeader(); + + std::size_t nFileSize = lcl_getFileSize(*m_pFileStream); + + if (m_aHeader.headerLength > nFileSize) + { + SAL_WARN("connectivity.drivers", "Parsing error: " << nFileSize << + " max possible size, but " << m_aHeader.headerLength << " claimed, abandoning"); + return; + } + + if (m_aHeader.recordLength) + { + std::size_t nMaxPossibleRecords = (nFileSize - m_aHeader.headerLength) / m_aHeader.recordLength; + // #i83401# seems to be empty or someone wrote nonsense into the dbase + // file try and recover if m_aHeader.db_slng is sane + if (m_aHeader.nbRecords == 0) + { + SAL_WARN("connectivity.drivers", "Parsing warning: 0 records claimed, recovering"); + m_aHeader.nbRecords = nMaxPossibleRecords; + } + else if (m_aHeader.nbRecords > nMaxPossibleRecords) + { + SAL_WARN("connectivity.drivers", "Parsing error: " << nMaxPossibleRecords << + " max possible records, but " << m_aHeader.nbRecords << " claimed, truncating"); + m_aHeader.nbRecords = std::max(nMaxPossibleRecords, static_cast<size_t>(1)); + } + } + if (HasMemoFields()) { // Create Memo-Filename (.DBT): // nyi: Ugly for Unix and Mac! if ( m_aHeader.type == FoxProMemo || m_aHeader.type == VisualFoxPro || m_aHeader.type == VisualFoxProAuto) // foxpro uses another extension - aURL.SetExtension("fpt"); + aURL.SetExtension(u"fpt"); else - aURL.SetExtension("dbt"); + aURL.SetExtension(u"dbt"); // If the memo file isn't found, the data will be displayed anyhow. // However, updates can't be done @@ -508,18 +550,10 @@ void ODbaseTable::construct() if (m_pMemoStream) ReadMemoHeader(); } - fillColumns(); - std::size_t nFileSize = lcl_getFileSize(*m_pFileStream); + fillColumns(); m_pFileStream->Seek(STREAM_SEEK_TO_BEGIN); - // seems to be empty or someone wrote bullshit into the dbase file - // try and recover if m_aHeader.db_slng is sane - if (m_aHeader.nbRecords == 0 && m_aHeader.recordLength) - { - std::size_t nRecords = (nFileSize-m_aHeader.headerLength)/m_aHeader.recordLength; - if (nRecords > 0) - m_aHeader.nbRecords = nRecords; - } + // Buffersize dependent on the file size m_pFileStream->SetBufferSize(nFileSize > 1000000 ? 32768 : @@ -614,7 +648,7 @@ OUString ODbaseTable::getEntry(file::OConnection const * _pConnection, std::u16s // name and extension have to coincide if ( _pConnection->matchesExtension( sExt ) ) { - sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength() + 1, OUString()); + sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength() + 1, u""); if ( sName == _sName ) { Reference< XContentAccess > xContentAccess( xDir, UNO_QUERY ); @@ -645,7 +679,7 @@ void ODbaseTable::refreshColumns() if(m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = new ODbaseColumns(this,m_aMutex,aVector); + m_xColumns.reset(new ODbaseColumns(this,m_aMutex,aVector)); } void ODbaseTable::refreshIndexes() @@ -656,7 +690,7 @@ void ODbaseTable::refreshIndexes() INetURLObject aURL; aURL.SetURL(getEntry(m_pConnection,m_Name)); - aURL.setExtension("inf"); + aURL.setExtension(u"inf"); Config aInfFile(aURL.getFSysPath(FSysStyle::Detect)); aInfFile.SetGroup(dBASE_III_GROUP); sal_uInt16 nKeyCnt = aInfFile.GetKeyCount(); @@ -688,7 +722,7 @@ void ODbaseTable::refreshIndexes() if(m_xIndexes) m_xIndexes->reFill(aVector); else - m_xIndexes = new ODbaseIndexes(this,m_aMutex,aVector); + m_xIndexes.reset(new ODbaseIndexes(this,m_aMutex,aVector)); } @@ -727,25 +761,9 @@ Any SAL_CALL ODbaseTable::queryInterface( const Type & rType ) return Any(); Any aRet = OTable_TYPEDEF::queryInterface(rType); - return aRet.hasValue() ? aRet : ::cppu::queryInterface(rType,static_cast< css::lang::XUnoTunnel*> (this)); -} - - -Sequence< sal_Int8 > ODbaseTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); + return aRet; } -// css::lang::XUnoTunnel - -sal_Int64 ODbaseTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return (isUnoTunnelId<ODbaseTable>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : ODbaseTable_BASE::getSomething(rId); -} bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData) { @@ -753,7 +771,7 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool return false; // Read the data - bool bIsCurRecordDeleted = static_cast<char>(m_pBuffer[0]) == '*'; + bool bIsCurRecordDeleted = m_pBuffer[0] == '*'; // only read the bookmark @@ -772,10 +790,8 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool for (std::size_t i = 1; aIter != aEnd && nByteOffset <= m_nBufferSize && i < nCount;++aIter, i++) { // Lengths depending on data type: - sal_Int32 nLen = 0; - sal_Int32 nType = 0; - nLen = m_aPrecisions[i-1]; - nType = m_aTypes[i-1]; + sal_Int32 nLen = m_aPrecisions[i-1]; + sal_Int32 nType = m_aTypes[i-1]; switch(nType) { @@ -827,15 +843,20 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool } else { - // Commit the string. Use intern() to ref-count it. - *(*_rRow)[i] = OUString::intern(pData, static_cast<sal_Int32>(nLastPos+1), m_eEncoding); + // Commit the string + *(*_rRow)[i] = OUString(pData, static_cast<sal_Int32>(nLastPos+1), m_eEncoding); } } // if (nType == DataType::CHAR || nType == DataType::VARCHAR) else if ( DataType::TIMESTAMP == nType ) { sal_Int32 nDate = 0,nTime = 0; + if (o3tl::make_unsigned(nLen) < 8) + { + SAL_WARN("connectivity.drivers", "short TIMESTAMP"); + return false; + } memcpy(&nDate, pData, 4); - memcpy(&nTime, pData+ 4, 4); + memcpy(&nTime, pData + 4, 4); if ( !nDate && !nTime ) { (*_rRow)[i]->setNull(); @@ -907,20 +928,20 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool continue; } - OUString aStr = OUString::intern(pData+nPos1, nPos2-nPos1+1, m_eEncoding); + OUString aStr(pData+nPos1, nPos2-nPos1+1, m_eEncoding); switch (nType) { case DataType::DATE: { - if (aStr.getLength() != nLen) + if (nLen < 8 || aStr.getLength() != nLen) { (*_rRow)[i]->setNull(); break; } - const sal_uInt16 nYear = static_cast<sal_uInt16>(aStr.copy( 0, 4 ).toInt32()); - const sal_uInt16 nMonth = static_cast<sal_uInt16>(aStr.copy( 4, 2 ).toInt32()); - const sal_uInt16 nDay = static_cast<sal_uInt16>(aStr.copy( 6, 2 ).toInt32()); + const sal_uInt16 nYear = static_cast<sal_uInt16>(o3tl::toInt32(aStr.subView( 0, 4 ))); + const sal_uInt16 nMonth = static_cast<sal_uInt16>(o3tl::toInt32(aStr.subView( 4, 2 ))); + const sal_uInt16 nDay = static_cast<sal_uInt16>(o3tl::toInt32(aStr.subView( 6, 2 ))); const css::util::Date aDate(nDay,nMonth,nYear); *(*_rRow)[i] = aDate; @@ -971,9 +992,6 @@ bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool void ODbaseTable::FileClose() { ::osl::MutexGuard aGuard(m_aMutex); - // if not everything has been written yet - if (m_pMemoStream && m_pMemoStream->IsWritable()) - m_pMemoStream->Flush(); m_pMemoStream.reset(); @@ -984,7 +1002,7 @@ bool ODbaseTable::CreateImpl() { OSL_ENSURE(!m_pFileStream, "SequenceError"); - if ( m_pConnection->isCheckEnabled() && ::dbtools::convertName2SQLName(m_Name,OUString()) != m_Name ) + if ( m_pConnection->isCheckEnabled() && ::dbtools::convertName2SQLName(m_Name, u"") != m_Name ) { const OUString sError( getConnection()->getResources().getResourceStringWithSubstitution( STR_SQL_NAME_ERROR, @@ -1047,7 +1065,7 @@ bool ODbaseTable::CreateImpl() if (bMemoFile) { OUString aExt = aURL.getExtension(); - aURL.setExtension("dbt"); // extension for memo file + aURL.setExtension(u"dbt"); // extension for memo file bool bMemoAlreadyExists = false; try @@ -1103,7 +1121,7 @@ bool ODbaseTable::CreateImpl() return true; } -void ODbaseTable::throwInvalidColumnType(const char* pErrorId, const OUString& _sColumnName) +void ODbaseTable::throwInvalidColumnType(TranslateId pErrorId, const OUString& _sColumnName) { try { @@ -1363,6 +1381,10 @@ bool ODbaseTable::CreateFile(const INetURLObject& aFile, bool& bCreateMemo) return true; } +bool ODbaseTable::HasMemoFields() const +{ + return m_aHeader.type > dBaseIV && !comphelper::IsFuzzing(); +} // creates in principle dBase III file format bool ODbaseTable::CreateMemoFile(const INetURLObject& aFile) @@ -1378,12 +1400,11 @@ bool ODbaseTable::CreateMemoFile(const INetURLObject& aFile) m_pMemoStream->Seek(0); (*m_pMemoStream).WriteUInt32( 1 ); // pointer to the first free block - m_pMemoStream->Flush(); m_pMemoStream.reset(); return true; } -bool ODbaseTable::Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, OCollection* _pIndexes ) +bool ODbaseTable::Drop_Static(std::u16string_view _sUrl, bool _bHasMemoFields, OCollection* _pIndexes ) { INetURLObject aURL; aURL.SetURL(_sUrl); @@ -1394,7 +1415,7 @@ bool ODbaseTable::Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, OColl { if (_bHasMemoFields) { // delete the memo fields - aURL.setExtension("dbt"); + aURL.setExtension(u"dbt"); bDropped = ::utl::UCBContentHelper::Kill(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE)); } @@ -1414,13 +1435,13 @@ bool ODbaseTable::Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, OColl { } } - aURL.setExtension("inf"); + aURL.setExtension(u"inf"); // as the inf file does not necessarily exist, we aren't allowed to use UCBContentHelper::Kill try { ::ucbhelper::Content aDeleteContent( aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE ), Reference< XCommandEnvironment >(), comphelper::getProcessComponentContext() ); - aDeleteContent.executeCommand( "delete", makeAny( true ) ); + aDeleteContent.executeCommand( "delete", Any( true ) ); } catch(const Exception&) { @@ -1562,10 +1583,8 @@ bool ODbaseTable::DeleteRow(const OSQLColumns& _rCols) { xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)) >>= aColName; - Reference<XUnoTunnel> xTunnel(xIndex,UNO_QUERY); - OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!"); - ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) ); - OSL_ENSURE(pIndex,"ODbaseTable::DeleteRow: No Index returned!"); + ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get()); + assert(pIndex && "ODbaseTable::DeleteRow: No Index returned!"); OSQLColumns::const_iterator aIter = std::find_if(_rCols.begin(), _rCols.end(), [&aCase, &aColName](const OSQLColumns::value_type& rxCol) { @@ -1613,7 +1632,7 @@ Reference<XPropertySet> ODbaseTable::isUniqueByColumnName(sal_Int32 _nColumnPos) return Reference<XPropertySet>(); } -static double toDouble(const OString& rString) +static double toDouble(std::string_view rString) { return ::rtl::math::stringToDouble( rString, '.', ',' ); } @@ -1635,7 +1654,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo ::comphelper::UStringMixEqual aCase(isCaseSensitive()); - Reference<XIndexAccess> xColumns = m_xColumns.get(); + Reference<XIndexAccess> xColumns(m_xColumns.get()); // first search a key that exist already in the table for (sal_Int32 i = 0; i < nColumnCount; ++i) { @@ -1668,10 +1687,8 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo continue; else { - Reference<XUnoTunnel> xTunnel(xIndex,UNO_QUERY); - OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!"); - ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) ); - OSL_ENSURE(pIndex,"ODbaseTable::UpdateBuffer: No Index returned!"); + ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get()); + assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!"); if (pIndex->Find(0,*rRow[nPos])) { @@ -1776,10 +1793,8 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo } if (aIndexedCols[i].is()) { - Reference<XUnoTunnel> xTunnel(aIndexedCols[i],UNO_QUERY); - OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!"); - ODbaseIndex* pIndex = reinterpret_cast< ODbaseIndex* >( xTunnel->getSomething(ODbaseIndex::getUnoTunnelId()) ); - OSL_ENSURE(pIndex,"ODbaseTable::UpdateBuffer: No Index returned!"); + ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(aIndexedCols[i].get()); + assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!"); // Update !! if (pOrgRow.is() && !thisColIsNull) pIndex->Update(m_nFilePos, *(*pOrgRow)[nPos], thisColVal); @@ -1806,7 +1821,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo case DataType::TIMESTAMP: { sal_Int32 nJulianDate = 0, nJulianTime = 0; - lcl_CalcJulDate(nJulianDate,nJulianTime, thisColVal); + lcl_CalcJulDate(nJulianDate,nJulianTime, thisColVal.getDateTime()); // Exactly 8 bytes to copy: memcpy(pData,&nJulianDate,4); memcpy(pData+4,&nJulianTime,4); @@ -1818,7 +1833,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo if(thisColVal.getTypeKind() == DataType::DOUBLE) aDate = ::dbtools::DBTypeConversion::toDate(thisColVal.getDouble()); else - aDate = thisColVal; + aDate = thisColVal.getDate(); char s[sizeof("-327686553565535")]; // reserve enough space for hypothetical max length snprintf(s, @@ -1833,7 +1848,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo } break; case DataType::INTEGER: { - sal_Int32 nValue = thisColVal; + sal_Int32 nValue = thisColVal.getInt32(); if (o3tl::make_unsigned(nLen) > sizeof(nValue)) return false; memcpy(pData,&nValue,nLen); @@ -1841,7 +1856,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo break; case DataType::DOUBLE: { - const double d = thisColVal; + const double d = thisColVal.getDouble(); m_xColumns->getByIndex(i) >>= xCol; if (getBOOL(xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISCURRENCY)))) // Currency is treated separately @@ -1867,7 +1882,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo { memset(pData,' ',nLen); // Clear to NULL - const double n = thisColVal; + const double n = thisColVal.getDouble(); // one, because const_cast GetFormatPrecision on SvNumberFormat is not constant, // even though it really could and should be @@ -1885,11 +1900,13 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo m_xColumns->getByIndex(i) >>= xCol; OSL_ENSURE(xCol.is(),"ODbaseTable::UpdateBuffer column is null!"); xCol->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME)) >>= aColName; - std::vector< std::pair<const char* , OUString > > aStringToSubstitutes; - aStringToSubstitutes.push_back(std::pair<const char* , OUString >("$columnname$", aColName)); - aStringToSubstitutes.push_back(std::pair<const char* , OUString >("$precision$", OUString::number(nLen))); - aStringToSubstitutes.push_back(std::pair<const char* , OUString >("$scale$", OUString::number(nScale))); - aStringToSubstitutes.push_back(std::pair<const char* , OUString >("$value$", OStringToOUString(aDefaultValue,RTL_TEXTENCODING_UTF8))); + std::vector< std::pair<const char* , OUString > > aStringToSubstitutes + { + { "$columnname$", aColName }, + { "$precision$", OUString::number(nLen) }, + { "$scale$", OUString::number(nScale) }, + { "$value$", OStringToOUString(aDefaultValue,RTL_TEXTENCODING_UTF8) } + }; const OUString sError( getConnection()->getResources().getResourceStringWithSubstitution( STR_INVALID_COLUMN_DECIMAL_VALUE @@ -2154,9 +2171,9 @@ void ODbaseTable::alterColumn(sal_Int32 index, OUString sTempName = createTempFile(); - ODbaseTable* pNewTable = new ODbaseTable(m_pTables,static_cast<ODbaseConnection*>(m_pConnection)); + rtl::Reference<ODbaseTable> pNewTable = new ODbaseTable(m_pTables,static_cast<ODbaseConnection*>(m_pConnection)); Reference<XPropertySet> xHoldTable = pNewTable; - pNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(sTempName)); + pNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(sTempName)); Reference<XAppend> xAppend(pNewTable->getColumns(),UNO_QUERY); OSL_ENSURE(xAppend.is(),"ODbaseTable::alterColumn: No XAppend interface!"); @@ -2205,7 +2222,7 @@ void ODbaseTable::alterColumn(sal_Int32 index, pNewTable->construct(); // copy the data - copyData(pNewTable,0); + copyData(pNewTable.get(),0); // now drop the old one if( DropImpl() ) // we don't want to delete the memo columns too @@ -2272,7 +2289,7 @@ void SAL_CALL ODbaseTable::rename( const OUString& newName ) namespace { void renameFile(file::OConnection const * _pConnection,std::u16string_view oldName, - const OUString& newName,const OUString& _sExtension) + const OUString& newName, std::u16string_view _sExtension) { OUString aName = ODbaseTable::getEntry(_pConnection,oldName); if(aName.isEmpty()) @@ -2293,12 +2310,12 @@ namespace { Content aContent(aURL.GetMainURL(INetURLObject::DecodeMechanism::NONE),Reference<XCommandEnvironment>(), comphelper::getProcessComponentContext()); - Sequence< PropertyValue > aProps( 1 ); - aProps[0].Name = "Title"; - aProps[0].Handle = -1; // n/a - aProps[0].Value <<= sNewName; + Sequence< PropertyValue > aProps{ { "Title", + -1, // n/a + Any(sNewName), + css::beans::PropertyState_DIRECT_VALUE } }; Sequence< Any > aValues; - aContent.executeCommand( "setPropertyValues",makeAny(aProps) ) >>= aValues; + aContent.executeCommand( "setPropertyValues",Any(aProps) ) >>= aValues; if(aValues.hasElements() && aValues[0].hasValue()) throw Exception("setPropertyValues returned non-zero", nullptr); } @@ -2319,7 +2336,7 @@ void ODbaseTable::renameImpl( const OUString& newName ) renameFile(m_pConnection,m_Name,newName,m_pConnection->getExtension()); if ( HasMemoFields() ) { // delete the memo fields - renameFile(m_pConnection,m_Name,newName,"dbt"); + renameFile(m_pConnection,m_Name,newName,u"dbt"); } } @@ -2328,7 +2345,7 @@ void ODbaseTable::addColumn(const Reference< XPropertySet >& _xNewColumn) OUString sTempName = createTempFile(); rtl::Reference xNewTable(new ODbaseTable(m_pTables,static_cast<ODbaseConnection*>(m_pConnection))); - xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(sTempName)); + xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(sTempName)); { Reference<XAppend> xAppend(xNewTable->getColumns(),UNO_QUERY); bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(); @@ -2386,7 +2403,7 @@ void ODbaseTable::dropColumn(sal_Int32 _nPos) OUString sTempName = createTempFile(); rtl::Reference xNewTable(new ODbaseTable(m_pTables,static_cast<ODbaseConnection*>(m_pConnection))); - xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(sTempName)); + xNewTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(sTempName)); { Reference<XAppend> xAppend(xNewTable->getColumns(),UNO_QUERY); bool bCase = getConnection()->getMetaData()->supportsMixedCaseQuotedIdentifiers(); @@ -2440,16 +2457,14 @@ OUString ODbaseTable::createTempFile() if ( aIdent.lastIndexOf('/') != (aIdent.getLength()-1) ) aIdent += "/"; - OUString sTempName(aIdent); OUString sExt("." + m_pConnection->getExtension()); - OUString sName(m_Name); - TempFile aTempFile(sName, true, &sExt, &sTempName); - if(!aTempFile.IsValid()) + OUString aTempFileURL = utl::CreateTempURL(m_Name, true, sExt, &aIdent); + if(aTempFileURL.isEmpty()) getConnection()->throwGenericSQLException(STR_COULD_NOT_ALTER_TABLE, *this); INetURLObject aURL; aURL.SetSmartProtocol(INetProtocol::File); - aURL.SetURL(aTempFile.GetURL()); + aURL.SetURL(aTempFileURL); OUString sNewName(aURL.getName().copy(0, aURL.getName().getLength() - sExt.getLength())); @@ -2499,7 +2514,7 @@ void ODbaseTable::copyData(ODbaseTable* _pNewTable,sal_Int32 _nPos) } } } - bOk = _pNewTable->InsertRow(*aInsertRow,_pNewTable->m_xColumns.get()); + bOk = _pNewTable->InsertRow(*aInsertRow, _pNewTable->m_xColumns.get()); SAL_WARN_IF(!bOk, "connectivity.drivers", "Row could not be inserted!"); } else @@ -2646,7 +2661,7 @@ bool ODbaseTable::ReadMemo(std::size_t nBlockNo, ORowSetValue& aVariable) } while (!bReady && !m_pMemoStream->eof()); - aVariable = OStringToOUString(aBStr.makeStringAndClear(), + aVariable = OStringToOUString(aBStr, m_eEncoding); } break; @@ -2680,7 +2695,7 @@ bool ODbaseTable::ReadMemo(std::size_t nBlockNo, ORowSetValue& aVariable) //pad it out with ' ' to expected length on short read sal_Int32 nRequested = sal::static_int_cast<sal_Int32>(nLength); comphelper::string::padToLength(aBuffer, nRequested, ' '); - aVariable = OStringToOUString(aBuffer.makeStringAndClear(), m_eEncoding); + aVariable = OStringToOUString(aBuffer, m_eEncoding); } // if ( bIsText ) else { diff --git a/connectivity/source/drivers/dbase/DTables.cxx b/connectivity/source/drivers/dbase/DTables.cxx index 1d922969493f..3424801e3842 100644 --- a/connectivity/source/drivers/dbase/DTables.cxx +++ b/connectivity/source/drivers/dbase/DTables.cxx @@ -32,7 +32,6 @@ #include <strings.hrc> #include <connectivity/dbexception.hxx> -using namespace ::comphelper; using namespace connectivity; using namespace connectivity::dbase; using namespace connectivity::file; @@ -40,17 +39,15 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; using namespace ::com::sun::star::container; sdbcx::ObjectType ODbaseTables::createObject(const OUString& _rName) { - ODbaseTable* pRet = new ODbaseTable(this, static_cast<ODbaseConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()), + rtl::Reference<ODbaseTable> pRet = new ODbaseTable(this, static_cast<ODbaseConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()), _rName,"TABLE"); - sdbcx::ObjectType xRet = pRet; pRet->construct(); - return xRet; + return pRet; } void ODbaseTables::impl_refresh( ) @@ -66,10 +63,10 @@ Reference< XPropertySet > ODbaseTables::createDescriptor() // XAppend sdbcx::ObjectType ODbaseTables::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - auto pTable = comphelper::getUnoTunnelImplementation<ODbaseTable>(descriptor); + auto pTable = dynamic_cast<ODbaseTable*>(descriptor.get()); if(pTable) { - pTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),makeAny(_rForName)); + pTable->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME),Any(_rForName)); try { if(!pTable->CreateImpl()) @@ -91,7 +88,7 @@ sdbcx::ObjectType ODbaseTables::appendObject( const OUString& _rForName, const R // XDrop void ODbaseTables::dropObject(sal_Int32 _nPos, const OUString& _sElementName) { - Reference< XUnoTunnel> xTunnel; + Reference< XInterface > xTunnel; try { xTunnel.set(getObject(_nPos),UNO_QUERY); @@ -104,7 +101,7 @@ void ODbaseTables::dropObject(sal_Int32 _nPos, const OUString& _sElementName) if ( xTunnel.is() ) { - ODbaseTable* pTable = reinterpret_cast< ODbaseTable* >( xTunnel->getSomething(ODbaseTable::getUnoTunnelId()) ); + ODbaseTable* pTable = dynamic_cast<ODbaseTable*>(xTunnel.get()); if(pTable) pTable->DropImpl(); } diff --git a/connectivity/source/drivers/dbase/dindexnode.cxx b/connectivity/source/drivers/dbase/dindexnode.cxx index 69648c480e79..d091335f5495 100644 --- a/connectivity/source/drivers/dbase/dindexnode.cxx +++ b/connectivity/source/drivers/dbase/dindexnode.cxx @@ -26,6 +26,7 @@ #include <algorithm> #include <memory> +#include <utility> using namespace connectivity; @@ -38,10 +39,10 @@ ONDXKey::ONDXKey() { } -ONDXKey::ONDXKey(const ORowSetValue& rVal, sal_Int32 eType, sal_uInt32 nRec) +ONDXKey::ONDXKey(ORowSetValue aVal, sal_Int32 eType, sal_uInt32 nRec) : ONDXKey_BASE(eType) , nRecord(nRec) - , xValue(rVal) + , xValue(std::move(aVal)) { } @@ -482,7 +483,7 @@ void ONDXPage::Merge(sal_uInt16 nParentNodePos, const ONDXPagePtr& xPage) nMaxNodes_2 = nMaxNodes / 2; // Determine if page is right or left neighbour - bool bRight = ((*xPage)[0].GetKey() > (*this)[0].GetKey()); // sal_True, whenn xPage the right side is + bool bRight = ((*xPage)[0].GetKey() > (*this)[0].GetKey()); // true when xPage is at the right side sal_uInt16 nNewCount = (*xPage).Count() + Count(); if (IsLeaf()) @@ -701,7 +702,7 @@ void ONDXNode::Write(SvStream &rStream, const ONDXPage& rPage) const rStream.WriteBytes(&buf[0], sizeof(double)); } else - rStream.WriteDouble( static_cast<double>(aKey.getValue()) ); + rStream.WriteDouble( aKey.getValue().getDouble() ); } else { @@ -710,7 +711,7 @@ void ONDXNode::Write(SvStream &rStream, const ONDXPage& rPage) const memset(&pBuf[0], 0x20, nLen); if (!aKey.getValue().isNull()) { - OUString sValue = aKey.getValue(); + OUString sValue = aKey.getValue().getString(); OString aText(OUStringToOString(sValue, rIndex.m_pTable->getConnection()->getTextEncoding())); strncpy(reinterpret_cast<char *>(&pBuf[0]), aText.getStr(), std::min<size_t>(nLen, aText.getLength())); @@ -764,8 +765,8 @@ int ONDXKey::Compare(const ONDXKey& rKey) const } else { - double m = getValue(); - double n = rKey.getValue(); + double m = getValue().getDouble(); + double n = rKey.getValue().getDouble(); nRes = (m > n) ? 1 : ( m < n) ? -1 : 0; } diff --git a/connectivity/source/drivers/evoab2/EApi.cxx b/connectivity/source/drivers/evoab2/EApi.cxx index 56a957fabb63..9ec8e0d44e32 100644 --- a/connectivity/source/drivers/evoab2/EApi.cxx +++ b/connectivity/source/drivers/evoab2/EApi.cxx @@ -21,24 +21,14 @@ #define DECLARE_FN_POINTERS 1 #include "EApi.h" static const char *eBookLibNames[] = { + "libebook-1.2.so.21", // evolution-data-server 3.45.2+ "libebook-1.2.so.20", // evolution-data-server 3.33.2+ "libebook-1.2.so.19", // evolution-data-server 3.24+ - "libebook-1.2.so.16", - "libebook-1.2.so.15", - "libebook-1.2.so.14", // bumped again (evolution-3.6) - "libebook-1.2.so.13", // bumped again (evolution-3.4) - "libebook-1.2.so.12", // bumped again - "libebook-1.2.so.10", // bumped again - "libebook-1.2.so.9", // evolution-2.8 - "libebook-1.2.so.5", // evolution-2.4 and 2.6+ - "libebook-1.2.so.3", // evolution-2.2 - "libebook.so.8" // evolution-2.0 + "libebook-1.2.so.16" }; typedef void (*SymbolFunc) (); -#define SYM_MAP(a) { #a, reinterpret_cast<SymbolFunc *>(&a) } - namespace { struct ApiMap @@ -51,70 +41,48 @@ struct ApiMap const ApiMap aCommonApiMap[] = { - SYM_MAP( eds_check_version ), - SYM_MAP( e_contact_field_name ), - SYM_MAP( e_contact_get ), - SYM_MAP( e_contact_get_type ), - SYM_MAP( e_contact_field_id ), - SYM_MAP( e_book_new ), - SYM_MAP( e_book_open ), - SYM_MAP( e_book_get_source ), - SYM_MAP( e_book_get_contacts ), - SYM_MAP( e_book_query_field_test ), - SYM_MAP( e_book_query_and ), - SYM_MAP( e_book_query_or ), - SYM_MAP( e_book_query_not ), - SYM_MAP( e_book_query_ref ), - SYM_MAP( e_book_query_unref ), - SYM_MAP( e_book_query_from_string ), - SYM_MAP( e_book_query_to_string ), - SYM_MAP( e_book_query_field_exists ) -}; - -//< 3.6 api -const ApiMap aOldApiMap[] = -{ - SYM_MAP( e_book_get_addressbooks ), - SYM_MAP( e_book_get_uri ), - SYM_MAP( e_book_authenticate_user ), - SYM_MAP( e_source_group_peek_base_uri), - SYM_MAP( e_source_peek_name ), - SYM_MAP( e_source_get_property ), - SYM_MAP( e_source_list_peek_groups ), - SYM_MAP( e_source_group_peek_sources ) + { "eds_check_version", reinterpret_cast<SymbolFunc *>(&eds_check_version) }, + { "e_contact_field_name", reinterpret_cast<SymbolFunc *>(&e_contact_field_name) }, + { "e_contact_get", reinterpret_cast<SymbolFunc *>(&e_contact_get) }, + { "e_contact_get_type", reinterpret_cast<SymbolFunc *>(&e_contact_get_type) }, + { "e_contact_field_id", reinterpret_cast<SymbolFunc *>(&e_contact_field_id) }, + { "e_book_new", reinterpret_cast<SymbolFunc *>(&e_book_new) }, + { "e_book_open", reinterpret_cast<SymbolFunc *>(&e_book_open) }, + { "e_book_get_source", reinterpret_cast<SymbolFunc *>(&e_book_get_source) }, + { "e_book_get_contacts", reinterpret_cast<SymbolFunc *>(&e_book_get_contacts) }, + { "e_book_query_field_test", reinterpret_cast<SymbolFunc *>(&e_book_query_field_test) }, + { "e_book_query_and", reinterpret_cast<SymbolFunc *>(&e_book_query_and) }, + { "e_book_query_or", reinterpret_cast<SymbolFunc *>(&e_book_query_or) }, + { "e_book_query_not", reinterpret_cast<SymbolFunc *>(&e_book_query_not) }, + { "e_book_query_ref", reinterpret_cast<SymbolFunc *>(&e_book_query_ref) }, + { "e_book_query_unref", reinterpret_cast<SymbolFunc *>(&e_book_query_unref) }, + { "e_book_query_from_string", reinterpret_cast<SymbolFunc *>(&e_book_query_from_string) }, + { "e_book_query_to_string", reinterpret_cast<SymbolFunc *>(&e_book_query_to_string) }, + { "e_book_query_field_exists", reinterpret_cast<SymbolFunc *>(&e_book_query_field_exists) } }; -//>= 3.6 api const ApiMap aNewApiMap[] = { - SYM_MAP( e_source_registry_list_sources ), - SYM_MAP( e_source_registry_new_sync ), - SYM_MAP( e_source_has_extension ), - SYM_MAP( e_source_get_extension ), - SYM_MAP( e_source_backend_get_backend_name ), - SYM_MAP( e_source_get_display_name ), - SYM_MAP( e_source_get_uid ), - SYM_MAP( e_source_registry_ref_source), - SYM_MAP( e_client_open_sync ), - SYM_MAP( e_client_get_source ), - SYM_MAP( e_book_client_get_contacts_sync ), - SYM_MAP( e_client_util_free_object_slist ) -}; - -//== indirect read access (3.6 only) -const ApiMap aClientApiMap36[] = -{ - SYM_MAP( e_book_client_new ) + { "e_source_registry_list_sources", reinterpret_cast<SymbolFunc *>(&e_source_registry_list_sources) }, + { "e_source_registry_new_sync", reinterpret_cast<SymbolFunc *>(&e_source_registry_new_sync) }, + { "e_source_has_extension", reinterpret_cast<SymbolFunc *>(&e_source_has_extension) }, + { "e_source_get_extension", reinterpret_cast<SymbolFunc *>(&e_source_get_extension) }, + { "e_source_backend_get_backend_name", reinterpret_cast<SymbolFunc *>(&e_source_backend_get_backend_name) }, + { "e_source_get_display_name", reinterpret_cast<SymbolFunc *>(&e_source_get_display_name) }, + { "e_source_get_uid", reinterpret_cast<SymbolFunc *>(&e_source_get_uid) }, + { "e_source_registry_ref_source", reinterpret_cast<SymbolFunc *>(&e_source_registry_ref_source) }, + { "e_client_open_sync", reinterpret_cast<SymbolFunc *>(&e_client_open_sync) }, + { "e_client_get_source", reinterpret_cast<SymbolFunc *>(&e_client_get_source) }, + { "e_book_client_get_contacts_sync", reinterpret_cast<SymbolFunc *>(&e_book_client_get_contacts_sync) }, + { "e_client_util_free_object_slist", reinterpret_cast<SymbolFunc *>(&e_client_util_free_object_slist) } }; //>= direct read access API (>= 3.8) const ApiMap aClientApiMap38[] = { - SYM_MAP( e_book_client_connect_direct_sync ) + { "e_book_client_connect_direct_sync", reinterpret_cast<SymbolFunc *>(&e_book_client_connect_direct_sync) } }; -#undef SYM_MAP - template<size_t N> static bool tryLink( osl::Module &rModule, const char *pName, const ApiMap (&pMap)[N]) { @@ -144,33 +112,14 @@ bool EApiInit() if (tryLink( aModule, eBookLibNames[ j ], aCommonApiMap)) { - if (eds_check_version( 3, 6, 0 ) != nullptr) + if (tryLink( aModule, eBookLibNames[ j ], aNewApiMap)) { - if (tryLink( aModule, eBookLibNames[ j ], aOldApiMap)) + if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap38)) { aModule.release(); return true; } } - else if (tryLink( aModule, eBookLibNames[ j ], aNewApiMap)) - { - if (eds_check_version( 3, 7, 6 ) != nullptr) - { - if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap36)) - { - aModule.release(); - return true; - } - } - else - { - if (tryLink( aModule, eBookLibNames[ j ], aClientApiMap38)) - { - aModule.release(); - return true; - } - } - } } } fprintf( stderr, "Can find no compliant libebook client libraries\n" ); diff --git a/connectivity/source/drivers/evoab2/EApi.h b/connectivity/source/drivers/evoab2/EApi.h index 8c05f95fa2ce..a33bf9721de6 100644 --- a/connectivity/source/drivers/evoab2/EApi.h +++ b/connectivity/source/drivers/evoab2/EApi.h @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_EAPI_H -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_EAPI_H +#pragma once #include <glib-object.h> // Initializes the API below, returns false if not available @@ -147,7 +146,7 @@ EAPI_EXTERN const gchar* (*eds_check_version) (guint required_major, guint requi EAPI_EXTERN const gchar* (*e_source_get_uid) (ESource *source); EAPI_EXTERN ESource* (*e_source_registry_ref_source) (ESourceRegistry *registry, const gchar *uid); EAPI_EXTERN EBookClient* (*e_book_client_new) (ESource *source, GError **error); -EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, GCancellable *cancellable, GError **error); +EAPI_EXTERN EBookClient* (*e_book_client_connect_direct_sync) (ESourceRegistry *registry, ESource *source, guint32 wait_for_connected_seconds, GCancellable *cancellable, GError **error); EAPI_EXTERN gboolean (*e_client_open_sync) (EClient *client, gboolean only_if_exists, GCancellable *cancellable, GError **error); EAPI_EXTERN ESource* (*e_client_get_source) (EClient *client); EAPI_EXTERN gboolean (*e_book_client_get_contacts_sync) (EBookClient *client, const gchar *sexp, GSList **contacts, GCancellable *cancellable, GError **error); @@ -157,6 +156,7 @@ ESourceRegistry *get_e_source_registry(); bool isSourceBackend(ESource *pSource, const char *backendname); G_END_DECLS -#endif + +inline void object_unref(gpointer data, gpointer) { g_object_unref(data); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NCatalog.cxx b/connectivity/source/drivers/evoab2/NCatalog.cxx index fb010b8dce5d..d16a6377d1d1 100644 --- a/connectivity/source/drivers/evoab2/NCatalog.cxx +++ b/connectivity/source/drivers/evoab2/NCatalog.cxx @@ -26,11 +26,8 @@ using namespace connectivity::evoab; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OEvoabCatalog::OEvoabCatalog(OEvoabConnection* _pCon) : connectivity::sdbcx::OCatalog(_pCon) @@ -67,9 +64,8 @@ Reference< XNameAccess > SAL_CALL OEvoabCatalog::getTables( ) try { - if (!m_pTables) { - refreshTables(); - } + if (!m_pTables) + refreshTables(); } catch( const RuntimeException& ) { diff --git a/connectivity/source/drivers/evoab2/NCatalog.hxx b/connectivity/source/drivers/evoab2/NCatalog.hxx index d54ad68a2a9a..b2bd8084474c 100644 --- a/connectivity/source/drivers/evoab2/NCatalog.hxx +++ b/connectivity/source/drivers/evoab2/NCatalog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCATALOG_HXX +#pragma once #include <sdbcx/VCatalog.hxx> @@ -41,6 +40,4 @@ namespace connectivity::evoab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCATALOG_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NColumns.cxx b/connectivity/source/drivers/evoab2/NColumns.cxx index 378e2af77634..99fce8f3bf46 100644 --- a/connectivity/source/drivers/evoab2/NColumns.cxx +++ b/connectivity/source/drivers/evoab2/NColumns.cxx @@ -25,12 +25,8 @@ using namespace connectivity::sdbcx; using namespace connectivity; -using namespace ::comphelper; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace connectivity::evoab; @@ -55,7 +51,7 @@ sdbcx::ObjectType OEvoabColumns::createObject(const OUString& _rName) { if (xRow->getString(4) == _rName) { - OColumn* pRet = new OColumn( + xRet = new OColumn( _rName, xRow->getString(6), xRow->getString(13), @@ -71,7 +67,6 @@ sdbcx::ObjectType OEvoabColumns::createObject(const OUString& _rName) sCatalogName, sSchemaName, sTableName); - xRet = pRet; break; } } diff --git a/connectivity/source/drivers/evoab2/NColumns.hxx b/connectivity/source/drivers/evoab2/NColumns.hxx index be5996c6ebec..f768c51bb046 100644 --- a/connectivity/source/drivers/evoab2/NColumns.hxx +++ b/connectivity/source/drivers/evoab2/NColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCOLUMNS_HXX +#pragma once #include "NTable.hxx" #include <connectivity/sdbcx/VCollection.hxx> @@ -42,6 +41,4 @@ namespace connectivity::evoab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCOLUMNS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NConnection.cxx b/connectivity/source/drivers/evoab2/NConnection.cxx index d586d6ba2df1..66fc7ecb6511 100644 --- a/connectivity/source/drivers/evoab2/NConnection.cxx +++ b/connectivity/source/drivers/evoab2/NConnection.cxx @@ -24,6 +24,7 @@ #include "NPreparedStatement.hxx" #include "NStatement.hxx" #include <connectivity/dbexception.hxx> +#include <rtl/ref.hxx> #include <rtl/ustring.hxx> #include <sal/log.hxx> @@ -35,7 +36,6 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; OEvoabConnection::OEvoabConnection(OEvoabDriver const & _rDriver) : m_rDriver(_rDriver) @@ -117,8 +117,7 @@ css::uno::Reference< XTablesSupplier > OEvoabConnection::createCatalog() Reference< XTablesSupplier > xTab = m_xCatalog; if(!xTab.is()) { - OEvoabCatalog *pCat = new OEvoabCatalog(this); - xTab = pCat; + xTab = new OEvoabCatalog(this); m_xCatalog = xTab; } return xTab; @@ -129,10 +128,8 @@ Reference< XStatement > SAL_CALL OEvoabConnection::createStatement( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - OStatement* pStmt = new OStatement(this); - - Reference< XStatement > xStmt = pStmt; - m_aStatements.push_back(WeakReferenceHelper(*pStmt)); + Reference< XStatement > xStmt = new OStatement(this); + m_aStatements.push_back(WeakReferenceHelper(xStmt)); return xStmt; } @@ -141,12 +138,11 @@ Reference< XPreparedStatement > SAL_CALL OEvoabConnection::prepareStatement( con ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - OEvoabPreparedStatement* pStmt = new OEvoabPreparedStatement( this ); - Reference< XPreparedStatement > xStmt = pStmt; + rtl::Reference<OEvoabPreparedStatement> pStmt = new OEvoabPreparedStatement( this ); pStmt->construct( sql ); m_aStatements.push_back(WeakReferenceHelper(*pStmt)); - return xStmt; + return pStmt; } Reference< XPreparedStatement > SAL_CALL OEvoabConnection::prepareCall( const OUString& /*sql*/ ) diff --git a/connectivity/source/drivers/evoab2/NConnection.hxx b/connectivity/source/drivers/evoab2/NConnection.hxx index ccd9fa7bc04c..8dd8714bc2fe 100644 --- a/connectivity/source/drivers/evoab2/NConnection.hxx +++ b/connectivity/source/drivers/evoab2/NConnection.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCONNECTION_HXX +#pragma once #include "NDriver.hxx" #include <com/sun/star/sdbc/SQLWarning.hpp> @@ -61,7 +60,6 @@ namespace connectivity::evoab { /// @throws css::sdbc::SQLException void construct(const OUString& _rUrl,const css::uno::Sequence< css::beans::PropertyValue >& _rInfo ); - OString const & getPassword() const { return m_aPassword; } void setPassword( OString const & aStr ) { m_aPassword = aStr; } // own methods const OEvoabDriver& getDriver() const { return m_rDriver; } @@ -104,6 +102,4 @@ namespace connectivity::evoab { }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NCONNECTION_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx index 5e84a27e13fb..110d01feb213 100644 --- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx +++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx @@ -23,6 +23,7 @@ #include <connectivity/dbexception.hxx> #include <connectivity/FValue.hxx> #include <com/sun/star/sdbc/ColumnSearch.hpp> +#include <rtl/ref.hxx> #include <cstddef> #include <string.h> @@ -33,10 +34,7 @@ using namespace connectivity::evoab; using namespace connectivity; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; namespace { @@ -252,8 +250,14 @@ OEvoabDatabaseMetaData::~OEvoabDatabaseMetaData() } -ODatabaseMetaDataResultSet::ORows OEvoabDatabaseMetaData::getColumnRows( const OUString& columnNamePattern ) +Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getColumns( + const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/, + const OUString& columnNamePattern ) { + // this returns an empty resultset where the column-names are already set + // in special the metadata of the resultset already returns the right columns + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumns ); + ODatabaseMetaDataResultSet::ORows aRows; ODatabaseMetaDataResultSet::ORow aRow(19); @@ -293,7 +297,7 @@ ODatabaseMetaDataResultSet::ORows OEvoabDatabaseMetaData::getColumnRows( const O ::osl::MutexGuard aGuard( m_aMutex ); initFields(); - for (sal_Int32 i = 0; i < static_cast<sal_Int32>(nFields); i++) + for (guint i = 0; i < nFields; i++) { if( match( columnNamePattern, getFieldName( i ), '\0' ) ) { @@ -303,12 +307,14 @@ ODatabaseMetaDataResultSet::ORows OEvoabDatabaseMetaData::getColumnRows( const O // COLUMN_NAME aRow[4] = new ORowSetValueDecorator( getFieldName( i ) ); // ORDINAL_POSITION - aRow[17] = new ORowSetValueDecorator( i ); + aRow[17] = new ORowSetValueDecorator( sal_Int32(i) ); aRows.push_back( aRow ); } } - return aRows ; + pResultSet->setRows(std::move(aRows)); + + return pResultSet; } OUString OEvoabDatabaseMetaData::impl_getCatalogSeparator_throw( ) @@ -984,23 +990,19 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTableTypes( ) { u"TABLE" // Currently we only support a 'TABLE' nothing more complex }; - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes); - Reference< XResultSet > xRef = pResult; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTableTypes); // here we fill the rows which should be visible when ask for data from the resultset returned here + auto nNbTypes = std::size(sTableTypes); ODatabaseMetaDataResultSet::ORows aRows; - for(std::size_t i=0;i < SAL_N_ELEMENTS(sTableTypes);++i) + for(std::size_t i=0;i < nNbTypes;++i) { - ODatabaseMetaDataResultSet::ORow aRow; - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(OUString(sTableTypes[i]))); - // bound row - aRows.push_back(aRow); + aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString(sTableTypes[i])) }); } // here we set the rows at the resultset - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::move(aRows)); + return pResult; } Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( ) @@ -1009,34 +1011,33 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( ) * Return the proper type information required by evo driver */ - ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo); + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo); - Reference< XResultSet > xResultSet = pResultSet; static ODatabaseMetaDataResultSet::ORows aRows = []() { ODatabaseMetaDataResultSet::ORows tmp; - ODatabaseMetaDataResultSet::ORow aRow; - aRow.reserve(19); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(OUString("VARCHAR"))); - aRow.push_back(new ORowSetValueDecorator(DataType::VARCHAR)); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(s_nCHAR_OCTET_LENGTH))); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - // aRow.push_back(new ORowSetValueDecorator((sal_Int32)ColumnValue::NULLABLE)); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(ColumnSearch::FULL))); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(10))); + ODatabaseMetaDataResultSet::ORow aRow + { + ODatabaseMetaDataResultSet::getEmptyValue() , + new ORowSetValueDecorator(OUString("VARCHAR")) , + new ORowSetValueDecorator(DataType::VARCHAR) , + new ORowSetValueDecorator(sal_Int32(s_nCHAR_OCTET_LENGTH)) , + ODatabaseMetaDataResultSet::getQuoteValue() , + ODatabaseMetaDataResultSet::getQuoteValue() , + ODatabaseMetaDataResultSet::getEmptyValue() , + ODatabaseMetaDataResultSet::get1Value() , + ODatabaseMetaDataResultSet::get1Value() , + new ORowSetValueDecorator(sal_Int32(ColumnSearch::FULL)) , + ODatabaseMetaDataResultSet::get1Value() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::getEmptyValue() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::getEmptyValue() , + ODatabaseMetaDataResultSet::getEmptyValue() , + new ORowSetValueDecorator(sal_Int32(10)) + }; tmp.push_back(aRow); @@ -1046,23 +1047,10 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( ) tmp.push_back(aRow); return tmp; }(); - pResultSet->setRows(aRows); - return xResultSet; -} - -Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getColumns( - const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/, - const OUString& columnNamePattern ) -{ - // this returns an empty resultset where the column-names are already set - // in special the metadata of the resultset already returns the right columns - ODatabaseMetaDataResultSet* pResultSet = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eColumns ); - Reference< XResultSet > xResultSet = pResultSet; - pResultSet->setRows( getColumnRows( columnNamePattern ) ); - return xResultSet; + pResultSet->setRows(std::move(aRows)); + return pResultSet; } - bool isSourceBackend(ESource *pSource, const char *backendname) { if (!pSource || !e_source_has_extension (pSource, E_SOURCE_EXTENSION_ADDRESS_BOOK)) @@ -1078,136 +1066,82 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables( { ::osl::MutexGuard aGuard( m_aMutex ); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); // check if any type is given // when no types are given then we have to return all tables e.g. TABLE - const OUString aTable("TABLE"); + static constexpr OUString aTable(u"TABLE"_ustr); bool bTableFound = true; sal_Int32 nLength = types.getLength(); if(nLength) - { - bTableFound = false; - - const OUString* pBegin = types.getConstArray(); - const OUString* pEnd = pBegin + nLength; - for(;pBegin != pEnd;++pBegin) - { - if(*pBegin == aTable) - { - bTableFound = true; - break; - } - } - } - if(!bTableFound) - return xRef; - - ODatabaseMetaDataResultSet::ORows aRows; - - if (eds_check_version(3, 6, 0) == nullptr) { - GList *pSources = e_source_registry_list_sources(get_e_source_registry(), E_SOURCE_EXTENSION_ADDRESS_BOOK); + bTableFound = false; - for (GList* liter = pSources; liter; liter = liter->next) + const OUString* pBegin = types.getConstArray(); + const OUString* pEnd = pBegin + nLength; + for(;pBegin != pEnd;++pBegin) { - ESource *pSource = E_SOURCE (liter->data); - bool can = false; - switch (m_pConnection->getSDBCAddressType()) + if(*pBegin == aTable) { - case SDBCAddress::EVO_GWISE: - can = isSourceBackend( pSource, "groupwise"); // not supported in evo/eds 3.6.x+, somehow - break; - case SDBCAddress::EVO_LOCAL: - can = isSourceBackend( pSource, "local"); - break; - case SDBCAddress::EVO_LDAP: - can = isSourceBackend( pSource, "ldap"); - break; - case SDBCAddress::Unknown: - can = true; - break; + bTableFound = true; + break; } - if (!can) - continue; - - OUString aHumanName = OStringToOUString( e_source_get_display_name( pSource ), - RTL_TEXTENCODING_UTF8 ); - OUString aUID = OStringToOUString( e_source_get_uid( pSource ), - RTL_TEXTENCODING_UTF8 ); - ODatabaseMetaDataResultSet::ORow aRow{ - ORowSetValueDecoratorRef(), - ORowSetValueDecoratorRef(), - ORowSetValueDecoratorRef(), - new ORowSetValueDecorator(aHumanName), //tablename - new ORowSetValueDecorator(aTable), - new ORowSetValueDecorator(aUID)}; //comment - //I'd prefer to swap the comment and the human name and - //just use e_source_registry_ref_source(get_e_source_registry(), aUID); - //in open book rather than search for the name again - aRows.push_back(aRow); } - - g_list_foreach (pSources, reinterpret_cast<GFunc>(g_object_unref), nullptr); - g_list_free (pSources); } - else - { - ESourceList *pSourceList; - if( !e_book_get_addressbooks (&pSourceList, nullptr) ) - pSourceList = nullptr; + if(!bTableFound) + return pResult; - GSList *g; - for( g = e_source_list_peek_groups( pSourceList ); g; g = g->next) - { - GSList *s; - const char *p = e_source_group_peek_base_uri(E_SOURCE_GROUP(g->data)); + ODatabaseMetaDataResultSet::ORows aRows; - switch (m_pConnection->getSDBCAddressType()) { + GList *pSources = e_source_registry_list_sources(get_e_source_registry(), E_SOURCE_EXTENSION_ADDRESS_BOOK); + + for (GList* liter = pSources; liter; liter = liter->next) + { + ESource *pSource = E_SOURCE (liter->data); + bool can = false; + switch (m_pConnection->getSDBCAddressType()) + { case SDBCAddress::EVO_GWISE: - if ( !strncmp( "groupwise://", p, 11 )) - break; - else - continue; + can = isSourceBackend( pSource, "groupwise"); // not supported in evo/eds 3.6.x+, somehow + break; case SDBCAddress::EVO_LOCAL: - if ( !strncmp( "file://", p, 6 ) || - !strncmp( "local://", p, 6 ) ) - break; - else - continue; + can = isSourceBackend( pSource, "local"); + break; case SDBCAddress::EVO_LDAP: - if ( !strncmp( "ldap://", p, 6 )) - break; - else - continue; + can = isSourceBackend( pSource, "ldap"); + break; case SDBCAddress::Unknown: + can = true; break; - } - for (s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data)); s; s = s->next) - { - ESource *pSource = E_SOURCE (s->data); - - OUString aName = OStringToOUString( e_source_peek_name( pSource ), - RTL_TEXTENCODING_UTF8 ); - - ODatabaseMetaDataResultSet::ORow aRow{ - ORowSetValueDecoratorRef(), - ORowSetValueDecoratorRef(), - ORowSetValueDecoratorRef(), - new ORowSetValueDecorator(aName), - new ORowSetValueDecorator(aTable), - ODatabaseMetaDataResultSet::getEmptyValue()}; - aRows.push_back(aRow); - } } + if (!can) + continue; + + OUString aHumanName = OStringToOUString( e_source_get_display_name( pSource ), + RTL_TEXTENCODING_UTF8 ); + OUString aUID = OStringToOUString( e_source_get_uid( pSource ), + RTL_TEXTENCODING_UTF8 ); + ODatabaseMetaDataResultSet::ORow aRow{ + ORowSetValueDecoratorRef(), + ORowSetValueDecoratorRef(), + ORowSetValueDecoratorRef(), + new ORowSetValueDecorator(aHumanName), //tablename + new ORowSetValueDecorator(ORowSetValue(aTable)), + new ORowSetValueDecorator(aUID)}; //comment + //I'd prefer to swap the comment and the human name and + //just use e_source_registry_ref_source(get_e_source_registry(), aUID); + //in open book rather than search for the name again + aRows.push_back(aRow); } - pResult->setRows(aRows); + g_list_foreach (pSources, object_unref, nullptr); + g_list_free (pSources); + + pResult->setRows(std::move(aRows)); - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getUDTs( const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*typeNamePattern*/, const Sequence< sal_Int32 >& /*types*/ ) diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx index cbfed176fabc..a64c234e6a52 100644 --- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx +++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NDATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NDATABASEMETADATA_HXX +#pragma once #include <sal/config.h> @@ -66,8 +65,6 @@ namespace connectivity::evoab { OEvoabConnection* m_pConnection; - ODatabaseMetaDataResultSet::ORows getColumnRows( const OUString& columnNamePattern ); - protected: virtual css::uno::Reference< css::sdbc::XResultSet > impl_getTypeInfo_throw() override; // cached database information @@ -218,6 +215,4 @@ namespace connectivity::evoab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NDATABASEMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NDriver.cxx b/connectivity/source/drivers/evoab2/NDriver.cxx index b8e3c4d4ff88..c72d9b1a189f 100644 --- a/connectivity/source/drivers/evoab2/NDriver.cxx +++ b/connectivity/source/drivers/evoab2/NDriver.cxx @@ -23,6 +23,7 @@ #include <connectivity/dbexception.hxx> #include <cppuhelper/supportsservice.hxx> #include <com/sun/star/ucb/XContentAccess.hpp> +#include <rtl/ref.hxx> #include <strings.hrc> #include <resource/sharedresources.hxx> @@ -30,10 +31,8 @@ using namespace osl; using namespace connectivity::evoab; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::ucb; OEvoabDriver::OEvoabDriver(const Reference< XComponentContext >& _rxContext) : @@ -103,12 +102,11 @@ Reference< XConnection > SAL_CALL OEvoabDriver::connect( const OUString& url, co if ( ! acceptsURL(url) ) return nullptr; - OEvoabConnection* pCon = new OEvoabConnection( *this ); + rtl::Reference<OEvoabConnection> pCon = new OEvoabConnection( *this ); pCon->construct(url,info); - Reference< XConnection > xCon = pCon; m_xConnections.push_back(WeakReferenceHelper(*pCon)); - return xCon; + return pCon; } sal_Bool SAL_CALL OEvoabDriver::acceptsURL( const OUString& url ) diff --git a/connectivity/source/drivers/evoab2/NDriver.hxx b/connectivity/source/drivers/evoab2/NDriver.hxx index 2780a05ec34d..b505bb9db5fd 100644 --- a/connectivity/source/drivers/evoab2/NDriver.hxx +++ b/connectivity/source/drivers/evoab2/NDriver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NDRIVER_HXX +#pragma once #include <sal/config.h> @@ -29,7 +28,7 @@ #include <cppuhelper/compbase.hxx> #include <connectivity/CommonTools.hxx> -#define EVOAB_DRIVER_IMPL_NAME "com.sun.star.comp.sdbc.evoab.OEvoabDriver" +inline constexpr OUString EVOAB_DRIVER_IMPL_NAME = u"com.sun.star.comp.sdbc.evoab.OEvoabDriver"_ustr; namespace connectivity::evoab { @@ -64,7 +63,7 @@ namespace connectivity::evoab virtual sal_Int32 SAL_CALL getMinorVersion( ) override; public: - css::uno::Reference< css::uno::XComponentContext > getComponentContext( ) const { return m_xContext; } + const css::uno::Reference< css::uno::XComponentContext >& getComponentContext( ) const { return m_xContext; } // static methods static bool acceptsURL_Stat( std::u16string_view url ); @@ -72,6 +71,4 @@ namespace connectivity::evoab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NDRIVER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NPreparedStatement.cxx b/connectivity/source/drivers/evoab2/NPreparedStatement.cxx index 57981e95e82d..2ed8b0f166b9 100644 --- a/connectivity/source/drivers/evoab2/NPreparedStatement.cxx +++ b/connectivity/source/drivers/evoab2/NPreparedStatement.cxx @@ -21,14 +21,14 @@ #include "NPreparedStatement.hxx" #include <connectivity/dbexception.hxx> #include <connectivity/dbtools.hxx> -#include <tools/diagnose_ex.h> +#include <rtl/ref.hxx> +#include <comphelper/diagnose_ex.hxx> #include <strings.hrc> using namespace connectivity::evoab; using namespace com::sun::star::uno; using namespace com::sun::star::lang; -using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; using namespace com::sun::star::container; using namespace com::sun::star::io; @@ -39,8 +39,6 @@ IMPLEMENT_SERVICE_INFO(OEvoabPreparedStatement,"com.sun.star.sdbcx.evoab.Prepare OEvoabPreparedStatement::OEvoabPreparedStatement( OEvoabConnection* _pConnection ) :OCommonStatement(_pConnection) - ,m_sSqlStatement() - ,m_xMetaData() { } @@ -54,7 +52,8 @@ void OEvoabPreparedStatement::construct( const OUString& _sql ) ENSURE_OR_THROW( m_aQueryData.xSelectColumns.is(), "no SelectColumn" ); // create our meta data - OEvoabResultSetMetaData* pMeta = new OEvoabResultSetMetaData( m_aQueryData.sTable ); + rtl::Reference<OEvoabResultSetMetaData> pMeta + = new OEvoabResultSetMetaData( m_aQueryData.sTable ); m_xMetaData = pMeta; pMeta->setEvoabFields( m_aQueryData.xSelectColumns ); } @@ -65,13 +64,13 @@ OEvoabPreparedStatement::~OEvoabPreparedStatement() } -void SAL_CALL OEvoabPreparedStatement::acquire() throw() +void SAL_CALL OEvoabPreparedStatement::acquire() noexcept { OCommonStatement::acquire(); } -void SAL_CALL OEvoabPreparedStatement::release() throw() +void SAL_CALL OEvoabPreparedStatement::release() noexcept { OCommonStatement::release(); } diff --git a/connectivity/source/drivers/evoab2/NPreparedStatement.hxx b/connectivity/source/drivers/evoab2/NPreparedStatement.hxx index 62e79cb335f4..cd42d42d505b 100644 --- a/connectivity/source/drivers/evoab2/NPreparedStatement.hxx +++ b/connectivity/source/drivers/evoab2/NPreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NPREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NPREPAREDSTATEMENT_HXX +#pragma once #include "NStatement.hxx" #include "NConnection.hxx" @@ -57,12 +56,11 @@ namespace connectivity::evoab void construct( const OUString& _sql ); - private: DECLARE_SERVICE_INFO(); //XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; @@ -107,6 +105,4 @@ namespace connectivity::evoab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NPREPAREDSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NResultSet.cxx b/connectivity/source/drivers/evoab2/NResultSet.cxx index a9c73a65b740..bc9656337097 100644 --- a/connectivity/source/drivers/evoab2/NResultSet.cxx +++ b/connectivity/source/drivers/evoab2/NResultSet.cxx @@ -36,7 +36,7 @@ #include <connectivity/sqlerror.hxx> #include <rtl/string.hxx> #include <sal/log.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <unotools/syslocale.hxx> #include <unotools/intlwrapper.hxx> #include <unotools/collatorwrapper.hxx> @@ -51,7 +51,6 @@ using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; using namespace com::sun::star::container; using namespace com::sun::star::io; namespace ErrorCondition = ::com::sun::star::sdb::ErrorCondition; @@ -88,7 +87,7 @@ static OUString valueToOUString( GValue& _rValue ) { const char *pStr = g_value_get_string( &_rValue ); - OString aStr( pStr ? pStr : "" ); + std::string_view aStr( pStr ? pStr : "" ); OUString sResult( OStringToOUString( aStr, RTL_TEXTENCODING_UTF8 ) ); g_value_unset( &_rValue ); return sResult; @@ -308,6 +307,10 @@ static int CompareContacts( gconstpointer _lhs, gconstpointer _rhs, gpointer _us for ( const auto& sortCol : rCompData.rSortOrder ) { sal_Int32 nField = sortCol.nField; + int nOrder = 1; + // if descending sort, reverse order + if (!sortCol.bAscending) + nOrder = -1; GType eFieldType = evoab::getGFieldType( nField ); bool success = getValue( lhs, nField, eFieldType, &aLhsValue, bLhsNull ) @@ -317,9 +320,9 @@ static int CompareContacts( gconstpointer _lhs, gconstpointer _rhs, gpointer _us return 0; if ( bLhsNull && !bRhsNull ) - return -1; + return -1 * nOrder; if ( !bLhsNull && bRhsNull ) - return 1; + return 1 * nOrder; if ( bLhsNull && bRhsNull ) continue; @@ -329,16 +332,16 @@ static int CompareContacts( gconstpointer _lhs, gconstpointer _rhs, gpointer _us sRhs = valueToOUString( aRhsValue ); sal_Int32 nCompResult = rCompData.aIntlWrapper.getCaseCollator()->compareString( sLhs, sRhs ); if ( nCompResult != 0 ) - return nCompResult; + return nCompResult * nOrder; continue; } bLhs = valueToBool( aLhsValue ); bRhs = valueToBool( aRhsValue ); if ( bLhs && !bRhs ) - return -1; + return -1 * nOrder; if ( !bLhs && bRhs ) - return 1; + return 1 * nOrder; continue; } @@ -398,7 +401,7 @@ public: break; } } - g_list_foreach (pSources, reinterpret_cast<GFunc>(g_object_unref), nullptr); + g_list_foreach (pSources, object_unref, nullptr); g_list_free (pSources); if (!id) return nullptr; @@ -431,7 +434,7 @@ public: m_pContacts = nullptr; } - virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &/*rPassword*/) override + virtual void executeQuery (EBook* pBook, EBookQuery* pQuery) override { freeContacts(); char *sexp = e_book_query_to_string( pQuery ); @@ -476,123 +479,7 @@ class OEvoabVersion38Helper : public OEvoabVersion36Helper protected: virtual EBookClient * createClient( ESource *pSource ) override { - return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, nullptr, nullptr); - } -}; - -ESource * findSource( const char *id ) -{ - ESourceList *pSourceList = nullptr; - - g_return_val_if_fail (id != nullptr, nullptr); - - if (!e_book_get_addressbooks (&pSourceList, nullptr)) - pSourceList = nullptr; - - for ( GSList *g = e_source_list_peek_groups (pSourceList); g; g = g->next) - { - for (GSList *s = e_source_group_peek_sources (E_SOURCE_GROUP (g->data)); s; s = s->next) - { - ESource *pSource = E_SOURCE (s->data); - if (!strcmp (e_source_peek_name (pSource), id)) - return pSource; - } - } - return nullptr; -} - -bool isAuthRequired( EBook *pBook ) -{ - return e_source_get_property( e_book_get_source( pBook ), - "auth" ) != nullptr; -} - -class OEvoabVersion35Helper : public OEvoabVersionHelper -{ -private: - GList *m_pContacts; - -public: - OEvoabVersion35Helper() - : m_pContacts(nullptr) - { - } - - virtual ~OEvoabVersion35Helper() override - { - freeContacts(); - } - - virtual EBook* openBook(const char *abname) override - { - ESource *pSource = findSource (abname); - EBook *pBook = pSource ? e_book_new (pSource, nullptr) : nullptr; - if (pBook && !e_book_open (pBook, true, nullptr)) - { - g_object_unref (G_OBJECT (pBook)); - pBook = nullptr; - } - return pBook; - } - - virtual bool isLDAP( EBook *pBook ) override - { - return pBook && !strncmp( "ldap://", e_book_get_uri( pBook ), 6 ); - } - - virtual bool isLocal( EBook *pBook ) override - { - return pBook && ( !strncmp( "file://", e_book_get_uri( pBook ), 6 ) || - !strncmp( "local:", e_book_get_uri( pBook ), 6 ) ); - } - - virtual void freeContacts() override final - { - g_list_free(m_pContacts); - m_pContacts = nullptr; - } - - virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &rPassword) override - { - freeContacts(); - - ESource *pSource = e_book_get_source( pBook ); - bool bAuthSuccess = true; - - if( isAuthRequired( pBook ) ) - { - OString aUser( getUserName( pBook ) ); - const char *pAuth = e_source_get_property( pSource, "auth" ); - bAuthSuccess = e_book_authenticate_user( pBook, aUser.getStr(), rPassword.getStr(), pAuth, nullptr ); - } - - if (bAuthSuccess) - e_book_get_contacts( pBook, pQuery, &m_pContacts, nullptr ); - } - - virtual EContact *getContact(sal_Int32 nIndex) override - { - gpointer pData = g_list_nth_data (m_pContacts, nIndex); - return pData ? E_CONTACT (pData) : nullptr; - } - - virtual sal_Int32 getNumContacts() override - { - return g_list_length( m_pContacts ); - } - - virtual bool hasContacts() override - { - return m_pContacts != nullptr; - } - - virtual void sortContacts( const ComparisonData& _rCompData ) override - { - OSL_ENSURE( !_rCompData.rSortOrder.empty(), "sortContacts: no need to call this without any sort order!" ); - ENSURE_OR_THROW( _rCompData.aIntlWrapper.getCaseCollator(), "no collator for comparing strings" ); - - m_pContacts = g_list_sort_with_data( m_pContacts, &CompareContacts, - const_cast< gpointer >( static_cast< gconstpointer >( &_rCompData ) ) ); + return e_book_client_connect_direct_sync (get_e_source_registry (), pSource, 10, nullptr, nullptr); } }; @@ -611,26 +498,36 @@ OEvoabResultSet::OEvoabResultSet( OCommonStatement* pStmt, OEvoabConnection *pCo ,m_nIndex(-1) ,m_nLength(0) { - if (eds_check_version( 3, 7, 6 ) == nullptr) - m_pVersionHelper = std::make_unique<OEvoabVersion38Helper>(); - else if (eds_check_version( 3, 6, 0 ) == nullptr) - m_pVersionHelper = std::make_unique<OEvoabVersion36Helper>(); - else - m_pVersionHelper = std::make_unique<OEvoabVersion35Helper>(); + m_pVersionHelper = std::make_unique<OEvoabVersion38Helper>(); - #define REGISTER_PROP( id, member ) \ - registerProperty( \ - OMetaConnection::getPropMap().getNameByIndex( id ), \ - id, \ - PropertyAttribute::READONLY, \ - &member, \ - cppu::UnoType<decltype(member)>::get() \ - ); - - REGISTER_PROP( PROPERTY_ID_FETCHSIZE, m_nFetchSize ); - REGISTER_PROP( PROPERTY_ID_RESULTSETTYPE, m_nResultSetType ); - REGISTER_PROP( PROPERTY_ID_FETCHDIRECTION, m_nFetchDirection ); - REGISTER_PROP( PROPERTY_ID_RESULTSETCONCURRENCY, m_nResultSetConcurrency ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + PropertyAttribute::READONLY, + &m_nFetchSize, + cppu::UnoType<decltype(m_nFetchSize)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + PropertyAttribute::READONLY, + &m_nResultSetType, + cppu::UnoType<decltype(m_nResultSetType)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + PropertyAttribute::READONLY, + &m_nFetchDirection, + cppu::UnoType<decltype(m_nFetchDirection)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + PropertyAttribute::READONLY, + &m_nResultSetConcurrency, + cppu::UnoType<decltype(m_nResultSetConcurrency)>::get() + ); } OEvoabResultSet::~OEvoabResultSet() @@ -672,9 +569,7 @@ void OEvoabResultSet::construct( const QueryData& _rData ) } if ( bExecuteQuery ) { - OString aPassword = m_pConnection->getPassword(); - m_pVersionHelper->executeQuery(pBook, _rData.getQuery(), aPassword); - m_pConnection->setPassword( aPassword ); + m_pVersionHelper->executeQuery(pBook, _rData.getQuery()); if ( m_pVersionHelper->hasContacts() && !_rData.aSortOrder.empty() ) { @@ -872,7 +767,7 @@ Reference< XResultSetMetaData > SAL_CALL OEvoabResultSet::getMetaData( ) // the meta data should have been created at construction time ENSURE_OR_THROW( m_xMetaData.is(), "internal error: no meta data" ); - return m_xMetaData.get(); + return m_xMetaData; } // XResultSetMetaDataSupplier Interface Ends @@ -1016,8 +911,7 @@ Reference< XInterface > SAL_CALL OEvoabResultSet::getStatement( ) { ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - css::uno::WeakReferenceHelper aStatement(static_cast<OWeakObject*>(m_pStatement)); - return aStatement.get(); + return cppu::getXWeak(m_pStatement); } @@ -1119,12 +1013,12 @@ sal_Int32 SAL_CALL OEvoabResultSet::findColumn( const OUString& columnName ) return *getArrayHelper(); } -void SAL_CALL OEvoabResultSet::acquire() throw() +void SAL_CALL OEvoabResultSet::acquire() noexcept { OResultSet_BASE::acquire(); } -void SAL_CALL OEvoabResultSet::release() throw() +void SAL_CALL OEvoabResultSet::release() noexcept { OResultSet_BASE::release(); } diff --git a/connectivity/source/drivers/evoab2/NResultSet.hxx b/connectivity/source/drivers/evoab2/NResultSet.hxx index 034dcc439de0..3eeeab244ab3 100644 --- a/connectivity/source/drivers/evoab2/NResultSet.hxx +++ b/connectivity/source/drivers/evoab2/NResultSet.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NRESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NRESULTSET_HXX +#pragma once #include <memory> @@ -50,7 +49,7 @@ namespace connectivity::evoab { public: virtual EBook* openBook(const char *abname) = 0; - virtual void executeQuery (EBook* pBook, EBookQuery* pQuery, OString &rPassword) = 0; + virtual void executeQuery (EBook* pBook, EBookQuery* pQuery) = 0; virtual void freeContacts() = 0; virtual bool isLDAP( EBook *pBook ) = 0; virtual bool isLocal( EBook *pBook ) = 0; @@ -119,8 +118,8 @@ namespace connectivity::evoab virtual void SAL_CALL disposing() override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -180,6 +179,4 @@ namespace connectivity::evoab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NRESULTSET_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx index 7f196bed35e7..a828b127fe68 100644 --- a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx +++ b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx @@ -21,15 +21,14 @@ #include "NDatabaseMetaData.hxx" #include <connectivity/dbexception.hxx> #include <strings.hrc> +#include <utility> using namespace connectivity::evoab; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; using namespace com::sun::star::sdbc; -OEvoabResultSetMetaData::OEvoabResultSetMetaData(const OUString& _aTableName) - : m_aTableName(_aTableName), - m_aEvoabFields() +OEvoabResultSetMetaData::OEvoabResultSetMetaData(OUString _aTableName) + : m_aTableName(std::move(_aTableName)) { } @@ -102,15 +101,7 @@ OUString SAL_CALL OEvoabResultSetMetaData::getColumnTypeName( sal_Int32 nColumnN OUString SAL_CALL OEvoabResultSetMetaData::getColumnLabel( sal_Int32 nColumnNum ) { - sal_uInt32 nField = m_aEvoabFields[nColumnNum - 1]; - const ColumnProperty *pSpecs = getField(nField); - GParamSpec *pSpec = pSpecs->pField; - OUString aLabel; - - if( pSpec ) - aLabel = OStringToOUString( g_param_spec_get_nick( pSpec ), - RTL_TEXTENCODING_UTF8 ); - return aLabel; + return getColumnName(nColumnNum); } OUString SAL_CALL OEvoabResultSetMetaData::getColumnServiceName( sal_Int32 /*nColumnNum*/ ) diff --git a/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx b/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx index 9d8dc6db3e23..e79d347b1c4d 100644 --- a/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx +++ b/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NRESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NRESULTSETMETADATA_HXX +#pragma once #include <com/sun/star/sdbc/XResultSetMetaData.hpp> #include <cppuhelper/implbase.hxx> @@ -41,13 +40,13 @@ namespace connectivity::evoab protected: virtual ~OEvoabResultSetMetaData() override; public: - explicit OEvoabResultSetMetaData(const OUString& _aTableName); + explicit OEvoabResultSetMetaData(OUString _aTableName); /// @throws css::sdbc::SQLException void setEvoabFields(const ::rtl::Reference<connectivity::OSQLColumns> &xColumns); sal_uInt32 fieldAtColumn(sal_Int32 columnIndex) const { return m_aEvoabFields[columnIndex - 1]; } /// Avoid ambiguous cast error from the compiler. - operator css::uno::Reference< css::sdbc::XResultSetMetaData > () throw() + operator css::uno::Reference< css::sdbc::XResultSetMetaData > () noexcept { return this; } virtual sal_Int32 SAL_CALL getColumnCount( ) override; @@ -75,6 +74,4 @@ namespace connectivity::evoab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NRESULTSETMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NStatement.cxx b/connectivity/source/drivers/evoab2/NStatement.cxx index 80b02d82f0a5..91ebdda56c70 100644 --- a/connectivity/source/drivers/evoab2/NStatement.cxx +++ b/connectivity/source/drivers/evoab2/NStatement.cxx @@ -22,6 +22,7 @@ #include <string_view> #include <osl/diagnose.h> +#include <rtl/ref.hxx> #include <rtl/ustring.hxx> #include <sal/log.hxx> #include <com/sun/star/sdbc/ResultSetConcurrency.hpp> @@ -37,7 +38,7 @@ #include <sqlbison.hxx> #include <strings.hrc> #include <connectivity/dbexception.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace connectivity::evoab { @@ -48,7 +49,6 @@ using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; using namespace com::sun::star::sdbcx; using namespace com::sun::star::container; -using namespace com::sun::star::io; using namespace com::sun::star::util; namespace { @@ -88,24 +88,69 @@ OCommonStatement::OCommonStatement(OEvoabConnection* _pConnection) , m_nResultSetConcurrency(ResultSetConcurrency::UPDATABLE) , m_bEscapeProcessing(true) { -#define REGISTER_PROP( id, member ) \ - registerProperty( \ - OMetaConnection::getPropMap().getNameByIndex( id ), \ - id, \ - 0, \ - &member, \ - cppu::UnoType<decltype(member)>::get() \ + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + 0, + &m_aCursorName, + cppu::UnoType<decltype(m_aCursorName)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), + PROPERTY_ID_MAXFIELDSIZE, + 0, + &m_nMaxFieldSize, + cppu::UnoType<decltype(m_nMaxFieldSize)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), + PROPERTY_ID_MAXROWS, + 0, + &m_nMaxRows, + cppu::UnoType<decltype(m_nMaxRows)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), + PROPERTY_ID_QUERYTIMEOUT, + 0, + &m_nQueryTimeOut, + cppu::UnoType<decltype(m_nQueryTimeOut)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + 0, + &m_nFetchSize, + cppu::UnoType<decltype(m_nFetchSize)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + 0, + &m_nResultSetType, + cppu::UnoType<decltype(m_nResultSetType)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + 0, + &m_nFetchDirection, + cppu::UnoType<decltype(m_nFetchDirection)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), + PROPERTY_ID_ESCAPEPROCESSING, + 0, + &m_bEscapeProcessing, + cppu::UnoType<decltype(m_bEscapeProcessing)>::get() + ); + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + 0, + &m_nResultSetConcurrency, + cppu::UnoType<decltype(m_nResultSetConcurrency)>::get() ); - - REGISTER_PROP( PROPERTY_ID_CURSORNAME, m_aCursorName ); - REGISTER_PROP( PROPERTY_ID_MAXFIELDSIZE, m_nMaxFieldSize ); - REGISTER_PROP( PROPERTY_ID_MAXROWS, m_nMaxRows ); - REGISTER_PROP( PROPERTY_ID_QUERYTIMEOUT, m_nQueryTimeOut ); - REGISTER_PROP( PROPERTY_ID_FETCHSIZE, m_nFetchSize ); - REGISTER_PROP( PROPERTY_ID_RESULTSETTYPE, m_nResultSetType ); - REGISTER_PROP( PROPERTY_ID_FETCHDIRECTION, m_nFetchDirection ); - REGISTER_PROP( PROPERTY_ID_ESCAPEPROCESSING, m_bEscapeProcessing ); - REGISTER_PROP( PROPERTY_ID_RESULTSETCONCURRENCY, m_nResultSetConcurrency ); } OCommonStatement::~OCommonStatement() @@ -222,8 +267,11 @@ void OCommonStatement::orderByAnalysis( const OSQLParseNode* _pOrderByClause, So ENSURE_OR_THROW( ( pColumnRef != nullptr ) && ( pAscDesc != nullptr ) - && SQL_ISRULE( pAscDesc, opt_asc_desc ) - && ( pAscDesc->count() < 2 ), + && ( pAscDesc->isLeaf() ) + && ( SQL_ISRULE( pAscDesc, opt_asc_desc ) + || SQL_ISTOKEN(pAscDesc, ASC) + || SQL_ISTOKEN(pAscDesc, DESC) + ), "ordering_spec structure error" ); // column name -> column field @@ -232,11 +280,7 @@ void OCommonStatement::orderByAnalysis( const OSQLParseNode* _pOrderByClause, So const OUString sColumnName( impl_getColumnRefColumnName_throw( *pColumnRef ) ); guint nField = evoab::findEvoabField( sColumnName ); // ascending/descending? - bool bAscending = true; - if ( ( pAscDesc->count() == 1 ) - && SQL_ISTOKEN( pAscDesc->getChild( 0 ), DESC ) - ) - bAscending = false; + bool bAscending = !SQL_ISTOKEN(pAscDesc, DESC); _out_rSort.push_back( FieldSort( nField, bAscending ) ); } @@ -460,6 +504,7 @@ void OCommonStatement::parseSql( const OUString& sql, QueryData& _out_rQueryData pOrderByClause->showParseTree( sTreeDebug ); SAL_INFO( "connectivity.evoab2", "found order-by tree:\n" << sTreeDebug ); #endif + orderByAnalysis( pOrderByClause, _out_rQueryData.aSortOrder ); } @@ -503,7 +548,7 @@ Any SAL_CALL OCommonStatement::getWarnings( ) checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); - return makeAny(SQLWarning()); + return Any(SQLWarning()); } @@ -527,12 +572,12 @@ void SAL_CALL OCommonStatement::clearWarnings( ) } -void SAL_CALL OCommonStatement::acquire() throw() +void SAL_CALL OCommonStatement::acquire() noexcept { OCommonStatement_IBase::acquire(); } -void SAL_CALL OCommonStatement::release() throw() +void SAL_CALL OCommonStatement::release() noexcept { OCommonStatement_IBase::release(); } @@ -564,13 +609,12 @@ QueryData OCommonStatement::impl_getEBookQuery_throw( const OUString& _rSql ) Reference< XResultSet > OCommonStatement::impl_executeQuery_throw( const QueryData& _rQueryData ) { // create result set - OEvoabResultSet* pResult = new OEvoabResultSet( this, m_xConnection.get() ); - Reference< XResultSet > xRS = pResult; + rtl::Reference<OEvoabResultSet> pResult = new OEvoabResultSet( this, m_xConnection.get() ); pResult->construct( _rQueryData ); // done - m_xResultSet = xRS; - return xRS; + m_xResultSet = Reference<XWeak>(pResult); + return pResult; } diff --git a/connectivity/source/drivers/evoab2/NStatement.hxx b/connectivity/source/drivers/evoab2/NStatement.hxx index a5d739eb14a1..a348c5335d56 100644 --- a/connectivity/source/drivers/evoab2/NStatement.hxx +++ b/connectivity/source/drivers/evoab2/NStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NSTATEMENT_HXX +#pragma once #include <com/sun/star/sdbc/XStatement.hpp> #include <com/sun/star/sdbc/XWarningsSupplier.hpp> @@ -198,8 +197,8 @@ namespace connectivity::evoab // OComponentHelper virtual void SAL_CALL disposing() override; // XInterface - virtual void SAL_CALL release() throw() override; - virtual void SAL_CALL acquire() throw() override; + virtual void SAL_CALL release() noexcept override; + virtual void SAL_CALL acquire() noexcept override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider @@ -230,7 +229,7 @@ namespace connectivity::evoab impl_executeQuery_throw( const QueryData& _rData ); css::uno::Reference< css::sdbc::XConnection > - impl_getConnection() { return css::uno::Reference< css::sdbc::XConnection >( m_xConnection.get() ); } + impl_getConnection() { return css::uno::Reference< css::sdbc::XConnection >( m_xConnection ); } OUString impl_getColumnRefColumnName_throw( const ::connectivity::OSQLParseNode& _rColumnRef ); @@ -253,8 +252,8 @@ namespace connectivity::evoab // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; // XTypeProvider DECLARE_XTYPEPROVIDER() @@ -271,6 +270,4 @@ namespace connectivity::evoab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NTable.cxx b/connectivity/source/drivers/evoab2/NTable.cxx index b5c652a8ff67..631c27db244d 100644 --- a/connectivity/source/drivers/evoab2/NTable.cxx +++ b/connectivity/source/drivers/evoab2/NTable.cxx @@ -24,13 +24,8 @@ #include <com/sun/star/sdbc/XRow.hpp> using namespace connectivity; -using namespace ::comphelper; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace connectivity::evoab; OEvoabTable::OEvoabTable( sdbcx::OCollection* _pTables, @@ -62,15 +57,15 @@ void OEvoabTable::refreshColumns() if (xResult.is()) { - Reference< XRow > xRow(xResult, UNO_QUERY); - while (xResult->next()) - aVector.push_back(xRow->getString(4)); + Reference< XRow > xRow(xResult, UNO_QUERY); + while (xResult->next()) + aVector.push_back(xRow->getString(4)); } } if (m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = new OEvoabColumns(this,m_aMutex,aVector); + m_xColumns.reset(new OEvoabColumns(this,m_aMutex,aVector)); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NTable.hxx b/connectivity/source/drivers/evoab2/NTable.hxx index 2b38171b398f..0aa30815b9b5 100644 --- a/connectivity/source/drivers/evoab2/NTable.hxx +++ b/connectivity/source/drivers/evoab2/NTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NTABLE_HXX +#pragma once #include "NConnection.hxx" #include <connectivity/sdbcx/VTable.hxx> @@ -51,6 +50,4 @@ namespace connectivity::evoab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NTABLE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/evoab2/NTables.cxx b/connectivity/source/drivers/evoab2/NTables.cxx index b7a844fac15d..3be63e1e1049 100644 --- a/connectivity/source/drivers/evoab2/NTables.cxx +++ b/connectivity/source/drivers/evoab2/NTables.cxx @@ -29,12 +29,7 @@ using namespace ::cppu; using namespace connectivity::evoab; using namespace connectivity::sdbcx; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; -using namespace dbtools; ObjectType OEvoabTables::createObject(const OUString& aName) { @@ -48,7 +43,7 @@ ObjectType OEvoabTables::createObject(const OUString& aName) Reference< XRow > xRow(xResult,UNO_QUERY); if(xResult->next()) // there can be only one table with this name { - OEvoabTable* pRet = new OEvoabTable( + xRet = new OEvoabTable( this, static_cast<OEvoabCatalog&>(m_rParent).getConnection(), aName, @@ -56,7 +51,6 @@ ObjectType OEvoabTables::createObject(const OUString& aName) xRow->getString(5), "", ""); - xRet = pRet; } } diff --git a/connectivity/source/drivers/evoab2/NTables.hxx b/connectivity/source/drivers/evoab2/NTables.hxx index 593367c73a86..e5d454729431 100644 --- a/connectivity/source/drivers/evoab2/NTables.hxx +++ b/connectivity/source/drivers/evoab2/NTables.hxx @@ -16,11 +16,11 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NTABLES_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +#include <utility> namespace connectivity::evoab { @@ -31,16 +31,14 @@ namespace connectivity::evoab virtual sdbcx::ObjectType createObject(const OUString& _rName) override; virtual void impl_refresh() override; public: - OEvoabTables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData, + OEvoabTables(css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData, ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector< OUString> &_rVector) : sdbcx::OCollection(_rParent,true,_rMutex,_rVector), - m_xMetaData(_rMetaData) + m_xMetaData(std::move(_xMetaData)) {} virtual void disposing() override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_EVOAB2_NTABLES_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/file/FCatalog.cxx b/connectivity/source/drivers/file/FCatalog.cxx index eedda26efba2..54ad24bf1d59 100644 --- a/connectivity/source/drivers/file/FCatalog.cxx +++ b/connectivity/source/drivers/file/FCatalog.cxx @@ -24,10 +24,8 @@ #include <com/sun/star/sdbc/XResultSet.hpp> using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; using namespace connectivity::file; diff --git a/connectivity/source/drivers/file/FColumns.cxx b/connectivity/source/drivers/file/FColumns.cxx index e703112f71c4..97e9d0c23a2a 100644 --- a/connectivity/source/drivers/file/FColumns.cxx +++ b/connectivity/source/drivers/file/FColumns.cxx @@ -25,12 +25,8 @@ using namespace connectivity::file; using namespace connectivity; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; sdbcx::ObjectType OColumns::createObject(const OUString& _rName) { @@ -48,7 +44,7 @@ sdbcx::ObjectType OColumns::createObject(const OUString& _rName) { if(xRow->getString(4) == _rName) { - sdbcx::OColumn* pRet = new sdbcx::OColumn(_rName, + xRet = new sdbcx::OColumn(_rName, xRow->getString(6), xRow->getString(13), xRow->getString(12), @@ -63,7 +59,6 @@ sdbcx::ObjectType OColumns::createObject(const OUString& _rName) sCatalogName, sSchemaName, sTableName); - xRet = pRet; break; } } diff --git a/connectivity/source/drivers/file/FConnection.cxx b/connectivity/source/drivers/file/FConnection.cxx index 5c56ce4d5e5d..38ce342cb5e2 100644 --- a/connectivity/source/drivers/file/FConnection.cxx +++ b/connectivity/source/drivers/file/FConnection.cxx @@ -21,7 +21,6 @@ #include <comphelper/processfactory.hxx> #include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> #include <file/FConnection.hxx> #include <file/FDatabaseMetaData.hxx> #include <file/FDriver.hxx> @@ -33,6 +32,7 @@ #include <com/sun/star/ucb/XContentIdentifier.hpp> #include <tools/urlobj.hxx> #include <file/FCatalog.hxx> +#include <comphelper/configuration.hxx> #include <unotools/pathoptions.hxx> #include <ucbhelper/content.hxx> #include <connectivity/dbcharset.hxx> @@ -132,6 +132,7 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >& OUString aFileName = aDSN; INetURLObject aURL; aURL.SetSmartProtocol(INetProtocol::File); + if (!comphelper::IsFuzzing()) { SvtPathOptions aPathOptions; aFileName = aPathOptions.SubstituteVariable(aFileName); @@ -229,8 +230,7 @@ Reference< XPreparedStatement > SAL_CALL OConnection::prepareStatement( const OU checkDisposed(OConnection_BASE::rBHelper.bDisposed); - OPreparedStatement* pStmt = new OPreparedStatement(this); - Reference< XPreparedStatement > xHoldAlive = pStmt; + rtl::Reference<OPreparedStatement> pStmt = new OPreparedStatement(this); pStmt->construct(sql); m_aStatements.push_back(WeakReferenceHelper(*pStmt)); return pStmt; @@ -402,31 +402,24 @@ Reference< XDynamicResultSet > OConnection::getDir() const sal_Int64 SAL_CALL OConnection::getSomething( const Sequence< sal_Int8 >& rId ) { - return (isUnoTunnelId<OConnection>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : sal_Int64(0); + return comphelper::getSomethingImpl(rId, this); } -Sequence< sal_Int8 > OConnection::getUnoTunnelId() +const Sequence< sal_Int8 > & OConnection::getUnoTunnelId() { - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); + static const comphelper::UnoIdInit implId; + return implId.getSeq(); } void OConnection::throwUrlNotValid(const OUString & _rsUrl,const OUString & _rsMessage) { - SQLException aError; - aError.Message = getResources().getResourceStringWithSubstitution( - STR_NO_VALID_FILE_URL, - "$URL$", _rsUrl - ); - - aError.SQLState = "S1000"; - aError.ErrorCode = 0; - aError.Context = static_cast< XConnection* >(this); + XConnection* context = this; + css::uno::Any next; if (!_rsMessage.isEmpty()) - aError.NextException <<= SQLException(_rsMessage, aError.Context, OUString(), 0, Any()); + next <<= SQLException(_rsMessage, context, OUString(), 0, Any()); + SQLException aError( + getResources().getResourceStringWithSubstitution(STR_NO_VALID_FILE_URL, "$URL$", _rsUrl), + context, "S1000", 0, next); throw aError; } diff --git a/connectivity/source/drivers/file/FDatabaseMetaData.cxx b/connectivity/source/drivers/file/FDatabaseMetaData.cxx index 2fffb76f78e3..6d157bb575da 100644 --- a/connectivity/source/drivers/file/FDatabaseMetaData.cxx +++ b/connectivity/source/drivers/file/FDatabaseMetaData.cxx @@ -17,6 +17,8 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <config_fuzzers.h> + #include <file/FDatabaseMetaData.hxx> #include <FDatabaseMetaDataResultSet.hxx> #include <com/sun/star/sdbc/ResultSetType.hpp> @@ -28,14 +30,13 @@ #include <file/FTable.hxx> #include <comphelper/processfactory.hxx> #include <comphelper/servicehelper.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <ucbhelper/content.hxx> using namespace com::sun::star::ucb; using namespace connectivity::file; using namespace connectivity; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; using namespace com::sun::star::sdbcx; @@ -71,7 +72,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( namespace { - sal_Int16 isCaseSensitiveParentFolder( const OUString& _rFolderOrDoc, const OUString& _rDocName ) +#if !ENABLE_FUZZERS + sal_Int16 isCaseSensitiveParentFolder( const OUString& _rFolderOrDoc, std::u16string_view _rDocName ) { sal_Int16 nIsCS = 1; try @@ -149,6 +151,7 @@ namespace return nIsCS; } +#endif } @@ -158,14 +161,12 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( { ::osl::MutexGuard aGuard( m_aMutex ); - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTables ); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTables ); // check if any type is given // when no types are given then we have to return all tables e.g. TABLE - static constexpr OUStringLiteral aTable = u"TABLE"; + static constexpr OUString aTable = u"TABLE"_ustr; bool bTableFound = true; sal_Int32 nLength = types.getLength(); @@ -185,7 +186,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( } } if(!bTableFound) - return xRef; + return pResult; Reference<XDynamicResultSet> xContent = m_pConnection->getDir(); Reference < XSortedDynamicResultSetFactory > xSRSFac = @@ -229,7 +230,11 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( if ( !bKnowCaseSensitivity ) { bKnowCaseSensitivity = true; +#if ENABLE_FUZZERS + sal_Int16 nCase = 1; +#else sal_Int16 nCase = isCaseSensitiveParentFolder( m_pConnection->getURL(), aURL.getName() ); +#endif switch( nCase ) { case 1: @@ -293,16 +298,16 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( } if(bNewRow) { - aRow.push_back(new ORowSetValueDecorator(OUString(aTable))); + aRow.push_back(new ORowSetValueDecorator(aTable)); aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); aRows.push_back(aRow); } } - pResult->setRows(aRows); + pResult->setRows(std::move(aRows)); - return xRef; + return pResult; } sal_Int32 SAL_CALL ODatabaseMetaData::getMaxBinaryLiteralLength( ) @@ -370,11 +375,9 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( { ::osl::MutexGuard aGuard( m_aMutex ); - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges ); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges ); ODatabaseMetaDataResultSet::ORows aRows; - Reference< XTablesSupplier > xTabSup = m_pConnection->createCatalog(); if( xTabSup.is()) { @@ -397,7 +400,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( xNames->getByName(*pBegin), css::uno::UNO_QUERY); if(xTable.is()) { - auto pTable = comphelper::getUnoTunnelImplementation<OFileTable>(xTable); + auto pTable = dynamic_cast<OFileTable*>(xTable.get()); if(pTable && !pTable->isReadOnly()) { aRow[6] = ODatabaseMetaDataResultSet::getInsertValue(); @@ -423,8 +426,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( } } - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::move(aRows)); + return pResult; } sal_Bool SAL_CALL ODatabaseMetaData::doesMaxRowSizeIncludeBlobs( ) @@ -614,20 +617,11 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins( ) Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTableTypes ); - Reference< XResultSet > xRef = pResult; - static ODatabaseMetaDataResultSet::ORows aRows; - if(aRows.empty()) - { - ODatabaseMetaDataResultSet::ORow aRow; - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(OUString("TABLE"))); - aRows.push_back(aRow); - } - pResult->setRows(aRows); - return xRef; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTableTypes ); + ODatabaseMetaDataResultSet::ORows aRows; + aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString("TABLE")) } ); + pResult->setRows(std::move(aRows)); + return pResult; } sal_Int32 SAL_CALL ODatabaseMetaData::getMaxStatementLength( ) diff --git a/connectivity/source/drivers/file/FDateFunctions.cxx b/connectivity/source/drivers/file/FDateFunctions.cxx index d5b7c48c0dcc..1be992d4b672 100644 --- a/connectivity/source/drivers/file/FDateFunctions.cxx +++ b/connectivity/source/drivers/file/FDateFunctions.cxx @@ -32,7 +32,7 @@ ORowSetValue OOp_DayOfWeek::operate(const ORowSetValue& lhs) const return lhs; sal_Int32 nRet = 0; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); Date aDate(aD.Day, aD.Month, aD.Year); DayOfWeek eDayOfWeek = aDate.GetDayOfWeek(); switch (eDayOfWeek) @@ -69,7 +69,7 @@ ORowSetValue OOp_DayOfMonth::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); return static_cast<sal_Int16>(aD.Day); } @@ -78,7 +78,7 @@ ORowSetValue OOp_DayOfYear::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); Date aDate(aD.Day, aD.Month, aD.Year); return static_cast<sal_Int16>(aDate.GetDayOfYear()); } @@ -88,7 +88,7 @@ ORowSetValue OOp_Month::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); return static_cast<sal_Int16>(aD.Month); } @@ -98,7 +98,7 @@ ORowSetValue OOp_DayName::operate(const ORowSetValue& lhs) const return lhs; OUString sRet; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); Date aDate(aD.Day, aD.Month, aD.Year); DayOfWeek eDayOfWeek = aDate.GetDayOfWeek(); switch (eDayOfWeek) @@ -136,7 +136,7 @@ ORowSetValue OOp_MonthName::operate(const ORowSetValue& lhs) const return lhs; OUString sRet; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); switch (aD.Month) { case 1: @@ -185,7 +185,7 @@ ORowSetValue OOp_Quarter::operate(const ORowSetValue& lhs) const return lhs; sal_Int32 nRet = 1; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); if (aD.Month >= 4 && aD.Month < 7) nRet = 2; else if (aD.Month >= 7 && aD.Month < 10) @@ -202,12 +202,12 @@ ORowSetValue OOp_Week::operate(const std::vector<ORowSetValue>& lhs) const size_t nSize = lhs.size(); - css::util::Date aD = lhs[nSize - 1]; + css::util::Date aD = lhs[nSize - 1].getDate(); Date aDate(aD.Day, aD.Month, aD.Year); sal_Int16 nStartDay = SUNDAY; if (nSize == 2 && !lhs[0].isNull()) - nStartDay = lhs[0]; + nStartDay = lhs[0].getInt16(); return static_cast<sal_Int16>(aDate.GetWeekOfYear(static_cast<DayOfWeek>(nStartDay))); } @@ -217,7 +217,7 @@ ORowSetValue OOp_Year::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - css::util::Date aD = lhs; + css::util::Date aD = lhs.getDate(); return aD.Year; } @@ -226,7 +226,7 @@ ORowSetValue OOp_Hour::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - css::util::Time aT = lhs; + css::util::Time aT = lhs.getTime(); return static_cast<sal_Int16>(aT.Hours); } @@ -235,7 +235,7 @@ ORowSetValue OOp_Minute::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - css::util::Time aT = lhs; + css::util::Time aT = lhs.getTime(); return static_cast<sal_Int16>(aT.Minutes); } @@ -244,7 +244,7 @@ ORowSetValue OOp_Second::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - css::util::Time aT = lhs; + css::util::Time aT = lhs.getTime(); return static_cast<sal_Int16>(aT.Seconds); } diff --git a/connectivity/source/drivers/file/FDriver.cxx b/connectivity/source/drivers/file/FDriver.cxx index 16cf60e02cb4..b24c4e67a532 100644 --- a/connectivity/source/drivers/file/FDriver.cxx +++ b/connectivity/source/drivers/file/FDriver.cxx @@ -20,11 +20,13 @@ #include <file/FDriver.hxx> #include <file/FConnection.hxx> #include <file/fcode.hxx> +#include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> #include <cppuhelper/supportsservice.hxx> #include <connectivity/dbexception.hxx> #include <strings.hrc> #include <resource/sharedresources.hxx> +#include <utility> using namespace connectivity::file; @@ -35,9 +37,9 @@ using namespace com::sun::star::sdbc; using namespace com::sun::star::sdbcx; using namespace com::sun::star::container; -OFileDriver::OFileDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext) +OFileDriver::OFileDriver(css::uno::Reference< css::uno::XComponentContext > _xContext) : ODriver_BASE(m_aMutex) - ,m_xContext(_rxContext) + ,m_xContext(std::move(_xContext)) { } @@ -81,12 +83,11 @@ Reference< XConnection > SAL_CALL OFileDriver::connect( const OUString& url, con ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(ODriver_BASE::rBHelper.bDisposed); - OConnection* pCon = new OConnection(this); - Reference< XConnection > xCon = pCon; + rtl::Reference<OConnection> pCon = new OConnection(this); pCon->construct(url,info); m_xConnections.push_back(WeakReferenceHelper(*pCon)); - return xCon; + return pCon; } sal_Bool SAL_CALL OFileDriver::acceptsURL( const OUString& url ) @@ -98,55 +99,54 @@ Sequence< DriverPropertyInfo > SAL_CALL OFileDriver::getPropertyInfo( const OUSt { if ( acceptsURL(url) ) { - std::vector< DriverPropertyInfo > aDriverInfo; - Sequence< OUString > aBoolean(2); - aBoolean[0] = "0"; - aBoolean[1] = "1"; + Sequence< OUString > aBoolean { "0", "1" }; - aDriverInfo.push_back(DriverPropertyInfo( + return + { + { "CharSet" ,"CharSet of the database." ,false - ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,{} + ,{} + }, + { "Extension" ,"Extension of the file format." ,false ,".*" - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,{} + }, + { "ShowDeleted" ,"Display inactive records." ,false ,"0" - ,aBoolean) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBoolean + }, + { "EnableSQL92Check" ,"Use SQL92 naming constraints." ,false ,"0" - ,aBoolean) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBoolean + }, + { "UseRelativePath" ,"Handle the connection url as relative path." ,false ,"0" - ,aBoolean) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBoolean + }, + { "URL" ,"The URL of the database document which is used to create an absolute path." ,false - ,OUString() - ,Sequence< OUString >()) - ); - return Sequence< DriverPropertyInfo >(aDriverInfo.data(),aDriverInfo.size()); + ,{} + ,{} + } + }; } // if ( acceptsURL(url) ) { ::connectivity::SharedResources aResources; @@ -173,25 +173,15 @@ Reference< XTablesSupplier > SAL_CALL OFileDriver::getDataDefinitionByConnection ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(ODriver_BASE::rBHelper.bDisposed); - Reference< XTablesSupplier > xTab; - Reference< css::lang::XUnoTunnel> xTunnel(connection,UNO_QUERY); - if(xTunnel.is()) + if (OConnection* pSearchConnection = comphelper::getFromUnoTunnel<OConnection>(connection)) { - OConnection* pSearchConnection = reinterpret_cast< OConnection* >( xTunnel->getSomething(OConnection::getUnoTunnelId()) ); - OConnection* pConnection = nullptr; for (auto const& elem : m_xConnections) { - if (static_cast<OConnection*>( Reference< XConnection >::query(elem.get().get()).get() ) == pSearchConnection) - { - pConnection = pSearchConnection; - break; - } + if (static_cast<OConnection*>( Reference< XConnection >::query(elem.get()).get() ) == pSearchConnection) + return pSearchConnection->createCatalog(); } - - if(pConnection) - xTab = pConnection->createCatalog(); } - return xTab; + return {}; } diff --git a/connectivity/source/drivers/file/FNoException.cxx b/connectivity/source/drivers/file/FNoException.cxx index 7c26081da12e..920bb38859f1 100644 --- a/connectivity/source/drivers/file/FNoException.cxx +++ b/connectivity/source/drivers/file/FNoException.cxx @@ -85,7 +85,7 @@ void OPreparedStatement::scanParameter(OSQLParseNode* pParseNode,std::vector< OS std::unique_ptr<OKeyValue> OResultSet::GetOrderbyKeyValue(OValueRefRow const & _rRow) { - sal_uInt32 nBookmarkValue = std::abs(static_cast<sal_Int32>((*_rRow)[0]->getValue())); + sal_uInt32 nBookmarkValue = std::abs((*_rRow)[0]->getValue().getInt32()); std::unique_ptr<OKeyValue> pKeyValue = OKeyValue::createKeyValue(nBookmarkValue); diff --git a/connectivity/source/drivers/file/FNumericFunctions.cxx b/connectivity/source/drivers/file/FNumericFunctions.cxx index a6784a55c140..7c7fdc75425f 100644 --- a/connectivity/source/drivers/file/FNumericFunctions.cxx +++ b/connectivity/source/drivers/file/FNumericFunctions.cxx @@ -19,20 +19,19 @@ #include <cmath> +#include <basegfx/numeric/ftools.hxx> #include <file/FNumericFunctions.hxx> #include <rtl/math.hxx> using namespace connectivity; using namespace connectivity::file; -const double fPi = 3.14159265358979323846; - ORowSetValue OOp_Abs::operate(const ORowSetValue& lhs) const { if ( lhs.isNull() ) return lhs; - double nVal(lhs); + double nVal = lhs.getDouble(); if ( nVal < 0 ) nVal *= -1.0; return fabs(nVal); @@ -44,7 +43,7 @@ ORowSetValue OOp_Sign::operate(const ORowSetValue& lhs) const return lhs; sal_Int32 nRet = 0; - double nVal(lhs); + double nVal = lhs.getDouble(); if ( nVal < 0 ) nRet = -1; else if ( nVal > 0 ) @@ -58,7 +57,7 @@ ORowSetValue OOp_Mod::operate(const ORowSetValue& lhs,const ORowSetValue& rhs) c if ( lhs.isNull() || rhs.isNull() ) return ORowSetValue(); - return fmod(static_cast<double>(lhs),static_cast<double>(rhs)); + return fmod(lhs.getDouble(), rhs.getDouble()); } ORowSetValue OOp_Floor::operate(const ORowSetValue& lhs) const @@ -66,7 +65,7 @@ ORowSetValue OOp_Floor::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - return floor(static_cast<double>(lhs)); + return floor(lhs.getDouble()); } ORowSetValue OOp_Ceiling::operate(const ORowSetValue& lhs) const @@ -74,7 +73,7 @@ ORowSetValue OOp_Ceiling::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - double nVal(lhs); + double nVal = lhs.getDouble(); return ceil(nVal); } @@ -84,11 +83,11 @@ ORowSetValue OOp_Round::operate(const std::vector<ORowSetValue>& lhs) const return ORowSetValue(); size_t nSize = lhs.size(); - double nVal = lhs[nSize-1]; + double nVal = lhs[nSize-1].getDouble(); sal_Int32 nDec = 0; if ( nSize == 2 && !lhs[0].isNull() ) - nDec = lhs[0]; + nDec = lhs[0].getDouble(); return ::rtl::math::round(nVal,nDec); } @@ -97,16 +96,16 @@ ORowSetValue OOp_Exp::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - double nVal(lhs); + double nVal = lhs.getDouble(); return exp(nVal); } ORowSetValue OOp_Ln::operate(const ORowSetValue& lhs) const { - if ( lhs.isNull() || static_cast<double>(lhs) < 0.0 ) + if ( lhs.isNull() || lhs.getDouble() < 0.0 ) return lhs; - double nVal(lhs); + double nVal = lhs.getDouble(); nVal = log(nVal); if ( std::isnan(nVal) ) return ORowSetValue(); @@ -118,11 +117,11 @@ ORowSetValue OOp_Log::operate(const std::vector<ORowSetValue>& lhs) const if ( lhs.empty() || lhs.size() > 2 ) return ORowSetValue(); size_t nSize = lhs.size(); - double nVal = log( static_cast<double>(lhs[nSize-1]) ); + double nVal = log( lhs[nSize-1].getDouble() ); if ( nSize == 2 && !lhs[0].isNull() ) - nVal /= log(static_cast<double>(lhs[0])); + nVal /= log(lhs[0].getDouble()); if ( std::isnan(nVal) ) return ORowSetValue(); @@ -131,10 +130,10 @@ ORowSetValue OOp_Log::operate(const std::vector<ORowSetValue>& lhs) const ORowSetValue OOp_Log10::operate(const ORowSetValue& lhs) const { - if ( lhs.isNull() || static_cast<double>(lhs) < 0.0 ) + if ( lhs.isNull() || lhs.getDouble() < 0.0 ) return lhs; - double nVal = log(static_cast<double>(lhs)); + double nVal = log(lhs.getDouble()); if ( std::isnan(nVal) ) return ORowSetValue(); nVal /= log(10.0); @@ -146,7 +145,7 @@ ORowSetValue OOp_Pow::operate(const ORowSetValue& lhs,const ORowSetValue& rhs) c if ( lhs.isNull() || rhs.isNull() ) return lhs; - return pow(static_cast<double>(lhs),static_cast<double>(rhs)); + return pow(lhs.getDouble(), rhs.getDouble()); } ORowSetValue OOp_Sqrt::operate(const ORowSetValue& lhs) const @@ -154,7 +153,7 @@ ORowSetValue OOp_Sqrt::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - double nVal = sqrt(static_cast<double>(lhs)); + double nVal = sqrt(lhs.getDouble()); if ( std::isnan(nVal) ) return ORowSetValue(); return nVal; @@ -162,7 +161,7 @@ ORowSetValue OOp_Sqrt::operate(const ORowSetValue& lhs) const ORowSetValue OOp_Pi::operate(const std::vector<ORowSetValue>& /*lhs*/) const { - return fPi; + return M_PI; } ORowSetValue OOp_Cos::operate(const ORowSetValue& lhs) const @@ -170,7 +169,7 @@ ORowSetValue OOp_Cos::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - return cos(static_cast<double>(lhs)); + return cos(lhs.getDouble()); } ORowSetValue OOp_Sin::operate(const ORowSetValue& lhs) const @@ -178,7 +177,7 @@ ORowSetValue OOp_Sin::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - return sin(static_cast<double>(lhs)); + return sin(lhs.getDouble()); } ORowSetValue OOp_Tan::operate(const ORowSetValue& lhs) const @@ -186,7 +185,7 @@ ORowSetValue OOp_Tan::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - return tan(static_cast<double>(lhs)); + return tan(lhs.getDouble()); } ORowSetValue OOp_ACos::operate(const ORowSetValue& lhs) const @@ -194,7 +193,7 @@ ORowSetValue OOp_ACos::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - return acos(static_cast<double>(lhs)); + return acos(lhs.getDouble()); } ORowSetValue OOp_ASin::operate(const ORowSetValue& lhs) const @@ -202,7 +201,7 @@ ORowSetValue OOp_ASin::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - return asin(static_cast<double>(lhs)); + return asin(lhs.getDouble()); } ORowSetValue OOp_ATan::operate(const ORowSetValue& lhs) const @@ -210,7 +209,7 @@ ORowSetValue OOp_ATan::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - return atan(static_cast<double>(lhs)); + return atan(lhs.getDouble()); } ORowSetValue OOp_ATan2::operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const @@ -218,7 +217,7 @@ ORowSetValue OOp_ATan2::operate(const ORowSetValue& lhs,const ORowSetValue& rhs) if ( lhs.isNull() || rhs.isNull() ) return lhs; - return atan2(static_cast<double>(lhs),static_cast<double>(rhs)); + return atan2(lhs.getDouble(), rhs.getDouble()); } ORowSetValue OOp_Degrees::operate(const ORowSetValue& lhs) const @@ -226,8 +225,8 @@ ORowSetValue OOp_Degrees::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - double nLhs = lhs; - return nLhs*180*(1.0/fPi); + double nLhs = lhs.getDouble(); + return basegfx::rad2deg(nLhs); } ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const @@ -235,8 +234,8 @@ ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const if ( lhs.isNull() ) return lhs; - double nLhs = lhs; - return nLhs*fPi*(1.0/180.0); + double nLhs = lhs.getDouble(); + return basegfx::deg2rad(nLhs); } diff --git a/connectivity/source/drivers/file/FPreparedStatement.cxx b/connectivity/source/drivers/file/FPreparedStatement.cxx index fc5b81923cb4..f2a8571b61e5 100644 --- a/connectivity/source/drivers/file/FPreparedStatement.cxx +++ b/connectivity/source/drivers/file/FPreparedStatement.cxx @@ -18,6 +18,7 @@ */ +#include <o3tl/safeint.hxx> #include <osl/diagnose.h> #include <file/FPreparedStatement.hxx> #include <com/sun/star/sdbc/DataType.hpp> @@ -100,7 +101,7 @@ rtl::Reference<OResultSet> OPreparedStatement::makeResultSet() closeResultSet(); rtl::Reference<OResultSet> xResultSet(createResultSet()); - m_xResultSet = xResultSet.get(); + m_xResultSet = uno::Reference<uno::XWeak>(xResultSet); initializeResultSet(xResultSet.get()); initResultSet(xResultSet.get()); return xResultSet; @@ -133,7 +134,7 @@ Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData( ) if(!m_xMetaData.is()) m_xMetaData = new OResultSetMetaData(m_aSQLIterator.getSelectColumns(),m_aSQLIterator.getTables().begin()->first,m_pTable.get()); - return m_xMetaData.get(); + return m_xMetaData; } @@ -189,7 +190,7 @@ Reference< XConnection > SAL_CALL OPreparedStatement::getConnection( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return Reference< XConnection >(m_pConnection.get()); + return m_pConnection; } @@ -198,7 +199,7 @@ Reference< XResultSet > SAL_CALL OPreparedStatement::executeQuery( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return makeResultSet().get(); + return makeResultSet(); } @@ -363,7 +364,7 @@ void SAL_CALL OPreparedStatement::clearParameters( ) m_aParameterRow->push_back(new ORowSetValueDecorator(sal_Int32(0)) ); } -OResultSet* OPreparedStatement::createResultSet() +rtl::Reference<OResultSet> OPreparedStatement::createResultSet() { return new OResultSet(this,m_aSQLIterator); } @@ -379,12 +380,12 @@ void OPreparedStatement::initResultSet(OResultSet *pResultSet) pResultSet->setMetaData(getMetaData()); } -void SAL_CALL OPreparedStatement::acquire() throw() +void SAL_CALL OPreparedStatement::acquire() noexcept { OStatement_BASE2::acquire(); } -void SAL_CALL OPreparedStatement::release() throw() +void SAL_CALL OPreparedStatement::release() noexcept { OStatement_BASE2::release(); } @@ -392,7 +393,7 @@ void SAL_CALL OPreparedStatement::release() throw() void OPreparedStatement::checkAndResizeParameters(sal_Int32 parameterIndex) { ::connectivity::checkDisposed(OStatement_BASE::rBHelper.bDisposed); - if ( m_aAssignValues.is() && (parameterIndex < 1 || parameterIndex >= static_cast<sal_Int32>(m_aParameterIndexes.size())) ) + if ( m_aAssignValues.is() && (parameterIndex < 1 || o3tl::make_unsigned(parameterIndex) >= m_aParameterIndexes.size()) ) throwInvalidIndexException(*this); else if ( static_cast<sal_Int32>(m_aParameterRow->size()) <= parameterIndex ) { diff --git a/connectivity/source/drivers/file/FResultSet.cxx b/connectivity/source/drivers/file/FResultSet.cxx index 5cf5d1ae862d..5612c68feedf 100644 --- a/connectivity/source/drivers/file/FResultSet.cxx +++ b/connectivity/source/drivers/file/FResultSet.cxx @@ -29,6 +29,7 @@ #include <cppuhelper/typeprovider.hxx> #include <connectivity/dbtools.hxx> #include <cppuhelper/propshlp.hxx> +#include <o3tl/safeint.hxx> #include <sal/log.hxx> #include <iterator> #include <com/sun/star/sdbc/ResultSetType.hpp> @@ -41,7 +42,7 @@ #include <comphelper/types.hxx> #include <resource/sharedresources.hxx> #include <strings.hrc> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::comphelper; using namespace connectivity; @@ -57,7 +58,7 @@ using namespace com::sun::star::container; namespace { - void lcl_throwError(const char* pErrorId, const css::uno::Reference< css::uno::XInterface>& _xContext) + void lcl_throwError(TranslateId pErrorId, const css::uno::Reference< css::uno::XInterface>& _xContext) { ::connectivity::SharedResources aResources; const OUString sMessage = aResources.getResourceString(pErrorId); @@ -133,9 +134,8 @@ void OResultSet::disposing() m_xColumns = nullptr; m_xColsIdx.clear(); - Reference<XComponent> xComp = m_pTable.get(); - if ( xComp.is() ) - xComp->removeEventListener(this); + if ( m_pTable.is() ) + m_pTable->removeEventListener(this); m_pTable.clear(); m_pFileSet = nullptr; @@ -218,43 +218,43 @@ Reference< css::io::XInputStream > SAL_CALL OResultSet::getCharacterStream( sal_ sal_Bool SAL_CALL OResultSet::getBoolean( sal_Int32 columnIndex ) { - return bool(getValue(columnIndex)); + return getValue(columnIndex).getBool(); } sal_Int8 SAL_CALL OResultSet::getByte( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getInt8(); } Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getSequence(); } css::util::Date SAL_CALL OResultSet::getDate( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getDate(); } double SAL_CALL OResultSet::getDouble( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getDouble(); } float SAL_CALL OResultSet::getFloat( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getFloat(); } sal_Int32 SAL_CALL OResultSet::getInt( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getInt32(); } @@ -265,13 +265,13 @@ sal_Int32 SAL_CALL OResultSet::getRow( ) OSL_ENSURE((m_bShowDeleted || !m_aRow->isDeleted()),"getRow called for deleted row"); - return m_aSkipDeletedSet.getMappedPosition((*m_aRow)[0]->getValue()); + return m_aSkipDeletedSet.getMappedPosition((*m_aRow)[0]->getValue().getInt32()); } sal_Int64 SAL_CALL OResultSet::getLong( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getLong(); } @@ -317,22 +317,22 @@ Any SAL_CALL OResultSet::getObject( sal_Int32 columnIndex, const Reference< css: sal_Int16 SAL_CALL OResultSet::getShort( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getInt16(); } OUString SAL_CALL OResultSet::getString( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getString(); } css::util::Time SAL_CALL OResultSet::getTime( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getTime(); } css::util::DateTime SAL_CALL OResultSet::getTimestamp( sal_Int32 columnIndex ) { - return getValue(columnIndex); + return getValue(columnIndex).getDateTime(); } @@ -519,12 +519,12 @@ void SAL_CALL OResultSet::insertRow( ) m_bRowInserted = m_pTable->InsertRow(*m_aInsertRow, m_xColsIdx); if(m_bRowInserted && m_pFileSet.is()) { - sal_Int32 nPos = (*m_aInsertRow)[0]->getValue(); + sal_Int32 nPos = (*m_aInsertRow)[0]->getValue().getInt32(); m_pFileSet->push_back(nPos); *(*m_aInsertRow)[0] = sal_Int32(m_pFileSet->size()); clearInsertRow(); - m_aSkipDeletedSet.insertNewPosition((*m_aRow)[0]->getValue()); + m_aSkipDeletedSet.insertNewPosition((*m_aRow)[0]->getValue().getInt32()); } } @@ -537,7 +537,7 @@ void SAL_CALL OResultSet::updateRow( ) lcl_throwError(STR_TABLE_READONLY,*this); m_bRowUpdated = m_pTable->UpdateRow(*m_aInsertRow, m_aRow,m_xColsIdx); - *(*m_aInsertRow)[0] = static_cast<sal_Int32>((*m_aRow)[0]->getValue()); + *(*m_aInsertRow)[0] = (*m_aRow)[0]->getValue().getInt32(); clearInsertRow(); } @@ -554,7 +554,7 @@ void SAL_CALL OResultSet::deleteRow() if(m_aRow->isDeleted()) lcl_throwError(STR_ROW_ALREADY_DELETED,*this); - sal_Int32 nPos = static_cast<sal_Int32>((*m_aRow)[0]->getValue()); + sal_Int32 nPos = (*m_aRow)[0]->getValue().getInt32(); m_bRowDeleted = m_pTable->DeleteRow(*m_xColumns); if(m_bRowDeleted && m_pFileSet.is()) { @@ -838,7 +838,7 @@ again: } else if (m_pFileSet.is()) { - sal_uInt32 nBookmarkValue = std::abs(static_cast<sal_Int32>((*m_aEvaluateRow)[0]->getValue())); + sal_uInt32 nBookmarkValue = std::abs((*m_aEvaluateRow)[0]->getValue().getInt32()); m_pFileSet->push_back(nBookmarkValue); } } @@ -922,7 +922,7 @@ bool OResultSet::Move(IResultSetHelper::Movement eCursorPosition, sal_Int32 nOff // The FileCursor is outside of the valid range, if: // a.) m_nRowPos < 1 // b.) a KeySet exists and m_nRowPos > m_pFileSet->size() - if (m_nRowPos < 0 || (m_pFileSet->isFrozen() && eCursorPosition != IResultSetHelper::BOOKMARK && m_nRowPos >= static_cast<sal_Int32>(m_pFileSet->size()) )) // && m_pFileSet->IsFrozen() + if (m_nRowPos < 0 || (m_pFileSet->isFrozen() && eCursorPosition != IResultSetHelper::BOOKMARK && o3tl::make_unsigned(m_nRowPos) >= m_pFileSet->size() )) // && m_pFileSet->IsFrozen() { goto Error; } @@ -1137,14 +1137,14 @@ void OResultSet::sortRows() ++i; } - m_pSortIndex.reset(new OSortIndex(eKeyType,m_aOrderbyAscending)); + m_pSortIndex.reset(new OSortIndex(std::move(eKeyType), std::vector(m_aOrderbyAscending))); while ( ExecuteRow( IResultSetHelper::NEXT, 1, false ) ) { (*m_aSelectRow)[0]->setValue( (*m_aRow)[0]->getValue() ); if ( m_pSQLAnalyzer->hasFunctions() ) m_pSQLAnalyzer->setSelectionEvaluationResult( m_aSelectRow, m_aColMapping ); - const sal_Int32 nBookmark = (*m_aRow->begin())->getValue(); + const sal_Int32 nBookmark = (*m_aRow->begin())->getValue().getInt32(); ExecuteRow( IResultSetHelper::BOOKMARK, nBookmark, true, false ); } @@ -1381,22 +1381,6 @@ void OResultSet::OpenImpl() m_nFilePos = 0; } -Sequence< sal_Int8 > OResultSet::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OResultSet::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OResultSet>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : 0; -} - void OResultSet::setBoundedColumns(const OValueRefRow& _rRow, const OValueRefRow& _rSelectRow, const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns, @@ -1514,12 +1498,12 @@ void OResultSet::setBoundedColumns(const OValueRefRow& _rRow, } } -void SAL_CALL OResultSet::acquire() throw() +void SAL_CALL OResultSet::acquire() noexcept { OResultSet_BASE::acquire(); } -void SAL_CALL OResultSet::release() throw() +void SAL_CALL OResultSet::release() noexcept { OResultSet_BASE::release(); } @@ -1531,8 +1515,7 @@ Reference< css::beans::XPropertySetInfo > SAL_CALL OResultSet::getPropertySetInf void OResultSet::doTableSpecials(const OSQLTable& _xTable) { - Reference<css::lang::XUnoTunnel> xTunnel(_xTable, UNO_QUERY_THROW); - m_pTable = reinterpret_cast< OFileTable* >(xTunnel->getSomething(OFileTable::getUnoTunnelId())); + m_pTable = dynamic_cast<OFileTable*>(_xTable.get()); assert(m_pTable.is()); } @@ -1575,7 +1558,7 @@ bool OResultSet::move(IResultSetHelper::Movement _eCursorPosition, sal_Int32 _nO sal_Int32 OResultSet::getDriverPos() const { - return (*m_aRow)[0]->getValue(); + return (*m_aRow)[0]->getValue().getInt32(); } bool OResultSet::isRowDeleted() const @@ -1585,7 +1568,7 @@ bool OResultSet::isRowDeleted() const void SAL_CALL OResultSet::disposing( const EventObject& Source ) { - Reference<XPropertySet> xProp = m_pTable.get(); + Reference<XPropertySet> xProp = m_pTable; if(m_pTable.is() && Source.Source == xProp) { m_pTable.clear(); diff --git a/connectivity/source/drivers/file/FResultSetMetaData.cxx b/connectivity/source/drivers/file/FResultSetMetaData.cxx index f68a06532bb7..44898d88242b 100644 --- a/connectivity/source/drivers/file/FResultSetMetaData.cxx +++ b/connectivity/source/drivers/file/FResultSetMetaData.cxx @@ -22,6 +22,8 @@ #include <comphelper/extract.hxx> #include <connectivity/dbexception.hxx> #include <comphelper/types.hxx> +#include <o3tl/safeint.hxx> +#include <utility> using namespace ::comphelper; @@ -33,12 +35,11 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; -OResultSetMetaData::OResultSetMetaData(const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns,const OUString& _aTableName,OFileTable* _pTable) - :m_aTableName(_aTableName) - ,m_xColumns(_rxColumns) +OResultSetMetaData::OResultSetMetaData(::rtl::Reference<connectivity::OSQLColumns> _xColumns, OUString _aTableName, OFileTable* _pTable) + :m_aTableName(std::move(_aTableName)) + ,m_xColumns(std::move(_xColumns)) ,m_pTable(_pTable) { } @@ -51,7 +52,7 @@ OResultSetMetaData::~OResultSetMetaData() void OResultSetMetaData::checkColumnIndex(sal_Int32 column) { - if(column <= 0 || column > static_cast<sal_Int32>(m_xColumns->size())) + if(column <= 0 || o3tl::make_unsigned(column) > m_xColumns->size()) throwInvalidIndexException(*this); } diff --git a/connectivity/source/drivers/file/FStatement.cxx b/connectivity/source/drivers/file/FStatement.cxx index 08c4f7fdd844..4520abfeff1d 100644 --- a/connectivity/source/drivers/file/FStatement.cxx +++ b/connectivity/source/drivers/file/FStatement.cxx @@ -32,11 +32,13 @@ #include <com/sun/star/sdbc/FetchDirection.hpp> #include <com/sun/star/lang/DisposedException.hpp> #include <comphelper/sequence.hxx> +#include <comphelper/servicehelper.hxx> #include <cppuhelper/typeprovider.hxx> #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> #include <strings.hrc> #include <algorithm> +#include <cstddef> namespace connectivity::file { @@ -128,12 +130,12 @@ void OStatement_BASE2::disposing() OStatement_Base::disposing(); } -void SAL_CALL OStatement_Base::acquire() throw() +void SAL_CALL OStatement_Base::acquire() noexcept { OStatement_BASE::acquire(); } -void SAL_CALL OStatement_BASE2::release() throw() +void SAL_CALL OStatement_BASE2::release() noexcept { OStatement_BASE::release(); } @@ -192,7 +194,7 @@ Any SAL_CALL OStatement_Base::getWarnings( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return makeAny(m_aLastWarning); + return Any(m_aLastWarning); } void SAL_CALL OStatement_Base::clearWarnings( ) @@ -216,19 +218,19 @@ void SAL_CALL OStatement_Base::clearWarnings( ) return *getArrayHelper(); } -OResultSet* OStatement::createResultSet() +rtl::Reference<OResultSet> OStatement::createResultSet() { return new OResultSet(this,m_aSQLIterator); } IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbc.driver.file.Statement","com.sun.star.sdbc.Statement"); -void SAL_CALL OStatement::acquire() throw() +void SAL_CALL OStatement::acquire() noexcept { OStatement_BASE2::acquire(); } -void SAL_CALL OStatement::release() throw() +void SAL_CALL OStatement::release() noexcept { OStatement_BASE2::release(); } @@ -251,9 +253,9 @@ Reference< XResultSet > SAL_CALL OStatement::executeQuery( const OUString& sql ) construct(sql); Reference< XResultSet > xRS; - OResultSet* pResult = createResultSet(); + rtl::Reference<OResultSet> pResult = createResultSet(); xRS = pResult; - initializeResultSet(pResult); + initializeResultSet(pResult.get()); m_xResultSet = xRS; pResult->OpenImpl(); @@ -263,7 +265,7 @@ Reference< XResultSet > SAL_CALL OStatement::executeQuery( const OUString& sql ) Reference< XConnection > SAL_CALL OStatement::getConnection( ) { - return Reference< XConnection >(m_pConnection.get()); + return m_pConnection; } sal_Int32 SAL_CALL OStatement::executeUpdate( const OUString& sql ) @@ -302,9 +304,9 @@ Any SAL_CALL OStatement::queryInterface( const Type & rType ) return aRet.hasValue() ? aRet : OStatement_BASE2::queryInterface( rType); } -void OStatement_Base::anylizeSQL() +void OStatement_Base::analyzeSQL() { - OSL_ENSURE(m_pSQLAnalyzer,"OResultSet::anylizeSQL: Analyzer isn't set!"); + OSL_ENSURE(m_pSQLAnalyzer,"OResultSet::analyzeSQL: Analyzer isn't set!"); // start analysing the statement m_pSQLAnalyzer->setOrigColumns(m_xColNames); m_pSQLAnalyzer->start(m_pParseTree); @@ -394,16 +396,19 @@ void OStatement_Base::construct(const OUString& sql) case OSQLStatementType::Unknown: m_pConnection->throwGenericSQLException(STR_QUERY_TOO_COMPLEX,*this); break; + case OSQLStatementType::Select: + if(SQL_ISRULE(m_aSQLIterator.getParseTree(), union_statement)) + { + m_pConnection->throwGenericSQLException(STR_QUERY_TOO_COMPLEX, *this); + } + assert(SQL_ISRULE(m_aSQLIterator.getParseTree(), select_statement)); + break; default: break; } // at this moment we support only one table per select statement - Reference< css::lang::XUnoTunnel> xTunnel(rTabs.begin()->second,UNO_QUERY); - if(xTunnel.is()) - { - m_pTable = reinterpret_cast<OFileTable*>(xTunnel->getSomething(OFileTable::getUnoTunnelId())); - } + m_pTable = dynamic_cast<OFileTable*>(rTabs.begin()->second.get()); OSL_ENSURE(m_pTable.is(),"No table!"); if ( m_pTable.is() ) m_xColNames = m_pTable->getColumns(); @@ -428,7 +433,7 @@ void OStatement_Base::construct(const OUString& sql) m_pSQLAnalyzer.reset( new OSQLAnalyzer(m_pConnection.get()) ); - anylizeSQL(); + analyzeSQL(); } void OStatement_Base::createColumnMapping() @@ -436,7 +441,7 @@ void OStatement_Base::createColumnMapping() // initialize the column index map (mapping select columns to table columns) ::rtl::Reference<connectivity::OSQLColumns> xColumns = m_aSQLIterator.getSelectColumns(); m_aColMapping.resize(xColumns->size() + 1); - for (sal_Int32 i=0; i<static_cast<sal_Int32>(m_aColMapping.size()); ++i) + for (std::size_t i=0; i<m_aColMapping.size(); ++i) m_aColMapping[i] = i; Reference<XIndexAccess> xNames(m_xColNames,UNO_QUERY); @@ -449,10 +454,10 @@ void OStatement_Base::initializeResultSet(OResultSet* _pResult) GetAssignValues(); _pResult->setSqlAnalyzer(m_pSQLAnalyzer.get()); - _pResult->setOrderByColumns(m_aOrderbyColumnNumber); - _pResult->setOrderByAscending(m_aOrderbyAscending); + _pResult->setOrderByColumns(std::vector(m_aOrderbyColumnNumber)); + _pResult->setOrderByAscending(std::vector(m_aOrderbyAscending)); _pResult->setBindingRow(m_aRow); - _pResult->setColumnMapping(m_aColMapping); + _pResult->setColumnMapping(std::vector(m_aColMapping)); _pResult->setEvaluationRow(m_aEvaluateRow); _pResult->setAssignValues(m_aAssignValues); _pResult->setSelectRow(m_aSelectRow); @@ -495,10 +500,7 @@ void OStatement_Base::GetAssignValues() if (pOptColumnCommalist->count() == 0) { const Sequence< OUString>& aNames = m_xColNames->getElementNames(); - const OUString* pBegin = aNames.getConstArray(); - const OUString* pEnd = pBegin + aNames.getLength(); - for (; pBegin != pEnd; ++pBegin) - aColumnNameList.push_back(*pBegin); + aColumnNameList.insert(aColumnNameList.end(), aNames.begin(), aNames.end()); } else { diff --git a/connectivity/source/drivers/file/FStringFunctions.cxx b/connectivity/source/drivers/file/FStringFunctions.cxx index 8bac436e07be..d02c7cce1737 100644 --- a/connectivity/source/drivers/file/FStringFunctions.cxx +++ b/connectivity/source/drivers/file/FStringFunctions.cxx @@ -18,6 +18,8 @@ */ #include <file/FStringFunctions.hxx> + +#include <comphelper/string.hxx> #include <rtl/ustrbuf.hxx> using namespace connectivity; @@ -61,14 +63,14 @@ ORowSetValue OOp_Char::operate(const std::vector<ORowSetValue>& lhs) const if (lhs.empty()) return ORowSetValue(); - OUStringBuffer sRet; + OUStringBuffer sRet(static_cast<sal_Int32>(lhs.size())); std::vector<ORowSetValue>::const_reverse_iterator aIter = lhs.rbegin(); std::vector<ORowSetValue>::const_reverse_iterator aEnd = lhs.rend(); for (; aIter != aEnd; ++aIter) { if (!aIter->isNull()) { - char c = static_cast<char>(static_cast<sal_Int32>(*aIter)); + char c = static_cast<char>(aIter->getInt32()); sRet.appendAscii(&c, 1); } @@ -90,7 +92,7 @@ ORowSetValue OOp_Concat::operate(const std::vector<ORowSetValue>& lhs) const if (aIter->isNull()) return ORowSetValue(); - sRet.append(aIter->operator OUString()); + sRet.append(aIter->getString()); } return sRet.makeStringAndClear(); @@ -108,7 +110,7 @@ ORowSetValue OOp_Locate::operate(const std::vector<ORowSetValue>& lhs) const else if (lhs.size() != 3) return ORowSetValue(); - return lhs[1].getString().indexOf(lhs[2].getString(), lhs[0]) + 1; + return lhs[1].getString().indexOf(lhs[2].getString(), lhs[0].getInt32()) + 1; } ORowSetValue OOp_SubString::operate(const std::vector<ORowSetValue>& lhs) const @@ -117,13 +119,13 @@ ORowSetValue OOp_SubString::operate(const std::vector<ORowSetValue>& lhs) const [](const ORowSetValue& rValue) { return rValue.isNull(); })) return ORowSetValue(); - if (lhs.size() == 2 && static_cast<sal_Int32>(lhs[0]) >= sal_Int32(0)) - return lhs[1].getString().copy(static_cast<sal_Int32>(lhs[0]) - 1); + if (lhs.size() == 2 && lhs[0].getInt32() >= sal_Int32(0)) + return lhs[1].getString().copy(lhs[0].getInt32() - 1); - else if (lhs.size() != 3 || static_cast<sal_Int32>(lhs[1]) < sal_Int32(0)) + else if (lhs.size() != 3 || lhs[1].getInt32() < sal_Int32(0)) return ORowSetValue(); - return lhs[2].getString().copy(static_cast<sal_Int32>(lhs[1]) - 1, lhs[0]); + return lhs[2].getString().copy(lhs[1].getInt32() - 1, lhs[0].getInt32()); } ORowSetValue OOp_LTrim::operate(const ORowSetValue& lhs) const @@ -131,7 +133,7 @@ ORowSetValue OOp_LTrim::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - OUString sRet = lhs; + OUString sRet = lhs.getString(); OUString sNew = sRet.trim(); return sRet.copy(sRet.indexOf(sNew)); } @@ -141,7 +143,7 @@ ORowSetValue OOp_RTrim::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - OUString sRet = lhs; + OUString sRet = lhs.getString(); OUString sNew = sRet.trim(); return sRet.copy(0, sRet.lastIndexOf(sNew[sNew.getLength() - 1]) + 1); } @@ -151,13 +153,9 @@ ORowSetValue OOp_Space::operate(const ORowSetValue& lhs) const if (lhs.isNull()) return lhs; - const char c = ' '; - OUStringBuffer sRet; - sal_Int32 nCount = lhs; - for (sal_Int32 i = 0; i < nCount; ++i) - { - sRet.appendAscii(&c, 1); - } + sal_Int32 nCount = std::max(lhs.getInt32(), sal_Int32(0)); + OUStringBuffer sRet(nCount); + comphelper::string::padToLength(sRet, nCount, ' '); return sRet.makeStringAndClear(); } @@ -166,17 +164,10 @@ ORowSetValue OOp_Replace::operate(const std::vector<ORowSetValue>& lhs) const if (lhs.size() != 3) return ORowSetValue(); - OUString sStr = lhs[2]; - OUString sFrom = lhs[1]; - OUString sTo = lhs[0]; - sal_Int32 nIndexOf = sStr.indexOf(sFrom); - while (nIndexOf != -1) - { - sStr = sStr.replaceAt(nIndexOf, sFrom.getLength(), sTo); - nIndexOf = sStr.indexOf(sFrom, nIndexOf + sTo.getLength()); - } - - return sStr; + OUString sStr = lhs[2].getString(); + OUString sFrom = lhs[1].getString(); + OUString sTo = lhs[0].getString(); + return sStr.replaceAll(sFrom, sTo); } ORowSetValue OOp_Repeat::operate(const ORowSetValue& lhs, const ORowSetValue& rhs) const @@ -184,11 +175,12 @@ ORowSetValue OOp_Repeat::operate(const ORowSetValue& lhs, const ORowSetValue& rh if (lhs.isNull() || rhs.isNull()) return lhs; - OUStringBuffer sRet; - sal_Int32 nCount = rhs; + const OUString s = lhs.getString(); + const sal_Int32 nCount = std::max(rhs.getInt32(), sal_Int32(0)); + OUStringBuffer sRet(s.getLength() * nCount); for (sal_Int32 i = 0; i < nCount; ++i) { - sRet.append(lhs.operator OUString()); + sRet.append(s); } return sRet.makeStringAndClear(); } @@ -198,12 +190,12 @@ ORowSetValue OOp_Insert::operate(const std::vector<ORowSetValue>& lhs) const if (lhs.size() != 4) return ORowSetValue(); - OUString sStr = lhs[3]; + OUString sStr = lhs[3].getString(); - sal_Int32 nStart = static_cast<sal_Int32>(lhs[2]); + sal_Int32 nStart = lhs[2].getInt32(); if (nStart < 1) nStart = 1; - return sStr.replaceAt(nStart - 1, static_cast<sal_Int32>(lhs[1]), lhs[0]); + return sStr.replaceAt(nStart - 1, lhs[1].getInt32(), lhs[0].getString()); } ORowSetValue OOp_Left::operate(const ORowSetValue& lhs, const ORowSetValue& rhs) const @@ -211,8 +203,8 @@ ORowSetValue OOp_Left::operate(const ORowSetValue& lhs, const ORowSetValue& rhs) if (lhs.isNull() || rhs.isNull()) return lhs; - OUString sRet = lhs; - sal_Int32 nCount = rhs; + OUString sRet = lhs.getString(); + sal_Int32 nCount = rhs.getInt32(); if (nCount < 0) return ORowSetValue(); return sRet.copy(0, nCount); @@ -223,8 +215,8 @@ ORowSetValue OOp_Right::operate(const ORowSetValue& lhs, const ORowSetValue& rhs if (lhs.isNull() || rhs.isNull()) return lhs; - sal_Int32 nCount = rhs; - OUString sRet = lhs; + sal_Int32 nCount = rhs.getInt32(); + OUString sRet = lhs.getString(); if (nCount < 0 || nCount >= sRet.getLength()) return ORowSetValue(); diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx index b47bfb811a1f..06dc187fa20e 100644 --- a/connectivity/source/drivers/file/FTable.cxx +++ b/connectivity/source/drivers/file/FTable.cxx @@ -23,7 +23,6 @@ #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> #include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> #include <unotools/ucbstreamhelper.hxx> using namespace connectivity; @@ -87,7 +86,7 @@ void OFileTable::refreshColumns() if(m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = new OColumns(this,m_aMutex,aVector); + m_xColumns.reset(new OColumns(this,m_aMutex,aVector)); } void OFileTable::refreshKeys() @@ -119,29 +118,10 @@ void SAL_CALL OFileTable::disposing() FileClose(); } -Sequence< sal_Int8 > OFileTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId s_Id; - - return s_Id.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OFileTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return isUnoTunnelId<OFileTable>(rId) - ? reinterpret_cast< sal_Int64 >( this ) - : OTable_TYPEDEF::getSomething(rId); -} - void OFileTable::FileClose() { ::osl::MutexGuard aGuard(m_aMutex); - if (m_pFileStream && m_pFileStream->IsWritable()) - m_pFileStream->Flush(); - m_pFileStream.reset(); m_pBuffer.reset(); } diff --git a/connectivity/source/drivers/file/FTables.cxx b/connectivity/source/drivers/file/FTables.cxx index c063f4a890e6..eda988d9bb44 100644 --- a/connectivity/source/drivers/file/FTables.cxx +++ b/connectivity/source/drivers/file/FTables.cxx @@ -23,10 +23,8 @@ using namespace connectivity; using namespace connectivity::file; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; sdbcx::ObjectType OTables::createObject(const OUString& /*_rName*/) { diff --git a/connectivity/source/drivers/file/fanalyzer.cxx b/connectivity/source/drivers/file/fanalyzer.cxx index a0d1305f6f89..0a749cc3b22d 100644 --- a/connectivity/source/drivers/file/fanalyzer.cxx +++ b/connectivity/source/drivers/file/fanalyzer.cxx @@ -28,7 +28,6 @@ using namespace ::connectivity; using namespace ::connectivity::file; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; OSQLAnalyzer::OSQLAnalyzer(OConnection* _pConnection) diff --git a/connectivity/source/drivers/file/fcode.cxx b/connectivity/source/drivers/file/fcode.cxx index 36cba4a73485..ec56032c8491 100644 --- a/connectivity/source/drivers/file/fcode.cxx +++ b/connectivity/source/drivers/file/fcode.cxx @@ -20,11 +20,10 @@ #include <file/fcode.hxx> #include <osl/diagnose.h> #include <sal/log.hxx> -#include <connectivity/sqlparse.hxx> +#include <connectivity/sqlnode.hxx> #include <sqlbison.hxx> #include <com/sun/star/sdb/SQLFilterOperator.hpp> -using namespace ::comphelper; using namespace connectivity; using namespace connectivity::file; using namespace ::com::sun::star::sdbc; @@ -63,32 +62,14 @@ void OOperandValue::setValue(const ORowSetValue& _rVal) m_aValue = _rVal; } -OOperandParam::OOperandParam(OSQLParseNode const * pNode, sal_Int32 _nPos) +OOperandParam::OOperandParam(sal_Int32 _nPos) : OOperandRow(static_cast<sal_uInt16>(_nPos), DataType::VARCHAR) // Standard-Type { - OSL_ENSURE(SQL_ISRULE(pNode,parameter),"Argument is not a parameter"); - OSL_ENSURE(pNode->count() > 0,"Error in Parse Tree"); - OSQLParseNode *pMark = pNode->getChild(0); - - OUString aParameterName; - if (SQL_ISPUNCTUATION(pMark, "?")) - aParameterName = "?"; - else if (SQL_ISPUNCTUATION(pMark, ":")) - aParameterName = pNode->getChild(1)->getTokenValue(); - else - { - SAL_WARN( "connectivity.drivers","Error in Parse Tree"); - } - - // set up Parameter-Column with default type, can be specified more precisely later using Describe-Parameter - - // save Identity (not especially necessary here, just for the sake of symmetry) - - // todo - // OColumn* pColumn = new OFILEColumn(aParameterName,eDBType,255,0,SQL_FLAGS_NULLALLOWED); - // rParamColumns->AddColumn(pColumn); - - // the value will be set just before the evaluation + //TODO: Actually do something here (the current state of OOperandParam appears to be "the + // remains of the very beginnings of a never finished implementation of support for parameters + // in this code", as Lionel put it in the comments at <https://gerrit.libreoffice.org/c/core/+/ + // 116839/1#message-7b2bbf3543f559a0b67dc35cd940e2ab8829c274> "-Werror,-Wunused-but-set-variable + // (Clang 13 trunk)"). } @@ -249,7 +230,7 @@ bool OOp_COMPARE::operate(const OOperand* pLeft, const OOperand* pRight) const case DataType::VARCHAR: case DataType::LONGVARCHAR: { - OUString sLH = aLH, sRH = aRH; + OUString sLH = aLH.getString(), sRH = aRH.getString(); sal_Int32 nRes = sLH.compareToIgnoreAsciiCase(sRH); switch(aPredicateType) { @@ -274,7 +255,7 @@ bool OOp_COMPARE::operate(const OOperand* pLeft, const OOperand* pRight) const case DataType::DATE: case DataType::TIME: { - double n = aLH ,m = aRH; + double n = aLH.getDouble(), m = aRH.getDouble(); switch (aPredicateType) { @@ -303,7 +284,7 @@ void ONumOperator::Exec(OCodeStack& rCodeStack) OOperand *pLeft = rCodeStack.top(); rCodeStack.pop(); - rCodeStack.push(new OOperandResultNUM(operate(pLeft->getValue(), pRight->getValue()))); + rCodeStack.push(new OOperandResultNUM(operate(pLeft->getValue().getDouble(), pRight->getValue().getDouble()))); if( typeid(OOperandResult) == typeid(*pLeft)) delete pLeft; if( typeid(OOperandResult) == typeid(*pRight)) diff --git a/connectivity/source/drivers/file/fcomp.cxx b/connectivity/source/drivers/file/fcomp.cxx index 982d0266b949..45c9022340a9 100644 --- a/connectivity/source/drivers/file/fcomp.cxx +++ b/connectivity/source/drivers/file/fcomp.cxx @@ -22,9 +22,6 @@ #include <connectivity/sqlparse.hxx> #include <file/fanalyzer.hxx> #include <com/sun/star/sdbc/XColumnLocate.hpp> -#include <com/sun/star/util/DateTime.hpp> -#include <com/sun/star/util/Date.hpp> -#include <com/sun/star/util/Time.hpp> #include <connectivity/dbexception.hxx> #include <connectivity/dbconversion.hxx> #include <com/sun/star/sdb/SQLFilterOperator.hpp> @@ -32,7 +29,7 @@ #include <file/FDateFunctions.hxx> #include <file/FNumericFunctions.hxx> #include <file/FConnection.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <sqlbison.hxx> #include <strings.hrc> @@ -353,29 +350,29 @@ void OPredicateCompiler::execute_BETWEEN(OSQLParseNode const * pPredicateNode) break; case DataType::DECIMAL: case DataType::NUMERIC: - pOb1->setValue(static_cast<double>(pOb1->getValue())); - pOb2->setValue(static_cast<double>(pOb2->getValue())); + pOb1->setValue(pOb1->getValue().getDouble()); + pOb2->setValue(pOb2->getValue().getDouble()); break; case DataType::FLOAT: - pOb1->setValue(static_cast<float>(pOb1->getValue())); - pOb2->setValue(static_cast<float>(pOb2->getValue())); + pOb1->setValue(pOb1->getValue().getFloat()); + pOb2->setValue(pOb2->getValue().getFloat()); break; case DataType::DOUBLE: case DataType::REAL: - pOb1->setValue(static_cast<double>(pOb1->getValue())); - pOb2->setValue(static_cast<double>(pOb2->getValue())); + pOb1->setValue(pOb1->getValue().getDouble()); + pOb2->setValue(pOb2->getValue().getDouble()); break; case DataType::DATE: - pOb1->setValue(static_cast<util::Date>(pOb1->getValue())); - pOb2->setValue(static_cast<util::Date>(pOb2->getValue())); + pOb1->setValue(pOb1->getValue().getDate()); + pOb2->setValue(pOb2->getValue().getDate()); break; case DataType::TIME: - pOb1->setValue(static_cast<util::Time>(pOb1->getValue())); - pOb2->setValue(static_cast<util::Time>(pOb2->getValue())); + pOb1->setValue(pOb1->getValue().getTime()); + pOb2->setValue(pOb2->getValue().getTime()); break; case DataType::TIMESTAMP: - pOb1->setValue(static_cast<util::DateTime>(pOb1->getValue())); - pOb2->setValue(static_cast<util::DateTime>(pOb2->getValue())); + pOb1->setValue(pOb1->getValue().getDateTime()); + pOb2->setValue(pOb2->getValue().getDateTime()); break; } } @@ -457,7 +454,7 @@ OOperand* OPredicateCompiler::execute_Operand(OSQLParseNode const * pPredicateNo } else if (SQL_ISRULE(pPredicateNode,parameter)) { - pOperand = new OOperandParam(pPredicateNode, ++m_nParamCounter); + pOperand = new OOperandParam(++m_nParamCounter); } else if (pPredicateNode->getNodeType() == SQLNodeType::String || pPredicateNode->getNodeType() == SQLNodeType::IntNum || @@ -533,8 +530,6 @@ OOperand* OPredicateCompiler::execute_Operand(OSQLParseNode const * pPredicateNo bool OPredicateInterpreter::evaluate(OCodeList& rCodeList) { - static bool bResult; - if (!(rCodeList[0])) return true; // no Predicate @@ -553,7 +548,7 @@ bool OPredicateInterpreter::evaluate(OCodeList& rCodeList) DBG_ASSERT(m_aStack.empty(), "Stack error"); DBG_ASSERT(pOperand, "Stack error"); - bResult = pOperand->isValid(); + const bool bResult = pOperand->isValid(); if (typeid(OOperandResult) == typeid(*pOperand)) delete pOperand; return bResult; diff --git a/connectivity/source/drivers/firebird/Blob.cxx b/connectivity/source/drivers/firebird/Blob.cxx index 8ed9fc4a8ac7..26a5deaca0b4 100644 --- a/connectivity/source/drivers/firebird/Blob.cxx +++ b/connectivity/source/drivers/firebird/Blob.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -19,7 +19,7 @@ #include <connectivity/CommonTools.hxx> #include <connectivity/dbexception.hxx> #include <cppuhelper/exc_hlp.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::connectivity::firebird; @@ -67,7 +67,7 @@ void Blob::ensureBlobIsOpened() nullptr); if (aErr) - evaluateStatusVector(m_statusVector, "isc_open_blob2", *this); + evaluateStatusVector(m_statusVector, u"isc_open_blob2", *this); m_bBlobOpened = true; m_nBlobPosition = 0; @@ -90,7 +90,7 @@ void Blob::ensureBlobIsOpened() aResultBuffer); if (aErr) - evaluateStatusVector(m_statusVector, "isc_blob_info", *this); + evaluateStatusVector(m_statusVector, u"isc_blob_info", *this); char* pIt = aResultBuffer; while( *pIt != isc_info_end ) // info is in clusters @@ -122,28 +122,31 @@ sal_uInt16 Blob::getMaximumSegmentSize() return m_nMaxSegmentSize; } -bool Blob::readOneSegment(uno::Sequence< sal_Int8 >& rDataOut) +bool Blob::readOneSegment(std::vector<char>& rDataOut) { checkDisposed(Blob_BASE::rBHelper.bDisposed); ensureBlobIsOpened(); sal_uInt16 nMaxSize = getMaximumSegmentSize(); - if(rDataOut.getLength() < nMaxSize) - rDataOut.realloc(nMaxSize); + if(rDataOut.size() < nMaxSize) + rDataOut.resize(nMaxSize); sal_uInt16 nActualSize = 0; ISC_STATUS aRet = isc_get_segment(m_statusVector, &m_blobHandle, &nActualSize, nMaxSize, - reinterpret_cast<char*>(rDataOut.getArray()) ); + rDataOut.data() ); if (aRet && aRet != isc_segstr_eof && IndicatesError(m_statusVector)) { - OUString sError(StatusVectorToString(m_statusVector, "isc_get_segment")); + OUString sError(StatusVectorToString(m_statusVector, u"isc_get_segment")); throw IOException(sError, *this); } + + if (rDataOut.size() > nActualSize) + rDataOut.resize(nActualSize); m_nBlobPosition += nActualSize; return aRet == isc_segstr_eof; // last segment read } @@ -160,7 +163,7 @@ void Blob::closeBlob() aErr = isc_close_blob(m_statusVector, &m_blobHandle); if (aErr) - evaluateStatusVector(m_statusVector, "isc_close_blob", *this); + evaluateStatusVector(m_statusVector, u"isc_close_blob", *this); m_bBlobOpened = false; #if SAL_TYPES_SIZEOFPOINTER == 8 @@ -299,7 +302,7 @@ sal_Int32 SAL_CALL Blob::readBytes(uno::Sequence< sal_Int8 >& rDataOut, reinterpret_cast<char*>(rDataOut.getArray()) + nTotalBytesRead); if (aErr && IndicatesError(m_statusVector)) { - OUString sError(StatusVectorToString(m_statusVector, "isc_get_segment")); + OUString sError(StatusVectorToString(m_statusVector, u"isc_get_segment")); throw IOException(sError, *this); } nTotalBytesRead += nBytesRead; @@ -385,4 +388,4 @@ void SAL_CALL Blob::closeInput() } } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Blob.hxx b/connectivity/source/drivers/firebird/Blob.hxx index 9cad65a3c05f..990108934bf2 100644 --- a/connectivity/source/drivers/firebird/Blob.hxx +++ b/connectivity/source/drivers/firebird/Blob.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_BLOB_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_BLOB_HXX +#pragma once #include <ibase.h> @@ -17,6 +16,8 @@ #include <com/sun/star/io/XInputStream.hpp> #include <com/sun/star/sdbc/XBlob.hpp> +#include <vector> + namespace connectivity::firebird { typedef ::cppu::WeakComponentImplHelper< css::sdbc::XBlob, @@ -60,7 +61,7 @@ namespace connectivity::firebird isc_tr_handle* pTransactionHandle, ISC_QUAD const & aBlobID); - bool readOneSegment(css::uno::Sequence< sal_Int8 >& rDataOut); + bool readOneSegment(std::vector<char>& rDataOut); // ---- XBlob ---------------------------------------------------- virtual sal_Int64 SAL_CALL @@ -96,5 +97,4 @@ namespace connectivity::firebird } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_BLOB_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Catalog.cxx b/connectivity/source/drivers/firebird/Catalog.cxx index 47fedab60d59..2ef4f514b12a 100644 --- a/connectivity/source/drivers/firebird/Catalog.cxx +++ b/connectivity/source/drivers/firebird/Catalog.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -10,6 +10,7 @@ #include "Catalog.hxx" #include "Tables.hxx" #include "Users.hxx" +#include "Views.hxx" #include <com/sun/star/sdbc/XRow.hpp> @@ -27,9 +28,7 @@ Catalog::Catalog(const uno::Reference< XConnection >& rConnection): //----- OCatalog ------------------------------------------------------------- void Catalog::refreshTables() { - Sequence< OUString > aTypes(2); - aTypes[0] = "TABLE"; - aTypes[1] = "VIEW"; + Sequence< OUString > aTypes {"TABLE", "VIEW"}; uno::Reference< XResultSet > xTables = m_xMetaData->getTables(Any(), "%", @@ -55,8 +54,20 @@ void Catalog::refreshTables() void Catalog::refreshViews() { - // TODO: implement me. - // Sets m_pViews (OCatalog) + css::uno::Reference<css::sdbc::XResultSet> xViews + = m_xMetaData->getTables(css::uno::Any(), "%", "%", { "VIEW" }); + + if (!xViews.is()) + return; + + ::std::vector<OUString> aViewNames; + + fillNames(xViews, aViewNames); + + if (!m_pViews) + m_pViews.reset(new Views(m_xConnection, *this, m_aMutex, aViewNames)); + else + m_pViews->reFill(aViewNames); } //----- IRefreshableGroups --------------------------------------------------- @@ -90,4 +101,5 @@ void Catalog::refreshUsers() else m_pUsers->reFill(aUserNames); } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Catalog.hxx b/connectivity/source/drivers/firebird/Catalog.hxx index 1ac364bc845c..3ffb9238eda7 100644 --- a/connectivity/source/drivers/firebird/Catalog.hxx +++ b/connectivity/source/drivers/firebird/Catalog.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CATALOG_HXX +#pragma once #include <sdbcx/VCatalog.hxx> @@ -31,10 +30,11 @@ namespace connectivity::firebird // IRefreshableUsers virtual void refreshUsers() override; + + sdbcx::OCollection* getPrivateTables() const { return m_pTables.get(); } + sdbcx::OCollection* getPrivateViews() const { return m_pViews.get(); } }; } // namespace connectivity::firebird -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CATALOG_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Clob.cxx b/connectivity/source/drivers/firebird/Clob.cxx index 2038dfc11350..dde050edee3a 100644 --- a/connectivity/source/drivers/firebird/Clob.cxx +++ b/connectivity/source/drivers/firebird/Clob.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -9,8 +9,6 @@ #include <sal/config.h> -#include <string_view> - #include "Clob.hxx" #include "Blob.hxx" @@ -54,13 +52,11 @@ sal_Int64 SAL_CALL Clob::length() // Read each segment, and calculate it's size by interpreting it as a // character stream. Assume that no characters are split by the segments. bool bLastSegmRead = false; + std::vector<char> aSegmentBytes; do { - uno::Sequence < sal_Int8 > aSegmentBytes; bLastSegmRead = m_aBlob->readOneSegment( aSegmentBytes ); - OUString sSegment ( reinterpret_cast< char *>( aSegmentBytes.getArray() ), - aSegmentBytes.getLength(), - RTL_TEXTENCODING_UTF8 ); + OUString sSegment(aSegmentBytes.data(), aSegmentBytes.size(), RTL_TEXTENCODING_UTF8); if( !bLastSegmRead) m_nCharCount += sSegment.getLength(); @@ -73,60 +69,51 @@ sal_Int64 SAL_CALL Clob::length() OUString SAL_CALL Clob::getSubString(sal_Int64 nPosition, sal_Int32 nLength) { + if (nPosition < 1) // XClob is indexed from 1 + throw lang::IllegalArgumentException("nPosition < 1", *this, 0); + --nPosition; // make 0-based + + if (nLength < 0) + throw lang::IllegalArgumentException("nLength < 0", *this, 0); + MutexGuard aGuard(m_aMutex); checkDisposed(Clob_BASE::rBHelper.bDisposed); // TODO do not reset position if it is not necessary m_aBlob->closeInput(); // reset position OUStringBuffer sSegmentBuffer; - sal_Int64 nActPos = 1; - sal_Int32 nActLen = 0; + std::vector<char> aSegmentBytes; - // skip irrelevant parts - while( nActPos < nPosition ) + for (;;) { - uno::Sequence < sal_Int8 > aSegmentBytes; bool bLastRead = m_aBlob->readOneSegment( aSegmentBytes ); - if( bLastRead ) - throw lang::IllegalArgumentException("nPosition out of range", *this, 0); - - OUString sSegment ( reinterpret_cast< char *>( aSegmentBytes.getArray() ), - aSegmentBytes.getLength(), - RTL_TEXTENCODING_UTF8 ); - sal_Int32 nStrLen = sSegment.getLength(); - nActPos += nStrLen; - if( nActPos > nPosition ) + // TODO: handle possible case of split UTF-8 character + OUString sSegment(aSegmentBytes.data(), aSegmentBytes.size(), RTL_TEXTENCODING_UTF8); + + // skip irrelevant parts + if (sSegment.getLength() < nPosition) { - sal_Int32 nCharsToCopy = static_cast<sal_Int32>(nActPos - nPosition); - if( nCharsToCopy > nLength ) - nCharsToCopy = nLength; - // append relevant part of first segment - sSegmentBuffer.append( std::u16string_view(sSegment).substr(0, nCharsToCopy) ); - nActLen += sSegmentBuffer.getLength(); + if (bLastRead) + throw lang::IllegalArgumentException("nPosition out of range", *this, 0); + nPosition -= sSegment.getLength(); + continue; } - } - // read nLength characters - while( nActLen < nLength ) - { - uno::Sequence < sal_Int8 > aSegmentBytes; - bool bLastRead = m_aBlob->readOneSegment( aSegmentBytes ); + // Getting here for the first time, nPosition may be > 0, meaning copy start offset. + // This also handles sSegment.getLength() == nPosition case, including nLength == 0. + const sal_Int32 nCharsToCopy = std::min<sal_Int32>(sSegment.getLength() - nPosition, + nLength - sSegmentBuffer.getLength()); + sSegmentBuffer.append(sSegment.subView(nPosition, nCharsToCopy)); + if (sSegmentBuffer.getLength() == nLength) + return sSegmentBuffer.makeStringAndClear(); + + assert(sSegmentBuffer.getLength() < nLength); - OUString sSegment ( reinterpret_cast< char *>( aSegmentBytes.getArray() ), - aSegmentBytes.getLength(), - RTL_TEXTENCODING_UTF8 ); - sal_Int32 nStrLen = sSegment.getLength(); - if( nActLen + nStrLen > nLength ) - sSegmentBuffer.append(std::u16string_view(sSegment).substr(0, nLength - nActLen)); - else - sSegmentBuffer.append(sSegment); - nActLen += nStrLen; - - if( bLastRead && nActLen < nLength ) + if (bLastRead) throw lang::IllegalArgumentException("out of range", *this, 0); - } - return sSegmentBuffer.makeStringAndClear(); + nPosition = 0; // No offset after first append + } } uno::Reference< XInputStream > SAL_CALL Clob::getCharacterStream() @@ -147,9 +134,8 @@ sal_Int64 SAL_CALL Clob::position(const OUString& /*rPattern*/, sal_Int64 SAL_CALL Clob::positionOfClob(const Reference <XClob >& /*rPattern*/, sal_Int64 /*aStart*/) { - ::dbtools::throwFeatureNotImplementedSQLException("Blob::positionOfBlob", *this); + ::dbtools::throwFeatureNotImplementedSQLException("Clob::positionOfClob", *this); return 0; } - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Clob.hxx b/connectivity/source/drivers/firebird/Clob.hxx index 8ebc639f0bbb..7fc5459d5d29 100644 --- a/connectivity/source/drivers/firebird/Clob.hxx +++ b/connectivity/source/drivers/firebird/Clob.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CLOB_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CLOB_HXX +#pragma once #include "Blob.hxx" @@ -62,5 +61,4 @@ namespace connectivity::firebird } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CLOB_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Column.cxx b/connectivity/source/drivers/firebird/Column.cxx index aa8abf9bb75c..0a18ebe5b441 100644 --- a/connectivity/source/drivers/firebird/Column.cxx +++ b/connectivity/source/drivers/firebird/Column.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -48,4 +48,4 @@ css::uno::Sequence< OUString > SAL_CALL Column::getSupportedServiceNames( ) return { "com.sun.star.sdbc.Firebird" }; } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Column.hxx b/connectivity/source/drivers/firebird/Column.hxx index ce0bfa217051..c66287ce5668 100644 --- a/connectivity/source/drivers/firebird/Column.hxx +++ b/connectivity/source/drivers/firebird/Column.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -6,8 +6,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_HCOLUMN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_HCOLUMN_HXX +#pragma once #include <connectivity/sdbcx/VColumn.hxx> @@ -29,6 +28,5 @@ namespace connectivity::firebird }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCOLUMNS_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Columns.cxx b/connectivity/source/drivers/firebird/Columns.cxx index 293dac97dc5b..d36e25f9195b 100644 --- a/connectivity/source/drivers/firebird/Columns.cxx +++ b/connectivity/source/drivers/firebird/Columns.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -12,13 +12,11 @@ using namespace ::connectivity; using namespace ::connectivity::firebird; -using namespace ::connectivity::sdbcx; using namespace ::cppu; using namespace ::osl; using namespace ::com::sun::star; -using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::uno; Columns::Columns(Table& rTable, @@ -38,4 +36,4 @@ Reference< css::beans::XPropertySet > Columns::createDescriptor() return new Column; } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Columns.hxx b/connectivity/source/drivers/firebird/Columns.hxx index c7a22a2c245f..a211f70d1809 100644 --- a/connectivity/source/drivers/firebird/Columns.hxx +++ b/connectivity/source/drivers/firebird/Columns.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_COLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_COLUMNS_HXX +#pragma once #include "Table.hxx" @@ -28,7 +27,4 @@ namespace connectivity::firebird } // namespace connectivity::firebird - -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_COLUMNS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Connection.cxx b/connectivity/source/drivers/firebird/Connection.cxx index 05c24e9f73be..5a2be8872485 100644 --- a/connectivity/source/drivers/firebird/Connection.cxx +++ b/connectivity/source/drivers/firebird/Connection.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -22,7 +22,6 @@ #include "Clob.hxx" #include "Connection.hxx" #include "DatabaseMetaData.hxx" -#include "Driver.hxx" #include "PreparedStatement.hxx" #include "Statement.hxx" #include "Util.hxx" @@ -44,11 +43,12 @@ #include <resource/sharedresources.hxx> #include <comphelper/processfactory.hxx> +#include <comphelper/servicehelper.hxx> #include <comphelper/storagehelper.hxx> #include <cppuhelper/exc_hlp.hxx> #include <unotools/tempfile.hxx> -#include <unotools/localfilehelper.hxx> +#include <osl/file.hxx> #include <rtl/strbuf.hxx> #include <sal/log.hxx> @@ -72,16 +72,14 @@ using namespace ::com::sun::star::uno; * Location within the .odb that an embedded .fdb will be stored. * Only relevant for embedded dbs. */ -constexpr OUStringLiteral our_sFDBLocation( u"firebird.fdb" ); +constexpr OUString our_sFDBLocation( u"firebird.fdb"_ustr ); /** * Older version of LO may store the database in a .fdb file */ -constexpr OUStringLiteral our_sFBKLocation( u"firebird.fbk" ); +constexpr OUString our_sFBKLocation( u"firebird.fbk"_ustr ); Connection::Connection() : Connection_BASE(m_aMutex) - , m_sConnectionURL() - , m_sFirebirdURL() , m_bIsEmbedded(false) , m_bIsFile(false) , m_bIsAutoCommit(true) @@ -96,7 +94,6 @@ Connection::Connection() #endif , m_xCatalog(nullptr) , m_xMetaData(nullptr) - , m_aStatements() { } @@ -164,7 +161,7 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& bIsNewDatabase = !m_xEmbeddedStorage->hasElements(); - m_pDatabaseFileDir.reset(new ::utl::TempFile(nullptr, true)); + m_pDatabaseFileDir.reset(new ::utl::TempFileNamed(nullptr, true)); m_pDatabaseFileDir->EnableKillingFile(); m_sFirebirdURL = m_pDatabaseFileDir->GetFileName() + "/firebird.fdb"; m_sFBKPath = m_pDatabaseFileDir->GetFileName() + "/firebird.fbk"; @@ -199,7 +196,7 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& // External file AND/OR remote connection else if (url.startsWith("sdbc:firebird:")) { - m_sFirebirdURL = url.copy(OUString("sdbc:firebird:").getLength()); + m_sFirebirdURL = url.copy(strlen("sdbc:firebird:")); if (m_sFirebirdURL.startsWith("file://")) { m_bIsFile = true; @@ -208,19 +205,19 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& if (!xFileAccess->exists(m_sFirebirdURL)) bIsNewDatabase = true; - m_sFirebirdURL = m_sFirebirdURL.copy(OUString("file://").getLength()); + osl::FileBase::getSystemPathFromFileURL(m_sFirebirdURL, m_sFirebirdURL); } } std::string dpbBuffer; { - char userName[256] = ""; - char userPassword[256] = ""; + OString userName; + OString userPassword; dpbBuffer.push_back(isc_dpb_version1); dpbBuffer.push_back(isc_dpb_sql_dialect); dpbBuffer.push_back(1); // 1 byte long - dpbBuffer.push_back(FIREBIRD_SQL_DIALECT); + dpbBuffer.push_back(SQL_DIALECT_CURRENT); // set UTF8 as default character set of the database const char sCharset[] = "UTF8"; @@ -236,45 +233,64 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& if (m_bIsEmbedded || m_bIsFile) { - strcpy(userName,"sysdba"); - strcpy(userPassword,"masterkey"); + userName = "sysdba"_ostr; + userPassword = "masterkey"_ostr; } else { - // TODO: parse password from connection string as needed? + for (const auto& rIter : info) + { + if (rIter.Name == "user") + { + if (OUString value; rIter.Value >>= value) + userName = OUStringToOString(value, RTL_TEXTENCODING_UTF8); + } + else if (rIter.Name == "password") + { + if (OUString value; rIter.Value >>= value) + userPassword = OUStringToOString(value, RTL_TEXTENCODING_UTF8); + } + } } - if (strlen(userName)) + if (!userName.isEmpty()) { - int nUsernameLength = strlen(userName); + const sal_Int32 nMaxUsername = 255; //max size + int nUsernameLength = std::min(userName.getLength(), nMaxUsername); dpbBuffer.push_back(isc_dpb_user_name); dpbBuffer.push_back(nUsernameLength); - dpbBuffer.append(userName); + dpbBuffer.append(userName.getStr(), nUsernameLength); } - if (strlen(userPassword)) + if (!userPassword.isEmpty()) { - int nPasswordLength = strlen(userPassword); + const sal_Int32 nMaxPassword = 255; //max size + int nPasswordLength = std::min(userPassword.getLength(), nMaxPassword); dpbBuffer.push_back(isc_dpb_password); dpbBuffer.push_back(nPasswordLength); - dpbBuffer.append(userPassword); + dpbBuffer.append(userPassword.getStr(), nPasswordLength); } } + // use isc_dpb_utf8_filename to identify encoding of filenames + dpbBuffer.push_back(isc_dpb_utf8_filename); + dpbBuffer.push_back(0); // no filename here, it is passed to functions directly + ISC_STATUS_ARRAY status; /* status vector */ ISC_STATUS aErr; + const OString sFirebirdURL = OUStringToOString(m_sFirebirdURL, RTL_TEXTENCODING_UTF8); if (bIsNewDatabase) { aErr = isc_create_database(status, - m_sFirebirdURL.getLength(), - OUStringToOString(m_sFirebirdURL,RTL_TEXTENCODING_UTF8).getStr(), + sFirebirdURL.getLength(), + sFirebirdURL.getStr(), &m_aDBHandle, dpbBuffer.size(), dpbBuffer.c_str(), 0); if (aErr) { - evaluateStatusVector(status, "isc_create_database", *this); + evaluateStatusVector(status, u"isc_create_database", *this); } } else @@ -285,14 +301,14 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& } aErr = isc_attach_database(status, - m_sFirebirdURL.getLength(), - OUStringToOString(m_sFirebirdURL, RTL_TEXTENCODING_UTF8).getStr(), + sFirebirdURL.getLength(), + sFirebirdURL.getStr(), &m_aDBHandle, dpbBuffer.size(), dpbBuffer.c_str()); if (aErr) { - evaluateStatusVector(status, "isc_attach_database", *this); + evaluateStatusVector(status, u"isc_attach_database", *this); } } @@ -323,12 +339,6 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& } } -void Connection::notifyDatabaseModified() -{ - if (m_xParentDocument.is()) // Only true in embedded mode - m_xParentDocument->setModified(true); -} - //----- XServiceInfo --------------------------------------------------------- IMPLEMENT_SERVICE_INFO(Connection, "com.sun.star.sdbc.drivers.firebird.Connection", "com.sun.star.sdbc.Connection") @@ -342,7 +352,7 @@ Reference< XBlob> Connection::createBlob(ISC_QUAD const * pBlobId) &m_aTransactionHandle, *pBlobId); - m_aStatements.push_back(WeakReferenceHelper(xReturn)); + m_aStatements.emplace_back(xReturn); return xReturn; } @@ -355,10 +365,23 @@ Reference< XClob> Connection::createClob(ISC_QUAD const * pBlobId) &m_aTransactionHandle, *pBlobId); - m_aStatements.push_back(WeakReferenceHelper(xReturn)); + m_aStatements.emplace_back(xReturn); return xReturn; } +//----- XUnoTunnel ---------------------------------------------------------- +// virtual +sal_Int64 SAL_CALL Connection::getSomething(const css::uno::Sequence<sal_Int8>& rId) +{ + return comphelper::getSomethingImpl(rId, this); +} + +// static +const css::uno::Sequence<sal_Int8> & Connection::getUnoTunnelId() +{ + static const comphelper::UnoIdInit implId; + return implId.getSeq(); +} //----- XConnection ---------------------------------------------------------- Reference< XStatement > SAL_CALL Connection::createStatement( ) @@ -373,7 +396,7 @@ Reference< XStatement > SAL_CALL Connection::createStatement( ) // create a statement // the statement can only be executed once Reference< XStatement > xReturn = new OStatement(this); - m_aStatements.push_back(WeakReferenceHelper(xReturn)); + m_aStatements.emplace_back(xReturn); return xReturn; } @@ -389,7 +412,7 @@ Reference< XPreparedStatement > SAL_CALL Connection::prepareStatement( buildTypeInfo(); Reference< XPreparedStatement > xReturn = new OPreparedStatement(this, _sSql); - m_aStatements.push_back(WeakReferenceHelper(xReturn)); + m_aStatements.emplace_back(xReturn); return xReturn; } @@ -411,7 +434,6 @@ Reference< XPreparedStatement > SAL_CALL Connection::prepareCall( OUString SAL_CALL Connection::nativeSQL( const OUString& _sSql ) { - MutexGuard aGuard( m_aMutex ); // We do not need to adapt the SQL for Firebird atm. return _sSql; } @@ -490,7 +512,7 @@ void Connection::setupTransaction() aTPB); evaluateStatusVector(status_vector, - "isc_start_transaction", + u"isc_start_transaction", *this); } @@ -516,7 +538,7 @@ void SAL_CALL Connection::commit() disposeStatements(); isc_commit_transaction(status_vector, &m_aTransactionHandle); evaluateStatusVector(status_vector, - "isc_commit_transaction", + u"isc_commit_transaction", *this); } } @@ -569,7 +591,7 @@ isc_svc_handle Connection::attachServiceManager() aSPBBuffer)) { evaluateStatusVector(aStatusVector, - "isc_service_attach", + u"isc_service_attach", *this); } @@ -583,7 +605,7 @@ void Connection::detachServiceManager(isc_svc_handle aServiceHandle) &aServiceHandle)) { evaluateStatusVector(aStatusVector, - "isc_service_detach", + u"isc_service_detach", *this); } } @@ -600,22 +622,18 @@ void Connection::runBackupService(const short nAction) OString sFBKPath = OUStringToOString(m_sFBKPath, RTL_TEXTENCODING_UTF8); - OStringBuffer aRequest; // byte array - - - aRequest.append(static_cast<char>(nAction)); - - aRequest.append(char(isc_spb_dbname)); // .fdb sal_uInt16 nFDBLength = sFDBPath.getLength(); - aRequest.append(static_cast<char>(nFDBLength & 0xFF)); // least significant byte first - aRequest.append(static_cast<char>((nFDBLength >> 8) & 0xFF)); - aRequest.append(sFDBPath); - - aRequest.append(char(isc_spb_bkp_file)); // .fbk sal_uInt16 nFBKLength = sFBKPath.getLength(); - aRequest.append(static_cast<char>(nFBKLength & 0xFF)); - aRequest.append(static_cast<char>((nFBKLength >> 8) & 0xFF)); - aRequest.append(sFBKPath); + OStringBuffer aRequest( // byte array + OStringChar(static_cast<char>(nAction)) + + OStringChar(char(isc_spb_dbname)) // .fdb + + OStringChar(static_cast<char>(nFDBLength & 0xFF)) // least significant byte first + + OStringChar(static_cast<char>((nFDBLength >> 8) & 0xFF)) + + sFDBPath + + OStringChar(char(isc_spb_bkp_file)) // .fbk + + OStringChar(static_cast<char>(nFBKLength & 0xFF)) + + OStringChar(static_cast<char>((nFBKLength >> 8) & 0xFF)) + + sFBKPath); if (nAction == isc_action_svc_restore) { @@ -642,7 +660,7 @@ void Connection::runBackupService(const short nAction) aRequest.getLength(), aRequest.getStr())) { - evaluateStatusVector(aStatusVector, "isc_service_start", *this); + evaluateStatusVector(aStatusVector, u"isc_service_start", *this); } char aInfoSPB = isc_info_svc_line; @@ -658,7 +676,7 @@ void Connection::runBackupService(const short nAction) sizeof(aResults), aResults)) { - evaluateStatusVector(aStatusVector, "isc_service_query", *this); + evaluateStatusVector(aStatusVector, u"isc_service_query", *this); } detachServiceManager(aServiceHandle); @@ -798,42 +816,9 @@ void SAL_CALL Connection::documentEventOccured( const DocumentEvent& Event ) if ( !(m_bIsEmbedded && m_xEmbeddedStorage.is()) ) return; - SAL_INFO("connectivity.firebird", "Writing .fbk from running db"); - try - { - runBackupService(isc_action_svc_backup); - } - catch (const SQLException& e) - { - auto a = cppu::getCaughtException(); - throw WrappedTargetRuntimeException(e.Message, e.Context, a); - } - - - Reference< XStream > xDBStream(m_xEmbeddedStorage->openStreamElement(our_sFBKLocation, - ElementModes::WRITE)); - - // TODO: verify the backup actually exists -- the backup service - // can fail without giving any sane error messages / telling us - // that it failed. - using namespace ::comphelper; - Reference< XComponentContext > xContext = comphelper::getProcessComponentContext(); - Reference< XInputStream > xInputStream; - if (!xContext.is()) - return; - - xInputStream = - OStorageHelper::GetInputStreamFromURL(m_sFBKPath, xContext); - if (xInputStream.is()) - OStorageHelper::CopyInputToOutput( xInputStream, - xDBStream->getOutputStream()); - - // remove old fdb file if exists - uno::Reference< ucb::XSimpleFileAccess > xFileAccess = - ucb::SimpleFileAccess::create(xContext); - if (xFileAccess->exists(m_sFirebirdURL)) - xFileAccess->kill(m_sFirebirdURL); + storeDatabase(); } + // XEventListener void SAL_CALL Connection::disposing(const EventObject& /*rSource*/) { @@ -911,20 +896,46 @@ void Connection::disposing() { if (isc_detach_database(status, &m_aDBHandle)) { - evaluateStatusVector(status, "isc_detach_database", *this); + evaluateStatusVector(status, u"isc_detach_database", *this); } } - // TODO: write to storage again? + + storeDatabase(); cppu::WeakComponentImplHelperBase::disposing(); - if (m_pDatabaseFileDir) + m_pDatabaseFileDir.reset(); +} + +void Connection::storeDatabase() +{ + MutexGuard aGuard(m_aMutex); + if (m_bIsEmbedded && m_xEmbeddedStorage.is()) { - ::utl::removeTree(m_pDatabaseFileDir->GetURL()); - m_pDatabaseFileDir.reset(); + SAL_INFO("connectivity.firebird", "Writing .fbk from running db"); + try + { + runBackupService(isc_action_svc_backup); + } + catch (const SQLException& e) + { + auto a = cppu::getCaughtException(); + throw WrappedTargetRuntimeException(e.Message, e.Context, a); + } + Reference<XStream> xDBStream( + m_xEmbeddedStorage->openStreamElement(our_sFBKLocation, ElementModes::WRITE)); + using namespace ::comphelper; + Reference<XComponentContext> xContext = comphelper::getProcessComponentContext(); + Reference<XInputStream> xInputStream; + if (!xContext.is()) + return; + xInputStream = OStorageHelper::GetInputStreamFromURL(m_sFBKPath, xContext); + if (xInputStream.is()) + OStorageHelper::CopyInputToOutput(xInputStream, xDBStream->getOutputStream()); } } + void Connection::disposeStatements() { MutexGuard aGuard(m_aMutex); @@ -956,4 +967,4 @@ uno::Reference< XTablesSupplier > Connection::createCatalog() } - +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx index 9e2c9c24865d..16ac0ffa278d 100644 --- a/connectivity/source/drivers/firebird/Connection.hxx +++ b/connectivity/source/drivers/firebird/Connection.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CONNECTION_HXX +#pragma once #include <ibase.h> @@ -34,6 +33,7 @@ #include <com/sun/star/document/XDocumentEventListener.hpp> #include <com/sun/star/embed/XStorage.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XUnoTunnel.hpp> #include <com/sun/star/sdbc/XBlob.hpp> #include <com/sun/star/sdbc/XClob.hpp> #include <com/sun/star/sdbc/XConnection.hpp> @@ -46,6 +46,7 @@ namespace connectivity::firebird typedef ::cppu::WeakComponentImplHelper< css::document::XDocumentEventListener, css::lang::XServiceInfo, + css::lang::XUnoTunnel, css::sdbc::XConnection, css::sdbc::XWarningsSupplier > Connection_BASE; @@ -103,7 +104,7 @@ namespace connectivity::firebird * The extracted .fbk is written in firebird.fbk, the temporary * .fdb is stored as firebird.fdb. */ - std::unique_ptr< ::utl::TempFile > m_pDatabaseFileDir; + std::unique_ptr< ::utl::TempFileNamed > m_pDatabaseFileDir; /** * Path for our extracted .fbk file. * @@ -171,16 +172,6 @@ namespace connectivity::firebird isc_tr_handle& getTransaction(); /** - * Must be called anytime the underlying database is likely to have - * changed. - * - * This is used to notify the database document of any changes, so - * that the user is informed of any pending changes needing to be - * saved. - */ - void notifyDatabaseModified(); - - /** * Create a new Blob tied to this connection. Blobs are tied to a * transaction and not to a statement, hence the connection should * deal with their management. @@ -202,11 +193,19 @@ namespace connectivity::firebird css::uno::Reference< css::sdbcx::XTablesSupplier > createCatalog(); + /** + * Backup and store embedded extracted database to the .odb file + */ + void storeDatabase(); + // OComponentHelper virtual void SAL_CALL disposing() override; // XServiceInfo DECLARE_SERVICE_INFO(); + // XUnoTunnel + virtual sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override; + static const css::uno::Sequence<sal_Int8> & getUnoTunnelId(); // XConnection virtual css::uno::Reference< css::sdbc::XStatement > SAL_CALL createStatement( ) override; virtual css::uno::Reference< css::sdbc::XPreparedStatement > SAL_CALL prepareStatement( const OUString& sql ) override; @@ -239,6 +238,5 @@ namespace connectivity::firebird }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_CONNECTION_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx index fdea4e4026eb..37c2ffe72c3d 100644 --- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -771,7 +771,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsBatchUpdates() uno::Reference< XConnection > SAL_CALL ODatabaseMetaData::getConnection() { - return uno::Reference<XConnection>(m_pConnection.get()); + return m_pConnection; } // here follow all methods which return a resultset @@ -781,9 +781,8 @@ uno::Reference< XConnection > SAL_CALL ODatabaseMetaData::getConnection() uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( ) { - ODatabaseMetaDataResultSet* pResultSet = new + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes); - uno::Reference< XResultSet > xResultSet = pResultSet; ODatabaseMetaDataResultSet::ORows aResults; ODatabaseMetaDataResultSet::ORow aRow(2); @@ -802,8 +801,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( ) aRow[1] = new ORowSetValueDecorator(OUString("SYSTEM TABLE")); aResults.push_back(aRow); - pResultSet->setRows(aResults); - return xResultSet; + pResultSet->setRows(std::move(aResults)); + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() @@ -812,9 +811,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() // this returns an empty resultset where the column-names are already set // in special the metadata of the resultset already returns the right columns - ODatabaseMetaDataResultSet* pResultSet = + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo); - uno::Reference< XResultSet > xResultSet = pResultSet; static ODatabaseMetaDataResultSet::ORows aResults = []() { ODatabaseMetaDataResultSet::ORows tmp; @@ -823,14 +821,14 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() // Common data aRow[4] = ODatabaseMetaDataResultSet::getQuoteValue(); // Literal quote marks aRow[5] = ODatabaseMetaDataResultSet::getQuoteValue(); // Literal quote marks - aRow[7] = new ORowSetValueDecorator(true); // Nullable - aRow[8] = new ORowSetValueDecorator(true); // Case sensitive - aRow[10] = new ORowSetValueDecorator(false); // Is unsigned + aRow[7] = new ORowSetValueDecorator(ORowSetValue(true)); // Nullable + aRow[8] = new ORowSetValueDecorator(ORowSetValue(true)); // Case sensitive + aRow[10] = new ORowSetValueDecorator(ORowSetValue(false)); // Is unsigned // FIXED_PREC_SCALE: docs state "can it be a money value? " however // in reality this causes Base to treat all numbers as money formatted // by default which is wrong (and formatting as money value is still // possible for all values). - aRow[11] = new ORowSetValueDecorator(false); + aRow[11] = new ORowSetValueDecorator(ORowSetValue(false)); // Localised Type Name -- TODO: implement (but can be null): aRow[13] = new ORowSetValueDecorator(); aRow[16] = new ORowSetValueDecorator(); // Unused @@ -844,7 +842,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); @@ -856,7 +854,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(OUString("length")); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); @@ -890,7 +888,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); @@ -906,7 +904,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(true); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(true)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale } @@ -930,7 +928,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() { aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(true); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(true)); // Autoincrement } aRow[6] = new ORowSetValueDecorator(OUString("PRECISION,SCALE")); // Create params @@ -974,7 +972,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); @@ -986,7 +984,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); @@ -998,7 +996,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::FULL)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); @@ -1010,7 +1008,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::NONE)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); @@ -1022,14 +1020,15 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTypeInfo() aRow[6] = new ORowSetValueDecorator(); // Create Params aRow[9] = new ORowSetValueDecorator( sal_Int16(ColumnSearch::BASIC)); // Searchable - aRow[12] = new ORowSetValueDecorator(false); // Autoincrement + aRow[12] = new ORowSetValueDecorator(ORowSetValue(false)); // Autoincrement aRow[14] = ODatabaseMetaDataResultSet::get0Value(); // Minimum scale aRow[15] = ODatabaseMetaDataResultSet::get0Value(); // Max scale tmp.push_back(aRow); return tmp; }(); - pResultSet->setRows(aResults); - return xResultSet; + // [-loplugin:redundantfcast] false positive: + pResultSet->setRows(ODatabaseMetaDataResultSet::ORows(aResults)); + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges( @@ -1042,9 +1041,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges( "Table: " << sTable << " & ColumnNamePattern: " << sColumnNamePattern); - ODatabaseMetaDataResultSet* pResultSet = new + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eColumnPrivileges); - uno::Reference< XResultSet > xResultSet = pResultSet; uno::Reference< XStatement > statement = m_pConnection->createStatement(); static const char wld[] = "%"; @@ -1102,9 +1100,9 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges( aResults.push_back(aCurrentRow); } - pResultSet->setRows( aResults ); + pResultSet->setRows( std::move(aResults) ); - return xResultSet; + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( @@ -1308,12 +1306,11 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( aResults.push_back(aCurrentRow); } - ODatabaseMetaDataResultSet* pResultSet = new + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eColumns); - uno::Reference< XResultSet > xResultSet = pResultSet; - pResultSet->setRows( aResults ); + pResultSet->setRows( std::move(aResults) ); - return xResultSet; + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( @@ -1325,9 +1322,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( SAL_INFO("connectivity.firebird", "getTables() with " "TableNamePattern: " << tableNamePattern); - ODatabaseMetaDataResultSet* pResultSet = new + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); - uno::Reference< XResultSet > xResultSet = pResultSet; uno::Reference< XStatement > statement = m_pConnection->createStatement(); static const char wld[] = "%"; @@ -1344,8 +1340,10 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( // TODO: GLOBAL TEMPORARY, LOCAL TEMPORARY, ALIAS, SYNONYM if (!types.hasElements() || (types.getLength() == 1 && types[0].match(wld))) { + // from Firebird: src/jrd/constants.h + // rel_persistent = 0, rel_view = 1, rel_external = 2 // All table types? I.e. includes system tables. - queryBuf.append("(RDB$RELATION_TYPE = 0 OR RDB$RELATION_TYPE = 1) "); + queryBuf.append("(RDB$RELATION_TYPE = 0 OR RDB$RELATION_TYPE = 1 OR RDB$RELATION_TYPE = 2) "); } else { @@ -1411,7 +1409,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( } else { - if (nTableType == 0) + // see above about src/jrd/constants.h + if (nTableType == 0 || nTableType == 2) sTableType = "TABLE"; } @@ -1422,16 +1421,16 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( uno::Reference< XClob > xClob = xRow->getClob(4); if (xClob.is()) { - aCurrentRow[5] = new ORowSetValueDecorator(xClob->getSubString(0, xClob->length())); + aCurrentRow[5] = new ORowSetValueDecorator(xClob->getSubString(1, xClob->length())); } } aResults.push_back(aCurrentRow); } - pResultSet->setRows( aResults ); + pResultSet->setRows( std::move(aResults) ); - return xResultSet; + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedureColumns( @@ -1475,11 +1474,10 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys( return ODatabaseMetaData::lcl_getKeys(true, table); } -uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool& bIsImport, std::u16string_view table ) +uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool bIsImport, std::u16string_view table ) { - ODatabaseMetaDataResultSet* pResultSet = new - ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eImportedKeys); - uno::Reference< XResultSet > xResultSet = pResultSet; + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new + ODatabaseMetaDataResultSet(bIsImport?ODatabaseMetaDataResultSet::eImportedKeys:ODatabaseMetaDataResultSet::eExportedKeys); uno::Reference< XStatement > statement = m_pConnection->createStatement(); @@ -1558,8 +1556,8 @@ uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool& bIsImpor aResults.push_back(aCurrentRow); } - pResultSet->setRows( aResults ); - return xResultSet; + pResultSet->setRows( std::move(aResults) ); + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys( @@ -1610,12 +1608,11 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys( aResults.push_back(aCurrentRow); } - ODatabaseMetaDataResultSet* pResultSet = new + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::ePrimaryKeys); - uno::Reference< XResultSet > xResultSet = pResultSet; - pResultSet->setRows( aResults ); + pResultSet->setRows( std::move(aResults) ); - return xResultSet; + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo( @@ -1683,7 +1680,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo( } // 4. NON_UNIQUE -- i.e. specifically negate here. - aCurrentRow[4] = new ORowSetValueDecorator(xRow->getShort(5) == 0); + aCurrentRow[4] = new ORowSetValueDecorator(ORowSetValue(xRow->getShort(5) == 0)); // 6. INDEX NAME aCurrentRow[6] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(4))); @@ -1704,12 +1701,11 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo( aResults.push_back(aCurrentRow); } - ODatabaseMetaDataResultSet* pResultSet = new - ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::ePrimaryKeys); - uno::Reference< XResultSet > xResultSet = pResultSet; - pResultSet->setRows( aResults ); + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new + ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eIndexInfo); + pResultSet->setRows( std::move(aResults) ); - return xResultSet; + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getBestRowIdentifier( @@ -1729,9 +1725,8 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( SAL_INFO("connectivity.firebird", "getTablePrivileges() with " "TableNamePattern: " << sTableNamePattern); - ODatabaseMetaDataResultSet* pResultSet = new + rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTablePrivileges); - uno::Reference< XResultSet > xResultSet = pResultSet; uno::Reference< XStatement > statement = m_pConnection->createStatement(); // TODO: column specific privileges are included, we may need @@ -1778,14 +1773,14 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( aRow[4] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(2))); // 4. GRANTOR aRow[5] = new ORowSetValueDecorator(sanitizeIdentifier(xRow->getString(3))); // 5. GRANTEE aRow[6] = new ORowSetValueDecorator(xRow->getString(4)); // 6. Privilege - aRow[7] = new ORowSetValueDecorator(bool(xRow->getBoolean(5))); // 7. Is Grantable + aRow[7] = new ORowSetValueDecorator(ORowSetValue(bool(xRow->getBoolean(5)))); // 7. Is Grantable aResults.push_back(aRow); } - pResultSet->setRows( aResults ); + pResultSet->setRows( std::move(aResults) ); - return xResultSet; + return pResultSet; } uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference( @@ -1805,5 +1800,4 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getUDTs( const Any&, co return new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eUDTs); } - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.hxx b/connectivity/source/drivers/firebird/DatabaseMetaData.hxx index fda5bb31bc88..c577f594d245 100644 --- a/connectivity/source/drivers/firebird/DatabaseMetaData.hxx +++ b/connectivity/source/drivers/firebird/DatabaseMetaData.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_DATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_DATABASEMETADATA_HXX +#pragma once #include <sal/config.h> @@ -42,7 +41,7 @@ namespace connectivity::firebird { ::rtl::Reference<Connection> m_pConnection; private: - css::uno::Reference< css::sdbc::XResultSet > lcl_getKeys( const bool& bIsImport, std::u16string_view table ); + css::uno::Reference< css::sdbc::XResultSet > lcl_getKeys( bool bIsImport, std::u16string_view table ); public: explicit ODatabaseMetaData(Connection* _pCon); @@ -203,6 +202,4 @@ namespace connectivity::firebird } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_DATABASEMETADATA_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Driver.cxx b/connectivity/source/drivers/firebird/Driver.cxx index 55e149e9de5c..3aa903d48abf 100644 --- a/connectivity/source/drivers/firebird/Driver.cxx +++ b/connectivity/source/drivers/firebird/Driver.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -25,12 +25,12 @@ #include <strings.hrc> #include <resource/sharedresources.hxx> +#include <comphelper/servicehelper.hxx> #include <cppuhelper/supportsservice.hxx> #include <osl/file.hxx> #include <osl/process.h> #include <rtl/bootstrap.hxx> #include <sal/log.hxx> -#include <unotools/localfilehelper.hxx> using namespace com::sun::star; using namespace com::sun::star::uno; @@ -45,11 +45,11 @@ using namespace connectivity::firebird; // Static const variables namespace { -constexpr OUStringLiteral our_sFirebirdTmpVar = u"FIREBIRD_TMP"; -constexpr OUStringLiteral our_sFirebirdLockVar = u"FIREBIRD_LOCK"; -constexpr OUStringLiteral our_sFirebirdMsgVar = u"FIREBIRD_MSG"; +constexpr OUString our_sFirebirdTmpVar = u"FIREBIRD_TMP"_ustr; +constexpr OUString our_sFirebirdLockVar = u"FIREBIRD_LOCK"_ustr; +constexpr OUString our_sFirebirdMsgVar = u"FIREBIRD_MSG"_ustr; #ifdef MACOSX -constexpr OUStringLiteral our_sFirebirdLibVar = u"LIBREOFFICE_FIREBIRD_LIB"; +constexpr OUString our_sFirebirdLibVar = u"LIBREOFFICE_FIREBIRD_LIB"_ustr; #endif }; @@ -62,12 +62,14 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo // ::utl::TempFile uses a unique temporary directory (subdirectory of // /tmp or other user specific tmp directory) per instance in which // we can create directories for firebird at will. + m_firebirdTMPDirectory.EnableKillingFile(true); + m_firebirdLockDirectory.EnableKillingFile(true); // Overrides firebird's default of /tmp or c:\temp - osl_setEnvironment(OUString(our_sFirebirdTmpVar).pData, m_firebirdTMPDirectory.GetFileName().pData); + osl_setEnvironment(our_sFirebirdTmpVar.pData, m_firebirdTMPDirectory.GetFileName().pData); // Overrides firebird's default of /tmp/firebird or c:\temp\firebird - osl_setEnvironment(OUString(our_sFirebirdLockVar).pData, m_firebirdLockDirectory.GetFileName().pData); + osl_setEnvironment(our_sFirebirdLockVar.pData, m_firebirdLockDirectory.GetFileName().pData); #ifndef SYSTEM_FIREBIRD // Overrides firebird's hardcoded default of /usr/local/firebird on *nix, @@ -76,7 +78,7 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo ::rtl::Bootstrap::expandMacros(sMsgURL); OUString sMsgPath; ::osl::FileBase::getSystemPathFromFileURL(sMsgURL, sMsgPath); - osl_setEnvironment(OUString(our_sFirebirdMsgVar).pData, sMsgPath.pData); + osl_setEnvironment(our_sFirebirdMsgVar.pData, sMsgPath.pData); #ifdef MACOSX // Set an env. variable to specify library location // for dlopen used in fbclient. @@ -84,16 +86,12 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo ::rtl::Bootstrap::expandMacros(sLibURL); OUString sLibPath; ::osl::FileBase::getSystemPathFromFileURL(sLibURL, sLibPath); - osl_setEnvironment(OUString(our_sFirebirdLibVar).pData, sLibPath.pData); + osl_setEnvironment(our_sFirebirdLibVar.pData, sLibPath.pData); #endif /*MACOSX*/ #endif /*!SYSTEM_FIREBIRD*/ } -FirebirdDriver::~FirebirdDriver() -{ - utl::removeTree(m_firebirdTMPDirectory.GetURL()); - utl::removeTree(m_firebirdLockDirectory.GetURL()); -} +FirebirdDriver::~FirebirdDriver() = default; void FirebirdDriver::disposing() { @@ -107,13 +105,13 @@ void FirebirdDriver::disposing() } m_xConnections.clear(); - osl_clearEnvironment(OUString(our_sFirebirdTmpVar).pData); - osl_clearEnvironment(OUString(our_sFirebirdLockVar).pData); + osl_clearEnvironment(our_sFirebirdTmpVar.pData); + osl_clearEnvironment(our_sFirebirdLockVar.pData); #ifndef SYSTEM_FIREBIRD - osl_clearEnvironment(OUString(our_sFirebirdMsgVar).pData); + osl_clearEnvironment(our_sFirebirdMsgVar.pData); #ifdef MACOSX - osl_clearEnvironment(OUString(our_sFirebirdLibVar).pData); + osl_clearEnvironment(our_sFirebirdLibVar.pData); #endif /*MACOSX*/ #endif /*!SYSTEM_FIREBIRD*/ @@ -150,13 +148,12 @@ Reference< XConnection > SAL_CALL FirebirdDriver::connect( if ( ! acceptsURL(url) ) return nullptr; - Connection* pCon = new Connection(); - Reference< XConnection > xCon = pCon; + rtl::Reference<Connection> pCon = new Connection(); pCon->construct(url, info); - m_xConnections.push_back(WeakReferenceHelper(*pCon)); + m_xConnections.emplace_back(*pCon); - return xCon; + return pCon; } sal_Bool SAL_CALL FirebirdDriver::acceptsURL( const OUString& url ) @@ -193,8 +190,9 @@ sal_Int32 SAL_CALL FirebirdDriver::getMinorVersion( ) uno::Reference< XTablesSupplier > SAL_CALL FirebirdDriver::getDataDefinitionByConnection( const uno::Reference< XConnection >& rConnection) { - Connection* pConnection = static_cast< Connection* >(rConnection.get()); - return pConnection->createCatalog(); + if (Connection* pConnection = comphelper::getFromUnoTunnel<Connection>(rConnection)) + return pConnection->createCatalog(); + return {}; } uno::Reference< XTablesSupplier > SAL_CALL FirebirdDriver::getDataDefinitionByURL( @@ -227,5 +225,4 @@ connectivity_FirebirdDriver_get_implementation( } } - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Driver.hxx b/connectivity/source/drivers/firebird/Driver.hxx index 59cb1c49db69..d884b5008d6a 100644 --- a/connectivity/source/drivers/firebird/Driver.hxx +++ b/connectivity/source/drivers/firebird/Driver.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_DRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_DRIVER_HXX +#pragma once #include "Connection.hxx" @@ -34,7 +33,9 @@ namespace connectivity::firebird // The SQL dialect in use // Has to be used in various isc_* calls. // 3: Is IB6 -- minimum required for delimited identifiers. - const int FIREBIRD_SQL_DIALECT = 3; + // SQL_DIALECT_V6 = 3, it's the last current version + // SQL_DIALECT_CURRENT is an alias for SQL_DIALECT_V6 + // See src/dsql/sqlda_pub.h for full details typedef ::cppu::WeakComponentImplHelper< css::sdbc::XDriver, css::sdbcx::XDataDefinitionSupplier, @@ -44,8 +45,8 @@ namespace connectivity::firebird { private: css::uno::Reference<css::uno::XComponentContext> m_aContext; - ::utl::TempFile m_firebirdTMPDirectory; - ::utl::TempFile m_firebirdLockDirectory; + ::utl::TempFileNamed m_firebirdTMPDirectory; + ::utl::TempFileNamed m_firebirdLockDirectory; protected: ::osl::Mutex m_aMutex; // mutex is need to control member access @@ -86,6 +87,4 @@ namespace connectivity::firebird } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_DRIVER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Indexes.cxx b/connectivity/source/drivers/firebird/Indexes.cxx index 6cdb8eb4ab5f..7bf783c79c7b 100644 --- a/connectivity/source/drivers/firebird/Indexes.cxx +++ b/connectivity/source/drivers/firebird/Indexes.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -13,12 +13,11 @@ using namespace ::connectivity; using namespace ::connectivity::firebird; using namespace ::osl; -using namespace ::std; using namespace ::com::sun::star; using namespace ::com::sun::star::sdbc; -Indexes::Indexes(Table* pTable, Mutex& rMutex, const vector<OUString>& rVector) +Indexes::Indexes(Table* pTable, Mutex& rMutex, const std::vector<OUString>& rVector) : OIndexesHelper(pTable, rMutex, rVector) , m_pTable(pTable) { @@ -30,3 +29,5 @@ void Indexes::dropObject(sal_Int32 /*nPosition*/, const OUString& sIndexName) OUString sSql("DROP INDEX \"" + sIndexName + "\""); m_pTable->getConnection()->createStatement()->execute(sSql); } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Indexes.hxx b/connectivity/source/drivers/firebird/Indexes.hxx index 7f1044cb8b0a..12d7dd198028 100644 --- a/connectivity/source/drivers/firebird/Indexes.hxx +++ b/connectivity/source/drivers/firebird/Indexes.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_INDEXES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_INDEXES_HXX +#pragma once #include "Table.hxx" @@ -37,6 +36,4 @@ namespace connectivity::firebird } // namespace connectivity::firebird -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_INDEXES_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Keys.cxx b/connectivity/source/drivers/firebird/Keys.cxx index dd4cca47fb20..8de112ec6fc4 100644 --- a/connectivity/source/drivers/firebird/Keys.cxx +++ b/connectivity/source/drivers/firebird/Keys.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -51,4 +51,4 @@ void Keys::dropObject(sal_Int32 nPosition, const OUString& sName) } } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Keys.hxx b/connectivity/source/drivers/firebird/Keys.hxx index 466ee9c81d0e..4e9ba5a7eede 100644 --- a/connectivity/source/drivers/firebird/Keys.hxx +++ b/connectivity/source/drivers/firebird/Keys.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_KEYS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_KEYS_HXX +#pragma once #include <connectivity/TKeys.hxx> @@ -33,6 +32,5 @@ namespace connectivity::firebird }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_KEYS_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx index e4510b758055..35847d021ea0 100644 --- a/connectivity/source/drivers/firebird/PreparedStatement.cxx +++ b/connectivity/source/drivers/firebird/PreparedStatement.cxx @@ -20,8 +20,6 @@ #include <sal/config.h> #include <cmath> -#include <string_view> - #include "Connection.hxx" #include "PreparedStatement.hxx" #include "ResultSet.hxx" @@ -52,6 +50,8 @@ using namespace com::sun::star::util; IMPLEMENT_SERVICE_INFO(OPreparedStatement,"com.sun.star.sdbcx.firebird.PreparedStatement","com.sun.star.sdbc.PreparedStatement"); +constexpr size_t MAX_SIZE_SEGMENT = 65535; // max value of a segment of CLOB, if we want more than 65535 bytes, we need more segments + OPreparedStatement::OPreparedStatement( Connection* _pConnection, const OUString& sql) @@ -81,9 +81,7 @@ void OPreparedStatement::ensurePrepared() m_pInSqlda->sqln = 10; } - prepareAndDescribeStatement(m_sSqlStatement, - m_pOutSqlda, - m_pInSqlda); + prepareAndDescribeStatement(m_sSqlStatement, m_pOutSqlda); aErr = isc_dsql_describe_bind(m_statusVector, &m_aStatementHandle, @@ -118,12 +116,12 @@ OPreparedStatement::~OPreparedStatement() { } -void SAL_CALL OPreparedStatement::acquire() throw() +void SAL_CALL OPreparedStatement::acquire() noexcept { OStatementCommonBase::acquire(); } -void SAL_CALL OPreparedStatement::release() throw() +void SAL_CALL OPreparedStatement::release() noexcept { OStatementCommonBase::release(); } @@ -211,7 +209,8 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex, { str = str.copy(0, max_varchar_len); } - const auto nLength = str.getLength(); + const sal_uInt16 nLength = str.getLength(); + static_assert(sizeof(nLength) == 2, "must match dest memcpy len"); memcpy(pVar->sqldata, &nLength, 2); // Actual data memcpy(pVar->sqldata + 2, str.getStr(), str.getLength()); @@ -264,6 +263,12 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 nParameterIndex, setBoolean(nParameterIndex, boolValue); break; } + case SQL_NULL: + { + // See https://www.firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-datatypes-special-sqlnull + pVar->sqldata = nullptr; + break; + } default: ::dbtools::throwSQLException( "Incorrect type for setString", @@ -277,7 +282,7 @@ Reference< XConnection > SAL_CALL OPreparedStatement::getConnection() MutexGuard aGuard( m_aMutex ); checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); - return Reference<XConnection>(m_pConnection.get()); + return m_pConnection; } sal_Bool SAL_CALL OPreparedStatement::execute() @@ -307,7 +312,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute() // Do not throw error. Trying to close a closed cursor is not a // critical mistake. OUString sErrMsg = StatusVectorToString(m_statusVector, - "isc_dsql_free_statement: close cursor"); + u"isc_dsql_free_statement: close cursor"); SAL_WARN("connectivity.firebird", sErrMsg); } } @@ -320,7 +325,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute() if (aErr) { SAL_WARN("connectivity.firebird", "isc_dsql_execute failed" ); - evaluateStatusVector(m_statusVector, "isc_dsql_execute", *this); + evaluateStatusVector(m_statusVector, u"isc_dsql_execute", *this); } m_xResultSet = new OResultSet(m_pConnection.get(), @@ -329,9 +334,6 @@ sal_Bool SAL_CALL OPreparedStatement::execute() m_aStatementHandle, m_pOutSqlda); - if (getStatementChangeCount() > 0) - m_pConnection->notifyDatabaseModified(); - return m_xResultSet.is(); // TODO: implement handling of multiple ResultSets. } @@ -374,10 +376,10 @@ sal_Int64 toNumericWithoutDecimalPlace(const OUString& sSource) OUStringBuffer sBuffer(15); if(nDotIndex > 0) { - sBuffer.append(std::u16string_view(sNumber).substr(0, nDotIndex)); + sBuffer.append(sNumber.subView(0, nDotIndex)); } - sBuffer.append(std::u16string_view(sNumber).substr(nDotIndex + 1)); - return sBuffer.makeStringAndClear().toInt64(); + sBuffer.append(sNumber.subView(nDotIndex + 1)); + return o3tl::toInt64(sBuffer); } } @@ -565,7 +567,7 @@ void OPreparedStatement::openBlobForWriting(isc_blob_handle& rBlobHandle, ISC_QU if (aErr) { evaluateStatusVector(m_statusVector, - "setBlob failed on " + m_sSqlStatement, + Concat2View("setBlob failed on " + m_sSqlStatement), *this); assert(false); } @@ -580,7 +582,7 @@ void OPreparedStatement::closeBlobAfterWriting(isc_blob_handle& rBlobHandle) if (aErr) { evaluateStatusVector(m_statusVector, - "isc_close_blob failed", + u"isc_close_blob failed", *this); assert(false); } @@ -607,9 +609,9 @@ void SAL_CALL OPreparedStatement::setClob(sal_Int32 nParameterIndex, const Refer sal_Int64 nCharWritten = 1; // XClob is indexed from 1 ISC_STATUS aErr = 0; sal_Int64 nLen = xClob->length(); - while ( nLen > nCharWritten ) + while ( nLen >= nCharWritten ) { - sal_Int64 nCharRemain = nLen - nCharWritten; + sal_Int64 nCharRemain = nLen - nCharWritten + 1; constexpr sal_uInt16 MAX_SIZE = SAL_MAX_UINT16 / 4; sal_uInt16 nWriteSize = std::min<sal_Int64>(nCharRemain, MAX_SIZE); OString sData = OUStringToOString( @@ -632,7 +634,7 @@ void SAL_CALL OPreparedStatement::setClob(sal_Int32 nParameterIndex, const Refer if (aErr) { evaluateStatusVector(m_statusVector, - "isc_put_segment failed", + u"isc_put_segment failed", *this); assert(false); } @@ -658,10 +660,41 @@ void OPreparedStatement::setClob( sal_Int32 nParameterIndex, const OUString& rSt OString sData = OUStringToOString( rStr, RTL_TEXTENCODING_UTF8); - ISC_STATUS aErr = isc_put_segment( m_statusVector, + size_t nDataSize = sData.getLength(); + ISC_STATUS aErr = 0; + // we can't store more than MAX_SIZE_SEGMENT in a segment + if (nDataSize <= MAX_SIZE_SEGMENT) + { + aErr = isc_put_segment( m_statusVector, &aBlobHandle, sData.getLength(), sData.getStr() ); + } + else + { + // if we need more, let's split the input and first let's calculate the nb of entire chunks needed + size_t nNbEntireChunks = nDataSize / MAX_SIZE_SEGMENT; + for (size_t i = 0; i < nNbEntireChunks; ++i) + { + OString strCurrentChunk = sData.copy(i * MAX_SIZE_SEGMENT, MAX_SIZE_SEGMENT); + aErr = isc_put_segment( m_statusVector, + &aBlobHandle, + strCurrentChunk.getLength(), + strCurrentChunk.getStr() ); + if (aErr) + break; + } + size_t nRemainingBytes = nDataSize - (nNbEntireChunks * MAX_SIZE_SEGMENT); + if (nRemainingBytes && !aErr) + { + // then copy the remaining + OString strCurrentChunk = sData.copy(nNbEntireChunks * MAX_SIZE_SEGMENT, nRemainingBytes); + aErr = isc_put_segment( m_statusVector, + &aBlobHandle, + strCurrentChunk.getLength(), + strCurrentChunk.getStr() ); + } + } // We need to make sure we close the Blob even if there are errors, hence evaluate // errors after closing. @@ -670,7 +703,7 @@ void OPreparedStatement::setClob( sal_Int32 nParameterIndex, const OUString& rSt if (aErr) { evaluateStatusVector(m_statusVector, - "isc_put_segment failed", + u"isc_put_segment failed", *this); assert(false); } @@ -722,7 +755,7 @@ void SAL_CALL OPreparedStatement::setBlob(sal_Int32 nParameterIndex, if (aErr) { evaluateStatusVector(m_statusVector, - "isc_put_segment failed", + u"isc_put_segment failed", *this); assert(false); } @@ -780,7 +813,7 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c sBuffer.append(sValue); if(sValue.indexOf('.') != -1) // there is a dot { - for(sal_Int32 i=sValue.copy(sValue.indexOf('.')+1).getLength(); i<scale;i++) + for(sal_Int32 i=sValue.subView(sValue.indexOf('.')+1).size(); i<scale;i++) { sBuffer.append('0'); } @@ -890,7 +923,7 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex, if (aErr) { evaluateStatusVector(m_statusVector, - "isc_put_segment failed", + u"isc_put_segment failed", *this); assert(false); } @@ -906,7 +939,7 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex, { xBytesCopy.realloc( nMaxSize ); } - const auto nSize = xBytesCopy.getLength(); + const sal_uInt16 nSize = xBytesCopy.getLength(); // 8000 corresponds to value from lcl_addDefaultParameters // in dbaccess/source/filter/hsqldb/createparser.cxx if (nSize > 8000) @@ -914,6 +947,7 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex, free(pVar->sqldata); pVar->sqldata = static_cast<char *>(malloc(sizeof(char) * nSize + 2)); } + static_assert(sizeof(nSize) == 2, "must match dest memcpy len"); // First 2 bytes indicate string size memcpy(pVar->sqldata, &nSize, 2); // Actual data @@ -921,9 +955,12 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 nParameterIndex, } else if( dType == SQL_TEXT ) { + if (pVar->sqllen < xBytes.getLength()) + dbtools::throwSQLException("Data too big for this field", + dbtools::StandardSQLState::INVALID_SQL_DATA_TYPE, *this); setParameterNull(nParameterIndex, false); memcpy(pVar->sqldata, xBytes.getConstArray(), xBytes.getLength() ); - // Fill remainder with spaces + // Fill remainder with zeroes memset(pVar->sqldata + xBytes.getLength(), 0, pVar->sqllen - xBytes.getLength()); } else @@ -1015,4 +1052,4 @@ void OPreparedStatement::setParameterNull(sal_Int32 nParameterIndex, *pVar->sqlind = 0; } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/PreparedStatement.hxx b/connectivity/source/drivers/firebird/PreparedStatement.hxx index db64c0b763e7..3e61436b5874 100644 --- a/connectivity/source/drivers/firebird/PreparedStatement.hxx +++ b/connectivity/source/drivers/firebird/PreparedStatement.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_PREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_PREPAREDSTATEMENT_HXX +#pragma once #include "StatementCommonBase.hxx" @@ -90,8 +89,8 @@ namespace connectivity::firebird //XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; @@ -149,6 +148,5 @@ namespace connectivity::firebird }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_PREPAREDSTATEMENT_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/ResultSet.cxx b/connectivity/source/drivers/firebird/ResultSet.cxx index 7ae77c607e0d..ea3ac86ae762 100644 --- a/connectivity/source/drivers/firebird/ResultSet.cxx +++ b/connectivity/source/drivers/firebird/ResultSet.cxx @@ -144,7 +144,7 @@ sal_Bool SAL_CALL OResultSet::next() { SAL_WARN("connectivity.firebird", "Error when fetching data"); // Throws sql exception as appropriate - evaluateStatusVector(m_statusVector, "isc_dsql_fetch", *this); + evaluateStatusVector(m_statusVector, u"isc_dsql_fetch", *this); return false; } } @@ -430,13 +430,29 @@ T OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT nType) if ((m_pSqlda->sqlvar[nColumnIndex-1].sqltype & ~1) == nType) return *reinterpret_cast<T*>(m_pSqlda->sqlvar[nColumnIndex-1].sqldata); else - return retrieveValue< ORowSetValue >(nColumnIndex, 0); + { + ORowSetValue row = retrieveValue< ORowSetValue >(nColumnIndex, 0); + if constexpr ( std::is_same_v<sal_Int64, T> ) + return row.getLong(); + else if constexpr ( std::is_same_v<sal_Int32, T> ) + return row.getInt32(); + else if constexpr ( std::is_same_v<sal_Int16, T> ) + return row.getInt16(); + else if constexpr ( std::is_same_v<float, T> ) + return row.getFloat(); + else if constexpr ( std::is_same_v<double, T> ) + return row.getDouble(); + else if constexpr ( std::is_same_v<bool, T> ) + return row.getBool(); + else + return row; + } } template <> ORowSetValue OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT /*nType*/) { - // See http://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/Using_the_getXXX_Methods + // See https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#Using_the_getXXX_Methods // (bottom of page) for a chart of possible conversions, we should allow all // of these -- Blob/Clob will probably need some specialist handling especially // w.r.t. to generating Strings for them. @@ -511,7 +527,7 @@ Date OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT /*n } else { - return retrieveValue< ORowSetValue >(nColumnIndex, 0); + return retrieveValue< ORowSetValue >(nColumnIndex, 0).getDate(); } } @@ -534,7 +550,7 @@ Time OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT /*n } else { - return retrieveValue< ORowSetValue >(nColumnIndex, 0); + return retrieveValue< ORowSetValue >(nColumnIndex, 0).getTime(); } } @@ -560,7 +576,7 @@ DateTime OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT } else { - return retrieveValue< ORowSetValue >(nColumnIndex, 0); + return retrieveValue< ORowSetValue >(nColumnIndex, 0).getDateTime(); } } @@ -579,10 +595,11 @@ OUString OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT else if (aSqlType == SQL_VARYING) { // First 2 bytes are a short containing the length of the string - // No idea if sqllen is still valid here? + // Under unclear conditions, it may be wrong and greater than sqllen. sal_uInt16 aLength = *reinterpret_cast<sal_uInt16*>(m_pSqlda->sqlvar[nColumnIndex-1].sqldata); + // Use greater signed type sal_Int32 to get the minimum of two 16-bit values return OUString(m_pSqlda->sqlvar[nColumnIndex-1].sqldata + 2, - aLength, + std::min<sal_Int32>(aLength, m_pSqlda->sqlvar[nColumnIndex-1].sqllen), RTL_TEXTENCODING_UTF8); } else if ((aSqlType == SQL_SHORT || aSqlType == SQL_LONG || @@ -610,11 +627,11 @@ OUString OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT else if(aSqlType == SQL_BLOB && aSqlSubType == static_cast<short>(BlobSubtype::Clob) ) { uno::Reference<XClob> xClob = getClob(nColumnIndex); - return xClob->getSubString( 0, xClob->length() ); + return xClob->getSubString( 1, xClob->length() ); } else { - return retrieveValue< ORowSetValue >(nColumnIndex, 0); + return retrieveValue< ORowSetValue >(nColumnIndex, 0).getString(); } } @@ -662,7 +679,7 @@ sal_Bool SAL_CALL OResultSet::getBoolean(sal_Int32 nColumnIndex) sal_Int8 SAL_CALL OResultSet::getByte(sal_Int32 nColumnIndex) { // Not a native firebird type hence we always have to convert. - return safelyRetrieveValue< ORowSetValue >(nColumnIndex); + return safelyRetrieveValue< ORowSetValue >(nColumnIndex).getInt8(); } Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes(sal_Int32 nColumnIndex) @@ -875,12 +892,12 @@ IPropertyArrayHelper & OResultSet::getInfoHelper() return *getArrayHelper(); } -void SAL_CALL OResultSet::acquire() throw() +void SAL_CALL OResultSet::acquire() noexcept { OResultSet_BASE::acquire(); } -void SAL_CALL OResultSet::release() throw() +void SAL_CALL OResultSet::release() noexcept { OResultSet_BASE::release(); } @@ -906,4 +923,4 @@ sal_Bool SAL_CALL OResultSet::supportsService(const OUString& _rServiceName) return cppu::supportsService(this, _rServiceName); } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/ResultSet.hxx b/connectivity/source/drivers/firebird/ResultSet.hxx index 7306e0c42405..fdae21dfbaaf 100644 --- a/connectivity/source/drivers/firebird/ResultSet.hxx +++ b/connectivity/source/drivers/firebird/ResultSet.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_RESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_RESULTSET_HXX +#pragma once #include "Connection.hxx" @@ -123,8 +122,8 @@ namespace connectivity::firebird // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type& rType) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -213,6 +212,5 @@ namespace connectivity::firebird const ISC_SHORT nType); } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_RESULTSET_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx index d21115029df3..31a6796f5399 100644 --- a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx +++ b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -53,8 +53,8 @@ OUString OResultSetMetaData::getCharacterSet( sal_Int32 nIndex ) "JOIN RDB$RELATION_FIELDS relfields " "ON (fields.RDB$FIELD_NAME = relfields.RDB$FIELD_SOURCE) " "WHERE relfields.RDB$RELATION_NAME = '" - + escapeWith(sTable, '\'', '\'') + "' AND " - "relfields.RDB$FIELD_NAME = '"+ escapeWith(sColumnName, '\'', '\'') +"'"; + + sTable.replaceAll("'", "''") + "' AND " + "relfields.RDB$FIELD_NAME = '"+ sColumnName.replaceAll("'", "''") +"'"; Reference<XStatement> xStmt= m_pConnection->createStatement(); @@ -128,9 +128,15 @@ OUString SAL_CALL OResultSetMetaData::getSchemaName(sal_Int32) OUString SAL_CALL OResultSetMetaData::getColumnName(sal_Int32 column) { verifyValidColumn(column); - OUString sRet(m_pSqlda->sqlvar[column-1].sqlname, - m_pSqlda->sqlvar[column-1].sqlname_length, - RTL_TEXTENCODING_UTF8); + char* pColumnName = m_pSqlda->sqlvar[column - 1].sqlname; + sal_Int32 nColumnNameLength = m_pSqlda->sqlvar[column - 1].sqlname_length; + // tdf#132924 - return column alias if specified + if (m_pSqlda->sqlvar[column - 1].aliasname_length > 0) + { + pColumnName = m_pSqlda->sqlvar[column - 1].aliasname; + nColumnNameLength = m_pSqlda->sqlvar[column - 1].aliasname_length; + } + OUString sRet(pColumnName, nColumnNameLength, RTL_TEXTENCODING_UTF8); sanitizeIdentifier(sRet); return sRet; } @@ -184,34 +190,34 @@ sal_Bool SAL_CALL OResultSetMetaData::isCurrency(sal_Int32) sal_Bool SAL_CALL OResultSetMetaData::isAutoIncrement(sal_Int32 column) { OUString sTable = getTableName(column); - if( !sTable.isEmpty() ) - { - OUString sColumnName = getColumnName( column ); + if( sTable.isEmpty() ) + return false; - OUString sSql = "SELECT RDB$IDENTITY_TYPE FROM RDB$RELATION_FIELDS " - "WHERE RDB$RELATION_NAME = '" - + escapeWith(sTable, '\'', '\'') + "' AND " - "RDB$FIELD_NAME = '"+ escapeWith(sColumnName, '\'', '\'') +"'"; + OUString sColumnName = getColumnName( column ); - Reference<XStatement> xStmt =m_pConnection ->createStatement(); + OUString sSql = "SELECT RDB$IDENTITY_TYPE FROM RDB$RELATION_FIELDS " + "WHERE RDB$RELATION_NAME = '" + + sTable.replaceAll("'", "''") + "' AND " + "RDB$FIELD_NAME = '"+ sColumnName.replaceAll("'", "''") +"'"; - Reference<XResultSet> xRes = - xStmt->executeQuery(sSql); - Reference<XRow> xRow ( xRes, UNO_QUERY); - if(xRes->next()) - { - int iType = xRow->getShort(1); - if(iType == 1) // IDENTITY - return true; - } - else - { - SAL_WARN("connectivity.firebird","Column '" - << sColumnName - << "' not found in database"); + Reference<XStatement> xStmt =m_pConnection ->createStatement(); - return false; - } + Reference<XResultSet> xRes = + xStmt->executeQuery(sSql); + Reference<XRow> xRow ( xRes, UNO_QUERY); + if(xRes->next()) + { + int iType = xRow->getShort(1); + if(iType == 1) // IDENTITY + return true; + } + else + { + SAL_WARN("connectivity.firebird","Column '" + << sColumnName + << "' not found in database"); + + return false; } return false; } @@ -226,34 +232,34 @@ sal_Bool SAL_CALL OResultSetMetaData::isSigned(sal_Int32) sal_Int32 SAL_CALL OResultSetMetaData::getPrecision(sal_Int32 column) { sal_Int32 nType = getColumnType(column); - if( nType == DataType::NUMERIC || nType == DataType::DECIMAL ) + if( nType != DataType::NUMERIC && nType != DataType::DECIMAL ) + return 0; + + OUString sColumnName = getColumnName( column ); + + // RDB$FIELD_SOURCE is a unique name of column per database + OUString sSql = "SELECT RDB$FIELD_PRECISION FROM RDB$FIELDS " + " INNER JOIN RDB$RELATION_FIELDS " + " ON RDB$RELATION_FIELDS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME " + "WHERE RDB$RELATION_FIELDS.RDB$RELATION_NAME = '" + + getTableName(column).replaceAll("'", "''") + "' AND " + "RDB$RELATION_FIELDS.RDB$FIELD_NAME = '" + + sColumnName.replaceAll("'", "''") +"'"; + Reference<XStatement> xStmt= m_pConnection->createStatement(); + + Reference<XResultSet> xRes = + xStmt->executeQuery(sSql); + Reference<XRow> xRow ( xRes, UNO_QUERY); + if(xRes->next()) { - OUString sColumnName = getColumnName( column ); - - // RDB$FIELD_SOURCE is a unique name of column per database - OUString sSql = "SELECT RDB$FIELD_PRECISION FROM RDB$FIELDS " - " INNER JOIN RDB$RELATION_FIELDS " - " ON RDB$RELATION_FIELDS.RDB$FIELD_SOURCE = RDB$FIELDS.RDB$FIELD_NAME " - "WHERE RDB$RELATION_FIELDS.RDB$RELATION_NAME = '" - + escapeWith(getTableName(column), '\'', '\'') + "' AND " - "RDB$RELATION_FIELDS.RDB$FIELD_NAME = '" - + escapeWith(sColumnName, '\'', '\'') +"'"; - Reference<XStatement> xStmt= m_pConnection->createStatement(); - - Reference<XResultSet> xRes = - xStmt->executeQuery(sSql); - Reference<XRow> xRow ( xRes, UNO_QUERY); - if(xRes->next()) - { - return static_cast<sal_Int32>(xRow->getShort(1)); - } - else - { - SAL_WARN("connectivity.firebird","Column '" - << sColumnName - << "' not found in database"); - return 0; - } + return static_cast<sal_Int32>(xRow->getShort(1)); + } + else + { + SAL_WARN("connectivity.firebird","Column '" + << sColumnName + << "' not found in database"); + return 0; } return 0; } @@ -292,5 +298,4 @@ sal_Bool SAL_CALL OResultSetMetaData::isWritable( sal_Int32 ) return !m_pConnection->isReadOnly(); } - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.hxx b/connectivity/source/drivers/firebird/ResultSetMetaData.hxx index 95c36ab958d4..a32c206213aa 100644 --- a/connectivity/source/drivers/firebird/ResultSetMetaData.hxx +++ b/connectivity/source/drivers/firebird/ResultSetMetaData.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_RESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_RESULTSETMETADATA_HXX +#pragma once #include "Connection.hxx" @@ -78,6 +77,4 @@ namespace connectivity::firebird } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_RESULTSETMETADATA_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Statement.cxx b/connectivity/source/drivers/firebird/Statement.cxx index 418c66a7d0cd..d135c4e4cda4 100644 --- a/connectivity/source/drivers/firebird/Statement.cxx +++ b/connectivity/source/drivers/firebird/Statement.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -40,7 +40,6 @@ using namespace com::sun::star::util; using namespace ::comphelper; using namespace ::osl; -using namespace ::std; // ---- XBatchExecution - UNSUPPORTED ---------------------------------------- void SAL_CALL OStatement::addBatch(const OUString&) @@ -58,12 +57,12 @@ Sequence< sal_Int32 > SAL_CALL OStatement::executeBatch() IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbcx.OStatement","com.sun.star.sdbc.Statement"); -void SAL_CALL OStatement::acquire() throw() +void SAL_CALL OStatement::acquire() noexcept { OStatementCommonBase::acquire(); } -void SAL_CALL OStatement::release() throw() +void SAL_CALL OStatement::release() noexcept { OStatementCommonBase::release(); } @@ -71,7 +70,8 @@ void SAL_CALL OStatement::release() throw() void OStatement::disposeResultSet() { MutexGuard aGuard(m_aMutex); - checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); + if (OStatementCommonBase_Base::rBHelper.bDisposed) + return; OStatementCommonBase::disposeResultSet(); @@ -126,11 +126,6 @@ uno::Reference< XResultSet > SAL_CALL OStatement::executeQuery(const OUString& s if (isDDLStatement()) { m_pConnection->commit(); - m_pConnection->notifyDatabaseModified(); - } - else if (getStatementChangeCount() > 0) - { - m_pConnection->notifyDatabaseModified(); } return m_xResultSet; @@ -148,7 +143,7 @@ uno::Reference< XConnection > SAL_CALL OStatement::getConnection() MutexGuard aGuard(m_aMutex); checkDisposed(OStatementCommonBase_Base::rBHelper.bDisposed); - return uno::Reference<XConnection>(m_pConnection.get()); + return m_pConnection; } Any SAL_CALL OStatement::queryInterface( const Type & rType ) @@ -172,4 +167,5 @@ void SAL_CALL OStatement::disposing() disposeResultSet(); close(); } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Statement.hxx b/connectivity/source/drivers/firebird/Statement.hxx index 903f12407ee8..d1b967def1d5 100644 --- a/connectivity/source/drivers/firebird/Statement.hxx +++ b/connectivity/source/drivers/firebird/Statement.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_STATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_STATEMENT_HXX +#pragma once #include "StatementCommonBase.hxx" @@ -51,8 +50,8 @@ namespace connectivity::firebird DECLARE_SERVICE_INFO(); - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; // XStatement virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL @@ -81,6 +80,5 @@ namespace connectivity::firebird }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_STATEMENT_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.cxx b/connectivity/source/drivers/firebird/StatementCommonBase.cxx index 1d7d5ef32bdf..29ef5925657d 100644 --- a/connectivity/source/drivers/firebird/StatementCommonBase.cxx +++ b/connectivity/source/drivers/firebird/StatementCommonBase.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,7 +17,6 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include "Driver.hxx" #include "StatementCommonBase.hxx" #include "Util.hxx" @@ -44,7 +43,6 @@ using namespace ::com::sun::star::util; using namespace ::comphelper; using namespace ::osl; -using namespace ::std; OStatementCommonBase::OStatementCommonBase(Connection* _pConnection) : OStatementCommonBase_Base(m_aMutex), @@ -78,7 +76,7 @@ void OStatementCommonBase::freeStatementHandle() &m_aStatementHandle, DSQL_drop); evaluateStatusVector(m_statusVector, - "isc_dsql_free_statement", + u"isc_dsql_free_statement", *this); } } @@ -124,9 +122,7 @@ void SAL_CALL OStatementCommonBase::close() dispose(); } -void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql, - XSQLDA*& pOutSqlda, - XSQLDA* pInSqlda) +void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql, XSQLDA*& pOutSqlda) { SolarMutexGuard g; // tdf#122129 @@ -146,7 +142,7 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql, if (aErr) { evaluateStatusVector(m_statusVector, - "isc_dsql_allocate_statement", + u"isc_dsql_allocate_statement", *this); } else @@ -156,56 +152,41 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql, &m_aStatementHandle, 0, OUStringToOString(sql, RTL_TEXTENCODING_UTF8).getStr(), - FIREBIRD_SQL_DIALECT, - pInSqlda); + SQL_DIALECT_CURRENT, + pOutSqlda); if (aErr) { evaluateStatusVector(m_statusVector, - "isc_dsql_prepare", + u"isc_dsql_prepare", *this); } else { - aErr = isc_dsql_describe(m_statusVector, - &m_aStatementHandle, - 1, - pOutSqlda); + // Ensure we have enough space in pOutSqlda + if (pOutSqlda->sqld > pOutSqlda->sqln) + { + int n = pOutSqlda->sqld; + free(pOutSqlda); + pOutSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(n))); + pOutSqlda->version = SQLDA_VERSION1; + pOutSqlda->sqln = n; + aErr = isc_dsql_describe(m_statusVector, + &m_aStatementHandle, + 1, + pOutSqlda); + } + // Process each XSQLVAR parameter structure in the output XSQLDA if (aErr) { - // TODO: free statement handle, etc.? evaluateStatusVector(m_statusVector, - "isc_dsql_describe", + u"isc_dsql_describe", *this); } else { - // Ensure we have enough space in pOutSqlda - if (pOutSqlda->sqld > pOutSqlda->sqln) - { - int n = pOutSqlda->sqld; - free(pOutSqlda); - pOutSqlda = static_cast<XSQLDA*>(calloc(1, XSQLDA_LENGTH(n))); - pOutSqlda->version = SQLDA_VERSION1; - pOutSqlda->sqln = n; - aErr = isc_dsql_describe(m_statusVector, - &m_aStatementHandle, - 1, - pOutSqlda); - } - - // Process each XSQLVAR parameter structure in the output XSQLDA - if (aErr) - { - evaluateStatusVector(m_statusVector, - "isc_dsql_describe", - *this); - } - else - { - mallocSQLVAR(pOutSqlda); - } + mallocSQLVAR(pOutSqlda); } } if(aErr) @@ -260,31 +241,71 @@ void SAL_CALL OStatementCommonBase::clearWarnings() { // this properties are define by the service statement // they must in alphabetic order - Sequence< Property > aProps(10); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), - PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), - PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), - PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), - PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), - PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), + PROPERTY_ID_ESCAPEPROCESSING, + cppu::UnoType<bool>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), + PROPERTY_ID_MAXFIELDSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), + PROPERTY_ID_MAXROWS, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), + PROPERTY_ID_QUERYTIMEOUT, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), + PROPERTY_ID_USEBOOKMARKS, + cppu::UnoType<bool>::get(), + 0 + } + } + }; } @@ -342,12 +363,12 @@ void OStatementCommonBase::getFastPropertyValue(Any&,sal_Int32 nHandle) const } } -void SAL_CALL OStatementCommonBase::acquire() throw() +void SAL_CALL OStatementCommonBase::acquire() noexcept { OStatementCommonBase_Base::acquire(); } -void SAL_CALL OStatementCommonBase::release() throw() +void SAL_CALL OStatementCommonBase::release() noexcept { OStatementCommonBase_Base::release(); } @@ -379,7 +400,7 @@ short OStatementCommonBase::getSqlInfoItem(char aInfoItem) } evaluateStatusVector(aStatusVector, - "isc_dsq_sql_info", + u"isc_dsq_sql_info", *this); return 0; } @@ -411,7 +432,7 @@ sal_Int32 OStatementCommonBase::getStatementChangeCount() if (aErr) { evaluateStatusVector(aStatusVector, - "isc_dsq_sql_info", + u"isc_dsq_sql_info", *this); return 0; } @@ -432,32 +453,34 @@ sal_Int32 OStatementCommonBase::getStatementChangeCount() aDesiredInfoType = isc_info_req_delete_count; break; case isc_info_sql_stmt_exec_procedure: + case isc_info_sql_stmt_ddl: return 0; // cannot determine default: throw SQLException(); // TODO: better error message? } char* pResults = aResultsBuffer; - if (static_cast<short>(*pResults++) == isc_info_sql_records) - { -// const short aTotalLength = (short) isc_vax_integer(pResults, 2); - pResults += 2; + if (static_cast<short>(*pResults++) != isc_info_sql_records) + return 0; - // Seems to be of form TOKEN (1 byte), LENGTH (2 bytes), DATA (LENGTH bytes) - while (*pResults != isc_info_rsb_end) - { - const char aToken = *pResults; - const short aLength = static_cast<short>(isc_vax_integer(pResults+1, 2)); +// const short aTotalLength = (short) isc_vax_integer(pResults, 2); + pResults += 2; - if (aToken == aDesiredInfoType) - { - return isc_vax_integer(pResults + 3, aLength); - } + // Seems to be of form TOKEN (1 byte), LENGTH (2 bytes), DATA (LENGTH bytes) + while (*pResults != isc_info_rsb_end) + { + const char aToken = *pResults; + const short aLength = static_cast<short>(isc_vax_integer(pResults+1, 2)); - pResults += (3 + aLength); + if (aToken == aDesiredInfoType) + { + return isc_vax_integer(pResults + 3, aLength); } + + pResults += (3 + aLength); } return 0; } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.hxx b/connectivity/source/drivers/firebird/StatementCommonBase.hxx index c92dd8634109..fa9cd790272e 100644 --- a/connectivity/source/drivers/firebird/StatementCommonBase.hxx +++ b/connectivity/source/drivers/firebird/StatementCommonBase.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_STATEMENTCOMMONBASE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_STATEMENTCOMMONBASE_HXX +#pragma once #include <sal/config.h> @@ -85,9 +84,7 @@ namespace connectivity::firebird virtual ~OStatementCommonBase() override; /// @throws css::sdbc::SQLException - void prepareAndDescribeStatement(std::u16string_view sqlIn, - XSQLDA*& pOutSqlda, - XSQLDA* pInSqlda=nullptr); + void prepareAndDescribeStatement(std::u16string_view sqlIn, XSQLDA*& pOutSqlda); /// @throws css::sdbc::SQLException short getSqlInfoItem(char aInfoItem); @@ -107,8 +104,8 @@ namespace connectivity::firebird OStatementCommonBase_Base::disposing(); } // XInterface - virtual void SAL_CALL release() throw() override; - virtual void SAL_CALL acquire() throw() override; + virtual void SAL_CALL release() noexcept override; + virtual void SAL_CALL acquire() noexcept override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider @@ -134,6 +131,4 @@ namespace connectivity::firebird } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_STATEMENTCOMMONBASE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/SubComponent.hxx b/connectivity/source/drivers/firebird/SubComponent.hxx index 4d9c107213f5..bea5d76d423d 100644 --- a/connectivity/source/drivers/firebird/SubComponent.hxx +++ b/connectivity/source/drivers/firebird/SubComponent.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_SUBCOMPONENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_SUBCOMPONENT_HXX +#pragma once #include <cppuhelper/propshlp.hxx> #include <osl/diagnose.h> @@ -108,6 +107,5 @@ namespace connectivity::firebird } } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_SUBCOMPONENT_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Table.cxx b/connectivity/source/drivers/firebird/Table.cxx index 02718c78e731..871febcf5122 100644 --- a/connectivity/source/drivers/firebird/Table.cxx +++ b/connectivity/source/drivers/firebird/Table.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -155,27 +155,14 @@ void SAL_CALL Table::alterColumnByName(const OUString& rColName, if (nNullable != ColumnValue::NULLABLE_UNKNOWN) { - OUString sSql; - // Dirty hack: can't change null directly in sql, we have to fiddle - // the system tables manually. + OUString sSql(getAlterTableColumn(rColName)); if (nNullable == ColumnValue::NULLABLE) { - sSql = "UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = NULL " - "WHERE RDB$FIELD_NAME = '" + rColName + "' " - "AND RDB$RELATION_NAME = '" + getName() + "'"; + sSql += "DROP NOT NULL"; } else if (nNullable == ColumnValue::NO_NULLS) { - // And if we are making NOT NULL then we have to make sure we have - // no nulls left in the column. - OUString sFillNulls("UPDATE \"" + getName() + "\" SET \"" - + rColName + "\" = 0 " - "WHERE \"" + rColName + "\" IS NULL"); - getConnection()->createStatement()->execute(sFillNulls); - - sSql = "UPDATE RDB$RELATION_FIELDS SET RDB$NULL_FLAG = 1 " - "WHERE RDB$FIELD_NAME = '" + rColName + "' " - "AND RDB$RELATION_NAME = '" + getName() + "'"; + sSql += "SET NOT NULL"; } getConnection()->createStatement()->execute(sSql); } @@ -237,26 +224,9 @@ Any SAL_CALL Table::queryInterface(const Type& rType) return OTableHelper::queryInterface(rType); } -// ----- XTypeProvider -------------------------------------------------------- -uno::Sequence< Type > SAL_CALL Table::getTypes() -{ - uno::Sequence< Type > aTypes = OTableHelper::getTypes(); - - for (int i = 0; i < aTypes.getLength(); i++) - { - if (aTypes[i].getTypeName() == "com.sun.star.sdbcx.XRename") - { - ::comphelper::removeElementAt(aTypes, i); - break; - } - } - - return OTableHelper::getTypes(); -} - OUString Table::getAlterTableColumn(std::u16string_view rColumn) { return ("ALTER TABLE \"" + getName() + "\" ALTER COLUMN \"" + rColumn + "\" "); } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Table.hxx b/connectivity/source/drivers/firebird/Table.hxx index d2646dcd168d..ed638a9c88ac 100644 --- a/connectivity/source/drivers/firebird/Table.hxx +++ b/connectivity/source/drivers/firebird/Table.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_TABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_TABLE_HXX +#pragma once #include <sal/config.h> @@ -75,14 +74,8 @@ namespace connectivity::firebird virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type & rType) override; - //XTypeProvider - virtual css::uno::Sequence< css::uno::Type > - SAL_CALL getTypes() override; - }; } // namespace connectivity::firebird -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_TABLE_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Tables.cxx b/connectivity/source/drivers/firebird/Tables.cxx index 5acb391caeb5..e3440137381a 100644 --- a/connectivity/source/drivers/firebird/Tables.cxx +++ b/connectivity/source/drivers/firebird/Tables.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -9,8 +9,8 @@ #include "Table.hxx" #include "Tables.hxx" +#include "Views.hxx" #include "Catalog.hxx" -#include "Util.hxx" #include <TConnection.hxx> @@ -30,7 +30,6 @@ using namespace ::osl; using namespace ::com::sun::star; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::uno; @@ -81,7 +80,7 @@ OUString Tables::createStandardColumnPart(const Reference< XPropertySet >& xColP xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISAUTOINCREMENT)) >>= bIsAutoIncrement; const OUString sQuoteString = xMetaData->getIdentifierQuoteString(); - OUStringBuffer aSql = ::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME)))); + OUStringBuffer aSql(::dbtools::quoteName(sQuoteString,::comphelper::getString(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_NAME))))); // check if the user enter a specific string to create autoincrement values OUString sAutoIncrementValue; @@ -90,9 +89,8 @@ OUString Tables::createStandardColumnPart(const Reference< XPropertySet >& xColP if ( xPropInfo.is() && xPropInfo->hasPropertyByName(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) ) xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION)) >>= sAutoIncrementValue; - aSql.append(" "); - - aSql.append(dbtools::createStandardTypePart(xColProp, _xConnection)); + aSql.append(" " + + dbtools::createStandardTypePart(xColProp, _xConnection)); // Add character set for (VAR)BINARY (fix) types: // (VAR) BINARY is distinguished from other CHAR types by its character set. // Octets is a special character set for binary data. @@ -104,15 +102,13 @@ OUString Tables::createStandardColumnPart(const Reference< XPropertySet >& xColP >>= aType; if(aType == DataType::BINARY || aType == DataType::VARBINARY) { - aSql.append(" "); - aSql.append("CHARACTER SET OCTETS"); + aSql.append(" CHARACTER SET OCTETS"); } } if ( bIsAutoIncrement && !sAutoIncrementValue.isEmpty()) { - aSql.append(" "); - aSql.append(sAutoIncrementValue); + aSql.append(" " + sAutoIncrementValue); } // AutoIncrement "IDENTITY" is implicitly "NOT NULL" else if(::comphelper::getINT32(xColProp->getPropertyValue(rPropMap.getNameByIndex(PROPERTY_ID_ISNULLABLE))) == ColumnValue::NO_NULLS) @@ -149,8 +145,8 @@ ObjectType Tables::appendObject(const OUString& rName, if ( sComposedName.isEmpty() ) ::dbtools::throwFunctionSequenceException(xConnection); - aSqlBuffer.append(sComposedName); - aSqlBuffer.append(" ("); + aSqlBuffer.append(sComposedName + + " ("); // columns Reference<XColumnsSupplier> xColumnSup(rDescriptor,UNO_QUERY); @@ -166,8 +162,8 @@ ObjectType Tables::appendObject(const OUString& rName, { if ( (xColumns->getByIndex(i) >>= xColProp) && xColProp.is() ) { - aSqlBuffer.append(createStandardColumnPart(xColProp,xConnection)); - aSqlBuffer.append(","); + aSqlBuffer.append(createStandardColumnPart(xColProp,xConnection) + + ","); } } OUString sSql = aSqlBuffer.makeStringAndClear(); @@ -178,7 +174,7 @@ ObjectType Tables::appendObject(const OUString& rName, else { if ( sSql.endsWith(",") ) - sSql = sSql.replaceAt(sSql.getLength()-1, 1, ")"); + sSql = sSql.replaceAt(sSql.getLength()-1, 1, u")"); else sSql += ")"; } @@ -196,16 +192,34 @@ void Tables::dropObject(sal_Int32 nPosition, const OUString& sName) if (ODescriptor::isNew(xTable)) return; - OUStringBuffer sSql("DROP "); - OUString sType; xTable->getPropertyValue("Type") >>= sType; - sSql.append(sType); const OUString sQuoteString = m_xMetaData->getIdentifierQuoteString(); - sSql.append(::dbtools::quoteName(sQuoteString,sName)); - m_xMetaData->getConnection()->createStatement()->execute(sSql.makeStringAndClear()); + m_xMetaData->getConnection()->createStatement()->execute( + "DROP " + sType + " " + ::dbtools::quoteName(sQuoteString,sName)); + + if (sType == "VIEW") + { + Views* pViews = static_cast<Views*>(static_cast<Catalog&>(m_rParent).getPrivateViews()); + if ( pViews && pViews->hasByName(sName) ) + pViews->dropByNameImpl(sName); + } } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +void connectivity::firebird::Tables::appendNew(const OUString& _rsNewTable) +{ + insertElement(_rsNewTable, nullptr); + + // notify our container listeners + css::container::ContainerEvent aEvent(static_cast<XContainer*>(this), + css::uno::Any(_rsNewTable), css::uno::Any(), + css::uno::Any()); + comphelper::OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); + while (aListenerLoop.hasMoreElements()) + aListenerLoop.next()->elementInserted(aEvent); +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Tables.hxx b/connectivity/source/drivers/firebird/Tables.hxx index 3f36b9865c3b..ada1827097a5 100644 --- a/connectivity/source/drivers/firebird/Tables.hxx +++ b/connectivity/source/drivers/firebird/Tables.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,13 +7,13 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_TABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_TABLES_HXX +#pragma once #include <com/sun/star/sdbc/XConnection.hpp> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> #include <connectivity/sdbcx/VCollection.hxx> +#include <utility> namespace connectivity::firebird { @@ -41,10 +41,10 @@ namespace connectivity::firebird const css::uno::Reference< css::beans::XPropertySet >& rDescriptor) override; public: - Tables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& rMetaData, + Tables(css::uno::Reference< css::sdbc::XDatabaseMetaData > xMetaData, ::cppu::OWeakObject& rParent, ::osl::Mutex& rMutex, - ::std::vector< OUString> const & rNames) : sdbcx::OCollection(rParent, true, rMutex, rNames), m_xMetaData(rMetaData) {} + ::std::vector< OUString> const & rNames) : sdbcx::OCollection(rParent, true, rMutex, rNames), m_xMetaData(std::move(xMetaData)) {} // TODO: we should also implement XDataDescriptorFactory, XRefreshable, // XAppend, etc., but all are optional. @@ -52,11 +52,10 @@ namespace connectivity::firebird // XDrop virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override; + void appendNew(const OUString& _rsNewTable); + }; } // namespace connectivity::firebird - -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_TABLES_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/User.cxx b/connectivity/source/drivers/firebird/User.cxx index 3a9682fb8264..9f647713a663 100644 --- a/connectivity/source/drivers/firebird/User.cxx +++ b/connectivity/source/drivers/firebird/User.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -49,3 +49,5 @@ void User::refreshGroups() { // TODO: implement. } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/User.hxx b/connectivity/source/drivers/firebird/User.hxx index 16fa138976b9..e47565f5d52e 100644 --- a/connectivity/source/drivers/firebird/User.hxx +++ b/connectivity/source/drivers/firebird/User.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_USER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_USER_HXX +#pragma once #include <sdbcx/VUser.hxx> #include <com/sun/star/sdbc/XConnection.hpp> @@ -44,7 +43,4 @@ namespace connectivity::firebird } // namespace connectivity::firebird - -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_USER_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Users.cxx b/connectivity/source/drivers/firebird/Users.cxx index fc8914250ee6..10912d6be0ab 100644 --- a/connectivity/source/drivers/firebird/Users.cxx +++ b/connectivity/source/drivers/firebird/Users.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -17,8 +17,6 @@ using namespace ::cppu; using namespace ::osl; using namespace ::com::sun::star; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::uno; @@ -75,4 +73,4 @@ void Users::dropObject(sal_Int32 nPosition, const OUString&) } } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Users.hxx b/connectivity/source/drivers/firebird/Users.hxx index 6a6be1ead6a6..7e78444d1199 100644 --- a/connectivity/source/drivers/firebird/Users.hxx +++ b/connectivity/source/drivers/firebird/Users.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,8 +7,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_USERS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_USERS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -51,7 +50,4 @@ namespace connectivity::firebird } // namespace connectivity::firebird - -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_USERS_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx index 82d69a123c97..3cee5dab6e0b 100644 --- a/connectivity/source/drivers/firebird/Util.cxx +++ b/connectivity/source/drivers/firebird/Util.cxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -13,6 +13,7 @@ #include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/sdbc/SQLException.hpp> +#include <o3tl/string_view.hxx> using namespace ::connectivity; @@ -22,16 +23,16 @@ using namespace ::com::sun::star::uno; using namespace firebird; -OUString firebird::sanitizeIdentifier(const OUString& rIdentifier) +OUString firebird::sanitizeIdentifier(std::u16string_view rIdentifier) { - OUString sRet = rIdentifier.trim(); - assert(sRet.getLength() <= 31); // Firebird identifiers cannot be longer than this. + std::u16string_view sRet = o3tl::trim(rIdentifier); + assert(sRet.size() <= 31); // Firebird identifiers cannot be longer than this. - return sRet; + return OUString(sRet); } OUString firebird::StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector, - const OUString& rCause) + std::u16string_view rCause) { OUStringBuffer buf; const ISC_STATUS* pStatus = reinterpret_cast<const ISC_STATUS*>(&rStatusVector); @@ -43,15 +44,15 @@ OUString firebird::StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector, while(fb_interpret(msg, sizeof(msg), &pStatus)) { // TODO: verify encoding - buf.append("\n*"); - buf.append(OUString(msg, strlen(msg), RTL_TEXTENCODING_UTF8)); + buf.append("\n*" + + OUString(msg, strlen(msg), RTL_TEXTENCODING_UTF8)); } } catch (...) { SAL_WARN("connectivity.firebird", "ignore fb_interpret exception"); } - buf.append("\ncaused by\n'").append(rCause).append("'\n"); + buf.append(OUString::Concat("\ncaused by\n'") + rCause + "'\n"); OUString error = buf.makeStringAndClear(); SAL_WARN("connectivity.firebird", error); @@ -59,7 +60,7 @@ OUString firebird::StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector, } void firebird::evaluateStatusVector(const ISC_STATUS_ARRAY& rStatusVector, - const OUString& rCause, + std::u16string_view rCause, const uno::Reference< XInterface >& _rxContext) { if (IndicatesError(rStatusVector)) @@ -342,8 +343,9 @@ void firebird::mallocSQLVAR(XSQLDA* pSqlda) case SQL_BOOLEAN: pVar->sqldata = static_cast<char *>(malloc(sizeof(sal_Bool))); break; + // See https://www.firebirdsql.org/file/documentation/html/en/refdocs/fblangref25/firebird-25-language-reference.html#fblangref25-datatypes-special-sqlnull case SQL_NULL: - assert(false); // TODO: implement + pVar->sqldata = nullptr; break; case SQL_QUAD: assert(false); // TODO: implement @@ -388,7 +390,8 @@ void firebird::freeSQLVAR(XSQLDA* pSqlda) } break; case SQL_NULL: - assert(false); // TODO: implement + // See SQL_NULL case in mallocSQLVAR + assert(pVar->sqldata == nullptr); break; case SQL_QUAD: assert(false); // TODO: implement @@ -408,22 +411,6 @@ void firebird::freeSQLVAR(XSQLDA* pSqlda) } -OUString firebird::escapeWith( const OUString& sText, const char aKey, const char aEscapeChar) -{ - OUString sRet(sText); - sal_Int32 aIndex = 0; - for (;;) - { - aIndex = sRet.indexOf(aKey, aIndex); - if ( aIndex <= 0 || aIndex >= sRet.getLength()) - break; - sRet = sRet.replaceAt(aIndex, 1, OUStringChar(aEscapeChar) + OUStringChar(aKey) ); - aIndex += 2; - } - - return sRet; -} - sal_Int64 firebird::pow10Integer(int nDecimalCount) { sal_Int64 nRet = 1; @@ -433,4 +420,5 @@ sal_Int64 firebird::pow10Integer(int nDecimalCount) } return nRet; } -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Util.hxx b/connectivity/source/drivers/firebird/Util.hxx index efb222f3ff22..db407ef98b38 100644 --- a/connectivity/source/drivers/firebird/Util.hxx +++ b/connectivity/source/drivers/firebird/Util.hxx @@ -1,4 +1,4 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ /* * This file is part of the LibreOffice project. * @@ -7,14 +7,14 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_UTIL_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_UTIL_HXX +#pragma once #include <ibase.h> #include <rtl/ustring.hxx> #include <com/sun/star/uno/XInterface.hpp> +#include <utility> namespace connectivity::firebird { @@ -58,16 +58,16 @@ public: * */ explicit ColumnTypeInfo( short aType, short aSubType = 0, - short nScale = 0, const OUString& sCharset = OUString() ) + short nScale = 0, OUString sCharset = OUString() ) : m_aType(aType) , m_aSubType(aSubType) , m_nScale(nScale) - , m_sCharsetName(sCharset) {} - explicit ColumnTypeInfo( short aType, const OUString& sCharset ) + , m_sCharsetName(std::move(sCharset)) {} + explicit ColumnTypeInfo( short aType, OUString sCharset ) : m_aType(aType) , m_aSubType(0) , m_nScale(0) - , m_sCharsetName(sCharset) {} + , m_sCharsetName(std::move(sCharset)) {} short getType() const { return m_aType; } short getSubType() const { return m_aSubType; } short getScale() const { return m_nScale; } @@ -87,7 +87,7 @@ public: * for such shorter strings, however any trailing padding makes the gui * editing of such names harder, hence we remove all trailing whitespace. */ - OUString sanitizeIdentifier(const OUString& rIdentifier); + OUString sanitizeIdentifier(std::u16string_view rIdentifier); inline bool IndicatesError(const ISC_STATUS_ARRAY& rStatusVector) { @@ -95,7 +95,7 @@ public: } OUString StatusVectorToString(const ISC_STATUS_ARRAY& rStatusVector, - const OUString& rCause); + std::u16string_view rCause); /** * Evaluate a firebird status vector and throw exceptions as necessary. @@ -104,7 +104,7 @@ public: * @throws css::sdbc::SQLException */ void evaluateStatusVector(const ISC_STATUS_ARRAY& rStatusVector, - const OUString& aCause, + std::u16string_view aCause, const css::uno::Reference< css::uno::XInterface >& _rxContext); /** @@ -119,10 +119,8 @@ public: void freeSQLVAR(XSQLDA* pSqlda); - OUString escapeWith( const OUString& sText, const char aKey, const char aEscapeChar); sal_Int64 pow10Integer( int nDecimalCount ); } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_FIREBIRD_UTIL_HXX -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/View.cxx b/connectivity/source/drivers/firebird/View.cxx new file mode 100644 index 000000000000..6dcbf6bce2b2 --- /dev/null +++ b/connectivity/source/drivers/firebird/View.cxx @@ -0,0 +1,85 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include "View.hxx" + +#include <propertyids.hxx> + +#include <com/sun/star/sdbc/XRow.hpp> + +namespace connectivity::firebird +{ +View::View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive, + const OUString& _rSchemaName, const OUString& _rName) + : View_Base(_bCaseSensitive, _rName, _rxConnection->getMetaData(), OUString(), _rSchemaName, + OUString()) + , m_xConnection(_rxConnection) +{ +} + +View::~View() {} + +void SAL_CALL View::acquire() noexcept { View_Base::acquire(); }; +void SAL_CALL View::release() noexcept { View_Base::release(); }; +css::uno::Any SAL_CALL View::queryInterface(const css::uno::Type& _rType) +{ + css::uno::Any aReturn = View_Base::queryInterface(_rType); + if (!aReturn.hasValue()) + aReturn = View_IBASE::queryInterface(_rType); + return aReturn; +} + +css::uno::Sequence<css::uno::Type> SAL_CALL View::getTypes() +{ + return ::comphelper::concatSequences(View_Base::getTypes(), View_IBASE::getTypes()); +} + +css::uno::Sequence<sal_Int8> SAL_CALL View::getImplementationId() +{ + return css::uno::Sequence<sal_Int8>(); +} + +void SAL_CALL View::alterCommand(const OUString& _rNewCommand) +{ + OUString aCommand = "ALTER VIEW \"" + m_Name + "\" AS " + _rNewCommand; + m_xMetaData->getConnection()->createStatement()->execute(aCommand); +} + +void SAL_CALL View::getFastPropertyValue(css::uno::Any& _rValue, sal_Int32 _nHandle) const +{ + if (_nHandle == PROPERTY_ID_COMMAND) + { + // retrieve the very current command, don't rely on the base classes cached value + // (which we initialized empty, anyway) + _rValue <<= impl_getCommand(); + return; + } + + View_Base::getFastPropertyValue(_rValue, _nHandle); +} + +OUString View::impl_getCommand() const +{ + OUString aCommand("SELECT RDB$VIEW_SOURCE FROM RDB$RELATIONS WHERE RDB$RELATION_NAME = '" + + m_Name + "'"); + css::uno::Reference<css::sdbc::XStatement> statement = m_xConnection->createStatement(); + css::uno::Reference<css::sdbc::XResultSet> xResult = statement->executeQuery(aCommand); + + css::uno::Reference<css::sdbc::XRow> xRow(xResult, css::uno::UNO_QUERY_THROW); + if (!xResult->next()) + { + // hmm. There is no view the name as we know it. Can only mean some other instance + // dropped this view meanwhile... + std::abort(); + } + + return xRow->getString(1); +} + +} // namespace connectivity::firebird +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/View.hxx b/connectivity/source/drivers/firebird/View.hxx new file mode 100644 index 000000000000..2b300a8d06d9 --- /dev/null +++ b/connectivity/source/drivers/firebird/View.hxx @@ -0,0 +1,60 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#pragma once + +#include <connectivity/sdbcx/VView.hxx> + +#include <com/sun/star/sdbcx/XAlterView.hpp> +#include <com/sun/star/sdbc/XConnection.hpp> + +#include <comphelper/sequence.hxx> +#include <cppuhelper/implbase1.hxx> + +namespace connectivity::firebird +{ +typedef ::connectivity::sdbcx::OView View_Base; +typedef ::cppu::ImplHelper1<css::sdbcx::XAlterView> View_IBASE; + +class View : public View_Base, public View_IBASE +{ +public: + View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive, + const OUString& _rSchemaName, const OUString& _rName); + + // UNO + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& aType) override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; + + virtual css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override; + virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override; + + // XAlterView + virtual void SAL_CALL alterCommand(const OUString& NewCommand) override; + +protected: + virtual ~View() override; + +protected: + // OPropertyContainer + virtual void SAL_CALL getFastPropertyValue(css::uno::Any& _rValue, + sal_Int32 _nHandle) const override; + +private: + /** retrieves the current command of the View */ + OUString impl_getCommand() const; + +private: + css::uno::Reference<css::sdbc::XConnection> m_xConnection; + + using View_Base::getFastPropertyValue; +}; + +} // namespace connectivity::firebird +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Views.cxx b/connectivity/source/drivers/firebird/Views.cxx new file mode 100644 index 000000000000..2e5bec42adc3 --- /dev/null +++ b/connectivity/source/drivers/firebird/Views.cxx @@ -0,0 +1,112 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#include "Tables.hxx" +#include "Views.hxx" +#include "View.hxx" +#include "Catalog.hxx" +#include <connectivity/dbtools.hxx> +#include <comphelper/types.hxx> +#include <TConnection.hxx> + +connectivity::firebird::Views::Views( + const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, ::cppu::OWeakObject& _rParent, + ::osl::Mutex& _rMutex, const ::std::vector<OUString>& _rVector) + : sdbcx::OCollection(_rParent, true, _rMutex, _rVector) + , m_xConnection(_rxConnection) + , m_xMetaData(_rxConnection->getMetaData()) + , m_bInDrop(false) +{ +} + +connectivity::sdbcx::ObjectType connectivity::firebird::Views::createObject(const OUString& _rName) +{ + OUString sCatalog, sSchema, sTable; + ::dbtools::qualifiedNameComponents(m_xMetaData, _rName, sCatalog, sSchema, sTable, + ::dbtools::EComposeRule::InDataManipulation); + return new View(m_xConnection, isCaseSensitive(), sSchema, sTable); +} + +void connectivity::firebird::Views::impl_refresh() +{ + static_cast<Catalog&>(m_rParent).refreshViews(); +} + +css::uno::Reference<css::beans::XPropertySet> connectivity::firebird::Views::createDescriptor() +{ + return new connectivity::sdbcx::OView(true, m_xMetaData); +} + +// XAppend +connectivity::sdbcx::ObjectType connectivity::firebird::Views::appendObject( + const OUString& _rForName, const css::uno::Reference<css::beans::XPropertySet>& descriptor) +{ + createView(descriptor); + return createObject(_rForName); +} + +// XDrop +void connectivity::firebird::Views::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/) +{ + if (m_bInDrop) + return; + + css::uno::Reference<XInterface> xObject(getObject(_nPos)); + bool bIsNew = connectivity::sdbcx::ODescriptor::isNew(xObject); + if (!bIsNew) + { + OUString aSql("DROP VIEW"); + + css::uno::Reference<css::beans::XPropertySet> xProp(xObject, css::uno::UNO_QUERY); + aSql += ::dbtools::composeTableName(m_xMetaData, xProp, + ::dbtools::EComposeRule::InTableDefinitions, true); + + css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection(); + css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement(); + xStmt->execute(aSql); + ::comphelper::disposeComponent(xStmt); + } +} + +void connectivity::firebird::Views::dropByNameImpl(const OUString& elementName) +{ + m_bInDrop = true; + connectivity::sdbcx::OCollection::dropByName(elementName); + m_bInDrop = false; +} + +void connectivity::firebird::Views::createView( + const css::uno::Reference<css::beans::XPropertySet>& descriptor) +{ + css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection(); + + OUString sCommand; + descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_COMMAND)) + >>= sCommand; + + OUString aSql = "CREATE VIEW " + + ::dbtools::composeTableName(m_xMetaData, descriptor, + ::dbtools::EComposeRule::InTableDefinitions, true) + + " AS " + sCommand; + + css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement(); + if (xStmt.is()) + { + xStmt->execute(aSql); + ::comphelper::disposeComponent(xStmt); + } + connectivity::firebird::Tables* pTables = static_cast<connectivity::firebird::Tables*>( + static_cast<connectivity::firebird::Catalog&>(m_rParent).getPrivateTables()); + if (pTables) + { + OUString sName = ::dbtools::composeTableName( + m_xMetaData, descriptor, ::dbtools::EComposeRule::InDataManipulation, false); + pTables->appendNew(sName); + } +} +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/firebird/Views.hxx b/connectivity/source/drivers/firebird/Views.hxx new file mode 100644 index 000000000000..6887bdc66ed0 --- /dev/null +++ b/connectivity/source/drivers/firebird/Views.hxx @@ -0,0 +1,42 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#pragma once + +#include <connectivity/sdbcx/VCollection.hxx> +#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +namespace connectivity::firebird +{ +class Views final : public connectivity::sdbcx::OCollection +{ + css::uno::Reference<css::sdbc::XConnection> m_xConnection; + css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData; + bool m_bInDrop; + + // OCollection + virtual connectivity::sdbcx::ObjectType createObject(const OUString& _rName) override; + virtual void impl_refresh() override; + virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override; + virtual sdbcx::ObjectType + appendObject(const OUString& _rForName, + const css::uno::Reference<css::beans::XPropertySet>& descriptor) override; + + void createView(const css::uno::Reference<css::beans::XPropertySet>& descriptor); + +public: + Views(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, + ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, + const ::std::vector<OUString>& _rVector); + + // XDrop + virtual void dropObject(sal_Int32 _nPos, const OUString& _sElementName) override; + + void dropByNameImpl(const OUString& elementName); +}; +} +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/flat/ECatalog.cxx b/connectivity/source/drivers/flat/ECatalog.cxx index aed042fdd578..72b470235a01 100644 --- a/connectivity/source/drivers/flat/ECatalog.cxx +++ b/connectivity/source/drivers/flat/ECatalog.cxx @@ -25,7 +25,6 @@ #include <com/sun/star/sdbc/XResultSet.hpp> using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; diff --git a/connectivity/source/drivers/flat/EColumns.cxx b/connectivity/source/drivers/flat/EColumns.cxx index a9e210321ba6..56585f1e8059 100644 --- a/connectivity/source/drivers/flat/EColumns.cxx +++ b/connectivity/source/drivers/flat/EColumns.cxx @@ -23,10 +23,6 @@ using namespace connectivity::flat; using namespace connectivity; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; sdbcx::ObjectType OFlatColumns::createObject(const OUString& _rName) diff --git a/connectivity/source/drivers/flat/EConnection.cxx b/connectivity/source/drivers/flat/EConnection.cxx index 5127d903cc6d..a65470caaad9 100644 --- a/connectivity/source/drivers/flat/EConnection.cxx +++ b/connectivity/source/drivers/flat/EConnection.cxx @@ -36,7 +36,6 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; OFlatConnection::OFlatConnection(ODriver* _pDriver) : OConnection(_pDriver) @@ -136,8 +135,7 @@ css::uno::Reference< XTablesSupplier > OFlatConnection::createCatalog() Reference< XTablesSupplier > xTab = m_xCatalog; if(!xTab.is()) { - OFlatCatalog *pCat = new OFlatCatalog(this); - xTab = pCat; + xTab = new OFlatCatalog(this); m_xCatalog = xTab; } return xTab; @@ -148,11 +146,9 @@ Reference< XStatement > SAL_CALL OFlatConnection::createStatement( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_B::rBHelper.bDisposed); - OFlatStatement* pStmt = new OFlatStatement(this); - - Reference< XStatement > xStmt = pStmt; + rtl::Reference<OFlatStatement> pStmt = new OFlatStatement(this); m_aStatements.push_back(WeakReferenceHelper(*pStmt)); - return xStmt; + return pStmt; } Reference< XPreparedStatement > SAL_CALL OFlatConnection::prepareStatement( const OUString& sql ) @@ -160,13 +156,10 @@ Reference< XPreparedStatement > SAL_CALL OFlatConnection::prepareStatement( cons ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_B::rBHelper.bDisposed); - - OFlatPreparedStatement* pStmt = new OFlatPreparedStatement(this); - Reference< XPreparedStatement > xStmt = pStmt; + rtl::Reference<OFlatPreparedStatement> pStmt = new OFlatPreparedStatement(this); pStmt->construct(sql); - m_aStatements.push_back(WeakReferenceHelper(*pStmt)); - return xStmt; + return pStmt; } Reference< XPreparedStatement > SAL_CALL OFlatConnection::prepareCall( const OUString& /*sql*/ ) diff --git a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx index b69b34e363c3..729b55ef9e2d 100644 --- a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx +++ b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx @@ -47,35 +47,33 @@ OFlatDatabaseMetaData::~OFlatDatabaseMetaData() Reference< XResultSet > OFlatDatabaseMetaData::impl_getTypeInfo_throw( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); - Reference< XResultSet > xRef = pResult; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); - static ODatabaseMetaDataResultSet::ORows aRows = [&]() + static ODatabaseMetaDataResultSet::ORows aRows = []() { ODatabaseMetaDataResultSet::ORows tmp; - ODatabaseMetaDataResultSet::ORow aRow; - - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(OUString("CHAR"))); - aRow.push_back(new ORowSetValueDecorator(DataType::CHAR)); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(254))); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getQuoteValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(ColumnValue::NULLABLE))); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(ColumnSearch::CHAR))); - aRow.push_back(ODatabaseMetaDataResultSet::get1Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::get0Value()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); - aRow.push_back(new ORowSetValueDecorator(sal_Int32(10))); + ODatabaseMetaDataResultSet::ORow aRow + { + ODatabaseMetaDataResultSet::getEmptyValue() , + new ORowSetValueDecorator(OUString("CHAR")) , + new ORowSetValueDecorator(DataType::CHAR) , + new ORowSetValueDecorator(sal_Int32(254)) , + ODatabaseMetaDataResultSet::getQuoteValue() , + ODatabaseMetaDataResultSet::getQuoteValue() , + ODatabaseMetaDataResultSet::getEmptyValue() , + new ORowSetValueDecorator(sal_Int32(ColumnValue::NULLABLE)) , + ODatabaseMetaDataResultSet::get1Value() , + new ORowSetValueDecorator(sal_Int32(ColumnSearch::CHAR)) , + ODatabaseMetaDataResultSet::get1Value() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::getEmptyValue() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::get0Value() , + ODatabaseMetaDataResultSet::getEmptyValue() , + ODatabaseMetaDataResultSet::getEmptyValue() , + new ORowSetValueDecorator(sal_Int32(10)) + }; tmp.push_back(aRow); @@ -141,8 +139,8 @@ Reference< XResultSet > OFlatDatabaseMetaData::impl_getTypeInfo_throw( ) return tmp; }(); - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::move(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns( @@ -198,7 +196,7 @@ Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns( aRow[11] = new ORowSetValueDecorator(getINT32(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISNULLABLE)))); aRow[13] = new ORowSetValueDecorator(getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE)))); - switch(static_cast<sal_Int32>(aRow[5]->getValue())) + switch(aRow[5]->getValue().getInt32()) { case DataType::CHAR: case DataType::VARCHAR: @@ -211,7 +209,7 @@ Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns( aRow[16] = new ORowSetValueDecorator(sal_Int32(0)); } aRow[17] = new ORowSetValueDecorator(i); - switch(sal_Int32(aRow[11]->getValue())) + switch(aRow[11]->getValue().getInt32()) { case ColumnValue::NO_NULLS: aRow[18] = new ORowSetValueDecorator(OUString("NO")); @@ -228,11 +226,10 @@ Reference< XResultSet > SAL_CALL OFlatDatabaseMetaData::getColumns( } } - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); - Reference< XResultSet > xRef = pResult; - pResult->setRows(aRows); + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); + pResult->setRows(std::move(aRows)); - return xRef; + return pResult; } OUString SAL_CALL OFlatDatabaseMetaData::getURL( ) diff --git a/connectivity/source/drivers/flat/EDriver.cxx b/connectivity/source/drivers/flat/EDriver.cxx index bdd8bfa202a9..034e1b0b97f4 100644 --- a/connectivity/source/drivers/flat/EDriver.cxx +++ b/connectivity/source/drivers/flat/EDriver.cxx @@ -54,7 +54,7 @@ connectivity_flat_ODriver( } if (ret) ret->acquire(); - return static_cast<cppu::OWeakObject*>(ret.get()); + return getXWeak(ret.get()); } Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const Sequence< PropertyValue >& info ) @@ -66,12 +66,11 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const S if ( ! acceptsURL(url) ) return nullptr; - OFlatConnection* pCon = new OFlatConnection(this); + rtl::Reference<OFlatConnection> pCon = new OFlatConnection(this); pCon->construct(url,info); - Reference< XConnection > xCon = pCon; - m_xConnections.push_back(WeakReferenceHelper(*pCon)); + m_xConnections.emplace_back(*pCon); - return xCon; + return pCon; } sal_Bool SAL_CALL ODriver::acceptsURL( const OUString& url ) @@ -83,47 +82,46 @@ Sequence< DriverPropertyInfo > SAL_CALL ODriver::getPropertyInfo( const OUString { if ( acceptsURL(url) ) { - std::vector< DriverPropertyInfo > aDriverInfo; + Sequence< OUString > aBoolean { "0", "1" }; - Sequence< OUString > aBoolean(2); - aBoolean[0] = "0"; - aBoolean[1] = "1"; - - aDriverInfo.push_back(DriverPropertyInfo( + std::vector< DriverPropertyInfo > aDriverInfo + { + { "FieldDelimiter" ,"Field separator." ,false - ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,{} + ,{} + }, + { "HeaderLine" ,"Text contains headers." ,false ,"0" - ,aBoolean) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBoolean + }, + { "StringDelimiter" ,"Text separator." ,false ,"0" - ,aBoolean) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBoolean + }, + { "DecimalDelimiter" ,"Decimal separator." ,false ,"0" - ,aBoolean) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBoolean + }, + { "ThousandDelimiter" ,"Thousands separator." ,false ,"0" - ,aBoolean) - ); + ,aBoolean + } + }; return ::comphelper::concatSequences(OFileDriver::getPropertyInfo(url,info ), Sequence< DriverPropertyInfo >(aDriverInfo.data(),aDriverInfo.size())); } diff --git a/connectivity/source/drivers/flat/EPreparedStatement.cxx b/connectivity/source/drivers/flat/EPreparedStatement.cxx index bcd6bc6ecc11..0ed4299258a2 100644 --- a/connectivity/source/drivers/flat/EPreparedStatement.cxx +++ b/connectivity/source/drivers/flat/EPreparedStatement.cxx @@ -22,9 +22,8 @@ using namespace connectivity::flat; using namespace connectivity::file; -using namespace ::com::sun::star::uno; -OResultSet* OFlatPreparedStatement::createResultSet() +rtl::Reference<OResultSet> OFlatPreparedStatement::createResultSet() { return new OFlatResultSet(this, m_aSQLIterator); } diff --git a/connectivity/source/drivers/flat/EResultSet.cxx b/connectivity/source/drivers/flat/EResultSet.cxx index aca803041827..9d1975c77e45 100644 --- a/connectivity/source/drivers/flat/EResultSet.cxx +++ b/connectivity/source/drivers/flat/EResultSet.cxx @@ -96,7 +96,7 @@ Any SAL_CALL OFlatResultSet::getBookmark( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OResultSet_BASE::rBHelper.bDisposed); - return makeAny(static_cast<sal_Int32>((*m_aRow)[0]->getValue())); + return Any((*m_aRow)[0]->getValue().getInt32()); } sal_Bool SAL_CALL OFlatResultSet::moveToBookmark( const Any& bookmark ) @@ -150,12 +150,12 @@ IPropertyArrayHelper & OFlatResultSet::getInfoHelper() return *OFlatResultSet_BASE3::getArrayHelper(); } -void SAL_CALL OFlatResultSet::acquire() throw() +void SAL_CALL OFlatResultSet::acquire() noexcept { OFlatResultSet_BASE2::acquire(); } -void SAL_CALL OFlatResultSet::release() throw() +void SAL_CALL OFlatResultSet::release() noexcept { OFlatResultSet_BASE2::release(); } diff --git a/connectivity/source/drivers/flat/EStatement.cxx b/connectivity/source/drivers/flat/EStatement.cxx index 7774639052b3..df9fca5f58f2 100644 --- a/connectivity/source/drivers/flat/EStatement.cxx +++ b/connectivity/source/drivers/flat/EStatement.cxx @@ -22,9 +22,8 @@ using namespace connectivity::flat; using namespace connectivity::file; -using namespace css::uno; -OResultSet* OFlatStatement::createResultSet() +rtl::Reference<OResultSet> OFlatStatement::createResultSet() { return new OFlatResultSet(this,m_aSQLIterator); } diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx index 0dceba05b641..9cab6b13da5a 100644 --- a/connectivity/source/drivers/flat/ETable.cxx +++ b/connectivity/source/drivers/flat/ETable.cxx @@ -27,10 +27,8 @@ #include <o3tl/safeint.hxx> #include <rtl/math.hxx> #include <sal/log.hxx> -#include <tools/solar.h> #include <tools/urlobj.hxx> #include <cppuhelper/queryinterface.hxx> -#include <cppuhelper/typeprovider.hxx> #include <comphelper/numbers.hxx> #include <comphelper/servicehelper.hxx> #include <com/sun/star/util/NumberFormat.hpp> @@ -65,6 +63,8 @@ void OFlatTable::fillColumns(const css::lang::Locale& _aLocale) { m_bNeedToReadLine = true; // we overwrite m_aCurrentLine, seek the stream, ... m_pFileStream->Seek(0); + // tdf#123055 - start to read unicode text in order to avoid the BOM + m_pFileStream->StartReadingUnicodeText(RTL_TEXTENCODING_DONTKNOW); m_aCurrentLine = QuotedTokenizedString(); bool bRead = true; @@ -72,7 +72,8 @@ void OFlatTable::fillColumns(const css::lang::Locale& _aLocale) const bool bHasHeaderLine = pConnection->isHeaderLine(); QuotedTokenizedString aHeaderLine; - TRowPositionInFile rowPos(0, 0); + const sal_Int32 nPos = static_cast<sal_Int32>(m_pFileStream->Tell()); + TRowPositionInFile rowPos(nPos, nPos); sal_Int32 rowNum(0); if ( bHasHeaderLine ) { @@ -176,7 +177,7 @@ void OFlatTable::fillColumns(const css::lang::Locale& _aLocale) aFind = connectivity::find(m_aColumns->begin(),m_aColumns->end(),aAlias,aCase); } - sdbcx::OColumn* pColumn = new sdbcx::OColumn(aAlias,aTypeNames[i],OUString(),OUString(), + rtl::Reference<sdbcx::OColumn> pColumn = new sdbcx::OColumn(aAlias,aTypeNames[i],OUString(),OUString(), ColumnValue::NULLABLE, m_aPrecisions[i], m_aScales[i], @@ -186,8 +187,7 @@ void OFlatTable::fillColumns(const css::lang::Locale& _aLocale) false, bCase, m_CatalogName, getSchema(), getName()); - Reference< XPropertySet> xCol = pColumn; - m_aColumns->push_back(xCol); + m_aColumns->push_back(pColumn); } m_pFileStream->Seek(m_aRowPosToFilePos[0].second); @@ -200,7 +200,7 @@ void OFlatTable::impl_fillColumnInfo_nothrow(QuotedTokenizedString const & aFirs if ( io_nType != DataType::VARCHAR ) { bool bNumeric = io_nType == DataType::SQLNULL || io_nType == DataType::DOUBLE || io_nType == DataType::DECIMAL || io_nType == DataType::INTEGER; - sal_uLong nIndex = 0; + sal_Int32 nIndex = 0; if ( bNumeric ) { @@ -265,8 +265,8 @@ void OFlatTable::impl_fillColumnInfo_nothrow(QuotedTokenizedString const & aFirs if (bNumeric && cThousandDelimiter) { // Is the delimiter correct? - const OUString aValue = aField2.getToken(0,cDecimalDelimiter); - for( sal_Int32 j = aValue.getLength() - 4; j >= 0; j -= 4) + const std::u16string_view aValue = o3tl::getToken(aField2, 0, cDecimalDelimiter); + for( sal_Int32 j = static_cast<sal_Int32>(aValue.size()) - 4; j >= 0; j -= 4) { const sal_Unicode c = aValue[j]; // just digits, decimal- and thousands-delimiter? @@ -471,7 +471,7 @@ OUString OFlatTable::getEntry() const if ( m_pConnection->matchesExtension( sExt ) ) { if ( !sExt.isEmpty() ) - sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength()+1, OUString()); + sName = sName.replaceAt(sName.getLength() - (sExt.getLength() + 1), sExt.getLength()+1, u""); if ( sName == m_Name ) { Reference< XContentAccess > xContentAccess( xDir, UNO_QUERY ); @@ -502,7 +502,7 @@ void OFlatTable::refreshColumns() if(m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = new OFlatColumns(this,m_aMutex,aVector); + m_xColumns.reset(new OFlatColumns(this,m_aMutex,aVector)); } @@ -545,26 +545,10 @@ Any SAL_CALL OFlatTable::queryInterface( const Type & rType ) return Any(); Any aRet = OTable_TYPEDEF::queryInterface(rType); - return aRet.hasValue() ? aRet : ::cppu::queryInterface(rType,static_cast< css::lang::XUnoTunnel*> (this)); + return aRet; } -Sequence< sal_Int8 > OFlatTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OFlatTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return (isUnoTunnelId<OFlatTable>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : OFlatTable_BASE::getSomething(rId); -} - bool OFlatTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData) { *(*_rRow)[0] = m_nFilePos; @@ -676,7 +660,7 @@ bool OFlatTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool // #99178# OJ if ( DataType::DECIMAL == nType || DataType::NUMERIC == nType ) - *(*_rRow)[i] = OUString(OUString::number(nVal)); + *(*_rRow)[i] = OUString::number(nVal); else *(*_rRow)[i] = nVal; } break; @@ -784,7 +768,6 @@ bool OFlatTable::seekRow(IResultSetHelper::Movement eCursorPosition, sal_Int32 n } // m_nMaxRowCount can still be zero, but now it means there a genuinely zero rows in the table return seekRow(IResultSetHelper::ABSOLUTE1, m_nMaxRowCount, nCurPos); - break; case IResultSetHelper::RELATIVE1: { const sal_Int32 nNewRowPos = m_nRowPos + nOffset; diff --git a/connectivity/source/drivers/flat/ETables.cxx b/connectivity/source/drivers/flat/ETables.cxx index 81f366a9e7d0..3b0d039311fc 100644 --- a/connectivity/source/drivers/flat/ETables.cxx +++ b/connectivity/source/drivers/flat/ETables.cxx @@ -22,23 +22,15 @@ #include <file/FCatalog.hxx> using namespace connectivity; -using namespace ::comphelper; using namespace connectivity::flat; using namespace connectivity::file; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; -using namespace ::com::sun::star::container; sdbcx::ObjectType OFlatTables::createObject(const OUString& _rName) { - OFlatTable* pRet = new OFlatTable(this, static_cast<OFlatConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()), + rtl::Reference<OFlatTable> pRet = new OFlatTable(this, static_cast<OFlatConnection*>(static_cast<OFileCatalog&>(m_rParent).getConnection()), _rName,"TABLE"); - sdbcx::ObjectType xRet = pRet; pRet->construct(); - return xRet; + return pRet; } diff --git a/connectivity/source/drivers/hsqldb/HCatalog.cxx b/connectivity/source/drivers/hsqldb/HCatalog.cxx index 029e60f9450a..c51c9d15a520 100644 --- a/connectivity/source/drivers/hsqldb/HCatalog.cxx +++ b/connectivity/source/drivers/hsqldb/HCatalog.cxx @@ -30,11 +30,8 @@ using namespace connectivity; using namespace connectivity::hsqldb; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OHCatalog::OHCatalog(const Reference< XConnection >& _xConnection) : sdbcx::OCatalog(_xConnection) ,m_xConnection(_xConnection) @@ -54,9 +51,7 @@ void OHCatalog::refreshTables() { ::std::vector< OUString> aVector; - Sequence< OUString > sTableTypes(2); - sTableTypes[0] = "VIEW"; - sTableTypes[1] = "TABLE"; + Sequence< OUString > sTableTypes {"VIEW", "TABLE"}; refreshObjects(sTableTypes,aVector); diff --git a/connectivity/source/drivers/hsqldb/HColumns.cxx b/connectivity/source/drivers/hsqldb/HColumns.cxx index 3f03c3616bc1..e37f9fbd3a5e 100644 --- a/connectivity/source/drivers/hsqldb/HColumns.cxx +++ b/connectivity/source/drivers/hsqldb/HColumns.cxx @@ -27,10 +27,6 @@ using namespace connectivity::sdbcx; using namespace connectivity; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OHSQLColumns::OHSQLColumns( ::cppu::OWeakObject& _rParent ,::osl::Mutex& _rMutex diff --git a/connectivity/source/drivers/hsqldb/HConnection.cxx b/connectivity/source/drivers/hsqldb/HConnection.cxx index c3ff0169cea7..28feb95fce9b 100644 --- a/connectivity/source/drivers/hsqldb/HConnection.cxx +++ b/connectivity/source/drivers/hsqldb/HConnection.cxx @@ -32,10 +32,11 @@ #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/sdbc/XDatabaseMetaData2.hpp> +#include <comphelper/propertyvalue.hxx> #include <cppuhelper/exc_hlp.hxx> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <resource/sharedresources.hxx> #include <strings.hrc> @@ -280,8 +281,7 @@ namespace connectivity::hsqldb ::dbtools::qualifiedNameComponents( xMetaData, _rTableName, sCatalog, sSchema, sName, ::dbtools::EComposeRule::Complete ); // get the table information - OUStringBuffer sSQL; - sSQL.append( "SELECT HSQLDB_TYPE FROM INFORMATION_SCHEMA.SYSTEM_TABLES" ); + OUStringBuffer sSQL( "SELECT HSQLDB_TYPE FROM INFORMATION_SCHEMA.SYSTEM_TABLES" ); HTools::appendTableFilterCrit( sSQL, sCatalog, sSchema, sName, true ); sSQL.append( " AND TABLE_TYPE = 'TABLE'" ); @@ -315,13 +315,12 @@ namespace connectivity::hsqldb xProvider.set( GraphicProvider::create(m_xContext) ); // ask the provider to obtain a graphic - Sequence< PropertyValue > aMediaProperties( 1 ); - aMediaProperties[0].Name = "URL"; - aMediaProperties[0].Value <<= OUString( - // load the graphic from the global graphic repository - "private:graphicrepository/" - // the relative path within the images.zip - LINKED_TEXT_TABLE_IMAGE_RESOURCE); + Sequence< PropertyValue > aMediaProperties{ comphelper::makePropertyValue( + "URL", OUString( + // load the graphic from the global graphic repository + "private:graphicrepository/" + // the relative path within the images.zip + LINKED_TEXT_TABLE_IMAGE_RESOURCE)) }; xGraphic = xProvider->queryGraphic( aMediaProperties ); OSL_ENSURE( xGraphic.is(), "OHsqlConnection::impl_getTextTableIcon_nothrow: the provider did not give us a graphic object!" ); } diff --git a/connectivity/source/drivers/hsqldb/HDriver.cxx b/connectivity/source/drivers/hsqldb/HDriver.cxx index 6ff0f539407b..19569dd77d61 100644 --- a/connectivity/source/drivers/hsqldb/HDriver.cxx +++ b/connectivity/source/drivers/hsqldb/HDriver.cxx @@ -50,7 +50,8 @@ #include <strings.hrc> #include <resource/sharedresources.hxx> #include <i18nlangtag/languagetag.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> +#include <o3tl/string_view.hxx> #include <memory> @@ -68,9 +69,8 @@ namespace connectivity using namespace css::embed; using namespace css::io; using namespace css::util; - using namespace css::reflection; - constexpr OUStringLiteral IMPL_NAME = u"com.sun.star.sdbcx.comp.hsqldb.Driver"; + constexpr OUString IMPL_NAME = u"com.sun.star.sdbcx.comp.hsqldb.Driver"_ustr; @@ -235,14 +235,14 @@ namespace connectivity // security: permitted Java classes NamedValue aPermittedClasses( "hsqldb.method_class_names", - makeAny( lcl_getPermittedJavaMethods_nothrow( m_xContext ) ) + Any( lcl_getPermittedJavaMethods_nothrow( m_xContext ) ) ); aProperties.put( "SystemProperties", Sequence< NamedValue >( &aPermittedClasses, 1 ) ); OUString sMessage; try { - const OUString sProperties( "properties" ); + static constexpr OUString sProperties( u"properties"_ustr ); if ( !bIsNewDatabase && xStorage->isStreamElement(sProperties) ) { Reference<XStream > xStream = xStorage->openStreamElement(sProperties,ElementModes::READ); @@ -251,15 +251,15 @@ namespace connectivity std::unique_ptr<SvStream> pStream( ::utl::UcbStreamHelper::CreateStream(xStream) ); if (pStream) { - OString sLine; + OStringBuffer sLine; OString sVersionString; while ( pStream->ReadLine(sLine) ) { if ( sLine.isEmpty() ) continue; sal_Int32 nIdx {0}; - const OString sIniKey = sLine.getToken(0, '=', nIdx); - const OString sValue = sLine.getToken(0, '=', nIdx); + const std::string_view sIniKey = o3tl::getToken(sLine, 0, '=', nIdx); + const OString sValue(o3tl::getToken(sLine, 0, '=', nIdx)); if( sIniKey == "hsqldb.compatible_version" ) { sVersionString = sValue; @@ -275,9 +275,9 @@ namespace connectivity if (!sVersionString.isEmpty()) { sal_Int32 nIdx {0}; - const sal_Int32 nMajor = sVersionString.getToken(0, '.', nIdx).toInt32(); - const sal_Int32 nMinor = sVersionString.getToken(0, '.', nIdx).toInt32(); - const sal_Int32 nMicro = sVersionString.getToken(0, '.', nIdx).toInt32(); + const sal_Int32 nMajor = o3tl::toInt32(o3tl::getToken(sVersionString, 0, '.', nIdx)); + const sal_Int32 nMinor = o3tl::toInt32(o3tl::getToken(sVersionString, 0, '.', nIdx)); + const sal_Int32 nMicro = o3tl::toInt32(o3tl::getToken(sVersionString, 0, '.', nIdx)); if ( nMajor > 1 || ( nMajor == 1 && nMinor > 8 ) || ( nMajor == 1 && nMinor == 8 && nMicro > 0 ) ) @@ -290,6 +290,37 @@ namespace connectivity } // if ( xStream.is() ) ::comphelper::disposeComponent(xStream); } + + // disallow any database/script files that contain a "SCRIPT[.*]" entry (this is belt and braces + // in that bundled hsqldb 1.8.0 is patched to also reject them) + // + // hsqldb 2.6.0 release notes have: added system role SCRIPT_OPS for export / import of database structure and data + // which seems to provide a builtin way to do this with contemporary hsqldb + static constexpr OUString sScript(u"script"_ustr); + if (!bIsNewDatabase && xStorage->isStreamElement(sScript)) + { + Reference<XStream > xStream = xStorage->openStreamElement(sScript, ElementModes::READ); + if (xStream.is()) + { + std::unique_ptr<SvStream> pStream(::utl::UcbStreamHelper::CreateStream(xStream)); + if (pStream) + { + OStringBuffer sLine; + while (pStream->ReadLine(sLine)) + { + OString sText = sLine.makeStringAndClear().trim(); + if (sText.startsWithIgnoreAsciiCase("SCRIPT")) + { + ::connectivity::SharedResources aResources; + sMessage = aResources.getResourceString(STR_COULD_NOT_LOAD_FILE).replaceFirst("$filename$", sSystemPath); + break; + } + } + } + } // if ( xStream.is() ) + ::comphelper::disposeComponent(xStream); + } + } catch(Exception&) { @@ -333,7 +364,7 @@ namespace connectivity if ( xOrig.is() ) { // now we have to set the URL to get the correct answer for metadata()->getURL() - auto pMetaConnection = comphelper::getUnoTunnelImplementation<OMetaConnection>(xOrig); + auto pMetaConnection = comphelper::getFromUnoTunnel<OMetaConnection>(xOrig); if ( pMetaConnection ) pMetaConnection->setURL(url); @@ -346,7 +377,7 @@ namespace connectivity { Reference< XDesktop2 > xDesktop = Desktop::create( m_xContext ); - auto tmp = new OConnectionController(this); + rtl::Reference<OConnectionController> tmp = new OConnectionController(this); xDesktop->addTerminateListener(tmp); return tmp; }(); @@ -357,8 +388,7 @@ namespace connectivity Reference<XTransactionBroadcaster> xBroad(xStorage,UNO_QUERY); if ( xBroad.is() ) { - Reference<XTransactionListener> xListener(*this,UNO_QUERY); - xBroad->addTransactionListener(xListener); + xBroad->addTransactionListener(Reference<XTransactionListener>(this)); } } } @@ -393,29 +423,30 @@ namespace connectivity { if ( !acceptsURL(url) ) return Sequence< DriverPropertyInfo >(); - std::vector< DriverPropertyInfo > aDriverInfo; - aDriverInfo.push_back(DriverPropertyInfo( - "Storage" - ,"Defines the storage where the database will be stored." - ,true - ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "URL" - ,"Defines the url of the data source." - ,true - ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "AutoRetrievingStatement" - ,"Defines the statement which will be executed to retrieve auto increment values." - ,false - ,"CALL IDENTITY()" - ,Sequence< OUString >()) - ); - return Sequence< DriverPropertyInfo >(aDriverInfo.data(),aDriverInfo.size()); + return + { + { + "Storage", + "Defines the storage where the database will be stored.", + true, + {}, + {} + }, + { + "URL", + "Defines the url of the data source.", + true, + {}, + {} + }, + { + "AutoRetrievingStatement", + "Defines the statement which will be executed to retrieve auto increment values.", + false, + "CALL IDENTITY()", + {} + } + }; } @@ -832,8 +863,7 @@ namespace connectivity OSL_ENSURE( xStatement.is(), "ODriverDelegator::onConnectedNewDatabase: could not create a statement!" ); if ( xStatement.is() ) { - OUStringBuffer aStatement; - aStatement.append( "SET DATABASE COLLATION \"" ); + OUStringBuffer aStatement( "SET DATABASE COLLATION \"" ); aStatement.appendAscii( lcl_getCollationForLocale( lcl_getSystemLocale( m_xContext ) ) ); aStatement.append( "\"" ); diff --git a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx index 91b8324008e3..8d15d487372a 100644 --- a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx +++ b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx @@ -22,15 +22,14 @@ #include <hsqldb/HStorageMap.hxx> #include "accesslog.hxx" #include <osl/diagnose.h> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <string.h> -using namespace ::com::sun::star::container; +#include <algorithm> + using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::embed; using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; using namespace ::connectivity::hsqldb; #define ThrowException(env, type, msg) { \ @@ -146,28 +145,28 @@ jint read_from_storage_stream( JNIEnv * env, jstring name, jstring key ) std::shared_ptr<StreamHelper> pHelper = StorageContainer::getRegisteredStream(env,name,key); Reference< XInputStream> xIn = pHelper ? pHelper->getInputStream() : Reference< XInputStream>(); OSL_ENSURE(xIn.is(),"Input stream is NULL!"); - if ( xIn.is() ) + if ( !xIn.is() ) + return -1; + + Sequence< ::sal_Int8 > aData(1); + sal_Int32 nBytesRead = -1; + try { - Sequence< ::sal_Int8 > aData(1); - sal_Int32 nBytesRead = -1; - try - { - nBytesRead = xIn->readBytes(aData,1); - } - catch(const Exception& e) - { - StorageContainer::throwJavaException(e,env); - return -1; + nBytesRead = xIn->readBytes(aData,1); + } + catch(const Exception& e) + { + StorageContainer::throwJavaException(e,env); + return -1; - } - if (nBytesRead <= 0) - { - return -1; - } - else - { - return static_cast<unsigned char>(aData[0]); - } + } + if (nBytesRead <= 0) + { + return -1; + } + else + { + return static_cast<unsigned char>(aData[0]); } return -1; } @@ -229,7 +228,7 @@ jint read_from_storage_stream_into_buffer( JNIEnv * env, jstring name, jstring k if (nBytesRead <= 0) return -1; - env->SetByteArrayRegion(buffer,off,nBytesRead,reinterpret_cast<jbyte*>(&aData[0])); + env->SetByteArrayRegion(buffer,off,nBytesRead,reinterpret_cast<const jbyte*>(&aData[0])); return nBytesRead; } @@ -299,10 +298,8 @@ extern "C" SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Nativ } Sequence< sal_Int32 > ch(4); - for(sal_Int32 i = 0;i < 4; ++i) - { - ch[i] = static_cast<unsigned char>(aData[i]); - } + std::transform(aData.begin(), aData.end(), ch.getArray(), + [](auto c) { return static_cast<unsigned char>(c); }); if ((ch[0] | ch[1] | ch[2] | ch[3]) < 0) { @@ -341,10 +338,15 @@ extern "C" SAL_JNI_EXPORT void JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Nativ #endif std::shared_ptr<StreamHelper> pHelper = StorageContainer::getRegisteredStream(env,name,key); - Reference< XSeekable> xSeek = pHelper ? pHelper->getSeek() : Reference< XSeekable>(); - OSL_ENSURE(xSeek.is(),"No Seekable stream!"); - if ( !xSeek.is() ) + OSL_ENSURE(pHelper, "No StreamHelper!"); + if (!pHelper) + return; + + Reference< XSeekable> xSeek = pHelper->getSeek(); + + OSL_ENSURE(xSeek.is(), "No Seekable stream!"); + if (!xSeek) return; #ifdef HSQLDB_DBG @@ -463,11 +465,13 @@ void write_to_storage_stream( JNIEnv* env, jstring name, jstring key, jint v ) { if ( xOut.is() ) { - Sequence< ::sal_Int8 > oneByte(4); - oneByte[0] = static_cast<sal_Int8>((v >> 24) & 0xFF); - oneByte[1] = static_cast<sal_Int8>((v >> 16) & 0xFF); - oneByte[2] = static_cast<sal_Int8>((v >> 8) & 0xFF); - oneByte[3] = static_cast<sal_Int8>((v >> 0) & 0xFF); + Sequence< ::sal_Int8 > oneByte + { + static_cast<sal_Int8>((v >> 24) & 0xFF), + static_cast<sal_Int8>((v >> 16) & 0xFF), + static_cast<sal_Int8>((v >> 8) & 0xFF), + static_cast<sal_Int8>((v >> 0) & 0xFF) + }; xOut->writeBytes(oneByte); } diff --git a/connectivity/source/drivers/hsqldb/HStorageMap.cxx b/connectivity/source/drivers/hsqldb/HStorageMap.cxx index 63b5e0481c5c..01a9c3d34be3 100644 --- a/connectivity/source/drivers/hsqldb/HStorageMap.cxx +++ b/connectivity/source/drivers/hsqldb/HStorageMap.cxx @@ -27,7 +27,7 @@ #include <sal/log.hxx> #include <uno/mapping.hxx> #include <algorithm> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> namespace connectivity::hsqldb { @@ -132,9 +132,9 @@ namespace connectivity::hsqldb return OUString::number(s_nCount++); } - OUString StorageContainer::removeURLPrefix(const OUString& _sURL,const OUString& _sFileURL) + OUString StorageContainer::removeURLPrefix(std::u16string_view _sURL, std::u16string_view _sFileURL) { - return _sURL.copy(_sFileURL.getLength()+1); + return OUString(_sURL.substr(_sFileURL.size()+1)); } OUString StorageContainer::removeOldURLPrefix(const OUString& _sURL) diff --git a/connectivity/source/drivers/hsqldb/HTable.cxx b/connectivity/source/drivers/hsqldb/HTable.cxx index 0049ff919fc3..63fe36a34a34 100644 --- a/connectivity/source/drivers/hsqldb/HTable.cxx +++ b/connectivity/source/drivers/hsqldb/HTable.cxx @@ -18,7 +18,6 @@ */ #include <hsqldb/HTable.hxx> -#include <cppuhelper/typeprovider.hxx> #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/sdbcx/Privilege.hpp> #include <comphelper/property.hxx> @@ -30,7 +29,7 @@ #include <hsqldb/HColumns.hxx> #include <TConnection.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::comphelper; @@ -116,21 +115,6 @@ sdbcx::OCollection* OHSQLTable::createIndexes(const ::std::vector< OUString>& _r return new OIndexesHelper(this,m_aMutex,_rNames); } -Sequence< sal_Int8 > OHSQLTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OHSQLTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return (isUnoTunnelId<OHSQLTable>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : OTable_TYPEDEF::getSomething(rId); -} // XAlterTable void SAL_CALL OHSQLTable::alterColumnByName( const OUString& colName, const Reference< XPropertySet >& descriptor ) @@ -260,12 +244,11 @@ void OHSQLTable::alterColumnType(sal_Int32 nNewType,const OUString& _rColName, c (void)_rColName; #endif - OHSQLColumn* pColumn = new OHSQLColumn; - Reference<XPropertySet> xProp = pColumn; - ::comphelper::copyProperties(_xDescriptor,xProp); - xProp->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE),makeAny(nNewType)); + rtl::Reference<OHSQLColumn> pColumn = new OHSQLColumn; + ::comphelper::copyProperties(_xDescriptor,pColumn); + pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE),Any(nNewType)); - sSql += ::dbtools::createStandardColumnPart(xProp,getConnection()); + sSql += ::dbtools::createStandardColumnPart(pColumn,getConnection()); executeStatement(sSql); } @@ -305,7 +288,7 @@ void OHSQLTable::executeStatement(const OUString& _rStatement ) { OUString sSQL = _rStatement; if(sSQL.endsWith(",")) - sSQL = sSQL.replaceAt(sSQL.getLength()-1, 1, ")"); + sSQL = sSQL.replaceAt(sSQL.getLength()-1, 1, u")"); Reference< XStatement > xStmt = getConnection()->createStatement( ); if ( xStmt.is() ) diff --git a/connectivity/source/drivers/hsqldb/HTables.cxx b/connectivity/source/drivers/hsqldb/HTables.cxx index 787af894b992..002dfbf9a295 100644 --- a/connectivity/source/drivers/hsqldb/HTables.cxx +++ b/connectivity/source/drivers/hsqldb/HTables.cxx @@ -37,7 +37,6 @@ using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace dbtools; sdbcx::ObjectType OTables::createObject(const OUString& _rName) @@ -45,10 +44,7 @@ sdbcx::ObjectType OTables::createObject(const OUString& _rName) OUString sCatalog,sSchema,sTable; ::dbtools::qualifiedNameComponents(m_xMetaData,_rName,sCatalog,sSchema,sTable,::dbtools::EComposeRule::InDataManipulation); - Sequence< OUString > sTableTypes(3); - sTableTypes[0] = "VIEW"; - sTableTypes[1] = "TABLE"; - sTableTypes[2] = "%"; // just to be sure to include anything else... + Sequence< OUString > sTableTypes {"VIEW", "TABLE", "%"}; // this last one just to be sure to include anything else... Any aCatalog; if ( !sCatalog.isEmpty() ) @@ -66,7 +62,7 @@ sdbcx::ObjectType OTables::createObject(const OUString& _rName) nPrivileges &= ~( Privilege::INSERT | Privilege::UPDATE | Privilege::DELETE | Privilege::CREATE | Privilege::ALTER | Privilege::DROP ); // obtain privileges - OHSQLTable* pRet = new OHSQLTable( this + xRet = new OHSQLTable( this ,static_cast<OHCatalog&>(m_rParent).getConnection() ,sTable ,xRow->getString(4) @@ -74,7 +70,6 @@ sdbcx::ObjectType OTables::createObject(const OUString& _rName) ,sSchema ,sCatalog ,nPrivileges); - xRet = pRet; } ::comphelper::disposeComponent(xResult); } @@ -164,10 +159,10 @@ void OTables::appendNew(const OUString& _rsNewTable) insertElement(_rsNewTable,nullptr); // notify our container listeners - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any()); - OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any()); + OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) - static_cast<XContainerListener*>(aListenerLoop.next())->elementInserted(aEvent); + aListenerLoop.next()->elementInserted(aEvent); } OUString OTables::getNameForObject(const sdbcx::ObjectType& _xObject) diff --git a/connectivity/source/drivers/hsqldb/HTerminateListener.cxx b/connectivity/source/drivers/hsqldb/HTerminateListener.cxx index a9df5ccc9b9a..7c6b494488db 100644 --- a/connectivity/source/drivers/hsqldb/HTerminateListener.cxx +++ b/connectivity/source/drivers/hsqldb/HTerminateListener.cxx @@ -23,7 +23,6 @@ namespace connectivity { using namespace hsqldb; -using namespace ::com::sun::star::uno; using namespace ::com::sun::star::lang; // XEventListener diff --git a/connectivity/source/drivers/hsqldb/HTerminateListener.hxx b/connectivity/source/drivers/hsqldb/HTerminateListener.hxx index 63d69b29e64b..baf66e90eb1e 100644 --- a/connectivity/source/drivers/hsqldb/HTerminateListener.hxx +++ b/connectivity/source/drivers/hsqldb/HTerminateListener.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_HSQLDB_HTERMINATELISTENER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_HSQLDB_HTERMINATELISTENER_HXX +#pragma once #include <cppuhelper/implbase.hxx> #include <com/sun/star/frame/XTerminateListener.hpp> @@ -44,6 +43,4 @@ namespace connectivity::hsqldb } // namespace connectivity::hsqldb -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_HSQLDB_HTERMINATELISTENER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/hsqldb/HTools.cxx b/connectivity/source/drivers/hsqldb/HTools.cxx index b9854c01ce67..3dd388aceecb 100644 --- a/connectivity/source/drivers/hsqldb/HTools.cxx +++ b/connectivity/source/drivers/hsqldb/HTools.cxx @@ -23,18 +23,18 @@ namespace connectivity::hsqldb { - void HTools::appendTableFilterCrit( OUStringBuffer& _inout_rBuffer, const OUString& _rCatalog, - const OUString& _rSchema, const OUString& _rName, bool _bShortForm ) + void HTools::appendTableFilterCrit( OUStringBuffer& _inout_rBuffer, std::u16string_view _rCatalog, + std::u16string_view _rSchema, std::u16string_view _rName, bool _bShortForm ) { _inout_rBuffer.append( " WHERE " ); - if ( !_rCatalog.isEmpty() ) + if ( !_rCatalog.empty() ) { _inout_rBuffer.appendAscii( _bShortForm ? "TABLE_CAT" : "TABLE_CATALOG" ); _inout_rBuffer.append( " = '" ); _inout_rBuffer.append ( _rCatalog ); _inout_rBuffer.append( "' AND " ); } - if ( !_rSchema.isEmpty() ) + if ( !_rSchema.empty() ) { _inout_rBuffer.appendAscii( _bShortForm ? "TABLE_SCHEM" : "TABLE_SCHEMA" ); _inout_rBuffer.append( " = '" ); diff --git a/connectivity/source/drivers/hsqldb/HUser.cxx b/connectivity/source/drivers/hsqldb/HUser.cxx index 2ed0c06262ff..f493e282a2b1 100644 --- a/connectivity/source/drivers/hsqldb/HUser.cxx +++ b/connectivity/source/drivers/hsqldb/HUser.cxx @@ -27,6 +27,7 @@ #include <com/sun/star/sdbcx/PrivilegeObject.hpp> #include <TConnection.hxx> #include <strings.hrc> +#include <utility> using namespace connectivity; using namespace connectivity::hsqldb; @@ -37,16 +38,16 @@ using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; -OHSQLUser::OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection) : connectivity::sdbcx::OUser(true) - ,m_xConnection(_xConnection) +OHSQLUser::OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection) : connectivity::sdbcx::OUser(true) + ,m_xConnection(std::move(_xConnection)) { construct(); } -OHSQLUser::OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection, +OHSQLUser::OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection, const OUString& Name ) : connectivity::sdbcx::OUser(Name,true) - ,m_xConnection(_xConnection) + ,m_xConnection(std::move(_xConnection)) { construct(); } diff --git a/connectivity/source/drivers/hsqldb/HUsers.cxx b/connectivity/source/drivers/hsqldb/HUsers.cxx index 40d1f5243cb6..07a91e7cbed2 100644 --- a/connectivity/source/drivers/hsqldb/HUsers.cxx +++ b/connectivity/source/drivers/hsqldb/HUsers.cxx @@ -23,6 +23,7 @@ #include <comphelper/types.hxx> #include <connectivity/dbtools.hxx> #include <TConnection.hxx> +#include <utility> using namespace ::comphelper; using namespace connectivity; @@ -30,16 +31,14 @@ using namespace connectivity::hsqldb; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OUsers::OUsers( ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector< OUString> &_rVector, - const css::uno::Reference< css::sdbc::XConnection >& _xConnection, + css::uno::Reference< css::sdbc::XConnection > _xConnection, connectivity::sdbcx::IRefreshableUsers* _pParent) : sdbcx::OCollection(_rParent, true, _rMutex, _rVector) - ,m_xConnection(_xConnection) + ,m_xConnection(std::move(_xConnection)) ,m_pParent(_pParent) { } @@ -57,8 +56,7 @@ void OUsers::impl_refresh() Reference< XPropertySet > OUsers::createDescriptor() { - OUserExtend* pNew = new OUserExtend(m_xConnection); - return pNew; + return new OUserExtend(m_xConnection); } // XAppend diff --git a/connectivity/source/drivers/hsqldb/HView.cxx b/connectivity/source/drivers/hsqldb/HView.cxx index 0a09ec0d201b..83946ee86f86 100644 --- a/connectivity/source/drivers/hsqldb/HView.cxx +++ b/connectivity/source/drivers/hsqldb/HView.cxx @@ -31,7 +31,7 @@ #include <com/sun/star/sdbc/SQLException.hpp> #include <cppuhelper/exc_hlp.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <unotools/sharedunocomponent.hxx> @@ -90,12 +90,11 @@ namespace connectivity::hsqldb // create a statement which can be used to re-create the original view, in case // dropping it succeeds, but creating it with a new statement fails - OUStringBuffer aRestoreCommand; - aRestoreCommand.append( "CREATE VIEW " ); - aRestoreCommand.append ( sQualifiedName ); - aRestoreCommand.append( " AS " ); - aRestoreCommand.append ( impl_getCommand_throwSQLException() ); - OUString sRestoreCommand( aRestoreCommand.makeStringAndClear() ); + OUString sRestoreCommand = + "CREATE VIEW " + + sQualifiedName + + " AS " + + impl_getCommand_throwSQLException(); bool bDropSucceeded( false ); try @@ -147,8 +146,8 @@ namespace connectivity::hsqldb OUString HView::impl_getCommand() const { - OUStringBuffer aCommand; - aCommand.append( "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.SYSTEM_VIEWS " ); + OUStringBuffer aCommand( + "SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.SYSTEM_VIEWS " ); HTools::appendTableFilterCrit( aCommand, m_CatalogName, m_SchemaName, m_Name, false ); ::utl::SharedUNOComponent< XStatement > xStatement; xStatement.set( m_xConnection->createStatement(), UNO_QUERY_THROW ); Reference< XResultSet > xResult( xStatement->executeQuery( aCommand.makeStringAndClear() ), css::uno::UNO_SET_THROW ); diff --git a/connectivity/source/drivers/hsqldb/HViews.cxx b/connectivity/source/drivers/hsqldb/HViews.cxx index e67a9fa14f86..f80ec7716f09 100644 --- a/connectivity/source/drivers/hsqldb/HViews.cxx +++ b/connectivity/source/drivers/hsqldb/HViews.cxx @@ -33,10 +33,7 @@ using namespace connectivity; using namespace connectivity::hsqldb; using namespace css::uno; using namespace css::beans; -using namespace css::sdbcx; using namespace css::sdbc; -using namespace css::container; -using namespace css::lang; using namespace dbtools; typedef connectivity::sdbcx::OCollection OCollection_TYPE; @@ -78,8 +75,7 @@ void HViews::disposing() Reference< XPropertySet > HViews::createDescriptor() { Reference<XConnection> xConnection = static_cast<OHCatalog&>(m_rParent).getConnection(); - connectivity::sdbcx::OView* pNew = new connectivity::sdbcx::OView(true, xConnection->getMetaData()); - return pNew; + return new connectivity::sdbcx::OView(true, xConnection->getMetaData()); } // XAppend diff --git a/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx b/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx index 65457ab1d129..bb07d6673fb1 100644 --- a/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx +++ b/connectivity/source/drivers/hsqldb/StorageFileAccess.cxx @@ -24,8 +24,7 @@ #include <com/sun/star/embed/XStorage.hpp> #include <com/sun/star/lang/IllegalArgumentException.hpp> #include <hsqldb/HStorageMap.hxx> -#include <osl/diagnose.h> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star::container; using namespace ::com::sun::star::uno; @@ -44,42 +43,42 @@ extern "C" SAL_JNI_EXPORT jboolean JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_S { TStorages::mapped_type aStoragePair = StorageContainer::getRegisteredStorage(StorageContainer::jstring2ustring(env,key)); auto storage = aStoragePair.mapStorage(); - if ( storage.is() ) + if ( !storage ) + return JNI_FALSE; + + try { + OUString sName = StorageContainer::jstring2ustring(env,name); try { - OUString sName = StorageContainer::jstring2ustring(env,name); - try + OUString sOldName = StorageContainer::removeOldURLPrefix(sName); + if ( storage->isStreamElement(sOldName) ) { - OUString sOldName = StorageContainer::removeOldURLPrefix(sName); - if ( storage->isStreamElement(sOldName) ) + try + { + storage->renameElement(sOldName,StorageContainer::removeURLPrefix(sName,aStoragePair.url)); + } + catch(const Exception&) { - try - { - storage->renameElement(sOldName,StorageContainer::removeURLPrefix(sName,aStoragePair.url)); - } - catch(const Exception&) - { - } } } - catch(const NoSuchElementException&) - { - } - catch(const IllegalArgumentException&) - { - } - return storage->isStreamElement(StorageContainer::removeURLPrefix(sName,aStoragePair.url)); } catch(const NoSuchElementException&) { } - catch(const Exception&) + catch(const IllegalArgumentException&) { - TOOLS_WARN_EXCEPTION("connectivity.hsqldb", "forwarding"); - if (env->ExceptionCheck()) - env->ExceptionClear(); } + return storage->isStreamElement(StorageContainer::removeURLPrefix(sName,aStoragePair.url)); + } + catch(const NoSuchElementException&) + { + } + catch(const Exception&) + { + TOOLS_WARN_EXCEPTION("connectivity.hsqldb", "forwarding"); + if (env->ExceptionCheck()) + env->ExceptionClear(); } return JNI_FALSE; } diff --git a/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx b/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx index 7ddf79aa5e77..58d351673480 100644 --- a/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx +++ b/connectivity/source/drivers/hsqldb/StorageNativeInputStream.cxx @@ -27,18 +27,16 @@ #include <hsqldb/HStorageMap.hxx> #include <osl/diagnose.h> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include "accesslog.hxx" #include <limits> -using namespace ::com::sun::star::container; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::document; using namespace ::com::sun::star::embed; using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; using namespace ::connectivity::hsqldb; /*****************************************************************************/ @@ -277,7 +275,7 @@ extern "C" SAL_JNI_EXPORT jint JNICALL Java_com_sun_star_sdbcx_comp_hsqldb_Stora } OSL_ENSURE(nLen >= nBytesRead,"Buffer is too small!"); OSL_ENSURE(aData.getLength() >= nBytesRead,"Buffer is too small!"); - env->SetByteArrayRegion(buffer, 0, nBytesRead, reinterpret_cast<jbyte*>(&aData[0])); + env->SetByteArrayRegion(buffer, 0, nBytesRead, reinterpret_cast<const jbyte*>(&aData[0])); #ifdef HSQLDB_DBG aDataLog.write( &aData[0], nBytesRead ); #endif diff --git a/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx b/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx index f766696e0d9b..bccbec20fcd2 100644 --- a/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx +++ b/connectivity/source/drivers/hsqldb/StorageNativeOutputStream.cxx @@ -30,12 +30,8 @@ #include <hsqldb/HStorageAccess.hxx> #include <hsqldb/HStorageMap.hxx> -using namespace ::com::sun::star::container; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::document; -using namespace ::com::sun::star::embed; using namespace ::com::sun::star::io; -using namespace ::com::sun::star::lang; using namespace ::connectivity::hsqldb; diff --git a/connectivity/source/drivers/hsqldb/accesslog.hxx b/connectivity/source/drivers/hsqldb/accesslog.hxx index a4dc41f2d35e..81db98ae7750 100644 --- a/connectivity/source/drivers/hsqldb/accesslog.hxx +++ b/connectivity/source/drivers/hsqldb/accesslog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_HSQLDB_ACCESSLOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_HSQLDB_ACCESSLOG_HXX +#pragma once #ifdef HSQLDB_DBG @@ -133,6 +132,4 @@ namespace connectivity::hsqldb } } #endif -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_HSQLDB_ACCESSLOG_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/jdbc/Blob.cxx b/connectivity/source/drivers/jdbc/Blob.cxx index adacd5d7c166..4531fc9b8724 100644 --- a/connectivity/source/drivers/jdbc/Blob.cxx +++ b/connectivity/source/drivers/jdbc/Blob.cxx @@ -135,7 +135,7 @@ sal_Int64 SAL_CALL java_sql_Blob::positionOfBlob( const css::uno::Reference< css ::dbtools::throwFeatureNotImplementedSQLException( "XBlob::positionOfBlob", *this ); // this was put here in CWS warnings01. The previous implementation was defective, as it did ignore // the pattern parameter. Since the effort for proper implementation is rather high - we would need - // to translated patter into a byte[] -, we defer this functionality for the moment (hey, it was + // to translated pattern into a byte[] -, we defer this functionality for the moment (hey, it was // unusable, anyway) // #i57457# return 0; diff --git a/connectivity/source/drivers/jdbc/CallableStatement.cxx b/connectivity/source/drivers/jdbc/CallableStatement.cxx index 574fd666b75b..ae521efba11a 100644 --- a/connectivity/source/drivers/jdbc/CallableStatement.cxx +++ b/connectivity/source/drivers/jdbc/CallableStatement.cxx @@ -33,7 +33,6 @@ using namespace connectivity; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -302,12 +301,12 @@ Reference< css::sdbc::XRef > SAL_CALL java_sql_CallableStatement::getRef( sal_In return out==nullptr ? nullptr : new java_sql_Ref( t.pEnv, out ); } -void SAL_CALL java_sql_CallableStatement::acquire() throw() +void SAL_CALL java_sql_CallableStatement::acquire() noexcept { java_sql_PreparedStatement::acquire(); } -void SAL_CALL java_sql_CallableStatement::release() throw() +void SAL_CALL java_sql_CallableStatement::release() noexcept { java_sql_PreparedStatement::release(); } diff --git a/connectivity/source/drivers/jdbc/Clob.cxx b/connectivity/source/drivers/jdbc/Clob.cxx index 135512d5a245..6108981aca89 100644 --- a/connectivity/source/drivers/jdbc/Clob.cxx +++ b/connectivity/source/drivers/jdbc/Clob.cxx @@ -122,7 +122,7 @@ sal_Int64 SAL_CALL java_sql_Clob::positionOfClob( const css::uno::Reference< css ::dbtools::throwFeatureNotImplementedSQLException( "XClob::positionOfClob", *this ); // this was put here in CWS warnings01. The previous implementation was defective, as it did ignore // the pattern parameter. Since the effort for proper implementation is rather high - we would need - // to translated patter into a byte[] -, we defer this functionality for the moment (hey, it was + // to translated pattern into a byte[] -, we defer this functionality for the moment (hey, it was // unusable, anyway) // 2005-11-15 / #i57457# / frank.schoenheit@sun.com return 0; diff --git a/connectivity/source/drivers/jdbc/ContextClassLoader.cxx b/connectivity/source/drivers/jdbc/ContextClassLoader.cxx index 50e6bc632bc2..3ab1b88eb33b 100644 --- a/connectivity/source/drivers/jdbc/ContextClassLoader.cxx +++ b/connectivity/source/drivers/jdbc/ContextClassLoader.cxx @@ -43,33 +43,33 @@ namespace connectivity::jdbc do // artificial loop for easier flow control { - LocalRef< jclass > threadClass( m_environment ); - threadClass.set( m_environment.FindClass( "java/lang/Thread" ) ); - if ( !threadClass.is() ) - break; - - jmethodID currentThreadMethod( m_environment.GetStaticMethodID( - threadClass.get(), "currentThread", "()Ljava/lang/Thread;" ) ); - if ( currentThreadMethod == nullptr ) - break; - - m_currentThread.set( m_environment.CallStaticObjectMethod( threadClass.get(), currentThreadMethod ) ); - if ( !m_currentThread.is() ) - break; - - jmethodID getContextClassLoaderMethod( m_environment.GetMethodID( - threadClass.get(), "getContextClassLoader", "()Ljava/lang/ClassLoader;" ) ); - if ( getContextClassLoaderMethod == nullptr ) - break; - m_oldContextClassLoader.set( m_environment.CallObjectMethod( m_currentThread.get(), getContextClassLoaderMethod ) ); - LocalRef< jthrowable > throwable( m_environment, m_environment.ExceptionOccurred() ); - if ( throwable.is() ) - break; - - m_setContextClassLoaderMethod = m_environment.GetMethodID( - threadClass.get(), "setContextClassLoader", "(Ljava/lang/ClassLoader;)V" ); - if ( m_setContextClassLoaderMethod == nullptr ) - break; + LocalRef< jclass > threadClass( m_environment ); + threadClass.set( m_environment.FindClass( "java/lang/Thread" ) ); + if ( !threadClass.is() ) + break; + + jmethodID currentThreadMethod( m_environment.GetStaticMethodID( + threadClass.get(), "currentThread", "()Ljava/lang/Thread;" ) ); + if ( currentThreadMethod == nullptr ) + break; + + m_currentThread.set( m_environment.CallStaticObjectMethod( threadClass.get(), currentThreadMethod ) ); + if ( !m_currentThread.is() ) + break; + + jmethodID getContextClassLoaderMethod( m_environment.GetMethodID( + threadClass.get(), "getContextClassLoader", "()Ljava/lang/ClassLoader;" ) ); + if ( getContextClassLoaderMethod == nullptr ) + break; + m_oldContextClassLoader.set( m_environment.CallObjectMethod( m_currentThread.get(), getContextClassLoaderMethod ) ); + LocalRef< jthrowable > throwable( m_environment, m_environment.ExceptionOccurred() ); + if ( throwable.is() ) + break; + + m_setContextClassLoaderMethod = m_environment.GetMethodID( + threadClass.get(), "setContextClassLoader", "(Ljava/lang/ClassLoader;)V" ); + if ( m_setContextClassLoaderMethod == nullptr ) + break; } while ( false ); diff --git a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx index b14c1372c9a3..27c7ae01aec3 100644 --- a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx @@ -37,10 +37,7 @@ using namespace ::comphelper; using namespace connectivity; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; jclass java_sql_DatabaseMetaData::theClass = nullptr; @@ -449,7 +446,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTablePrivileges( for (sal_Int32 i = 1 ; i <= nCount ; ++i) { sColumnName = xMeta->getColumnName(i); - for (size_t j = 0 ; j < SAL_N_ELEMENTS(sPrivs); ++j) + for (size_t j = 0 ; j < std::size(sPrivs); ++j) { if ( sPrivs[j] == sColumnName ) { @@ -460,7 +457,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTablePrivileges( } // fill our own resultset - ODatabaseMetaDataResultSet* pNewPrivRes = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges ); + rtl::Reference<ODatabaseMetaDataResultSet> pNewPrivRes = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTablePrivileges ); Reference< XResultSet > xTemp = xReturn; xReturn = pNewPrivRes; ODatabaseMetaDataResultSet::ORows aRows; @@ -481,7 +478,7 @@ Reference< XResultSet > SAL_CALL java_sql_DatabaseMetaData::getTablePrivileges( aRows.push_back(aRow); } - pNewPrivRes->setRows(aRows); + pNewPrivRes->setRows(std::move(aRows)); } } } diff --git a/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx b/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx index 3fb157fb2446..961fd45f5508 100644 --- a/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx +++ b/connectivity/source/drivers/jdbc/DriverPropertyInfo.cxx @@ -20,8 +20,6 @@ #include <java/sql/DriverPropertyInfo.hxx> using namespace connectivity; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::lang; //************ Class: java.sql.Driver diff --git a/connectivity/source/drivers/jdbc/JConnection.cxx b/connectivity/source/drivers/jdbc/JConnection.cxx index e3cd11cabb90..5844df568ba3 100644 --- a/connectivity/source/drivers/jdbc/JConnection.cxx +++ b/connectivity/source/drivers/jdbc/JConnection.cxx @@ -43,6 +43,7 @@ #include <unotools/confignode.hxx> #include <strings.hxx> +#include <utility> #include <vector> #include <memory> @@ -58,8 +59,8 @@ namespace { struct ClassMapEntry { ClassMapEntry( - OUString const & theClassPath, OUString const & theClassName): - classPath(theClassPath), className(theClassName), classLoader(nullptr), + OUString theClassPath, OUString theClassName): + classPath(std::move(theClassPath)), className(std::move(theClassName)), classLoader(nullptr), classObject(nullptr) {} OUString classPath; @@ -165,7 +166,7 @@ bool loadClass( // JVM that are not easily undone). If the pushed ClassMapEntry is // not used after all (return false, etc.) it will be pruned on next // call because its classLoader/classObject are null: - classMapData.map.push_back( ClassMapEntry( classPath, name ) ); + classMapData.map.emplace_back(classPath, name); i = std::prev(classMapData.map.end()); } @@ -246,11 +247,9 @@ IMPLEMENT_SERVICE_INFO(java_sql_Connection,"com.sun.star.sdbcx.JConnection","com jclass java_sql_Connection::theClass = nullptr; java_sql_Connection::java_sql_Connection( const java_sql_Driver& _rDriver ) - :java_lang_Object() - ,m_xContext( _rDriver.getContext() ) + :m_xContext( _rDriver.getContext() ) ,m_pDriver( &_rDriver ) ,m_pDriverobject(nullptr) - ,m_pDriverClassLoader() ,m_Driver_theClass(nullptr) ,m_aLogger( _rDriver.getLogger() ) ,m_bIgnoreDriverPrivileges(true) @@ -436,9 +435,9 @@ Reference< XStatement > SAL_CALL java_sql_Connection::createStatement( ) m_aLogger.log( LogLevel::FINE, STR_LOG_CREATE_STATEMENT ); SDBThreadAttach t; - java_sql_Statement* pStatement = new java_sql_Statement( t.pEnv, *this ); + rtl::Reference<java_sql_Statement> pStatement = new java_sql_Statement( t.pEnv, *this ); Reference< XStatement > xStmt = pStatement; - m_aStatements.push_back( WeakReferenceHelper( xStmt ) ); + m_aStatements.emplace_back(xStmt); m_aLogger.log( LogLevel::FINE, STR_LOG_CREATED_STATEMENT_ID, pStatement->getStatementObjectID() ); return xStmt; @@ -452,9 +451,9 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareStatement( SDBThreadAttach t; - java_sql_PreparedStatement* pStatement = new java_sql_PreparedStatement( t.pEnv, *this, sql ); + rtl::Reference<java_sql_PreparedStatement> pStatement = new java_sql_PreparedStatement( t.pEnv, *this, sql ); Reference< XPreparedStatement > xReturn( pStatement ); - m_aStatements.push_back(WeakReferenceHelper(xReturn)); + m_aStatements.emplace_back(xReturn); m_aLogger.log( LogLevel::FINE, STR_LOG_PREPARED_STATEMENT_ID, pStatement->getStatementObjectID() ); return xReturn; @@ -468,9 +467,9 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareCall( const SDBThreadAttach t; - java_sql_CallableStatement* pStatement = new java_sql_CallableStatement( t.pEnv, *this, sql ); + rtl::Reference<java_sql_CallableStatement> pStatement = new java_sql_CallableStatement( t.pEnv, *this, sql ); Reference< XPreparedStatement > xStmt( pStatement ); - m_aStatements.push_back(WeakReferenceHelper(xStmt)); + m_aStatements.emplace_back(xStmt); m_aLogger.log( LogLevel::FINE, STR_LOG_PREPARED_CALL_ID, pStatement->getStatementObjectID() ); return xStmt; @@ -525,14 +524,10 @@ Any SAL_CALL java_sql_Connection::getWarnings( ) SQLException aAsException( java_sql_SQLWarning( warn_base, *this ) ); // translate to warning - SQLWarning aWarning; - aWarning.Context = aAsException.Context; - aWarning.Message = aAsException.Message; - aWarning.SQLState = aAsException.SQLState; - aWarning.ErrorCode = aAsException.ErrorCode; - aWarning.NextException = aAsException.NextException; - - return makeAny( aWarning ); + SQLWarning aWarning(aAsException.Message, aAsException.Context, aAsException.SQLState, + aAsException.ErrorCode, aAsException.NextException); + + return Any( aWarning ); } return Any(); diff --git a/connectivity/source/drivers/jdbc/JDriver.cxx b/connectivity/source/drivers/jdbc/JDriver.cxx index 1d5424389ce7..f294d30b4937 100644 --- a/connectivity/source/drivers/jdbc/JDriver.cxx +++ b/connectivity/source/drivers/jdbc/JDriver.cxx @@ -71,7 +71,7 @@ Reference< XConnection > SAL_CALL java_sql_Driver::connect( const OUString& url, Reference< XConnection > xOut; if ( acceptsURL(url ) ) { - java_sql_Connection* pConnection = new java_sql_Connection( *this ); + rtl::Reference<java_sql_Connection> pConnection = new java_sql_Connection( *this ); xOut = pConnection; if ( !pConnection->construct(url,info) ) xOut.clear(); // an error occurred and the java driver didn't throw an exception @@ -108,104 +108,102 @@ Sequence< DriverPropertyInfo > SAL_CALL java_sql_Driver::getPropertyInfo( const { if ( acceptsURL(url) ) { - std::vector< DriverPropertyInfo > aDriverInfo; + Sequence< OUString > aBooleanValues{ "false", "true" }; - Sequence< OUString > aBooleanValues(2); - aBooleanValues[0] = "false"; - aBooleanValues[1] = "true"; - - aDriverInfo.push_back(DriverPropertyInfo( + return + { + { "JavaDriverClass" ,"The JDBC driver class name." ,true ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,Sequence< OUString >() + }, + { "JavaDriverClassPath" ,"The class path where to look for the JDBC driver." ,true , "" - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,Sequence< OUString >() + }, + { "SystemProperties" ,"Additional properties to set at java.lang.System before loading the driver." ,true , "" - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,Sequence< OUString >() + }, + { "ParameterNameSubstitution" ,"Change named parameters with '?'." ,false ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBooleanValues + }, + { "IgnoreDriverPrivileges" ,"Ignore the privileges from the database driver." ,false , "false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBooleanValues + }, + { "IsAutoRetrievingEnabled" ,"Retrieve generated values." ,false ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBooleanValues + }, + { "AutoRetrievingStatement" ,"Auto-increment statement." ,false ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,Sequence< OUString >() + }, + { "GenerateASBeforeCorrelationName" ,"Generate AS before table correlation names." ,false ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBooleanValues + }, + { "IgnoreCurrency" ,"Ignore the currency field from the ResultsetMetaData." ,false ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBooleanValues + }, + { "EscapeDateTime" ,"Escape date time format." ,false ,"true" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,aBooleanValues + }, + { "TypeInfoSettings" ,"Defines how the type info of the database metadata should be manipulated." ,false - ,OUString( ) - ,Sequence< OUString > ()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,OUString() + ,Sequence< OUString > () + }, + { "ImplicitCatalogRestriction" ,"The catalog which should be used in getTables calls, when the caller passed NULL." ,false ,OUString( ) - ,Sequence< OUString > ()) - ); - aDriverInfo.push_back(DriverPropertyInfo( + ,Sequence< OUString > () + }, + { "ImplicitSchemaRestriction" ,"The schema which should be used in getTables calls, when the caller passed NULL." ,false ,OUString( ) - ,Sequence< OUString > ()) - ); - return Sequence< DriverPropertyInfo >(aDriverInfo.data(),aDriverInfo.size()); + ,Sequence< OUString > () + } + }; } ::connectivity::SharedResources aResources; const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR); diff --git a/connectivity/source/drivers/jdbc/JStatement.cxx b/connectivity/source/drivers/jdbc/JStatement.cxx index 147e09c0f362..1d5326ca6302 100644 --- a/connectivity/source/drivers/jdbc/JStatement.cxx +++ b/connectivity/source/drivers/jdbc/JStatement.cxx @@ -31,7 +31,7 @@ #include <comphelper/sequence.hxx> #include <TConnection.hxx> #include <comphelper/types.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <com/sun/star/sdbc/ResultSetConcurrency.hpp> #include <com/sun/star/sdbc/ResultSetType.hpp> @@ -124,9 +124,10 @@ Sequence< Type > SAL_CALL java_sql_Statement_Base::getTypes( ) Sequence< Type > aOldTypes = java_sql_Statement_BASE::getTypes(); if ( m_pConnection.is() && !m_pConnection->isAutoRetrievingEnabled() ) { - auto newEnd = std::remove(aOldTypes.begin(), aOldTypes.end(), + auto [begin, end] = asNonConstRange(aOldTypes); + auto newEnd = std::remove(begin, end, cppu::UnoType<XGeneratedResultSet>::get()); - aOldTypes.realloc(std::distance(aOldTypes.begin(), newEnd)); + aOldTypes.realloc(std::distance(begin, newEnd)); } return ::comphelper::concatSequences(aTypes.getTypes(),aOldTypes); @@ -279,7 +280,7 @@ Reference< XConnection > SAL_CALL java_sql_Statement_Base::getConnection( ) { ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(java_sql_Statement_BASE::rBHelper.bDisposed); - return Reference< XConnection >(m_pConnection.get()); + return m_pConnection; } @@ -377,9 +378,9 @@ Any SAL_CALL java_sql_Statement_Base::getWarnings( ) if( out ) { java_sql_SQLWarning_BASE warn_base( t.pEnv, out ); - return makeAny( + return Any( static_cast< css::sdbc::SQLException >( - java_sql_SQLWarning(warn_base,*static_cast<cppu::OWeakObject*>(this)))); + java_sql_SQLWarning(warn_base,getXWeak()))); } return Any(); @@ -575,31 +576,71 @@ void java_sql_Statement_Base::setCursorName(const OUString &_par0) ::cppu::IPropertyArrayHelper* java_sql_Statement_Base::createArrayHelper( ) const { - Sequence< Property > aProps(10); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), - PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), - PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), - PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), - PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), - PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), + PROPERTY_ID_ESCAPEPROCESSING, + cppu::UnoType<bool>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), + PROPERTY_ID_MAXFIELDSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), + PROPERTY_ID_MAXROWS, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), + PROPERTY_ID_QUERYTIMEOUT, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), + PROPERTY_ID_USEBOOKMARKS, + cppu::UnoType<bool>::get(), + 0 + } + } + }; } @@ -794,22 +835,22 @@ void java_sql_Statement::createStatement(JNIEnv* _pEnv) IMPLEMENT_SERVICE_INFO(java_sql_Statement,"com.sun.star.sdbcx.JStatement","com.sun.star.sdbc.Statement"); -void SAL_CALL java_sql_Statement_Base::acquire() throw() +void SAL_CALL java_sql_Statement_Base::acquire() noexcept { java_sql_Statement_BASE::acquire(); } -void SAL_CALL java_sql_Statement_Base::release() throw() +void SAL_CALL java_sql_Statement_Base::release() noexcept { java_sql_Statement_BASE::release(); } -void SAL_CALL java_sql_Statement::acquire() throw() +void SAL_CALL java_sql_Statement::acquire() noexcept { OStatement_BASE2::acquire(); } -void SAL_CALL java_sql_Statement::release() throw() +void SAL_CALL java_sql_Statement::release() noexcept { OStatement_BASE2::release(); } diff --git a/connectivity/source/drivers/jdbc/Object.cxx b/connectivity/source/drivers/jdbc/Object.cxx index 479699750e07..65d6680d745e 100644 --- a/connectivity/source/drivers/jdbc/Object.cxx +++ b/connectivity/source/drivers/jdbc/Object.cxx @@ -29,13 +29,9 @@ #include <comphelper/logging.hxx> #include <cppuhelper/exc_hlp.hxx> -#include <memory> - using namespace connectivity; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -170,22 +166,22 @@ namespace if ( _pEnvironment->IsInstanceOf( jThrow, java_sql_SQLException_BASE::st_getMyClass() ) ) { - std::unique_ptr< java_sql_SQLException_BASE > pException( new java_sql_SQLException_BASE( _pEnvironment, jThrow ) ); - _out_rException = SQLException( pException->getMessage(), _rxContext, - pException->getSQLState(), pException->getErrorCode(), Any() ); + java_sql_SQLException_BASE aException( _pEnvironment, jThrow ); + _out_rException = SQLException( aException.getMessage(), _rxContext, + aException.getSQLState(), aException.getErrorCode(), Any() ); return true; } else if ( _pEnvironment->IsInstanceOf( jThrow, java_lang_Throwable::st_getMyClass() ) ) { - std::unique_ptr< java_lang_Throwable > pThrow( new java_lang_Throwable( _pEnvironment, jThrow ) ); + java_lang_Throwable aThrow( _pEnvironment, jThrow ); #if OSL_DEBUG_LEVEL > 0 - pThrow->printStackTrace(); + aThrow.printStackTrace(); #endif - OUString sMessage = pThrow->getMessage(); + OUString sMessage = aThrow.getMessage(); if ( sMessage.isEmpty() ) - sMessage = pThrow->getLocalizedMessage(); + sMessage = aThrow.getLocalizedMessage(); if( sMessage.isEmpty() ) - sMessage = pThrow->toString(); + sMessage = aThrow.toString(); _out_rException = SQLException( sMessage, _rxContext, OUString(), -1, Any() ); return true; } diff --git a/connectivity/source/drivers/jdbc/PreparedStatement.cxx b/connectivity/source/drivers/jdbc/PreparedStatement.cxx index 083f1917e72a..fa3f7b40c982 100644 --- a/connectivity/source/drivers/jdbc/PreparedStatement.cxx +++ b/connectivity/source/drivers/jdbc/PreparedStatement.cxx @@ -40,7 +40,6 @@ using namespace connectivity; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -143,7 +142,7 @@ void SAL_CALL java_sql_PreparedStatement::setString( sal_Int32 parameterIndex, c css::uno::Reference< css::sdbc::XConnection > SAL_CALL java_sql_PreparedStatement::getConnection( ) { - return Reference< XConnection >(m_pConnection.get()); + return m_pConnection; } @@ -354,7 +353,7 @@ void SAL_CALL java_sql_PreparedStatement::setObjectWithInfo( sal_Int32 parameter { ORowSetValue aValue; aValue.fill(x); - const OUString sValue = aValue; + const OUString sValue = aValue.getString(); if ( !sValue.isEmpty() ) pBigDecimal.reset(new java_math_BigDecimal(sValue)); else @@ -640,12 +639,12 @@ css::uno::Reference< css::sdbc::XResultSetMetaData > SAL_CALL java_sql_PreparedS return out==nullptr ? nullptr : new java_sql_ResultSetMetaData( t.pEnv, out, *m_pConnection ); } -void SAL_CALL java_sql_PreparedStatement::acquire() throw() +void SAL_CALL java_sql_PreparedStatement::acquire() noexcept { OStatement_BASE2::acquire(); } -void SAL_CALL java_sql_PreparedStatement::release() throw() +void SAL_CALL java_sql_PreparedStatement::release() noexcept { OStatement_BASE2::release(); } diff --git a/connectivity/source/drivers/jdbc/ResultSet.cxx b/connectivity/source/drivers/jdbc/ResultSet.cxx index 0144ea5fd87b..c274c521c33c 100644 --- a/connectivity/source/drivers/jdbc/ResultSet.cxx +++ b/connectivity/source/drivers/jdbc/ResultSet.cxx @@ -514,7 +514,7 @@ css::uno::Any SAL_CALL java_sql_ResultSet::getWarnings( ) if( out ) { java_sql_SQLWarning_BASE warn_base( t.pEnv, out ); - return makeAny( + return Any( static_cast< css::sdbc::SQLException >( java_sql_SQLWarning(warn_base,*this))); } @@ -873,25 +873,41 @@ void java_sql_ResultSet::setFetchSize(sal_Int32 _par0) ::cppu::IPropertyArrayHelper* java_sql_ResultSet::createArrayHelper( ) const { - Sequence< Property > aProps(5); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY + } + } + }; } ::cppu::IPropertyArrayHelper & java_sql_ResultSet::getInfoHelper() @@ -978,12 +994,12 @@ void java_sql_ResultSet::getFastPropertyValue( } } -void SAL_CALL java_sql_ResultSet::acquire() throw() +void SAL_CALL java_sql_ResultSet::acquire() noexcept { java_sql_ResultSet_BASE::acquire(); } -void SAL_CALL java_sql_ResultSet::release() throw() +void SAL_CALL java_sql_ResultSet::release() noexcept { java_sql_ResultSet_BASE::release(); } diff --git a/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx b/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx index fdf5bfe69c29..b5827ea991e7 100644 --- a/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx +++ b/connectivity/source/drivers/jdbc/ResultSetMetaData.cxx @@ -21,10 +21,7 @@ #include <java/sql/Connection.hxx> using namespace connectivity; -using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; diff --git a/connectivity/source/drivers/jdbc/SQLException.cxx b/connectivity/source/drivers/jdbc/SQLException.cxx index 55bf0996c941..49fa95c456d5 100644 --- a/connectivity/source/drivers/jdbc/SQLException.cxx +++ b/connectivity/source/drivers/jdbc/SQLException.cxx @@ -22,7 +22,6 @@ using namespace connectivity; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::lang; //************ Class: java.sql.SQLException @@ -31,7 +30,7 @@ java_sql_SQLException::java_sql_SQLException( const java_sql_SQLException_BASE& _rContext, _rException.getSQLState(), _rException.getErrorCode(), - makeAny(_rException.getNextException()) + Any(_rException.getNextException()) ) { } diff --git a/connectivity/source/drivers/jdbc/tools.cxx b/connectivity/source/drivers/jdbc/tools.cxx index 4a4d5069ea18..1d1959717370 100644 --- a/connectivity/source/drivers/jdbc/tools.cxx +++ b/connectivity/source/drivers/jdbc/tools.cxx @@ -32,7 +32,6 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; void java_util_Properties::setProperty(const OUString& key, const OUString& value) { diff --git a/connectivity/source/drivers/macab/MacabAddressBook.cxx b/connectivity/source/drivers/macab/MacabAddressBook.cxx index a14b7abee9b9..7ade1ac0a830 100644 --- a/connectivity/source/drivers/macab/MacabAddressBook.cxx +++ b/connectivity/source/drivers/macab/MacabAddressBook.cxx @@ -82,6 +82,13 @@ MacabAddressBook::MacabAddressBook( ) m_xMacabRecords(nullptr), m_bRetrievedGroups(false) { + if(m_aAddressBook == nullptr) + { + // TODO: tell the user to reset the permission via "tccutil reset AddressBook" + // or the system preferences and try again, this time granting the access + throw RuntimeException( + "failed to access the macOS address book - permission not granted?" ); + } } @@ -106,8 +113,8 @@ MacabAddressBook::~MacabAddressBook() const OUString & MacabAddressBook::getDefaultTableName() { /* This string probably needs to be localized. */ - static const OUString aDefaultTableName - (OUString("Address Book")); + static constexpr OUString aDefaultTableName + (u"Address Book"_ustr); return aDefaultTableName; } diff --git a/connectivity/source/drivers/macab/MacabAddressBook.hxx b/connectivity/source/drivers/macab/MacabAddressBook.hxx index 23fec939f701..a23e0c1eb2e7 100644 --- a/connectivity/source/drivers/macab/MacabAddressBook.hxx +++ b/connectivity/source/drivers/macab/MacabAddressBook.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABADDRESSBOOK_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABADDRESSBOOK_HXX +#pragma once #include "MacabRecords.hxx" #include "MacabGroup.hxx" @@ -58,6 +57,4 @@ namespace connectivity::macab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABADDRESSBOOK_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabCatalog.cxx b/connectivity/source/drivers/macab/MacabCatalog.cxx index 96ff62fd5b6a..d6485ab1c971 100644 --- a/connectivity/source/drivers/macab/MacabCatalog.cxx +++ b/connectivity/source/drivers/macab/MacabCatalog.cxx @@ -80,7 +80,7 @@ void MacabCatalog::refreshUsers() const OUString& MacabCatalog::getDot() { - static const OUString sDot = "."; + static constexpr OUString sDot = u"."_ustr; return sDot; } diff --git a/connectivity/source/drivers/macab/MacabCatalog.hxx b/connectivity/source/drivers/macab/MacabCatalog.hxx index 88aad76bede3..1757bb908851 100644 --- a/connectivity/source/drivers/macab/MacabCatalog.hxx +++ b/connectivity/source/drivers/macab/MacabCatalog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCATALOG_HXX +#pragma once #include <sdbcx/VCatalog.hxx> @@ -49,6 +48,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCATALOG_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabColumns.cxx b/connectivity/source/drivers/macab/MacabColumns.cxx index 6eaa51aa7906..6a49ad1d066c 100644 --- a/connectivity/source/drivers/macab/MacabColumns.cxx +++ b/connectivity/source/drivers/macab/MacabColumns.cxx @@ -54,7 +54,7 @@ sdbcx::ObjectType MacabColumns::createObject(const OUString& _rName) { if (xRow->getString(4) == _rName) { - OColumn* pRet = new OColumn( + xRet = new OColumn( _rName, xRow->getString(6), xRow->getString(13), @@ -70,7 +70,6 @@ sdbcx::ObjectType MacabColumns::createObject(const OUString& _rName) sCatalogName, sSchemaName, sTableName); - xRet = pRet; break; } } diff --git a/connectivity/source/drivers/macab/MacabColumns.hxx b/connectivity/source/drivers/macab/MacabColumns.hxx index 1a85da155d62..7123af89d30a 100644 --- a/connectivity/source/drivers/macab/MacabColumns.hxx +++ b/connectivity/source/drivers/macab/MacabColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCOLUMNS_HXX +#pragma once #include "MacabTable.hxx" #include <connectivity/sdbcx/VCollection.hxx> @@ -40,6 +39,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCOLUMNS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabConnection.cxx b/connectivity/source/drivers/macab/MacabConnection.cxx index 4e5a27354e54..eaa6cf523222 100644 --- a/connectivity/source/drivers/macab/MacabConnection.cxx +++ b/connectivity/source/drivers/macab/MacabConnection.cxx @@ -27,6 +27,7 @@ #include "MacabCatalog.hxx" #include <com/sun/star/sdbc/ColumnValue.hpp> #include <com/sun/star/sdbc/TransactionIsolation.hpp> +#include <cppuhelper/weak.hxx> using namespace connectivity::macab; using namespace com::sun::star::uno; @@ -295,8 +296,7 @@ Reference< XTablesSupplier > MacabConnection::createCatalog() Reference< XTablesSupplier > xTab = m_xCatalog; if (!m_xCatalog.is()) { - MacabCatalog *pCat = new MacabCatalog(this); - xTab = pCat; + xTab = new MacabCatalog(this); m_xCatalog = xTab; } return xTab; @@ -309,10 +309,8 @@ MacabAddressBook* MacabConnection::getAddressBook() const extern "C" SAL_DLLPUBLIC_EXPORT void* createMacabConnection( void* _pDriver ) { - MacabConnection* pConnection = new MacabConnection( static_cast< MacabDriver* >( _pDriver ) ); // by definition, the pointer crossing library boundaries as void ptr is acquired once - pConnection->acquire(); - return pConnection; + return cppu::acquire(new MacabConnection( static_cast< MacabDriver* >( _pDriver ) )); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabConnection.hxx b/connectivity/source/drivers/macab/MacabConnection.hxx index 73ee0a731a76..dc2bfa34f5fd 100644 --- a/connectivity/source/drivers/macab/MacabConnection.hxx +++ b/connectivity/source/drivers/macab/MacabConnection.hxx @@ -17,13 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCONNECTION_HXX +#pragma once -#include <map> #include <connectivity/CommonTools.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/sdbc/SQLWarning.hpp> #include <com/sun/star/sdbc/XWarningsSupplier.hpp> #include <com/sun/star/sdbc/XConnection.hpp> #include <com/sun/star/sdbcx/XTablesSupplier.hpp> @@ -110,6 +107,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCONNECTION_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx b/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx index 540e333aa639..b0b04fc08f21 100644 --- a/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx +++ b/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx @@ -30,7 +30,9 @@ #include <com/sun/star/sdbc/ColumnSearch.hpp> #include <com/sun/star/sdbc/ColumnValue.hpp> #include <com/sun/star/sdbc/ResultSetType.hpp> +#include <com/sun/star/sdbc/SQLException.hpp> #include <com/sun/star/sdbc/TransactionIsolation.hpp> +#include <rtl/ref.hxx> #include <vector> @@ -729,15 +731,14 @@ sal_Bool SAL_CALL MacabDatabaseMetaData::supportsBatchUpdates( ) Reference< XConnection > SAL_CALL MacabDatabaseMetaData::getConnection( ) { - return m_xConnection.get(); + return m_xConnection; } Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTableTypes( ) { - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes); - Reference< XResultSet > xRef = pResult; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes); - static ODatabaseMetaDataResultSet::ORows aRows = [&] + static ODatabaseMetaDataResultSet::ORows aRows = [] { static constexpr OUStringLiteral aTable = u"TABLE"; ODatabaseMetaDataResultSet::ORows tmp; @@ -747,16 +748,15 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTableTypes( ) tmp.push_back(aRow); return tmp; }(); - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::vector(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTypeInfo( ) { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTypeInfo); - static ODatabaseMetaDataResultSet::ORows aRows = [&]() + static ODatabaseMetaDataResultSet::ORows aRows = []() { ODatabaseMetaDataResultSet::ORows tmp; ODatabaseMetaDataResultSet::ORow aRow(19); @@ -805,8 +805,8 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTypeInfo( ) return tmp; }(); - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::vector(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getCatalogs( ) @@ -832,8 +832,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getColumns( const OUString& tableNamePattern, const OUString& columnNamePattern) { - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); - Reference< XResultSet > xRef = pResult; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eColumns); MacabRecords *aRecords; OUString sTableName; @@ -909,8 +908,8 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getColumns( } } } - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::move(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables( @@ -919,13 +918,12 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables( const OUString&, const Sequence< OUString >& types) { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTables); // check whether we have tables in the requested types // for the moment, we answer only the "TABLE" table type // when no types are given at all, we return all the tables - static constexpr OUStringLiteral aTable = u"TABLE"; + static constexpr OUString aTable = u"TABLE"_ustr; bool bTableFound = false; const OUString* p = types.getConstArray(), * pEnd = p + types.getLength(); @@ -944,7 +942,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables( p++; } if (!bTableFound) - return xRef; + return pResult; static ODatabaseMetaDataResultSet::ORows aRows = [&]() { @@ -960,7 +958,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables( aRow[1] = ODatabaseMetaDataResultSet::getEmptyValue(); aRow[2] = ODatabaseMetaDataResultSet::getEmptyValue(); aRow[3] = new ORowSetValueDecorator(xRecords->getName()); - aRow[4] = new ORowSetValueDecorator(OUString(aTable)); + aRow[4] = new ORowSetValueDecorator(aTable); aRow[5] = ODatabaseMetaDataResultSet::getEmptyValue(); tmp.push_back(aRow); @@ -971,8 +969,8 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables( } return tmp; }(); - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::vector(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getProcedureColumns( @@ -992,8 +990,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getProcedures( Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getVersionColumns( const Any&, const OUString&, const OUString& table ) { - ::connectivity::ODatabaseMetaDataResultSet* pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns); - Reference< XResultSet > xRef = pResult; + rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eVersionColumns); ODatabaseMetaDataResultSet::ORows aRows; @@ -1016,8 +1013,8 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getVersionColumns( aRows.push_back(aRow); } - pResult->setRows(aRows); - return xRef; + pResult->setRows(std::move(aRows)); + return pResult; } Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getExportedKeys( diff --git a/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx b/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx index 46cb6769bf0e..662be1c018ce 100644 --- a/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx +++ b/connectivity/source/drivers/macab/MacabDatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABDATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABDATABASEMETADATA_HXX +#pragma once #include "MacabConnection.hxx" #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -193,6 +192,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABDATABASEMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabDriver.cxx b/connectivity/source/drivers/macab/MacabDriver.cxx index 4667c690a8b1..9c68e48f12a7 100644 --- a/connectivity/source/drivers/macab/MacabDriver.cxx +++ b/connectivity/source/drivers/macab/MacabDriver.cxx @@ -25,7 +25,7 @@ #include <com/sun/star/lang/NullPointerException.hpp> #include <com/sun/star/frame/Desktop.hpp> #include <sal/log.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <strings.hrc> #include <cppuhelper/supportsservice.hxx> @@ -115,7 +115,7 @@ bool MacabImplModule::impl_loadModule() OSL_ENSURE( !m_hConnectorModule && !m_pConnectionFactoryFunc, "MacabImplModule::impl_loadModule: inconsistence: inconsistency (never attempted load before, but some values already set)!"); - const OUString sModuleName( SAL_MODULENAME( "macabdrv1" ) ); + constexpr OUString sModuleName( u"" SAL_MODULENAME( "macabdrv1" ) ""_ustr ); m_hConnectorModule = osl_loadModuleRelative( &thisModule, sModuleName.pData, SAL_LOADMODULE_NOW ); // LAZY! #i61335# OSL_ENSURE( m_hConnectorModule, "MacabImplModule::impl_loadModule: could not load the implementation library!" ); if ( !m_hConnectorModule ) diff --git a/connectivity/source/drivers/macab/MacabDriver.hxx b/connectivity/source/drivers/macab/MacabDriver.hxx index ca7707228164..d18f5e9827f4 100644 --- a/connectivity/source/drivers/macab/MacabDriver.hxx +++ b/connectivity/source/drivers/macab/MacabDriver.hxx @@ -17,12 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABDRIVER_HXX +#pragma once #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/frame/XTerminateListener.hpp> #include <com/sun/star/uno/XComponentContext.hpp> #include <cppuhelper/compbase.hxx> @@ -160,6 +158,4 @@ namespace connectivity::macab } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABDRIVER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabGroup.hxx b/connectivity/source/drivers/macab/MacabGroup.hxx index 65240661b138..ddcd47b46423 100644 --- a/connectivity/source/drivers/macab/MacabGroup.hxx +++ b/connectivity/source/drivers/macab/MacabGroup.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABGROUP_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABGROUP_HXX +#pragma once #include "MacabRecords.hxx" @@ -36,6 +35,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABGROUP_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabHeader.cxx b/connectivity/source/drivers/macab/MacabHeader.cxx index 46f0c177d3fc..da270dd05ac8 100644 --- a/connectivity/source/drivers/macab/MacabHeader.cxx +++ b/connectivity/source/drivers/macab/MacabHeader.cxx @@ -290,10 +290,6 @@ MacabHeader::iterator::iterator () } -MacabHeader::iterator::~iterator () -{ -} - MacabHeader::iterator& MacabHeader::iterator::operator= (MacabHeader *_record) { id = 0; diff --git a/connectivity/source/drivers/macab/MacabHeader.hxx b/connectivity/source/drivers/macab/MacabHeader.hxx index 839a755fb6f1..24b3fc7b0b9c 100644 --- a/connectivity/source/drivers/macab/MacabHeader.hxx +++ b/connectivity/source/drivers/macab/MacabHeader.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABHEADER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABHEADER_HXX +#pragma once #include <sal/config.h> @@ -51,7 +50,6 @@ namespace connectivity::macab public: iterator& operator= (MacabHeader *_record); iterator(); - ~iterator(); void operator++ (); bool operator!= (const sal_Int32 i) const; bool operator== (const sal_Int32 i) const; @@ -60,6 +58,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABHEADER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabPreparedStatement.cxx b/connectivity/source/drivers/macab/MacabPreparedStatement.cxx index cbb3dc75608c..6d72345b6021 100644 --- a/connectivity/source/drivers/macab/MacabPreparedStatement.cxx +++ b/connectivity/source/drivers/macab/MacabPreparedStatement.cxx @@ -78,7 +78,7 @@ void MacabPreparedStatement::getNextParameter(OUString &rParameter) const ::dbtools::throwGenericSQLException(sError,*const_cast<MacabPreparedStatement *>(this)); } - rParameter = (*m_aParameterRow)[m_nParameterIndex]; + rParameter = (*m_aParameterRow)[m_nParameterIndex].getString(); m_nParameterIndex++; } @@ -131,7 +131,7 @@ Reference< XResultSetMetaData > SAL_CALL MacabPreparedStatement::getMetaData() m_xMetaData = new MacabResultSetMetaData(getOwnConnection(),sTableName); setMacabFields(); } - Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); + Reference< XResultSetMetaData > xMetaData = m_xMetaData; return xMetaData; } diff --git a/connectivity/source/drivers/macab/MacabPreparedStatement.hxx b/connectivity/source/drivers/macab/MacabPreparedStatement.hxx index 42c401efb1dd..6e649bf647f3 100644 --- a/connectivity/source/drivers/macab/MacabPreparedStatement.hxx +++ b/connectivity/source/drivers/macab/MacabPreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABPREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABPREPAREDSTATEMENT_HXX +#pragma once #include "MacabStatement.hxx" #include "MacabResultSetMetaData.hxx" @@ -109,6 +108,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABPREPAREDSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabRecord.hxx b/connectivity/source/drivers/macab/MacabRecord.hxx index 3183ec9109e1..5184eefc8ab4 100644 --- a/connectivity/source/drivers/macab/MacabRecord.hxx +++ b/connectivity/source/drivers/macab/MacabRecord.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABRECORD_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABRECORD_HXX +#pragma once #include <sal/config.h> @@ -69,6 +68,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABRECORD_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabRecords.cxx b/connectivity/source/drivers/macab/MacabRecords.cxx index 737cdee7d6f8..07d462425e65 100644 --- a/connectivity/source/drivers/macab/MacabRecords.cxx +++ b/connectivity/source/drivers/macab/MacabRecords.cxx @@ -344,7 +344,7 @@ MacabHeader *MacabRecords::createHeaderForRecordType(const CFArrayRef _records, /* While searching through the properties for required properties, these * sal_Bools will keep track of what we have found. */ - bool bFoundRequiredProperties[requiredProperties.size()]; + auto const bFoundRequiredProperties = std::make_unique<bool[]>(requiredProperties.size()); /* We have three MacabHeaders: headerDataForProperty is where we @@ -530,34 +530,34 @@ MacabHeader *MacabRecords::createHeaderForProperty(const ABPropertyType _propert */ if(_propertyValue != nullptr) { - sal_Int32 i; + sal_Int32 i; - sal_Int32 multiLength = ABMultiValueCount(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue))); - CFStringRef multiLabel, localizedMultiLabel; - OUString multiLabelString; - OUString multiPropertyString; - OUString headerNameString; - ABPropertyType multiType = static_cast<ABPropertyType>(ABMultiValuePropertyType(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue))) - 0x100); + sal_Int32 multiLength = ABMultiValueCount(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue))); + CFStringRef multiLabel, localizedMultiLabel; + OUString multiLabelString; + OUString multiPropertyString; + OUString headerNameString; + ABPropertyType multiType = static_cast<ABPropertyType>(ABMultiValuePropertyType(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue))) - 0x100); - length = multiLength; - headerNames = new macabfield *[multiLength]; - multiPropertyString = CFStringToOUString(_propertyName); + length = multiLength; + headerNames = new macabfield *[multiLength]; + multiPropertyString = CFStringToOUString(_propertyName); - /* Go through each element, and - since each element is a scalar - - * just create a new macabfield for it. - */ - for(i = 0; i < multiLength; i++) - { - multiLabel = ABMultiValueCopyLabelAtIndex(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue)), i); - localizedMultiLabel = ABCopyLocalizedPropertyOrLabel(multiLabel); - multiLabelString = CFStringToOUString(localizedMultiLabel); - CFRelease(multiLabel); - CFRelease(localizedMultiLabel); - headerNameString = multiPropertyString + ": " + fixLabel(multiLabelString); - headerNames[i] = new macabfield; - headerNames[i]->value = OUStringToCFString(headerNameString); - headerNames[i]->type = multiType; - } + /* Go through each element, and - since each element is a scalar - + * just create a new macabfield for it. + */ + for(i = 0; i < multiLength; i++) + { + multiLabel = ABMultiValueCopyLabelAtIndex(static_cast<ABMutableMultiValueRef>(const_cast<void *>(_propertyValue)), i); + localizedMultiLabel = ABCopyLocalizedPropertyOrLabel(multiLabel); + multiLabelString = CFStringToOUString(localizedMultiLabel); + CFRelease(multiLabel); + CFRelease(localizedMultiLabel); + headerNameString = multiPropertyString + ": " + fixLabel(multiLabelString); + headerNames[i] = new macabfield; + headerNames[i]->value = OUStringToCFString(headerNameString); + headerNames[i]->type = multiType; + } } break; @@ -653,77 +653,77 @@ MacabHeader *MacabRecords::createHeaderForProperty(const ABPropertyType _propert */ if(_propertyValue != nullptr) { - /* Assume all keys are strings */ - sal_Int32 numRecords = static_cast<sal_Int32>(CFDictionaryGetCount(static_cast<CFDictionaryRef>(_propertyValue))); + /* Assume all keys are strings */ + sal_Int32 numRecords = static_cast<sal_Int32>(CFDictionaryGetCount(static_cast<CFDictionaryRef>(_propertyValue))); - /* The only method for getting info out of a CFDictionary, of both - * keys and values, is to all of them all at once, so these - * variables will hold them. - */ - CFStringRef *dictKeys; - CFTypeRef *dictValues; - - sal_Int32 i,j,k; - OUString dictKeyString, propertyNameString; - ABPropertyType dictType; - MacabHeader **dictHeaders = new MacabHeader *[numRecords]; - OUString dictLabelString; - CFStringRef dictLabel, localizedDictKey; - - /* Get the keys and values */ - dictKeys = static_cast<CFStringRef *>(malloc(sizeof(CFStringRef)*numRecords)); - dictValues = static_cast<CFTypeRef *>(malloc(sizeof(CFTypeRef)*numRecords)); - CFDictionaryGetKeysAndValues(static_cast<CFDictionaryRef>(_propertyValue), reinterpret_cast<const void **>(dictKeys), dictValues); - - propertyNameString = CFStringToOUString(_propertyName); - - length = 0; - /* Go through each element - assuming that the key is a string but - * that the value could be anything. Since the value could be - * anything, we can't assume that it is scalar (it could even be - * another dictionary), so we attempt to get its type using - * the method getABTypeFromCFType and then run this method - * recursively on that element, storing the MacabHeader that - * results. Then, we just combine all of the MacabHeaders into - * one. - */ - for(i = 0; i < numRecords; i++) - { - dictType = getABTypeFromCFType( CFGetTypeID(dictValues[i]) ); - localizedDictKey = ABCopyLocalizedPropertyOrLabel(dictKeys[i]); - dictKeyString = CFStringToOUString(localizedDictKey); - dictLabelString = propertyNameString + ": " + fixLabel(dictKeyString); - dictLabel = OUStringToCFString(dictLabelString); - dictHeaders[i] = createHeaderForProperty(dictType, dictValues[i], dictLabel); - if (!dictHeaders[i]) - dictHeaders[i] = new MacabHeader(); - length += dictHeaders[i]->getSize(); - CFRelease(dictLabel); - CFRelease(localizedDictKey); - } + /* The only method for getting info out of a CFDictionary, of both + * keys and values, is to all of them all at once, so these + * variables will hold them. + */ + CFStringRef *dictKeys; + CFTypeRef *dictValues; - /* Combine all of the macabfields in each MacabHeader into the - * headerNames array, which (at the end of this method) is used - * to create the MacabHeader that is returned. - */ - headerNames = new macabfield *[length]; - for(i = 0, j = 0, k = 0; i < length; i++,k++) - { - while(dictHeaders[j]->getSize() == k) + sal_Int32 i,j,k; + OUString dictKeyString, propertyNameString; + ABPropertyType dictType; + MacabHeader **dictHeaders = new MacabHeader *[numRecords]; + OUString dictLabelString; + CFStringRef dictLabel, localizedDictKey; + + /* Get the keys and values */ + dictKeys = static_cast<CFStringRef *>(malloc(sizeof(CFStringRef)*numRecords)); + dictValues = static_cast<CFTypeRef *>(malloc(sizeof(CFTypeRef)*numRecords)); + CFDictionaryGetKeysAndValues(static_cast<CFDictionaryRef>(_propertyValue), reinterpret_cast<const void **>(dictKeys), dictValues); + + propertyNameString = CFStringToOUString(_propertyName); + + length = 0; + /* Go through each element - assuming that the key is a string but + * that the value could be anything. Since the value could be + * anything, we can't assume that it is scalar (it could even be + * another dictionary), so we attempt to get its type using + * the method getABTypeFromCFType and then run this method + * recursively on that element, storing the MacabHeader that + * results. Then, we just combine all of the MacabHeaders into + * one. + */ + for(i = 0; i < numRecords; i++) { - j++; - k = 0; + dictType = getABTypeFromCFType( CFGetTypeID(dictValues[i]) ); + localizedDictKey = ABCopyLocalizedPropertyOrLabel(dictKeys[i]); + dictKeyString = CFStringToOUString(localizedDictKey); + dictLabelString = propertyNameString + ": " + fixLabel(dictKeyString); + dictLabel = OUStringToCFString(dictLabelString); + dictHeaders[i] = createHeaderForProperty(dictType, dictValues[i], dictLabel); + if (!dictHeaders[i]) + dictHeaders[i] = new MacabHeader(); + length += dictHeaders[i]->getSize(); + CFRelease(dictLabel); + CFRelease(localizedDictKey); } - headerNames[i] = dictHeaders[j]->copy(k); - } + /* Combine all of the macabfields in each MacabHeader into the + * headerNames array, which (at the end of this method) is used + * to create the MacabHeader that is returned. + */ + headerNames = new macabfield *[length]; + for(i = 0, j = 0, k = 0; i < length; i++,k++) + { + while(dictHeaders[j]->getSize() == k) + { + j++; + k = 0; + } - for(i = 0; i < numRecords; i++) - delete dictHeaders[i]; + headerNames[i] = dictHeaders[j]->copy(k); + } - delete [] dictHeaders; - free(dictKeys); - free(dictValues); + for(i = 0; i < numRecords; i++) + delete dictHeaders[i]; + + delete [] dictHeaders; + free(dictKeys); + free(dictValues); } break; @@ -1099,11 +1099,6 @@ MacabRecords::iterator::iterator () } -MacabRecords::iterator::~iterator () -{ -} - - MacabRecords::iterator& MacabRecords::iterator::operator= (MacabRecords *_records) { id = 0; diff --git a/connectivity/source/drivers/macab/MacabRecords.hxx b/connectivity/source/drivers/macab/MacabRecords.hxx index 7e7da60a5486..8d0d5cf6f796 100644 --- a/connectivity/source/drivers/macab/MacabRecords.hxx +++ b/connectivity/source/drivers/macab/MacabRecords.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABRECORDS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABRECORDS_HXX +#pragma once #include <sal/config.h> @@ -114,7 +113,6 @@ namespace connectivity::macab sal_Int32 id; iterator& operator= (MacabRecords *_records); iterator(); - ~iterator(); void operator++ (); bool operator!= (const sal_Int32 i) const; bool operator== (const sal_Int32 i) const; @@ -124,6 +122,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABRECORDS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabResultSet.cxx b/connectivity/source/drivers/macab/MacabResultSet.cxx index da2d2dafd3ed..4142fcb6cce0 100644 --- a/connectivity/source/drivers/macab/MacabResultSet.cxx +++ b/connectivity/source/drivers/macab/MacabResultSet.cxx @@ -33,6 +33,7 @@ #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> #include <resource/sharedresources.hxx> +#include <rtl/ref.hxx> #include <strings.hrc> using namespace connectivity::macab; @@ -64,14 +65,14 @@ MacabResultSet::~MacabResultSet() void MacabResultSet::allMacabRecords() { - MacabConnection* pConnection = static_cast< MacabConnection *>(m_xStatement->getConnection().get()); + rtl::Reference<MacabConnection> pConnection = static_cast< MacabConnection *>(m_xStatement->getConnection().get()); m_aMacabRecords = pConnection->getAddressBook()->getMacabRecords(m_sTableName); } void MacabResultSet::someMacabRecords(const MacabCondition *pCondition) { - MacabConnection* pConnection = static_cast< MacabConnection *>(m_xStatement->getConnection().get()); + rtl::Reference<MacabConnection> pConnection = static_cast< MacabConnection *>(m_xStatement->getConnection().get()); MacabRecords* allRecords; allRecords = pConnection->getAddressBook()->getMacabRecords(m_sTableName); @@ -156,12 +157,12 @@ Any SAL_CALL MacabResultSet::queryInterface(const Type & rType) return aRet; } -void SAL_CALL MacabResultSet::acquire() throw() +void SAL_CALL MacabResultSet::acquire() noexcept { MacabResultSet_BASE::acquire(); } -void SAL_CALL MacabResultSet::release() throw() +void SAL_CALL MacabResultSet::release() noexcept { MacabResultSet_BASE::release(); } @@ -513,7 +514,7 @@ Reference< XResultSetMetaData > SAL_CALL MacabResultSet::getMetaData() if (!m_xMetaData.is()) m_xMetaData = new MacabResultSetMetaData(m_xStatement->getOwnConnection(), m_sTableName); - Reference< XResultSetMetaData > xMetaData = m_xMetaData.get(); + Reference< XResultSetMetaData > xMetaData = m_xMetaData; return xMetaData; } @@ -668,7 +669,7 @@ Reference< XInterface > SAL_CALL MacabResultSet::getStatement() ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(MacabResultSet_BASE::rBHelper.bDisposed); - Reference< XStatement > xStatement = m_xStatement.get(); + Reference< XStatement > xStatement = m_xStatement; return xStatement; } @@ -884,7 +885,7 @@ Any SAL_CALL MacabResultSet::getBookmark() { if(uidField->type == kABStringProperty) { - return makeAny(CFStringToOUString( static_cast<CFStringRef>(uidField->value) )); + return Any(CFStringToOUString( static_cast<CFStringRef>(uidField->value) )); } } } @@ -980,28 +981,47 @@ Sequence< sal_Int32 > SAL_CALL MacabResultSet::deleteRows(const Sequence< Any IPropertyArrayHelper* MacabResultSet::createArrayHelper() const { - Sequence< Property > aProps(6); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE), - PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new OPropertyArrayHelper(aProps); + return new OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE), + PROPERTY_ID_ISBOOKMARKABLE, + cppu::UnoType<bool>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY + } + } + }; } IPropertyArrayHelper & MacabResultSet::getInfoHelper() diff --git a/connectivity/source/drivers/macab/MacabResultSet.hxx b/connectivity/source/drivers/macab/MacabResultSet.hxx index d0d8061f417c..306ef562d3b4 100644 --- a/connectivity/source/drivers/macab/MacabResultSet.hxx +++ b/connectivity/source/drivers/macab/MacabResultSet.hxx @@ -104,8 +104,8 @@ namespace connectivity::macab // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; // XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; diff --git a/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx b/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx index d0ed7298f92b..e08d92cfceb6 100644 --- a/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx +++ b/connectivity/source/drivers/macab/MacabResultSetMetaData.cxx @@ -23,6 +23,7 @@ #include "MacabRecords.hxx" #include "MacabAddressBook.hxx" #include "macabutilities.hxx" +#include <connectivity/dbexception.hxx> #include <strings.hrc> using namespace connectivity::macab; diff --git a/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx b/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx index 6db5f240ac24..b82088154cb9 100644 --- a/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx +++ b/connectivity/source/drivers/macab/MacabResultSetMetaData.hxx @@ -23,7 +23,6 @@ #include <connectivity/CommonTools.hxx> #include <com/sun/star/sdbc/XResultSetMetaData.hpp> #include <cppuhelper/implbase.hxx> -#include <connectivity/dbexception.hxx> #include <rtl/ref.hxx> namespace connectivity::macab @@ -45,7 +44,7 @@ namespace connectivity::macab MacabResultSetMetaData(MacabConnection* _pConnection, OUString const & _sTableName); // avoid ambiguous cast error from the compiler - operator css::uno::Reference< css::sdbc::XResultSetMetaData > () throw() + operator css::uno::Reference< css::sdbc::XResultSetMetaData > () noexcept { return this; } /// @throws css::sdbc::SQLException diff --git a/connectivity/source/drivers/macab/MacabStatement.cxx b/connectivity/source/drivers/macab/MacabStatement.cxx index 407c90527eef..95b922ce6bc7 100644 --- a/connectivity/source/drivers/macab/MacabStatement.cxx +++ b/connectivity/source/drivers/macab/MacabStatement.cxx @@ -32,6 +32,7 @@ #include <cppuhelper/typeprovider.hxx> #include <connectivity/dbexception.hxx> #include <resource/sharedresources.hxx> +#include <rtl/ref.hxx> #include <strings.hrc> using namespace connectivity::macab; @@ -46,7 +47,7 @@ using namespace com::sun::star::util; namespace connectivity::macab { - void impl_throwError(const char* pErrorId) + void impl_throwError(TranslateId pErrorId) { ::connectivity::SharedResources aResources; const OUString sError( aResources.getResourceString(pErrorId) ); @@ -288,7 +289,7 @@ OUString MacabCommonStatement::getTableName() const void MacabCommonStatement::setMacabFields(MacabResultSet *pResult) const { ::rtl::Reference<connectivity::OSQLColumns> xColumns; // selected columns - MacabResultSetMetaData *pMeta; // meta information - holds the list of AddressBook fields + rtl::Reference<MacabResultSetMetaData> pMeta; // meta information - holds the list of AddressBook fields xColumns = m_aSQLIterator.getSelectColumns(); if (!xColumns.is()) @@ -397,8 +398,7 @@ Reference< XResultSet > SAL_CALL MacabCommonStatement::executeQuery( ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(rBHelper.bDisposed); - MacabResultSet* pResult = new MacabResultSet(this); - Reference< XResultSet > xRS = pResult; + rtl::Reference<MacabResultSet> pResult = new MacabResultSet(this); OUString aErr; m_pParseTree = m_aParser.parseTree(aErr, sql).release(); @@ -428,9 +428,9 @@ Reference< XResultSet > SAL_CALL MacabCommonStatement::executeQuery( pResult->setTableName(sTableName); - setMacabFields(pResult); // SELECT which columns ? - selectRecords(pResult); // WHERE which condition ? - sortRecords(pResult); // ORDER BY which columns ? + setMacabFields(pResult.get()); // SELECT which columns ? + selectRecords(pResult.get()); // WHERE which condition ? + sortRecords(pResult.get()); // ORDER BY which columns ? } // To be continued: DISTINCT // etc... @@ -446,7 +446,7 @@ Reference< XResultSet > SAL_CALL MacabCommonStatement::executeQuery( } m_xResultSet = Reference<XResultSet>(pResult); - return xRS; + return pResult; } Reference< XConnection > SAL_CALL MacabCommonStatement::getConnection( ) @@ -472,7 +472,7 @@ Any SAL_CALL MacabCommonStatement::getWarnings( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(rBHelper.bDisposed); - return makeAny(m_aLastWarning); + return Any(m_aLastWarning); } void SAL_CALL MacabCommonStatement::clearWarnings( ) @@ -487,31 +487,71 @@ void SAL_CALL MacabCommonStatement::clearWarnings( ) { // this properties are defined by the service statement // they must be in alphabetic order - Sequence< Property > aProps(10); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), - PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), - PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), - PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), - PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), - PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), + PROPERTY_ID_ESCAPEPROCESSING, + cppu::UnoType<bool>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), + PROPERTY_ID_MAXFIELDSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), + PROPERTY_ID_MAXROWS, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), + PROPERTY_ID_QUERYTIMEOUT, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), + PROPERTY_ID_USEBOOKMARKS, + cppu::UnoType<bool>::get(), + 0 + } + } + }; } ::cppu::IPropertyArrayHelper & MacabCommonStatement::getInfoHelper() @@ -568,12 +608,12 @@ void MacabCommonStatement::getFastPropertyValue(Any&,sal_Int32 nHandle) const } } -void SAL_CALL MacabCommonStatement::acquire() throw() +void SAL_CALL MacabCommonStatement::acquire() noexcept { MacabCommonStatement_BASE::acquire(); } -void SAL_CALL MacabCommonStatement::release() throw() +void SAL_CALL MacabCommonStatement::release() noexcept { MacabCommonStatement_BASE::release(); } diff --git a/connectivity/source/drivers/macab/MacabStatement.hxx b/connectivity/source/drivers/macab/MacabStatement.hxx index 83142fc56618..700a895c0a38 100644 --- a/connectivity/source/drivers/macab/MacabStatement.hxx +++ b/connectivity/source/drivers/macab/MacabStatement.hxx @@ -24,6 +24,7 @@ #include <connectivity/sqliterator.hxx> #include <connectivity/sqlparse.hxx> #include <com/sun/star/sdbc/XStatement.hpp> +#include <com/sun/star/sdbc/SQLWarning.hpp> #include <com/sun/star/util/XCancellable.hpp> #include <cppuhelper/compbase.hxx> #include <cppuhelper/implbase.hxx> @@ -106,8 +107,8 @@ namespace connectivity::macab using MacabCommonStatement_BASE::disposing; // XInterface - virtual void SAL_CALL release() throw() override; - virtual void SAL_CALL acquire() throw() override; + virtual void SAL_CALL release() noexcept override; + virtual void SAL_CALL acquire() noexcept override; virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; diff --git a/connectivity/source/drivers/macab/MacabTable.cxx b/connectivity/source/drivers/macab/MacabTable.cxx index 75da75bc1035..1628cd297bfd 100644 --- a/connectivity/source/drivers/macab/MacabTable.cxx +++ b/connectivity/source/drivers/macab/MacabTable.cxx @@ -71,8 +71,8 @@ void MacabTable::refreshColumns() if (xResult.is()) { - Reference< XRow > xRow(xResult, UNO_QUERY); - while (xResult->next()) + Reference< XRow > xRow(xResult, UNO_QUERY); + while (xResult->next()) aVector.push_back(xRow->getString(4)); } } @@ -80,7 +80,7 @@ void MacabTable::refreshColumns() if (m_xColumns) m_xColumns->reFill(aVector); else - m_xColumns = new MacabColumns(this,m_aMutex,aVector); + m_xColumns.reset(new MacabColumns(this, m_aMutex, aVector)); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabTable.hxx b/connectivity/source/drivers/macab/MacabTable.hxx index 3db8ab0aae50..897d589cc697 100644 --- a/connectivity/source/drivers/macab/MacabTable.hxx +++ b/connectivity/source/drivers/macab/MacabTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABTABLE_HXX +#pragma once #include "MacabConnection.hxx" #include <connectivity/sdbcx/VTable.hxx> @@ -52,6 +51,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABTABLE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/MacabTables.cxx b/connectivity/source/drivers/macab/MacabTables.cxx index c70aa87f87d5..e7149d2646c1 100644 --- a/connectivity/source/drivers/macab/MacabTables.cxx +++ b/connectivity/source/drivers/macab/MacabTables.cxx @@ -52,14 +52,13 @@ sdbcx::ObjectType MacabTables::createObject(const OUString& _rName) Reference< XRow > xRow(xResult, UNO_QUERY); if (xResult->next()) // there can be only one table with this name { - MacabTable* pRet = new MacabTable( + xRet = new MacabTable( this, static_cast<MacabCatalog&>(m_rParent).getConnection(), aName, xRow->getString(4), xRow->getString(5), ""); - xRet = pRet; } } ::comphelper::disposeComponent(xResult); diff --git a/connectivity/source/drivers/macab/MacabTables.hxx b/connectivity/source/drivers/macab/MacabTables.hxx index 43922585e46b..0b0d841b7a43 100644 --- a/connectivity/source/drivers/macab/MacabTables.hxx +++ b/connectivity/source/drivers/macab/MacabTables.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABTABLES_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -47,6 +46,4 @@ namespace connectivity::macab }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABTABLES_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/macabcondition.hxx b/connectivity/source/drivers/macab/macabcondition.hxx index 15c2478197b8..32e7b7071cf3 100644 --- a/connectivity/source/drivers/macab/macabcondition.hxx +++ b/connectivity/source/drivers/macab/macabcondition.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCONDITION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCONDITION_HXX +#pragma once #include <sal/config.h> @@ -163,6 +162,4 @@ class MacabConditionAnd : public MacabConditionBoolean } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABCONDITION_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/macaborder.hxx b/connectivity/source/drivers/macab/macaborder.hxx index dfdf5ce5a950..e5eb6c987ce2 100644 --- a/connectivity/source/drivers/macab/macaborder.hxx +++ b/connectivity/source/drivers/macab/macaborder.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABORDER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABORDER_HXX +#pragma once #include <rtl/ustring.hxx> #include "MacabHeader.hxx" @@ -62,6 +61,4 @@ namespace connectivity::macab }; } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/macab/macabutilities.hxx b/connectivity/source/drivers/macab/macabutilities.hxx index d0027c8da6ed..7e0f6b091085 100644 --- a/connectivity/source/drivers/macab/macabutilities.hxx +++ b/connectivity/source/drivers/macab/macabutilities.hxx @@ -17,11 +17,15 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABUTILITIES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_MACAB_MACABUTILITIES_HXX +#pragma once + +#include <sal/config.h> + +#include <memory> #include <com/sun/star/util/DateTime.hpp> #include <com/sun/star/sdbc/DataType.hpp> +#include <unotools/resmgr.hxx> #include <time.h> #include <premac.h> @@ -47,15 +51,15 @@ namespace connectivity::macab CFRetain(sOrig); CFIndex nStringLength = CFStringGetLength(sOrig); - UniChar unichars[nStringLength+1]; + auto const unichars = std::make_unique<UniChar[]>(nStringLength+1); //'close' the string buffer correctly unichars[nStringLength] = '\0'; - CFStringGetCharacters (sOrig, CFRangeMake(0,nStringLength), unichars); + CFStringGetCharacters (sOrig, CFRangeMake(0,nStringLength), unichars.get()); CFRelease(sOrig); - return OUString(reinterpret_cast<sal_Unicode *>(unichars)); + return OUString(reinterpret_cast<sal_Unicode *>(unichars.get())); } @@ -132,9 +136,7 @@ namespace connectivity::macab return dataType; } - void impl_throwError(const char* pErrorId); + void impl_throwError(TranslateId pErrorId); } -#endif // _ CONNECTIVITY_MACAB_UTILITIES_HXX_ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx new file mode 100644 index 000000000000..076a05d3b9dc --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx @@ -0,0 +1,136 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <cppuhelper/factory.hxx> +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#include <cppuhelper/supportsservice.hxx> +#include <cppuhelper/weak.hxx> +#include "MMozillaBootstrap.hxx" +#include "MNSProfileDiscover.hxx" + +using namespace com::sun::star::uno; +using namespace com::sun::star::lang; +using namespace com::sun::star::mozilla; +using namespace connectivity::mozab; + +using ::com::sun::star::uno::Reference; +using ::com::sun::star::uno::Sequence; + +MozillaBootstrap::MozillaBootstrap() + : OMozillaBootstrap_BASE(m_aMutex) +{ + m_ProfileAccess.reset(new ProfileAccess); + bootupProfile(css::mozilla::MozillaProductType_Mozilla,OUString()); +} + +MozillaBootstrap::~MozillaBootstrap() +{ +} + +void MozillaBootstrap::disposing() +{ + ::osl::MutexGuard aGuard(m_aMutex); + OMozillaBootstrap_BASE::disposing(); +} + +OUString SAL_CALL MozillaBootstrap::getImplementationName( ) +{ + return "com.sun.star.comp.mozilla.MozillaBootstrap"; +} + +sal_Bool SAL_CALL MozillaBootstrap::supportsService( const OUString& _rServiceName ) +{ + return cppu::supportsService(this, _rServiceName); +} + +Sequence< OUString > SAL_CALL MozillaBootstrap::getSupportedServiceNames( ) +{ + // which service is supported + // for more information @see com.sun.star.mozilla.MozillaBootstrap + return { "com.sun.star.mozilla.MozillaBootstrap" }; +} + + +// XProfileDiscover +::sal_Int32 SAL_CALL MozillaBootstrap::getProfileCount( css::mozilla::MozillaProductType product) +{ + return m_ProfileAccess->getProfileCount(product); +} +::sal_Int32 SAL_CALL MozillaBootstrap::getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list ) +{ + return m_ProfileAccess->getProfileList(product,list); +} +OUString SAL_CALL MozillaBootstrap::getDefaultProfile( css::mozilla::MozillaProductType product ) +{ + return m_ProfileAccess->getDefaultProfile(product); +} +OUString SAL_CALL MozillaBootstrap::getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName ) +{ + return m_ProfileAccess->getProfilePath(product,profileName); +} +sal_Bool SAL_CALL MozillaBootstrap::isProfileLocked( css::mozilla::MozillaProductType /*product*/, const OUString& /*profileName*/ ) +{ + return true; +} +sal_Bool SAL_CALL MozillaBootstrap::getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName ) +{ + return m_ProfileAccess->getProfileExists(product,profileName); +} + +// XProfileManager +::sal_Int32 SAL_CALL MozillaBootstrap::bootupProfile( css::mozilla::MozillaProductType, const OUString& ) +{ + return -1; +} +::sal_Int32 SAL_CALL MozillaBootstrap::shutdownProfile( ) +{ + return -1; +} +css::mozilla::MozillaProductType SAL_CALL MozillaBootstrap::getCurrentProduct( ) +{ + return css::mozilla::MozillaProductType_Default; +} +OUString SAL_CALL MozillaBootstrap::getCurrentProfile( ) +{ + return OUString(); +} +sal_Bool SAL_CALL MozillaBootstrap::isCurrentProfileLocked( ) +{ + return true; +} +OUString SAL_CALL MozillaBootstrap::setCurrentProfile( css::mozilla::MozillaProductType, const OUString& ) +{ + return OUString(); +} + +// XProxyRunner +::sal_Int32 SAL_CALL MozillaBootstrap::Run( const css::uno::Reference< css::mozilla::XCodeProxy >& ) +{ + return -1; +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* +connectivity_moz_MozillaBootstrap_get_implementation( + css::uno::XComponentContext* , css::uno::Sequence<css::uno::Any> const&) +{ + return cppu::acquire(new connectivity::mozab::MozillaBootstrap()); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx new file mode 100644 index 000000000000..e01a2bb9612c --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.hxx @@ -0,0 +1,78 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <sal/config.h> + +#include <memory> + +#include <com/sun/star/mozilla/XMozillaBootstrap.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <cppuhelper/compbase.hxx> + + +namespace connectivity::mozab +{ + typedef ::cppu::WeakComponentImplHelper< css::mozilla::XMozillaBootstrap, + css::lang::XServiceInfo > OMozillaBootstrap_BASE; + class ProfileAccess; + class ProfileManager; + class MozillaBootstrap : public OMozillaBootstrap_BASE + { + private: + ::osl::Mutex m_aMutex; // mutex is need to control member access + virtual ~MozillaBootstrap() override; + std::unique_ptr<ProfileAccess> m_ProfileAccess; + public: + + MozillaBootstrap(); + + // OComponentHelper + virtual void SAL_CALL disposing() override; + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName( ) override; + virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; + + // XMozillaBootstrap + + // XProfileDiscover + virtual ::sal_Int32 SAL_CALL getProfileCount( css::mozilla::MozillaProductType product) override; + virtual ::sal_Int32 SAL_CALL getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list ) override; + virtual OUString SAL_CALL getDefaultProfile( css::mozilla::MozillaProductType product ) override; + virtual OUString SAL_CALL getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName ) override; + virtual sal_Bool SAL_CALL isProfileLocked( css::mozilla::MozillaProductType product, const OUString& profileName ) override; + virtual sal_Bool SAL_CALL getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName ) override; + + // XProfileManager + virtual ::sal_Int32 SAL_CALL bootupProfile( css::mozilla::MozillaProductType product, const OUString& profileName ) override; + virtual ::sal_Int32 SAL_CALL shutdownProfile( ) override; + virtual css::mozilla::MozillaProductType SAL_CALL getCurrentProduct( ) override; + virtual OUString SAL_CALL getCurrentProfile( ) override; + virtual sal_Bool SAL_CALL isCurrentProfileLocked( ) override; + virtual OUString SAL_CALL setCurrentProfile( css::mozilla::MozillaProductType product, const OUString& profileName ) override; + + // XProxyRunner + virtual ::sal_Int32 SAL_CALL Run( const css::uno::Reference< css::mozilla::XCodeProxy >& aCode ) override; + }; + +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx new file mode 100644 index 000000000000..71c70c641b30 --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.cxx @@ -0,0 +1,159 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "MNSFolders.hxx" + +#ifdef UNIX +#include <string.h> +#endif // End UNIX + +#ifdef _WIN32 +#if !defined WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif +#include <windows.h> +#include <stdlib.h> +#include <shlobj.h> +#include <objidl.h> +#endif // End _WIN32 +#include <osl/security.hxx> +#include <osl/file.hxx> +#include <osl/thread.h> + +using namespace ::com::sun::star::mozilla; + +namespace +{ + + OUString lcl_getUserDataDirectory() + { + ::osl::Security aSecurity; + OUString aConfigPath; + + #if defined(_WIN32) || defined(MACOSX) + aSecurity.getConfigDir( aConfigPath ); + #else + //This is to find the dir under which .mozilla/.thunderbird is created. + //mozilla doesn't honour XDG_CONFIG_HOME, so raw home dir required here + //not xdg-config dir + aSecurity.getHomeDir( aConfigPath ); + #endif + + return aConfigPath + "/"; + } + + + const size_t NB_PRODUCTS = 3; + const size_t NB_CANDIDATES = 4; + + // The order (index) of entries in DefaultProductDir and + // ProductRootEnvironmentVariable *must* match the constants + // (minus 1) in offapi/com/sun/star/mozilla/MozillaProductType.idl + // DO NOT CHANGE THE ORDER; ADD ONLY TO THE END + const char* DefaultProductDir[NB_PRODUCTS][NB_CANDIDATES] = + { + #if defined(_WIN32) + { "Mozilla/SeaMonkey/", nullptr, nullptr, nullptr }, + { "Mozilla/Firefox/", nullptr, nullptr, nullptr }, + { "Thunderbird/", "Mozilla/Thunderbird/", nullptr, nullptr } + #elif defined(MACOSX) + { "../Mozilla/SeaMonkey/", nullptr, nullptr, nullptr }, + { "Firefox/", nullptr, nullptr, nullptr }, + { "../Thunderbird/", nullptr, nullptr, nullptr } + #else + { ".mozilla/seamonkey/", nullptr, nullptr, nullptr }, + { ".mozilla/firefox/", nullptr, nullptr, nullptr }, + { ".thunderbird/", ".mozilla-thunderbird/", ".mozilla/thunderbird/", ".icedove/" } + #endif + }; + + const char* ProductRootEnvironmentVariable[NB_PRODUCTS] = + { + "MOZILLA_PROFILE_ROOT", + "MOZILLA_FIREFOX_PROFILE_ROOT", + "MOZILLA_THUNDERBIRD_PROFILE_ROOT", + }; + + + OUString const & lcl_guessProfileRoot( MozillaProductType _product ) + { + size_t productIndex = static_cast<int>(_product) - 1; + + static OUString s_productDirectories[NB_PRODUCTS]; + + if ( s_productDirectories[ productIndex ].isEmpty() ) + { + OUString sProductPath; + + // check whether we have an environment variable which help us + const char* pProfileByEnv = getenv( ProductRootEnvironmentVariable[ productIndex ] ); + if ( pProfileByEnv ) + { + sProductPath = OUString( pProfileByEnv, rtl_str_getLength( pProfileByEnv ), osl_getThreadTextEncoding() ); + // assume that this is fine, no further checks + } + else + { + OUString sProductDirCandidate; + const char pProfileRegistry[] = "profiles.ini"; + + // check all possible candidates + for ( size_t i=0; i<NB_CANDIDATES; ++i ) + { + if ( nullptr == DefaultProductDir[ productIndex ][ i ] ) + break; + + sProductDirCandidate = lcl_getUserDataDirectory() + + OUString::createFromAscii( DefaultProductDir[ productIndex ][ i ] ); + + // check existence + ::osl::DirectoryItem aRegistryItem; + ::osl::FileBase::RC result = ::osl::DirectoryItem::get( sProductDirCandidate + pProfileRegistry, aRegistryItem ); + if ( result == ::osl::FileBase::E_None ) + { + ::osl::FileStatus aStatus( osl_FileStatus_Mask_Validate ); + result = aRegistryItem.getFileStatus( aStatus ); + if ( result == ::osl::FileBase::E_None ) + { + // the registry file exists + break; + } + } + } + + ::osl::FileBase::getSystemPathFromFileURL( sProductDirCandidate, sProductPath ); + } + + s_productDirectories[ productIndex ] = sProductPath; + } + + return s_productDirectories[ productIndex ]; + } +} + + +OUString getRegistryDir(MozillaProductType product) +{ + if (product == MozillaProductType_Default) + return OUString(); + + return lcl_guessProfileRoot( product ); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx new file mode 100644 index 000000000000..90674a0f4e62 --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MNSFolders.hxx @@ -0,0 +1,28 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <com/sun/star/mozilla/MozillaProductType.hpp> + +#include <rtl/ustring.hxx> + +OUString getRegistryDir(css::mozilla::MozillaProductType product); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx new file mode 100644 index 000000000000..a146d0c09680 --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "MNSINIParser.hxx" +#include <com/sun/star/io/IOException.hpp> +#include <osl/file.h> +#include <rtl/byteseq.hxx> +#include <sal/log.hxx> +#include <o3tl/string_view.hxx> + +IniParser::IniParser(OUString const & rIniName) +{ + OUString iniUrl; + if (osl_File_E_None != osl_getFileURLFromSystemPath(rIniName.pData, &iniUrl.pData)) + return; + + + oslFileHandle handle=nullptr; + oslFileError fileError = osl_File_E_INVAL; + try{ + if (!iniUrl.isEmpty()) + fileError = osl_openFile(iniUrl.pData, &handle, osl_File_OpenFlag_Read); + } + catch(const css::io::IOException&) + { + SAL_WARN("connectivity.mozab", "couldn't open file: " << iniUrl ); + } + + if (osl_File_E_None == fileError) + { + rtl::ByteSequence seq; + sal_uInt64 nSize = 0; + + osl_getFileSize(handle, &nSize); + OUString sectionName( "no name section" ); + while (true) + { + sal_uInt64 nPos; + if (osl_File_E_None != osl_getFilePos(handle, &nPos) || nPos >= nSize) + break; + if (osl_File_E_None != osl_readLine(handle, reinterpret_cast<sal_Sequence **>(&seq))) + break; + OString line(reinterpret_cast<const char *>(seq.getConstArray()), seq.getLength() ); + sal_Int32 nIndex = line.indexOf('='); + if (nIndex >= 1) + { + ini_Section *aSection = &mAllSection[sectionName]; + struct ini_NameValue nameValue; + nameValue.sName = OStringToOUString( + o3tl::trim(line.subView(0,nIndex)), RTL_TEXTENCODING_ASCII_US ); + nameValue.sValue = OStringToOUString( + o3tl::trim(line.subView(nIndex+1)), RTL_TEXTENCODING_UTF8 ); + + aSection->vVector.push_back(nameValue); + + } + else + { + sal_Int32 nIndexStart = line.indexOf('['); + sal_Int32 nIndexEnd = line.indexOf(']'); + if ( nIndexEnd > nIndexStart && nIndexStart >=0) + { + sectionName = OStringToOUString( + o3tl::trim(line.subView(nIndexStart + 1,nIndexEnd - nIndexStart -1)), RTL_TEXTENCODING_ASCII_US ); + if (sectionName.isEmpty()) + sectionName = "no name section"; + } + } + } + osl_closeFile(handle); + } + else + { + SAL_INFO("connectivity.mozab", "couldn't open file: " << iniUrl ); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.hxx b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.hxx new file mode 100644 index 000000000000..27746364a33a --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.hxx @@ -0,0 +1,54 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <rtl/ustring.hxx> + +#include <map> +#include <vector> + +struct ini_NameValue +{ + OUString sName; + OUString sValue; +}; + +typedef std::vector< + ini_NameValue +> NameValueVector; + +struct ini_Section +{ + NameValueVector vVector; +}; +typedef std::map<OUString, + ini_Section + >IniSectionMap; + + +class IniParser +{ + IniSectionMap mAllSection; +public: + IniSectionMap& getAllSection() { return mAllSection; } + /// @throws css::io::IOException + explicit IniParser(OUString const & rIniName); +}; + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx new file mode 100644 index 000000000000..804c8ccc66d8 --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx @@ -0,0 +1,212 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + + +#include <utility> + +#include "MNSProfileDiscover.hxx" +#include "MNSFolders.hxx" +#include "MNSINIParser.hxx" + +namespace connectivity::mozab +{ + ProfileStruct::ProfileStruct() + { + } + + ProfileStruct::ProfileStruct(OUString aProfileName, + OUString aProfilePath) + : profileName(std::move(aProfileName)) + , profilePath(std::move(aProfilePath)) + { + } + + const OUString& ProfileStruct::getProfilePath() const + { + return profilePath; + } + + ProfileAccess::~ProfileAccess() + { + } + + ProfileAccess::ProfileAccess() + { + LoadProductsInfo(); + } + + void ProfileAccess::LoadProductsInfo() + { + //tdf#39279: LO should search Thunderbird first then Seamonkey and finally Firefox + //load thunderbird profiles to m_ProductProfileList + LoadXPToolkitProfiles(MozillaProductType_Thunderbird); + + //load SeaMonkey 2 profiles to m_ProductProfileList + LoadXPToolkitProfiles(MozillaProductType_Mozilla); + + //load firefox profiles to m_ProductProfileList + //firefox profile does not contain address book, but maybe others need them + LoadXPToolkitProfiles(MozillaProductType_Firefox); + } + //Thunderbird and firefox profiles are saved in profiles.ini + void ProfileAccess::LoadXPToolkitProfiles(MozillaProductType product) + { + sal_Int32 index=static_cast<sal_Int32>(product); + ProductStruct &rProduct = m_ProductProfileList[index]; + + OUString regDir = getRegistryDir(product); + OUString profilesIni = regDir + "profiles.ini"; + IniParser parser( profilesIni ); + IniSectionMap &rAllSection = parser.getAllSection(); + + for(auto& rSection : rAllSection) + { + ini_Section *aSection = &rSection.second; + OUString profileName; + OUString profilePath; + OUString sIsRelative; + OUString sIsDefault; + + for(auto& rValue : aSection->vVector) + { + struct ini_NameValue * aValue = &rValue; + if ( aValue->sName == "Name" ) + { + profileName = aValue->sValue; + } + else if ( aValue->sName == "IsRelative" ) + { + sIsRelative = aValue->sValue; + } + else if ( aValue->sName == "Path" ) + { + profilePath = aValue->sValue; + } + else if ( aValue->sName == "Default" ) + { + sIsDefault = aValue->sValue; + } + } + if (!(profileName.isEmpty() && profilePath.isEmpty())) + { + sal_Int32 isRelative = 0; + if (!sIsRelative.isEmpty()) + { + isRelative = sIsRelative.toInt32(); + } + + OUString fullProfilePath; + if(isRelative) + { + fullProfilePath = regDir + profilePath; + } + else + { + fullProfilePath = profilePath; + } + + rProduct.mProfileList[profileName] = ProfileStruct(profileName,fullProfilePath); + + sal_Int32 isDefault = 0; + if (!sIsDefault.isEmpty()) + { + isDefault = sIsDefault.toInt32(); + } + if (isDefault) + rProduct.mCurrentProfileName = profileName; + + } + + // Depending on TB versions, some generate "default" profile + // others "default-release" profile + // See https://support.mozilla.org/gl/questions/1264072 + // for some background info (the link quotes Firefox but it seems + // the same for TB). + if (profileName == "default-release") + { + rProduct.mCurrentProfileName = profileName; + break; + } + } + } + + OUString ProfileAccess::getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName ) + { + sal_Int32 index=static_cast<sal_Int32>(product); + ProductStruct &rProduct = m_ProductProfileList[index]; + if (rProduct.mProfileList.empty() || rProduct.mProfileList.find(profileName) == rProduct.mProfileList.end()) + { + //Profile not found + return OUString(); + } + else + return rProduct.mProfileList[profileName].getProfilePath(); + } + + ::sal_Int32 ProfileAccess::getProfileCount( css::mozilla::MozillaProductType product) + { + sal_Int32 index=static_cast<sal_Int32>(product); + ProductStruct &rProduct = m_ProductProfileList[index]; + return static_cast< ::sal_Int32 >(rProduct.mProfileList.size()); + } + ::sal_Int32 ProfileAccess::getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list ) + { + sal_Int32 index=static_cast<sal_Int32>(product); + ProductStruct &rProduct = m_ProductProfileList[index]; + list.realloc(static_cast<sal_Int32>(rProduct.mProfileList.size())); + auto listRange = list.getArray(); + sal_Int32 i=0; + for(const auto& rEntry : rProduct.mProfileList) + { + const ProfileStruct& rProfile = rEntry.second; + listRange[i] = rProfile.getProfileName(); + i++; + } + + return static_cast< ::sal_Int32 >(rProduct.mProfileList.size()); + } + + OUString ProfileAccess::getDefaultProfile( css::mozilla::MozillaProductType product ) + { + sal_Int32 index=static_cast<sal_Int32>(product); + ProductStruct &rProduct = m_ProductProfileList[index]; + if (!rProduct.mCurrentProfileName.isEmpty()) + { + //default profile set in mozilla registry + return rProduct.mCurrentProfileName; + } + if (rProduct.mProfileList.empty()) + { + //there are not any profiles + return OUString(); + } + const ProfileStruct& rProfile = (*rProduct.mProfileList.begin()).second; + return rProfile.getProfileName(); + } + + bool ProfileAccess::getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName ) + { + sal_Int32 index=static_cast<sal_Int32>(product); + ProductStruct &rProduct = m_ProductProfileList[index]; + return rProduct.mProfileList.find(profileName) != rProduct.mProfileList.end(); + } +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx new file mode 100644 index 000000000000..132ac06c003c --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx @@ -0,0 +1,80 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <sal/types.h> +#include <com/sun/star/mozilla/MozillaProductType.hpp> +#include <com/sun/star/uno/Sequence.hxx> +#include <rtl/ustring.hxx> + +#include <vector> +#include <map> + +using namespace com::sun::star::mozilla; +namespace connectivity::mozab { class ProfileStruct; } + +typedef std::map<OUString, ::connectivity::mozab::ProfileStruct> ProfileList; +namespace connectivity::mozab + { + class ProfileStruct + { + public: + ProfileStruct(); + ProfileStruct(OUString aProfileName, OUString aProfilePath); + const OUString& getProfileName() const { return profileName;} + const OUString& getProfilePath() const; + private: + OUString profileName; + OUString profilePath; + }; + + class ProductStruct + { + public: + OUString mCurrentProfileName; + ProfileList mProfileList; + }; + + //Used to query profiles information + class ProfileAccess final + { + public: + ~ProfileAccess(); + ProfileAccess(); + /// @throws css::uno::RuntimeException + OUString getProfilePath( css::mozilla::MozillaProductType product, const OUString& profileName ); + /// @throws css::uno::RuntimeException + ::sal_Int32 getProfileCount( css::mozilla::MozillaProductType product ); + /// @throws css::uno::RuntimeException + ::sal_Int32 getProfileList( css::mozilla::MozillaProductType product, css::uno::Sequence< OUString >& list ); + /// @throws css::uno::RuntimeException + OUString getDefaultProfile( css::mozilla::MozillaProductType product ); + /// @throws css::uno::RuntimeException + bool getProfileExists( css::mozilla::MozillaProductType product, const OUString& profileName ); + private: + ProductStruct m_ProductProfileList[4]; + void LoadProductsInfo(); + void LoadXPToolkitProfiles(MozillaProductType product); + }; + +} + + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mozab/bootstrap/README b/connectivity/source/drivers/mozab/bootstrap/README new file mode 100644 index 000000000000..cea68d86cc56 --- /dev/null +++ b/connectivity/source/drivers/mozab/bootstrap/README @@ -0,0 +1,3 @@ +this provides com.sun.star.mozilla.MozillaBootstrap which is used by at least +xmlsecurity/source/xmlsec/nss/nssinitializer.cxx to find a user's +firefox/thunderbird profile to use its certs diff --git a/connectivity/source/drivers/mysqlc/DataAccess.xcu b/connectivity/source/drivers/mozab/bootstrap/mozbootstrap.component index 2b652ec87649..bfc0afe389ef 100644 --- a/connectivity/source/drivers/mysqlc/DataAccess.xcu +++ b/connectivity/source/drivers/mozab/bootstrap/mozbootstrap.component @@ -1,3 +1,4 @@ +<?xml version="1.0" encoding="UTF-8"?> <!-- * This file is part of the LibreOffice project. * @@ -15,21 +16,11 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . --> -<oor:node xmlns:oor="http://openoffice.org/2001/registry" xmlns:xs="http://www.w3.org/2001/XMLSchema" oor:name="DataAccess" oor:package="org.openoffice.Office"> - <node oor:name="UserDefinedDriverSettings"> - <node oor:name="org.openoffice.comp.connectivity.mysql_native.Driver" oor:op="replace"> - <prop oor:name="DriverName"> - <value>org.openoffice.comp.connectivity.mysql_native.Driver</value> - </prop> - <prop oor:name="DriverPageDisplayName"> - <value>MySQL native driver</value> - </prop> - <prop oor:name="DriverTypeDisplayName"> - <value>MySQL native driver</value> - </prop> - <prop oor:name="DriverDsnPrefix"> - <value>sdbc:mysqlc:</value> - </prop> - </node> - </node> -</oor:node> + +<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.comp.mozilla.MozillaBootstrap" + constructor="connectivity_moz_MozillaBootstrap_get_implementation" single-instance="true"> + <service name="com.sun.star.mozilla.MozillaBootstrap"/> + </implementation> +</component> diff --git a/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx b/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx index ad98bfa1a7fa..de9ffd7127d5 100644 --- a/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx @@ -29,11 +29,8 @@ using namespace connectivity; using namespace connectivity::mysql; using namespace connectivity::sdbcx; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OMySQLCatalog::OMySQLCatalog(const Reference<XConnection>& _xConnection) : OCatalog(_xConnection) @@ -52,10 +49,9 @@ void OMySQLCatalog::refreshTables() { ::std::vector<OUString> aVector; - Sequence<OUString> sTableTypes(3); - sTableTypes[0] = "VIEW"; - sTableTypes[1] = "TABLE"; - sTableTypes[2] = "%"; // just to be sure to include anything else... + Sequence<OUString> sTableTypes{ + "VIEW", "TABLE", "%" + }; // this last one just to be sure to include anything else... refreshObjects(sTableTypes, aVector); diff --git a/connectivity/source/drivers/mysql_jdbc/YColumns.cxx b/connectivity/source/drivers/mysql_jdbc/YColumns.cxx index 54beb77ca061..910b01e4fb11 100644 --- a/connectivity/source/drivers/mysql_jdbc/YColumns.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YColumns.cxx @@ -26,10 +26,6 @@ using namespace connectivity::sdbcx; using namespace connectivity; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; -using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OMySQLColumns::OMySQLColumns(::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector<OUString>& _rVector) diff --git a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx index d575ad874995..e4e338ee0b31 100644 --- a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx @@ -17,8 +17,13 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <sal/config.h> + +#include <string_view> + #include <mysql/YDriver.hxx> #include <mysql/YCatalog.hxx> +#include <o3tl/string_view.hxx> #include <comphelper/namedvaluecollection.hxx> #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> @@ -44,8 +49,8 @@ namespace { OUString getJavaDriverClass(css::uno::Sequence<css::beans::PropertyValue> const& info) { - return comphelper::NamedValueCollection(info).getOrDefault("JavaDriverClass", - OUString("com.mysql.jdbc.Driver")); + return comphelper::NamedValueCollection::getOrDefault(info, u"JavaDriverClass", + OUString("com.mysql.jdbc.Driver")); } } @@ -93,11 +98,14 @@ enum class T_DRIVERTYPE Native }; -bool isOdbcUrl(const OUString& _sUrl) { return _sUrl.startsWith("sdbc:mysql:odbc:"); } +bool isOdbcUrl(std::u16string_view _sUrl) { return o3tl::starts_with(_sUrl, u"sdbc:mysql:odbc:"); } -bool isNativeUrl(const OUString& _sUrl) { return _sUrl.startsWith("sdbc:mysql:mysqlc:"); } +bool isNativeUrl(std::u16string_view _sUrl) +{ + return o3tl::starts_with(_sUrl, u"sdbc:mysql:mysqlc:"); +} -T_DRIVERTYPE lcl_getDriverType(const OUString& _sUrl) +T_DRIVERTYPE lcl_getDriverType(std::u16string_view _sUrl) { T_DRIVERTYPE eRet = T_DRIVERTYPE::Jdbc; if (isOdbcUrl(_sUrl)) @@ -107,9 +115,9 @@ T_DRIVERTYPE lcl_getDriverType(const OUString& _sUrl) return eRet; } -OUString transformUrl(const OUString& _sUrl) +OUString transformUrl(std::u16string_view _sUrl) { - OUString sNewUrl = _sUrl.copy(11); + OUString sNewUrl(_sUrl.substr(11)); if (isOdbcUrl(_sUrl)) sNewUrl = "sdbc:" + sNewUrl; else if (isNativeUrl(_sUrl)) @@ -150,36 +158,30 @@ Sequence<PropertyValue> lcl_convertProperties(T_DRIVERTYPE _eType, if (_eType == T_DRIVERTYPE::Odbc) { - aProps.push_back(PropertyValue("Silent", 0, makeAny(true), PropertyState_DIRECT_VALUE)); - aProps.push_back(PropertyValue("PreventGetVersionColumns", 0, makeAny(true), - PropertyState_DIRECT_VALUE)); + aProps.emplace_back("Silent", 0, Any(true), PropertyState_DIRECT_VALUE); + aProps.emplace_back("PreventGetVersionColumns", 0, Any(true), PropertyState_DIRECT_VALUE); } else if (_eType == T_DRIVERTYPE::Jdbc) { if (!jdc) { - aProps.push_back(PropertyValue("JavaDriverClass", 0, - makeAny(OUString("com.mysql.jdbc.Driver")), - PropertyState_DIRECT_VALUE)); + aProps.emplace_back("JavaDriverClass", 0, Any(OUString("com.mysql.jdbc.Driver")), + PropertyState_DIRECT_VALUE); } } else { - aProps.push_back( - PropertyValue("PublicConnectionURL", 0, makeAny(_sUrl), PropertyState_DIRECT_VALUE)); + aProps.emplace_back("PublicConnectionURL", 0, Any(_sUrl), PropertyState_DIRECT_VALUE); } - aProps.push_back( - PropertyValue("IsAutoRetrievingEnabled", 0, makeAny(true), PropertyState_DIRECT_VALUE)); - aProps.push_back(PropertyValue("AutoRetrievingStatement", 0, - makeAny(OUString("SELECT LAST_INSERT_ID()")), - PropertyState_DIRECT_VALUE)); - aProps.push_back( - PropertyValue("ParameterNameSubstitution", 0, makeAny(true), PropertyState_DIRECT_VALUE)); + aProps.emplace_back("IsAutoRetrievingEnabled", 0, Any(true), PropertyState_DIRECT_VALUE); + aProps.emplace_back("AutoRetrievingStatement", 0, Any(OUString("SELECT LAST_INSERT_ID()")), + PropertyState_DIRECT_VALUE); + aProps.emplace_back("ParameterNameSubstitution", 0, Any(true), PropertyState_DIRECT_VALUE); return Sequence<PropertyValue>(aProps.data(), aProps.size()); } } -Reference<XDriver> ODriverDelegator::loadDriver(const OUString& url, +Reference<XDriver> ODriverDelegator::loadDriver(std::u16string_view url, const Sequence<PropertyValue>& info) { Reference<XDriver> xDriver; @@ -224,8 +226,8 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url, Sequence<PropertyValue> aConvertedProperties = lcl_convertProperties(eType, info, url); if (eType == T_DRIVERTYPE::Jdbc) { - ::comphelper::NamedValueCollection aSettings(info); - OUString sIanaName = aSettings.getOrDefault("CharSet", OUString()); + OUString sIanaName = ::comphelper::NamedValueCollection::getOrDefault( + info, u"CharSet", OUString()); if (!sIanaName.isEmpty()) { ::dbtools::OCharsetMap aLookupIanaName; @@ -236,7 +238,7 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url, OUString sAdd; if (RTL_TEXTENCODING_UTF8 == (*aLookup).getEncoding()) { - static const char s_sCharSetOp[] = "useUnicode=true&"; + static constexpr OUString s_sCharSetOp = u"useUnicode=true&"_ustr; if (!sCuttedUrl.matchIgnoreAsciiCase(s_sCharSetOp)) { sAdd = s_sCharSetOp; @@ -255,13 +257,12 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url, if (xConnection.is()) { // now we have to set the URL to get the correct answer for metadata()->getURL() - auto pMetaConnection - = comphelper::getUnoTunnelImplementation<OMetaConnection>(xConnection); + auto pMetaConnection = comphelper::getFromUnoTunnel<OMetaConnection>(xConnection); if (pMetaConnection) pMetaConnection->setURL(url); - m_aConnections.push_back( - TWeakPair(WeakReferenceHelper(xConnection), - TWeakConnectionPair(WeakReferenceHelper(), pMetaConnection))); + m_aConnections.emplace_back( + WeakReferenceHelper(xConnection), + TWeakConnectionPair(WeakReferenceHelper(), pMetaConnection)); } } } @@ -280,34 +281,30 @@ sal_Bool SAL_CALL ODriverDelegator::acceptsURL(const OUString& url) Sequence<DriverPropertyInfo> SAL_CALL ODriverDelegator::getPropertyInfo(const OUString& url, const Sequence<PropertyValue>& info) { - std::vector<DriverPropertyInfo> aDriverInfo; if (!acceptsURL(url)) return Sequence<DriverPropertyInfo>(); - Sequence<OUString> aBoolean(2); - aBoolean[0] = "0"; - aBoolean[1] = "1"; + Sequence<OUString> aBoolean{ "0", "1" }; - aDriverInfo.push_back(DriverPropertyInfo("CharSet", "CharSet of the database.", false, - OUString(), Sequence<OUString>())); - aDriverInfo.push_back(DriverPropertyInfo("SuppressVersionColumns", - "Display version columns (when available).", false, - "0", aBoolean)); + std::vector<DriverPropertyInfo> aDriverInfo{ + { "CharSet", "CharSet of the database.", false, {}, {} }, + { "SuppressVersionColumns", "Display version columns (when available).", false, "0", + aBoolean } + }; const T_DRIVERTYPE eType = lcl_getDriverType(url); if (eType == T_DRIVERTYPE::Jdbc) { - aDriverInfo.push_back(DriverPropertyInfo("JavaDriverClass", "The JDBC driver class name.", - true, getJavaDriverClass(info), - Sequence<OUString>())); + aDriverInfo.emplace_back("JavaDriverClass", "The JDBC driver class name.", true, + getJavaDriverClass(info), Sequence<OUString>()); } else if (eType == T_DRIVERTYPE::Native) { - aDriverInfo.push_back(DriverPropertyInfo( - "LocalSocket", "The file path of a socket to connect to a local MySQL server.", false, - OUString(), Sequence<OUString>())); - aDriverInfo.push_back(DriverPropertyInfo( - "NamedPipe", "The name of a pipe to connect to a local MySQL server.", false, - OUString(), Sequence<OUString>())); + aDriverInfo.emplace_back("LocalSocket", + "The file path of a socket to connect to a local MySQL server.", + false, OUString(), Sequence<OUString>()); + aDriverInfo.emplace_back("NamedPipe", + "The name of a pipe to connect to a local MySQL server.", false, + OUString(), Sequence<OUString>()); } return Sequence<DriverPropertyInfo>(aDriverInfo.data(), aDriverInfo.size()); @@ -324,7 +321,7 @@ ODriverDelegator::getDataDefinitionByConnection(const Reference<XConnection>& co checkDisposed(ODriverDelegator_BASE::rBHelper.bDisposed); Reference<XTablesSupplier> xTab; - auto pConnection = comphelper::getUnoTunnelImplementation<OMetaConnection>(connection); + auto pConnection = comphelper::getFromUnoTunnel<OMetaConnection>(connection); if (pConnection) { TWeakPairVector::iterator i diff --git a/connectivity/source/drivers/mysql_jdbc/YTable.cxx b/connectivity/source/drivers/mysql_jdbc/YTable.cxx index 374825d32abb..b79b3f231bbf 100644 --- a/connectivity/source/drivers/mysql_jdbc/YTable.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YTable.cxx @@ -19,7 +19,6 @@ #include <mysql/YTable.hxx> #include <mysql/YTables.hxx> -#include <cppuhelper/typeprovider.hxx> #include <com/sun/star/beans/PropertyAttribute.hpp> #include <com/sun/star/sdbcx/Privilege.hpp> #include <comphelper/property.hxx> @@ -117,21 +116,6 @@ sdbcx::OCollection* OMySQLTable::createIndexes(const ::std::vector<OUString>& _r return new OIndexesHelper(this, m_aMutex, _rNames); } -Sequence<sal_Int8> OMySQLTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OMySQLTable::getSomething(const Sequence<sal_Int8>& rId) -{ - return (isUnoTunnelId<OMySQLTable>(rId)) ? reinterpret_cast<sal_Int64>(this) - : OTable_TYPEDEF::getSomething(rId); -} - // XAlterTable void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName, const Reference<XPropertySet>& descriptor) @@ -198,9 +182,9 @@ void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName, { if (sTypeName.indexOf(s_sAutoIncrement) == -1) { - sTypeName += OUStringLiteral(u" ") + s_sAutoIncrement; + sTypeName += OUString::Concat(" ") + s_sAutoIncrement; descriptor->setPropertyValue(rProp.getNameByIndex(PROPERTY_ID_TYPENAME), - makeAny(sTypeName)); + Any(sTypeName)); } } else @@ -212,7 +196,7 @@ void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName, { sTypeName = sTypeName.copy(0, nIndex); descriptor->setPropertyValue(rProp.getNameByIndex(PROPERTY_ID_TYPENAME), - makeAny(sTypeName)); + Any(sTypeName)); } } } @@ -268,14 +252,13 @@ void OMySQLTable::alterColumnType(sal_Int32 nNewType, const OUString& _rColName, OUString sSql = getAlterTableColumnPart() + " CHANGE " + ::dbtools::quoteName(sQuote, _rColName) + " "; - OColumn* pColumn = new OColumn(true); - Reference<XPropertySet> xProp = pColumn; - ::comphelper::copyProperties(_xDescriptor, xProp); - xProp->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE), - makeAny(nNewType)); + rtl::Reference<OColumn> pColumn = new OColumn(true); + ::comphelper::copyProperties(_xDescriptor, pColumn); + pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE), + Any(nNewType)); sSql += OTables::adjustSQL(::dbtools::createStandardColumnPart( - xProp, getConnection(), static_cast<OTables*>(m_pTables), getTypeCreatePattern())); + pColumn, getConnection(), static_cast<OTables*>(m_pTables), getTypeCreatePattern())); executeStatement(sSql); } @@ -315,7 +298,7 @@ void OMySQLTable::executeStatement(const OUString& _rStatement) { OUString sSQL = _rStatement; if (sSQL.endsWith(",")) - sSQL = sSQL.replaceAt(sSQL.getLength() - 1, 1, ")"); + sSQL = sSQL.replaceAt(sSQL.getLength() - 1, 1, u")"); Reference<XStatement> xStmt = getConnection()->createStatement(); if (xStmt.is()) diff --git a/connectivity/source/drivers/mysql_jdbc/YTables.cxx b/connectivity/source/drivers/mysql_jdbc/YTables.cxx index e21e05fb2914..aa527cf0cc30 100644 --- a/connectivity/source/drivers/mysql_jdbc/YTables.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YTables.cxx @@ -37,7 +37,6 @@ using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace dbtools; sdbcx::ObjectType OTables::createObject(const OUString& _rName) @@ -46,10 +45,9 @@ sdbcx::ObjectType OTables::createObject(const OUString& _rName) ::dbtools::qualifiedNameComponents(m_xMetaData, _rName, sCatalog, sSchema, sTable, ::dbtools::EComposeRule::InDataManipulation); - Sequence<OUString> sTableTypes(3); - sTableTypes[0] = "VIEW"; - sTableTypes[1] = "TABLE"; - sTableTypes[2] = "%"; // just to be sure to include anything else... + Sequence<OUString> sTableTypes{ + "VIEW", "TABLE", "%" + }; // this last one just to be sure to include anything else... Any aCatalog; if (!sCatalog.isEmpty()) @@ -67,10 +65,9 @@ sdbcx::ObjectType OTables::createObject(const OUString& _rName) | Privilege::UPDATE | Privilege::INSERT | Privilege::SELECT; - OMySQLTable* pRet = new OMySQLTable( - this, static_cast<OMySQLCatalog&>(m_rParent).getConnection(), sTable, - xRow->getString(4), xRow->getString(5), sSchema, sCatalog, nPrivileges); - xRet = pRet; + xRet = new OMySQLTable(this, static_cast<OMySQLCatalog&>(m_rParent).getConnection(), + sTable, xRow->getString(4), xRow->getString(5), sSchema, + sCatalog, nPrivileges); } ::comphelper::disposeComponent(xResult); } @@ -155,7 +152,7 @@ OUString OTables::adjustSQL(const OUString& _sSql) sal_Int32 nPos = nIndex + strlen(s_sUNSIGNED); OUString sNewUnsigned(sSQL.copy(nPos, nParen - nPos + 1)); sSQL = sSQL.replaceAt(nIndex, strlen(s_sUNSIGNED) + sNewUnsigned.getLength(), - sNewUnsigned + s_sUNSIGNED); + rtl::Concat2View(sNewUnsigned + s_sUNSIGNED)); nIndex = sSQL.indexOf(s_sUNSIGNED, nIndex + strlen(s_sUNSIGNED) + sNewUnsigned.getLength()); } return sSQL; @@ -180,10 +177,10 @@ void OTables::appendNew(const OUString& _rsNewTable) insertElement(_rsNewTable, nullptr); // notify our container listeners - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any()); - OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any()); + OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) - static_cast<XContainerListener*>(aListenerLoop.next())->elementInserted(aEvent); + aListenerLoop.next()->elementInserted(aEvent); } OUString OTables::getNameForObject(const sdbcx::ObjectType& _xObject) diff --git a/connectivity/source/drivers/mysql_jdbc/YUser.cxx b/connectivity/source/drivers/mysql_jdbc/YUser.cxx index b683fe2b2757..ec3a6265967f 100644 --- a/connectivity/source/drivers/mysql_jdbc/YUser.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YUser.cxx @@ -27,6 +27,7 @@ #include <TConnection.hxx> #include <strings.hrc> #include <comphelper/types.hxx> +#include <utility> using namespace connectivity; using namespace connectivity::mysql; @@ -37,17 +38,17 @@ using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; -OMySQLUser::OMySQLUser(const css::uno::Reference<css::sdbc::XConnection>& _xConnection) +OMySQLUser::OMySQLUser(css::uno::Reference<css::sdbc::XConnection> _xConnection) : connectivity::sdbcx::OUser(true) - , m_xConnection(_xConnection) + , m_xConnection(std::move(_xConnection)) { construct(); } -OMySQLUser::OMySQLUser(const css::uno::Reference<css::sdbc::XConnection>& _xConnection, +OMySQLUser::OMySQLUser(css::uno::Reference<css::sdbc::XConnection> _xConnection, const OUString& Name) : connectivity::sdbcx::OUser(Name, true) - , m_xConnection(_xConnection) + , m_xConnection(std::move(_xConnection)) { construct(); } diff --git a/connectivity/source/drivers/mysql_jdbc/YUsers.cxx b/connectivity/source/drivers/mysql_jdbc/YUsers.cxx index 17fc788179c1..b096310acd4c 100644 --- a/connectivity/source/drivers/mysql_jdbc/YUsers.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YUsers.cxx @@ -23,6 +23,7 @@ #include <comphelper/types.hxx> #include <connectivity/dbtools.hxx> #include <TConnection.hxx> +#include <utility> using namespace ::comphelper; using namespace connectivity; @@ -30,15 +31,13 @@ using namespace connectivity::mysql; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; OUsers::OUsers(::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector<OUString>& _rVector, - const css::uno::Reference<css::sdbc::XConnection>& _xConnection, + css::uno::Reference<css::sdbc::XConnection> _xConnection, connectivity::sdbcx::IRefreshableUsers* _pParent) : sdbcx::OCollection(_rParent, true, _rMutex, _rVector) - , m_xConnection(_xConnection) + , m_xConnection(std::move(_xConnection)) , m_pParent(_pParent) { } @@ -50,11 +49,7 @@ sdbcx::ObjectType OUsers::createObject(const OUString& _rName) void OUsers::impl_refresh() { m_pParent->refreshUsers(); } -Reference<XPropertySet> OUsers::createDescriptor() -{ - OUserExtend* pNew = new OUserExtend(m_xConnection); - return pNew; -} +Reference<XPropertySet> OUsers::createDescriptor() { return new OUserExtend(m_xConnection); } // XAppend sdbcx::ObjectType OUsers::appendObject(const OUString& _rForName, diff --git a/connectivity/source/drivers/mysql_jdbc/YViews.cxx b/connectivity/source/drivers/mysql_jdbc/YViews.cxx index 4bdeca9596b3..e9531df6950f 100644 --- a/connectivity/source/drivers/mysql_jdbc/YViews.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YViews.cxx @@ -32,10 +32,7 @@ using namespace connectivity; using namespace connectivity::mysql; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::sdbc; -using namespace ::com::sun::star::container; -using namespace ::com::sun::star::lang; using namespace dbtools; typedef connectivity::sdbcx::OCollection OCollection_TYPE; @@ -59,7 +56,7 @@ void OViews::disposing() Reference<XPropertySet> OViews::createDescriptor() { Reference<XConnection> xConnection = static_cast<OMySQLCatalog&>(m_rParent).getConnection(); - connectivity::sdbcx::OView* pNew + rtl::Reference<connectivity::sdbcx::OView> pNew = new connectivity::sdbcx::OView(true, xConnection->getMetaData()); return pNew; } diff --git a/connectivity/source/drivers/mysqlc/mysqlc_catalog.cxx b/connectivity/source/drivers/mysqlc/mysqlc_catalog.cxx new file mode 100644 index 000000000000..d72ab1f65d72 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_catalog.cxx @@ -0,0 +1,93 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "mysqlc_catalog.hxx" +#include "mysqlc_tables.hxx" +#include "mysqlc_views.hxx" +#include "mysqlc_users.hxx" +#include <com/sun/star/sdbc/XRow.hpp> +#include <comphelper/types.hxx> + +connectivity::mysqlc::Catalog::Catalog( + const css::uno::Reference<css::sdbc::XConnection>& rConnection) + : OCatalog(rConnection) + , m_xConnection(rConnection) +{ +} + +//----- OCatalog ------------------------------------------------------------- +void connectivity::mysqlc::Catalog::refreshTables() +{ + css::uno::Reference<css::sdbc::XResultSet> xTables + = m_xMetaData->getTables(css::uno::Any(), "%", "%", {}); + + if (!xTables.is()) + return; + + ::std::vector<OUString> aTableNames; + + fillNames(xTables, aTableNames); + + if (!m_pTables) + m_pTables.reset(new Tables(m_xConnection->getMetaData(), *this, m_aMutex, aTableNames)); + else + m_pTables->reFill(aTableNames); +} + +void connectivity::mysqlc::Catalog::refreshViews() +{ + css::uno::Reference<css::sdbc::XResultSet> xViews + = m_xMetaData->getTables(css::uno::Any(), "%", "%", { "VIEW" }); + + if (!xViews.is()) + return; + + ::std::vector<OUString> aViewNames; + + fillNames(xViews, aViewNames); + + if (!m_pViews) + m_pViews.reset(new Views(m_xConnection, *this, m_aMutex, aViewNames)); + else + m_pViews->reFill(aViewNames); +} + +//----- IRefreshableGroups --------------------------------------------------- +void connectivity::mysqlc::Catalog::refreshGroups() +{ + // TODO: implement me +} + +//----- IRefreshableUsers ---------------------------------------------------- +void connectivity::mysqlc::Catalog::refreshUsers() +{ + css::uno::Reference<css::sdbc::XStatement> statement = m_xConnection->createStatement(); + css::uno::Reference<css::sdbc::XResultSet> xUsers = statement->executeQuery( + "SELECT grantee FROM information_schema.user_privileges GROUP BY grantee"); + + if (!xUsers.is()) + return; + + ::std::vector<OUString> aUserNames; + + css::uno::Reference<css::sdbc::XRow> xRow(xUsers, css::uno::UNO_QUERY); + while (xUsers->next()) + { + aUserNames.push_back(xRow->getString(1)); + } + xRow.clear(); + ::comphelper::disposeComponent(xUsers); + + if (!m_pUsers) + m_pUsers.reset(new Users(m_xConnection->getMetaData(), *this, m_aMutex, aUserNames)); + else + m_pUsers->reFill(aUserNames); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_catalog.hxx b/connectivity/source/drivers/mysqlc/mysqlc_catalog.hxx new file mode 100644 index 000000000000..1bea18c7667b --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_catalog.hxx @@ -0,0 +1,38 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <sdbcx/VCatalog.hxx> + +namespace connectivity::mysqlc +{ +class Catalog : public ::connectivity::sdbcx::OCatalog +{ + css::uno::Reference<css::sdbc::XConnection> m_xConnection; + +public: + explicit Catalog(const css::uno::Reference<css::sdbc::XConnection>& rConnection); + + // OCatalog + virtual void refreshTables() override; + virtual void refreshViews() override; + + // IRefreshableGroups + virtual void refreshGroups() override; + + // IRefreshableUsers + virtual void refreshUsers() override; + + sdbcx::OCollection* getPrivateTables() const { return m_pTables.get(); } +}; + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_column.cxx b/connectivity/source/drivers/mysqlc/mysqlc_column.cxx new file mode 100644 index 000000000000..ceb7437386e6 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_column.cxx @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "mysqlc_column.hxx" + +#include <TConnection.hxx> + +connectivity::mysqlc::Column::Column() + : OColumn(true) // case sensitive +{ + construct(); +} + +void connectivity::mysqlc::Column::construct() +{ + m_sAutoIncrement = "auto_increment"; + registerProperty( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_AUTOINCREMENTCREATION), + PROPERTY_ID_AUTOINCREMENTCREATION, 0, &m_sAutoIncrement, + cppu::UnoType<decltype(m_sAutoIncrement)>::get()); +} + +::cppu::IPropertyArrayHelper* + connectivity::mysqlc::Column::createArrayHelper(sal_Int32 /*_nId*/) const +{ + return doCreateArrayHelper(); +} + +::cppu::IPropertyArrayHelper& SAL_CALL connectivity::mysqlc::Column::getInfoHelper() +{ + return *Column_PROP::getArrayHelper(isNew() ? 1 : 0); +} + +css::uno::Sequence<OUString> SAL_CALL connectivity::mysqlc::Column::getSupportedServiceNames() +{ + return { "com.sun.star.sdbcx.Column" }; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_column.hxx b/connectivity/source/drivers/mysqlc/mysqlc_column.hxx new file mode 100644 index 000000000000..f69ef1afcea7 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_column.hxx @@ -0,0 +1,32 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +#pragma once + +#include <connectivity/sdbcx/VColumn.hxx> + +namespace connectivity::mysqlc +{ +class Column; +typedef ::comphelper::OIdPropertyArrayUsageHelper<Column> Column_PROP; +class Column : public sdbcx::OColumn, public Column_PROP +{ + OUString m_sAutoIncrement; + +protected: + virtual ::cppu::IPropertyArrayHelper* createArrayHelper(sal_Int32 _nId) const override; + virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override; + +public: + Column(); + virtual void construct() override; + virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override; +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_columns.cxx b/connectivity/source/drivers/mysqlc/mysqlc_columns.cxx new file mode 100644 index 000000000000..b34b36b45cbe --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_columns.cxx @@ -0,0 +1,28 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "mysqlc_columns.hxx" +#include "mysqlc_column.hxx" + +connectivity::mysqlc::Columns::Columns(Table& rTable, osl::Mutex& rMutex, + const ::std::vector<OUString>& rVector) + : OColumnsHelper(rTable, + true, // case sensitivity + rMutex, rVector, + /*bUseHardRef*/ true) +{ + OColumnsHelper::setParent(&rTable); +} + +css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Columns::createDescriptor() +{ + return new Column; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_columns.hxx b/connectivity/source/drivers/mysqlc/mysqlc_columns.hxx new file mode 100644 index 000000000000..34230db37bb5 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_columns.hxx @@ -0,0 +1,29 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "mysqlc_table.hxx" + +#include <connectivity/TColumnsHelper.hxx> + +namespace connectivity::mysqlc +{ +class Columns : public ::connectivity::OColumnsHelper +{ +protected: + virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override; + +public: + Columns(Table& rTable, ::osl::Mutex& rMutex, const ::std::vector<OUString>& _rVector); +}; + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx b/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx index 600e131b89b1..269113383d8d 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_connection.cxx @@ -17,8 +17,10 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include "mysqlc_catalog.hxx" #include "mysqlc_connection.hxx" #include "mysqlc_databasemetadata.hxx" +#include <com/sun/star/sdbc/SQLException.hpp> #include "mysqlc_driver.hxx" #include "mysqlc_statement.hxx" @@ -27,20 +29,17 @@ #include <com/sun/star/beans/NamedValue.hpp> -#include <osl/diagnose.h> -#include <cppuhelper/supportsservice.hxx> +#include <comphelper/servicehelper.hxx> using namespace connectivity::mysqlc; using namespace com::sun::star::uno; using namespace com::sun::star::container; -using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; +using namespace com::sun::star::sdbcx; using ::osl::MutexGuard; -#define MYSQLC_URI_PREFIX "sdbc:mysqlc:" - namespace { void lcl_executeUpdate(MYSQL* pMySql, const OString& sql) @@ -53,6 +52,7 @@ void lcl_executeUpdate(MYSQL* pMySql, const OString& sql) OConnection::OConnection(MysqlCDriver& _rDriver) : OMetaConnection_BASE(m_aMutex) , m_mysql() + , m_xCatalog(nullptr) , m_xMetaData(nullptr) , m_xDriver(&_rDriver) { @@ -73,10 +73,7 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>& mysql_library_init(0, nullptr, nullptr); mysql_init(&m_mysql); - // use TCP as connection - mysql_protocol_type protocol = MYSQL_PROTOCOL_TCP; - mysql_options(&m_mysql, MYSQL_OPT_PROTOCOL, &protocol); - OString charset_name{ "utf8mb4" }; + OString charset_name{ "utf8mb4"_ostr }; mysql_options(&m_mysql, MYSQL_SET_CHARSET_NAME, charset_name.getStr()); sal_Int32 nIndex; @@ -90,7 +87,7 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>& // parse url. Url has the following format: // external server: sdbc:mysqlc:[hostname]:[port]/[dbname] - if (url.startsWith(MYSQLC_URI_PREFIX)) + if (url.startsWith("sdbc:mysqlc:")) { nIndex = 12; } @@ -164,15 +161,22 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>& OString pass_str = OUStringToOString(aPass, m_settings.encoding); OString schema_str = OUStringToOString(aDbName, m_settings.encoding); OString socket_str; + + // use TCP as connection by default + mysql_protocol_type protocol = MYSQL_PROTOCOL_TCP; if (unixSocketPassed) { socket_str = OUStringToOString(sUnixSocket, m_settings.encoding); + protocol = MYSQL_PROTOCOL_SOCKET; } else if (namedPipePassed) { socket_str = OUStringToOString(sNamedPipe, m_settings.encoding); + protocol = MYSQL_PROTOCOL_PIPE; } + mysql_options(&m_mysql, MYSQL_OPT_PROTOCOL, &protocol); + // flags can also be passed as last parameter if (!mysql_real_connect(&m_mysql, host_str.getStr(), user_str.getStr(), pass_str.getStr(), schema_str.getStr(), nPort, socket_str.getStr(), @@ -188,9 +192,8 @@ void OConnection::construct(const OUString& url, const Sequence<PropertyValue>& *this, OUString(), 0, Any()); } - lcl_executeUpdate(&m_mysql, - OString{ "SET session sql_mode='ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO'" }); - lcl_executeUpdate(&m_mysql, OString{ "SET NAMES utf8mb4" }); + lcl_executeUpdate(&m_mysql, "SET session sql_mode='ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO'"_ostr); + lcl_executeUpdate(&m_mysql, "SET NAMES utf8mb4"_ostr); } OUString OConnection::getImplementationName() @@ -253,8 +256,6 @@ Reference<XPreparedStatement> SAL_CALL OConnection::prepareCall(const OUString& OUString SAL_CALL OConnection::nativeSQL(const OUString& /*_sSql*/) { - MutexGuard aGuard(m_aMutex); - // const OUString sSqlStatement = transFormPreparedStatement( _sSql ); // TODO return OUString(); @@ -460,9 +461,8 @@ OUString OConnection::transFormPreparedStatement(const OUString& _sSQL) { try { - Sequence<Any> aArgs(1); Reference<XConnection> xCon = this; - aArgs[0] <<= NamedValue("ActiveConnection", makeAny(xCon)); + Sequence<Any> aArgs{ Any(NamedValue("ActiveConnection", Any(xCon))) }; m_xParameterSubstitution.set( m_xDriver->getFactory()->createInstanceWithArguments( @@ -486,4 +486,36 @@ OUString OConnection::transFormPreparedStatement(const OUString& _sSQL) return sSqlStatement; } +//----- XUnoTunnel ---------------------------------------------------------- +// virtual +sal_Int64 SAL_CALL OConnection::getSomething(const css::uno::Sequence<sal_Int8>& rId) +{ + return comphelper::getSomethingImpl(rId, this); +} + +// static +const Sequence<sal_Int8>& OConnection::getUnoTunnelId() +{ + static const comphelper::UnoIdInit implId; + return implId.getSeq(); +} + +Reference<XTablesSupplier> OConnection::createCatalog() +{ + MutexGuard aGuard(m_aMutex); + + // m_xCatalog is a weak reference. Reuse it if it still exists. + Reference<XTablesSupplier> xCatalog = m_xCatalog; + if (xCatalog.is()) + { + return xCatalog; + } + else + { + xCatalog = new Catalog(this); + m_xCatalog = xCatalog; + return m_xCatalog; + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx b/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx index 283b1d964d4b..3a0ccf36b4ed 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx @@ -17,28 +17,25 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_CONNECTION_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_CONNECTION_HXX +#pragma once #include <memory> #include "mysqlc_subcomponent.hxx" #include "mysqlc_types.hxx" #include <com/sun/star/beans/PropertyValue.hpp> -#include <com/sun/star/lang/DisposedException.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XUnoTunnel.hpp> -#include <com/sun/star/sdbc/ColumnSearch.hpp> #include <com/sun/star/sdbc/ColumnValue.hpp> -#include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/sdbc/SQLWarning.hpp> #include <com/sun/star/sdbc/XConnection.hpp> #include <com/sun/star/sdbc/XWarningsSupplier.hpp> #include <com/sun/star/util/XStringSubstitution.hpp> -#include <cppuhelper/compbase3.hxx> -#include <cppuhelper/weakref.hxx> -#include <rtl/string.hxx> +#include <com/sun/star/sdbcx/XTablesSupplier.hpp> + +#include <cppuhelper/basemutex.hxx> +#include <cppuhelper/compbase.hxx> #include <rtl/ref.hxx> #include <mysql.h> @@ -57,12 +54,8 @@ class ODatabaseMetaData; namespace mysqlc { -using ::com::sun::star::sdbc::SQLException; -using ::com::sun::star::sdbc::SQLWarning; -using ::com::sun::star::uno::RuntimeException; - -typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XConnection, css::sdbc::XWarningsSupplier, - css::lang::XServiceInfo> +typedef ::cppu::WeakComponentImplHelper<css::sdbc::XConnection, css::sdbc::XWarningsSupplier, + css::lang::XUnoTunnel, css::lang::XServiceInfo> OMetaConnection_BASE; struct ConnectionSettings @@ -83,7 +76,7 @@ typedef OMetaConnection_BASE OConnection_BASE; typedef std::vector<css::uno::WeakReferenceHelper> OWeakRefArray; -class OConnection final : public OBase_Mutex, public OConnection_BASE +class OConnection final : public cppu::BaseMutex, public OConnection_BASE { private: MYSQL m_mysql; @@ -93,6 +86,7 @@ private: // Data attributes + css::uno::WeakReference<css::sdbcx::XTablesSupplier> m_xCatalog; css::uno::WeakReference<css::sdbc::XDatabaseMetaData> m_xMetaData; OWeakRefArray m_aStatements; // vector containing a list @@ -115,6 +109,12 @@ public: rtl_TextEncoding getConnectionEncoding() const { return m_settings.encoding; } + /** + * Create and/or connect to the sdbcx Catalog. This is completely + * unrelated to the SQL "Catalog". + */ + css::uno::Reference<css::sdbcx::XTablesSupplier> createCatalog(); + // OComponentHelper virtual void SAL_CALL disposing() override; @@ -125,6 +125,10 @@ public: virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override; + // XUnoTunnel + virtual sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override; + static const css::uno::Sequence<sal_Int8>& getUnoTunnelId(); + // XConnection css::uno::Reference<css::sdbc::XStatement> SAL_CALL createStatement() override; @@ -182,6 +186,5 @@ public: //inline OUString getPattern(OUString p) { return (p.getLength()) ? p : ASC2OU("%"); } } /* mysqlc */ } /* connectivity */ -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_CONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx index 77e20700b135..6d171b661815 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx @@ -22,6 +22,7 @@ #include <com/sun/star/sdbc/Deferrability.hpp> #include <com/sun/star/lang/XInitialization.hpp> #include <comphelper/sequence.hxx> +#include <o3tl/string_view.hxx> #include <sal/log.hxx> #include <rtl/ustrbuf.hxx> @@ -32,7 +33,6 @@ using namespace connectivity::mysqlc; using namespace com::sun::star::uno; using namespace com::sun::star::lang; -using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; static std::string wild("%"); @@ -41,8 +41,6 @@ static void lcl_setRows_throw(const Reference<XResultSet>& _xResultSet, sal_Int3 const std::vector<std::vector<Any>>& _rRows) { Reference<XInitialization> xIni(_xResultSet, UNO_QUERY); - Sequence<Any> aArgs(2); - aArgs[0] <<= _nType; Sequence<Sequence<Any>> aRows(_rRows.size()); @@ -55,7 +53,7 @@ static void lcl_setRows_throw(const Reference<XResultSet>& _xResultSet, sal_Int3 } ++pRowsIter; } - aArgs[1] <<= aRows; + Sequence<Any> aArgs{ Any(_nType), Any(aRows) }; xIni->initialize(aArgs); } @@ -162,7 +160,7 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsNonNullableColumns() { return true; OUString SAL_CALL ODatabaseMetaData::getCatalogTerm() { return "n/a"; } -OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return "\""; } +OUString SAL_CALL ODatabaseMetaData::getIdentifierQuoteString() { return "`"; } OUString SAL_CALL ODatabaseMetaData::getExtraNameCharacters() { return "#@"; } @@ -565,9 +563,8 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes() { if (m_rConnection.getMysqlVersion() >= requiredVersion[i]) { - std::vector<Any> aRow{ Any() }; - aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(table_types[i], encoding))); - rRows.push_back(aRow); + rRows.push_back( + { { Any(), Any(mysqlc_sdbc_driver::convert(table_types[i], encoding)) } }); } } lcl_setRows_throw(xResultSet, 5, rRows); @@ -586,32 +583,19 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo() unsigned int i = 0; while (mysqlc_types[i].typeName) { - std::vector<Any> aRow{ Any() }; - - aRow.push_back(makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding))); - aRow.push_back(makeAny(mysqlc_types[i].dataType)); - aRow.push_back(makeAny(mysqlc_types[i].precision)); - aRow.push_back( - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding))); - aRow.push_back( - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding))); - aRow.push_back( - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding))); - aRow.push_back(makeAny(mysqlc_types[i].nullable)); - aRow.push_back(makeAny(mysqlc_types[i].caseSensitive)); - aRow.push_back(makeAny(mysqlc_types[i].searchable)); - aRow.push_back(makeAny(mysqlc_types[i].isUnsigned)); - aRow.push_back(makeAny(mysqlc_types[i].fixedPrecScale)); - aRow.push_back(makeAny(mysqlc_types[i].autoIncrement)); - aRow.push_back( - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding))); - aRow.push_back(makeAny(mysqlc_types[i].minScale)); - aRow.push_back(makeAny(mysqlc_types[i].maxScale)); - aRow.push_back(makeAny(sal_Int32(0))); - aRow.push_back(makeAny(sal_Int32(0))); - aRow.push_back(makeAny(sal_Int32(10))); + rRows.push_back( + { { Any(), Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)), + Any(mysqlc_types[i].dataType), Any(mysqlc_types[i].precision), + Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)), + Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)), + Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)), + Any(mysqlc_types[i].nullable), Any(mysqlc_types[i].caseSensitive), + Any(mysqlc_types[i].searchable), Any(mysqlc_types[i].isUnsigned), + Any(mysqlc_types[i].fixedPrecScale), Any(mysqlc_types[i].autoIncrement), + Any(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)), + Any(mysqlc_types[i].minScale), Any(mysqlc_types[i].maxScale), Any(sal_Int32(0)), + Any(sal_Int32(0)), Any(sal_Int32(10)) } }); - rRows.push_back(aRow); i++; } @@ -634,14 +618,11 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getSchemas() UNO_QUERY); std::vector<std::vector<Any>> rRows; - OUString sSql - = m_rConnection.getMysqlVersion() > 49999 - ? OUString{ "SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG " - "FROM INFORMATION_SCHEMA.SCHEMATA ORDER BY SCHEMA_NAME" } - : OUString{ "SHOW DATABASES" }; - Reference<XStatement> statement = m_rConnection.createStatement(); - Reference<XInterface> executed = statement->executeQuery(sSql); + Reference<XInterface> executed = statement->executeQuery( + u"SELECT SCHEMA_NAME AS TABLE_SCHEM, CATALOG_NAME AS TABLE_CATALOG FROM INFORMATION_SCHEMA.SCHEMATA \ + WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema') \ + ORDER BY SCHEMA_NAME"_ustr); Reference<XResultSet> rs(executed, UNO_QUERY_THROW); Reference<XResultSetMetaDataSupplier> supp(executed, UNO_QUERY_THROW); Reference<XResultSetMetaData> rs_meta = supp->getMetaData(); @@ -651,20 +632,12 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getSchemas() while (rs->next()) { std::vector<Any> aRow{ Any() }; - bool informationSchema = false; for (sal_uInt32 i = 1; i <= columns; i++) { OUString columnStringValue = xRow->getString(i); - if (i == 1) - { // TABLE_SCHEM - informationSchema = columnStringValue.equalsIgnoreAsciiCase("information_schema"); - } - aRow.push_back(makeAny(columnStringValue)); - } - if (!informationSchema) - { - rRows.push_back(aRow); + aRow.push_back(Any(columnStringValue)); } + rRows.push_back(aRow); } lcl_setRows_throw(xResultSet, 1, rRows); @@ -759,25 +732,25 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(const Any& /*catalo std::vector<Any> aRow{ Any() }; // 0. element is unused // catalog name - aRow.push_back(makeAny(xRow->getString(1))); + aRow.emplace_back(xRow->getString(1)); // schema name - aRow.push_back(makeAny(xRow->getString(2))); + aRow.emplace_back(xRow->getString(2)); // table name - aRow.push_back(makeAny(xRow->getString(3))); + aRow.emplace_back(xRow->getString(3)); // column name - aRow.push_back(makeAny(xRow->getString(4))); + aRow.emplace_back(xRow->getString(4)); // data type OUString sDataType = xRow->getString(5); - aRow.push_back(makeAny(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType))); + aRow.emplace_back(mysqlc_sdbc_driver::mysqlStrToOOOType(sDataType)); // type name - aRow.push_back(makeAny(sDataType)); // TODO + aRow.emplace_back(sDataType); // TODO // column size sal_Int32 nColumnSize = 0; OUString sColumnType = xRow->getString(14); sal_Int32 nCharMaxLen = xRow->getShort(6); bool bIsCharMax = !xRow->wasNull(); if (sDataType.equalsIgnoreAsciiCase("year")) - nColumnSize = sColumnType.copy(6, 1).toInt32(); // 'year(' length is 5 + nColumnSize = o3tl::toInt32(sColumnType.subView(6, 1)); // 'year(' length is 5 else if (sDataType.equalsIgnoreAsciiCase("date")) nColumnSize = 10; else if (sDataType.equalsIgnoreAsciiCase("time")) @@ -789,34 +762,34 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getColumns(const Any& /*catalo nColumnSize = xRow->getShort(7); // numeric precision else nColumnSize = nCharMaxLen; - aRow.push_back(makeAny(nColumnSize)); - aRow.push_back(Any()); // buffer length - unused + aRow.emplace_back(nColumnSize); + aRow.emplace_back(); // buffer length - unused // decimal digits (scale) - aRow.push_back(makeAny(xRow->getShort(8))); + aRow.emplace_back(xRow->getShort(8)); // num_prec_radix - aRow.push_back(makeAny(sal_Int32(10))); + aRow.emplace_back(sal_Int32(10)); // nullable OUString sIsNullable = xRow->getString(13); if (xRow->wasNull()) - aRow.push_back(makeAny(ColumnValue::NULLABLE_UNKNOWN)); + aRow.emplace_back(ColumnValue::NULLABLE_UNKNOWN); else if (sIsNullable.equalsIgnoreAsciiCase("YES")) - aRow.push_back(makeAny(ColumnValue::NULLABLE)); + aRow.emplace_back(ColumnValue::NULLABLE); else - aRow.push_back(makeAny(ColumnValue::NO_NULLS)); + aRow.emplace_back(ColumnValue::NO_NULLS); // remarks - aRow.push_back(makeAny(xRow->getString(9))); + aRow.emplace_back(xRow->getString(9)); // default - aRow.push_back(makeAny(xRow->getString(10))); + aRow.emplace_back(xRow->getString(10)); - aRow.push_back(Any{}); // sql_data_type - unused - aRow.push_back(Any{}); // sql_datetime_sub - unused + aRow.emplace_back(); // sql_data_type - unused + aRow.emplace_back(); // sql_datetime_sub - unused // character octet length - aRow.push_back(makeAny(xRow->getString(11))); + aRow.emplace_back(xRow->getString(11)); // ordinal position - aRow.push_back(makeAny(xRow->getString(12))); + aRow.emplace_back(xRow->getString(12)); // is nullable - aRow.push_back(makeAny(sIsNullable)); + aRow.emplace_back(sIsNullable); aRows.push_back(aRow); } lcl_setRows_throw(xResultSet, 1, aRows); @@ -832,25 +805,20 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTables(const Any& /*catalog "SELECT TABLE_CATALOG AS TABLE_CAT, TABLE_SCHEMA AS TABLE_SCHEM, TABLE_NAME," "IF(STRCMP(TABLE_TYPE,'BASE TABLE'), TABLE_TYPE, 'TABLE') AS TABLE_TYPE, TABLE_COMMENT AS " "REMARKS " - "FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' " + "FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', " + "'performance_schema') AND TABLE_SCHEMA LIKE '?' AND TABLE_NAME LIKE '?' " }; if (types.getLength() == 1) { - buffer.append("AND TABLE_TYPE LIKE '"); - buffer.append(types[0]); - buffer.append("'"); + buffer.append("AND TABLE_TYPE LIKE '" + types[0] + "'"); } else if (types.getLength() > 1) { - buffer.append("AND (TABLE_TYPE LIKE '"); - buffer.append(types[0]); - buffer.append("'"); + buffer.append("AND (TABLE_TYPE LIKE '" + types[0] + "'"); for (sal_Int32 i = 1; i < types.getLength(); ++i) { - buffer.append(" OR TABLE_TYPE LIKE '"); - buffer.append(types[i]); - buffer.append("'"); + buffer.append(" OR TABLE_TYPE LIKE '" + types[i] + "'"); } buffer.append(")"); } @@ -954,34 +922,34 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getImportedKeys(const Any& /*c std::vector<Any> aRow{ Any() }; // 0. element is unused // primary key catalog - aRow.push_back(makeAny(xRow->getString(3))); + aRow.push_back(Any(xRow->getString(3))); // primary key schema - aRow.push_back(makeAny(xRow->getString(4))); + aRow.push_back(Any(xRow->getString(4))); // primary key table - aRow.push_back(makeAny(xRow->getString(5))); + aRow.push_back(Any(xRow->getString(5))); // primary column name - aRow.push_back(makeAny(xRow->getString(6))); + aRow.push_back(Any(xRow->getString(6))); // fk table catalog - aRow.push_back(makeAny(xRow->getString(1))); + aRow.push_back(Any(xRow->getString(1))); // fk schema - aRow.push_back(makeAny(xRow->getString(11))); + aRow.push_back(Any(xRow->getString(11))); // fk table - aRow.push_back(makeAny(xRow->getString(10))); + aRow.push_back(Any(xRow->getString(10))); // fk column name - aRow.push_back(makeAny(xRow->getString(2))); + aRow.push_back(Any(xRow->getString(2))); // KEY_SEQ - aRow.push_back(makeAny(sal_Int32{ 0 })); // TODO + aRow.push_back(Any(sal_Int32{ 0 })); // TODO // update rule - aRow.push_back(makeAny(xRow->getShort(7))); + aRow.push_back(Any(xRow->getShort(7))); // delete rule - aRow.push_back(makeAny(xRow->getShort(8))); + aRow.push_back(Any(xRow->getShort(8))); // foreign key name - aRow.push_back(makeAny(xRow->getString(9))); + aRow.push_back(Any(xRow->getString(9))); // primary key name - aRow.push_back(makeAny(OUString{})); // TODO + aRow.push_back(Any(OUString{})); // TODO // deferrability - aRow.push_back(makeAny(Deferrability::NONE)); + aRow.push_back(Any(Deferrability::NONE)); aRows.push_back(aRow); } lcl_setRows_throw(xResultSet, 1, aRows); @@ -1042,11 +1010,23 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getBestRowIdentifier(const Any } Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTablePrivileges( - const Any& /*catalog*/, const OUString& /*schemaPattern*/, const OUString& /*tableNamePattern*/) + const Any& /* catalog */, const OUString& schemaPattern, const OUString& tableNamePattern) { - // TODO - SAL_WARN("connectivity.mysqlc", "method not implemented"); - throw SQLException("getTablePrivileges method not implemented", *this, "IM001", 0, Any()); + OUString query("SELECT TABLE_SCHEMA TABLE_CAT, " + "NULL TABLE_SCHEM, " + "TABLE_NAME, " + "NULL GRANTOR," + "GRANTEE, " + "PRIVILEGE_TYPE PRIVILEGE, " + "IS_GRANTABLE " + "FROM INFORMATION_SCHEMA.TABLE_PRIVILEGES " + "WHERE TABLE_SCHEMA LIKE '?' " + "AND TABLE_NAME='?'"); + query = query.replaceFirst("?", schemaPattern); + query = query.replaceFirst("?", tableNamePattern); + Reference<XStatement> statement = m_rConnection.createStatement(); + Reference<XResultSet> rs = statement->executeQuery(query); + return rs; } Reference<XResultSet> SAL_CALL ODatabaseMetaData::getCrossReference( diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx index 18109d359ca0..caed92f20e80 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_DATABASEMETADATA_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_DATABASEMETADATA_HXX +#pragma once #include "mysqlc_connection.hxx" @@ -178,7 +177,7 @@ public: css::uno::Reference<css::sdbc::XResultSet> SAL_CALL getSchemas() override; css::uno::Reference<css::sdbc::XResultSet> SAL_CALL getCatalogs() override; css::uno::Reference<css::sdbc::XResultSet> SAL_CALL getTableTypes() override; - css::uno::Reference<css::sdbc::XResultSet> + virtual css::uno::Reference<css::sdbc::XResultSet> SAL_CALL getColumns(const Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern, const OUString& columnNamePattern) override; @@ -231,6 +230,4 @@ public: }; } -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_DATABASEMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx b/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx index c7c88d03ebe6..79a514a57898 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx @@ -18,15 +18,16 @@ */ #include "mysqlc_driver.hxx" #include "mysqlc_connection.hxx" +#include <cppuhelper/supportsservice.hxx> +#include <comphelper/servicehelper.hxx> using namespace css::uno; using namespace css::lang; using namespace css::beans; using namespace css::sdbc; +using namespace css::sdbcx; using namespace connectivity::mysqlc; -#include <cppuhelper/supportsservice.hxx> - MysqlCDriver::MysqlCDriver(const Reference<XMultiServiceFactory>& _rxFactory) : ODriver_BASE(m_aMutex) , m_xFactory(_rxFactory) @@ -59,7 +60,7 @@ OUString MysqlCDriver::getImplementationName_Static() Sequence<OUString> MysqlCDriver::getSupportedServiceNames_Static() { - return { "com.sun.star.sdbc.Driver" }; + return { "com.sun.star.sdbc.Driver", "com.sun.star.sdbcx.Driver" }; } OUString SAL_CALL MysqlCDriver::getImplementationName() { return getImplementationName_Static(); } @@ -84,14 +85,12 @@ Reference<XConnection> SAL_CALL MysqlCDriver::connect(const OUString& url, return nullptr; } - Reference<XConnection> xConn; // create a new connection with the given properties and append it to our vector - OConnection* pCon = new OConnection(*this); - xConn = pCon; + rtl::Reference<OConnection> pCon = new OConnection(*this); pCon->construct(url, info); m_xConnections.push_back(WeakReferenceHelper(*pCon)); - return xConn; + return pCon; } sal_Bool SAL_CALL MysqlCDriver::acceptsURL(const OUString& url) @@ -104,13 +103,8 @@ MysqlCDriver::getPropertyInfo(const OUString& url, const Sequence<PropertyValue> { if (acceptsURL(url)) { - ::std::vector<DriverPropertyInfo> aDriverInfo; - - aDriverInfo.push_back(DriverPropertyInfo("Hostname", "Name of host", true, "localhost", - Sequence<OUString>())); - aDriverInfo.push_back( - DriverPropertyInfo("Port", "Port", true, "3306", Sequence<OUString>())); - return Sequence<DriverPropertyInfo>(aDriverInfo.data(), aDriverInfo.size()); + return { { "Hostname", "Name of host", true, "localhost", {} }, + { "Port", "Port", true, "3306", {} } }; } return Sequence<DriverPropertyInfo>(); @@ -120,6 +114,21 @@ sal_Int32 SAL_CALL MysqlCDriver::getMajorVersion() { return MARIADBC_VERSION_MAJ sal_Int32 SAL_CALL MysqlCDriver::getMinorVersion() { return MARIADBC_VERSION_MINOR; } +Reference<XTablesSupplier> + SAL_CALL MysqlCDriver::getDataDefinitionByConnection(const Reference<XConnection>& rConnection) +{ + if (OConnection* pConnection = comphelper::getFromUnoTunnel<OConnection>(rConnection)) + return pConnection->createCatalog(); + return {}; +} + +Reference<XTablesSupplier> SAL_CALL +MysqlCDriver::getDataDefinitionByURL(const OUString& rURL, const Sequence<PropertyValue>& rInfo) +{ + Reference<XConnection> xConnection = connect(rURL, rInfo); + return getDataDefinitionByConnection(xConnection); +} + namespace connectivity::mysqlc { Reference<XInterface> MysqlCDriver_CreateInstance(const Reference<XMultiServiceFactory>& _rxFactory) diff --git a/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx b/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx index e5d199fcad6f..a29040892577 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx @@ -16,30 +16,26 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_DRIVER_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_DRIVER_HXX +#pragma once #include "mysqlc_connection.hxx" #include <com/sun/star/sdbc/XDriver.hpp> -#include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> - -#include <cppuhelper/compbase2.hxx> -#include <osl/module.h> +#include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp> +#include <cppuhelper/compbase.hxx> namespace connectivity::mysqlc { -using css::sdbc::SQLException; -using css::uno::Exception; using css::uno::Reference; -using css::uno::RuntimeException; using css::uno::Sequence; Reference<css::uno::XInterface> MysqlCDriver_CreateInstance(const Reference<css::lang::XMultiServiceFactory>& _rxFactory); -typedef ::cppu::WeakComponentImplHelper2<css::sdbc::XDriver, css::lang::XServiceInfo> ODriver_BASE; +typedef ::cppu::WeakComponentImplHelper<css::sdbc::XDriver, css::sdbcx::XDataDefinitionSupplier, + css::lang::XServiceInfo> + ODriver_BASE; typedef void* (*OMysqlCConnection_CreateInstanceFunction)(void* _pDriver); @@ -51,10 +47,6 @@ protected: OWeakRefArray m_xConnections; // vector containing a list // of all the Connection objects // for this Driver -#ifdef BUNDLE_MARIADB - oslModule m_hCConnModule; - bool m_bAttemptedLoadCConn; -#endif public: explicit MysqlCDriver(const Reference<css::lang::XMultiServiceFactory>& _rxFactory); @@ -83,10 +75,14 @@ public: const Reference<css::lang::XMultiServiceFactory>& getFactory() const { return m_xFactory; } static rtl_TextEncoding getDefaultEncoding() { return RTL_TEXTENCODING_UTF8; } + + // XDataDefinitionSupplier + virtual css::uno::Reference<css::sdbcx::XTablesSupplier> SAL_CALL getDataDefinitionByConnection( + const css::uno::Reference<css::sdbc::XConnection>& rxConnection) override; + virtual css::uno::Reference<css::sdbcx::XTablesSupplier> SAL_CALL getDataDefinitionByURL( + const OUString& rsURL, const css::uno::Sequence<css::beans::PropertyValue>& rInfo) override; }; } /* connectivity::mysqlc */ -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_DRIVER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_general.cxx b/connectivity/source/drivers/mysqlc/mysqlc_general.cxx index 7ed11fe3ff13..bc57770413f5 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_general.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_general.cxx @@ -20,6 +20,7 @@ #include <sal/log.hxx> #include <rtl/ustring.hxx> +#include <o3tl/string_view.hxx> #include <com/sun/star/sdbc/DataType.hpp> @@ -43,6 +44,7 @@ void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize) *mem = malloc(sizeof(sal_Int32)); break; case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_YEAR: *mem = malloc(sizeof(sal_Int16)); break; case MYSQL_TYPE_BIT: @@ -62,7 +64,6 @@ void allocateSqlVar(void** mem, enum_field_types eType, unsigned nSize) case MYSQL_TYPE_TIME: case MYSQL_TYPE_DATETIME: case MYSQL_TYPE_TIMESTAMP: - case MYSQL_TYPE_YEAR: // FIXME below case MYSQL_TYPE_NEWDATE: case MYSQL_TYPE_ENUM: case MYSQL_TYPE_SET: @@ -125,12 +126,13 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept switch (eType) { case MYSQL_TYPE_BIT: - return css::sdbc::DataType::VARCHAR; + return css::sdbc::DataType::BIT; case MYSQL_TYPE_TINY: return css::sdbc::DataType::TINYINT; case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_YEAR: return css::sdbc::DataType::SMALLINT; case MYSQL_TYPE_INT24: @@ -163,6 +165,9 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept return css::sdbc::DataType::VARCHAR; case MYSQL_TYPE_BLOB: + case MYSQL_TYPE_TINY_BLOB: + case MYSQL_TYPE_MEDIUM_BLOB: + case MYSQL_TYPE_LONG_BLOB: if (charsetnr == 63) return css::sdbc::DataType::LONGVARBINARY; return css::sdbc::DataType::LONGVARCHAR; @@ -188,46 +193,58 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept return css::sdbc::DataType::VARCHAR; } -sal_Int32 mysqlStrToOOOType(const OUString& sType) +sal_Int32 mysqlStrToOOOType(std::u16string_view sType) { // TODO other types. - if (sType.equalsIgnoreAsciiCase("tiny") || sType.equalsIgnoreAsciiCase("tinyint")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"tiny") + || o3tl::equalsIgnoreAsciiCase(sType, u"tinyint")) return css::sdbc::DataType::TINYINT; - if (sType.equalsIgnoreAsciiCase("smallint") || sType.equalsIgnoreAsciiCase("mediumint")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"smallint") + || o3tl::equalsIgnoreAsciiCase(sType, u"year")) return css::sdbc::DataType::SMALLINT; - if (sType.equalsIgnoreAsciiCase("longtext")) - return css::sdbc::DataType::LONGVARCHAR; - if (sType.equalsIgnoreAsciiCase("int")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"int") + || o3tl::equalsIgnoreAsciiCase(sType, u"mediumint")) return css::sdbc::DataType::INTEGER; - if (sType.equalsIgnoreAsciiCase("varchar") || sType.equalsIgnoreAsciiCase("set") - || sType.equalsIgnoreAsciiCase("enum")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"varchar") || o3tl::equalsIgnoreAsciiCase(sType, u"set") + || o3tl::equalsIgnoreAsciiCase(sType, u"enum")) return css::sdbc::DataType::VARCHAR; - if (sType.equalsIgnoreAsciiCase("bigint")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"bigint")) return css::sdbc::DataType::BIGINT; - if (sType.equalsIgnoreAsciiCase("blob") || sType.equalsIgnoreAsciiCase("longblob")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"blob") + || o3tl::equalsIgnoreAsciiCase(sType, u"longblob") + || o3tl::equalsIgnoreAsciiCase(sType, u"tinyblob") + || o3tl::equalsIgnoreAsciiCase(sType, u"mediumblob")) return css::sdbc::DataType::BLOB; - if (sType.equalsIgnoreAsciiCase("varbinary")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"varbinary")) return css::sdbc::DataType::VARBINARY; - if (sType.equalsIgnoreAsciiCase("char")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"char")) return css::sdbc::DataType::CHAR; - if (sType.equalsIgnoreAsciiCase("text")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"tinytext")) + return css::sdbc::DataType::VARCHAR; + if (o3tl::equalsIgnoreAsciiCase(sType, u"text")) + return css::sdbc::DataType::LONGVARCHAR; + if (o3tl::equalsIgnoreAsciiCase(sType, u"mediumtext") + || o3tl::equalsIgnoreAsciiCase(sType, u"longtext")) return css::sdbc::DataType::CLOB; - if (sType.equalsIgnoreAsciiCase("binary")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"binary")) return css::sdbc::DataType::BINARY; - if (sType.equalsIgnoreAsciiCase("time")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"time")) return css::sdbc::DataType::TIME; - if (sType.equalsIgnoreAsciiCase("date")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"date")) return css::sdbc::DataType::DATE; - if (sType.equalsIgnoreAsciiCase("datetime") || sType.equalsIgnoreAsciiCase("timestamp")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"datetime") + || o3tl::equalsIgnoreAsciiCase(sType, u"timestamp")) return css::sdbc::DataType::TIMESTAMP; - if (sType.equalsIgnoreAsciiCase("decimal")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"decimal")) return css::sdbc::DataType::DECIMAL; - if (sType.equalsIgnoreAsciiCase("real") || sType.equalsIgnoreAsciiCase("float")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"real") || o3tl::equalsIgnoreAsciiCase(sType, u"float")) return css::sdbc::DataType::REAL; - if (sType.equalsIgnoreAsciiCase("double")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"double")) return css::sdbc::DataType::DOUBLE; - if (sType.equalsIgnoreAsciiCase("bit") || sType.equalsIgnoreAsciiCase("bool") - || sType.equalsIgnoreAsciiCase("boolean")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"bit")) + return css::sdbc::DataType::BIT; + if (o3tl::equalsIgnoreAsciiCase(sType, u"bool") + || o3tl::equalsIgnoreAsciiCase(sType, u"boolean")) return css::sdbc::DataType::BOOLEAN; OSL_FAIL("Unknown type name from string, failing back to varchar."); return css::sdbc::DataType::VARCHAR; diff --git a/connectivity/source/drivers/mysqlc/mysqlc_general.hxx b/connectivity/source/drivers/mysqlc/mysqlc_general.hxx index c00a11f412c5..16236e1530ed 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_general.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_general.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_GENERAL_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_GENERAL_HXX +#pragma once #include <config_lgpl.h> @@ -109,11 +108,9 @@ sal_Int32 mysqlToOOOType(int eType, int charsetnr) noexcept; OUString mysqlTypeToStr(unsigned mysql_type, unsigned mysql_flags); -sal_Int32 mysqlStrToOOOType(const OUString& sType); +sal_Int32 mysqlStrToOOOType(std::u16string_view sType); OUString convert(const ::std::string& _string, const rtl_TextEncoding encoding); } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_indexes.cxx b/connectivity/source/drivers/mysqlc/mysqlc_indexes.cxx new file mode 100644 index 000000000000..c496f9c21cde --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_indexes.cxx @@ -0,0 +1,25 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "mysqlc_indexes.hxx" + +connectivity::mysqlc::Indexes::Indexes(Table* pTable, osl::Mutex& rMutex, + const std::vector<OUString>& rVector) + : OIndexesHelper(pTable, rMutex, rVector) +{ +} + +// XDrop +void connectivity::mysqlc::Indexes::dropObject(sal_Int32 /*nPosition*/, + const OUString& /* sIndexName */) +{ + // TODO: implement +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_indexes.hxx b/connectivity/source/drivers/mysqlc/mysqlc_indexes.hxx new file mode 100644 index 000000000000..4c918d1846fd --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_indexes.hxx @@ -0,0 +1,34 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "mysqlc_table.hxx" + +#include <connectivity/TIndexes.hxx> + +namespace connectivity::mysqlc +{ +class Indexes : public ::connectivity::OIndexesHelper +{ +private: + // TODO: useful? + // Table* m_pTable; + +protected: + // XDrop + void dropObject(sal_Int32 nPosition, const OUString& sIndexName); + +public: + Indexes(Table* pTable, ::osl::Mutex& rMutex, const std::vector<OUString>& rVector); +}; + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_keys.cxx b/connectivity/source/drivers/mysqlc/mysqlc_keys.cxx new file mode 100644 index 000000000000..7706844f238c --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_keys.cxx @@ -0,0 +1,19 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "mysqlc_keys.hxx" +#include "mysqlc_table.hxx" + +connectivity::mysqlc::Keys::Keys(Table* pTable, osl::Mutex& rMutex, + const ::std::vector<OUString>& rNames) + : OKeysHelper(pTable, rMutex, rNames) +{ +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_keys.hxx b/connectivity/source/drivers/mysqlc/mysqlc_keys.hxx new file mode 100644 index 000000000000..9d0a9ef1cc43 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_keys.hxx @@ -0,0 +1,25 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <connectivity/TKeys.hxx> + +namespace connectivity::mysqlc +{ +class Table; + +class Keys : public ::connectivity::OKeysHelper +{ +public: + Keys(Table* pTable, ::osl::Mutex& rMutex, const ::std::vector<OUString>& rNames); +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx index 8031bfdf24b0..e11476dc9805 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.cxx @@ -31,10 +31,10 @@ #include <cppuhelper/typeprovider.hxx> #include <sal/log.hxx> -using namespace rtl; - #include <cstdlib> +#include <typeindex> +using namespace rtl; using namespace connectivity::mysqlc; using namespace connectivity; using namespace cppu; @@ -46,20 +46,20 @@ using namespace com::sun::star::sdbcx; using namespace com::sun::star::container; using namespace com::sun::star::io; using namespace com::sun::star::util; -using namespace ::comphelper; using ::osl::MutexGuard; -#include <typeindex> - namespace { std::type_index getTypeFromMysqlType(enum_field_types type) { switch (type) { + case MYSQL_TYPE_BIT: + return std::type_index(typeid(bool)); case MYSQL_TYPE_TINY: return std::type_index(typeid(sal_Int8)); case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_YEAR: return std::type_index(typeid(sal_Int16)); case MYSQL_TYPE_LONG: case MYSQL_TYPE_INT24: @@ -83,8 +83,6 @@ std::type_index getTypeFromMysqlType(enum_field_types type) case MYSQL_TYPE_NEWDECIMAL: return std::type_index(typeid(OUString)); case MYSQL_TYPE_BLOB: - case MYSQL_TYPE_YEAR: - case MYSQL_TYPE_BIT: case MYSQL_TYPE_SET: case MYSQL_TYPE_ENUM: case MYSQL_TYPE_GEOMETRY: @@ -106,12 +104,24 @@ bool OPreparedResultSet::fetchResult() } for (sal_Int32 i = 0; i < m_nColumnCount; ++i) { + bool bIsBlobType = false; + switch (m_aFields[i].type) + { + case MYSQL_TYPE_BLOB: + case MYSQL_TYPE_TINY_BLOB: + case MYSQL_TYPE_MEDIUM_BLOB: + case MYSQL_TYPE_LONG_BLOB: + bIsBlobType = true; + break; + default: + bIsBlobType = false; + } m_aMetaData[i].is_null = false; m_aMetaData[i].length = 0l; m_aMetaData[i].error = false; m_aData[i].is_null = &m_aMetaData[i].is_null; - m_aData[i].buffer_length = m_aFields[i].type == MYSQL_TYPE_BLOB ? 0 : m_aFields[i].length; + m_aData[i].buffer_length = bIsBlobType ? 0 : m_aFields[i].length; m_aData[i].length = &m_aMetaData[i].length; m_aData[i].error = &m_aMetaData[i].error; m_aData[i].buffer = nullptr; @@ -170,7 +180,7 @@ OPreparedResultSet::OPreparedResultSet(OConnection& rConn, OPreparedStatement* p : OPreparedResultSet_BASE(m_aMutex) , OPropertySetHelper(OPreparedResultSet_BASE::rBHelper) , m_rConnection(rConn) - , m_aStatement(static_cast<OWeakObject*>(pStmt)) + , m_aStatement(css::uno::Reference(cppu::getXWeak(pStmt))) , m_pStmt(pMyStmt) , m_encoding(rConn.getConnectionEncoding()) , m_nColumnCount(mysql_stmt_field_count(pMyStmt)) @@ -188,7 +198,7 @@ void OPreparedResultSet::disposing() MutexGuard aGuard(m_aMutex); - m_aStatement = nullptr; + m_aStatement.clear(); m_xMetaData = nullptr; } @@ -247,7 +257,25 @@ template <typename T> T OPreparedResultSet::retrieveValue(sal_Int32 nColumnIndex if (getTypeFromMysqlType(m_aFields[nColumnIndex - 1].type) == std::type_index(typeid(T))) return *static_cast<T*>(m_aData[nColumnIndex - 1].buffer); else - return getRowSetValue(nColumnIndex); + { + auto const& row = getRowSetValue(nColumnIndex); + if constexpr (std::is_same_v<sal_Int64, T>) + return row.getLong(); + else if constexpr (std::is_same_v<sal_Int32, T>) + return row.getInt32(); + else if constexpr (std::is_same_v<sal_Int16, T>) + return row.getInt16(); + else if constexpr (std::is_same_v<sal_Int8, T>) + return row.getInt8(); + else if constexpr (std::is_same_v<double, T>) + return row.getDouble(); + else if constexpr (std::is_same_v<float, T>) + return row.getFloat(); + else if constexpr (std::is_same_v<bool, T>) + return row.getBool(); + else + return row; + } } template <> uno::Sequence<sal_Int8> OPreparedResultSet::retrieveValue(sal_Int32 column) @@ -260,7 +288,7 @@ template <> uno::Sequence<sal_Int8> OPreparedResultSet::retrieveValue(sal_Int32 template <> Date OPreparedResultSet::retrieveValue(sal_Int32 column) { if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(Date))) - return getRowSetValue(column); + return getRowSetValue(column).getDate(); const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer); Date d; @@ -273,7 +301,7 @@ template <> Date OPreparedResultSet::retrieveValue(sal_Int32 column) template <> Time OPreparedResultSet::retrieveValue(sal_Int32 column) { if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(Time))) - return getRowSetValue(column); + return getRowSetValue(column).getTime(); const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer); Time t; @@ -286,7 +314,7 @@ template <> Time OPreparedResultSet::retrieveValue(sal_Int32 column) template <> DateTime OPreparedResultSet::retrieveValue(sal_Int32 column) { if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(DateTime))) - return getRowSetValue(column); + return getRowSetValue(column).getDateTime(); const MYSQL_TIME* pTime = static_cast<MYSQL_TIME*>(m_aData[column - 1].buffer); DateTime t; @@ -303,9 +331,22 @@ template <> OUString OPreparedResultSet::retrieveValue(sal_Int32 column) { // redirect call to the appropriate method if needed // BLOB can be simply read out as string + bool bIsBlobType = false; + switch (m_aFields[column - 1].type) + { + case MYSQL_TYPE_BLOB: + case MYSQL_TYPE_TINY_BLOB: + case MYSQL_TYPE_MEDIUM_BLOB: + case MYSQL_TYPE_LONG_BLOB: + bIsBlobType = true; + break; + default: + bIsBlobType = false; + } + if (getTypeFromMysqlType(m_aFields[column - 1].type) != std::type_index(typeid(OUString)) - && m_aFields[column - 1].type != MYSQL_TYPE_BLOB) - return getRowSetValue(column); + && !bIsBlobType) + return getRowSetValue(column).getString(); const char* sStr = static_cast<const char*>(m_aData[column - 1].buffer); return OUString(sStr, *m_aData[column - 1].length, m_encoding); @@ -318,10 +359,13 @@ ORowSetValue OPreparedResultSet::getRowSetValue(sal_Int32 nColumnIndex) case MYSQL_TYPE_TINY: return getByte(nColumnIndex); case MYSQL_TYPE_SHORT: + case MYSQL_TYPE_YEAR: return getShort(nColumnIndex); case MYSQL_TYPE_LONG: case MYSQL_TYPE_INT24: return getInt(nColumnIndex); + case MYSQL_TYPE_BIT: + return ORowSetValue(bool(getBoolean(nColumnIndex))); case MYSQL_TYPE_LONGLONG: return getLong(nColumnIndex); case MYSQL_TYPE_FLOAT: @@ -341,6 +385,9 @@ ORowSetValue OPreparedResultSet::getRowSetValue(sal_Int32 nColumnIndex) case MYSQL_TYPE_NEWDECIMAL: return getString(nColumnIndex); case MYSQL_TYPE_BLOB: + case MYSQL_TYPE_TINY_BLOB: + case MYSQL_TYPE_MEDIUM_BLOB: + case MYSQL_TYPE_LONG_BLOB: throw SQLException("Column with type BLOB cannot be converted", *this, "22000", 1, Any()); default: @@ -980,21 +1027,16 @@ uno::Sequence<sal_Int32> IPropertyArrayHelper* OPreparedResultSet::createArrayHelper() const { - uno::Sequence<Property> aProps(5); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION, - cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE, - cppu::UnoType<bool>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, - cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE, - cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new OPropertyArrayHelper(aProps); + return new OPropertyArrayHelper{ + { { "FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0 }, + { "FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 }, + { "IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), + PropertyAttribute::READONLY }, + { "ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY }, + { "ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY } } + }; } IPropertyArrayHelper& OPreparedResultSet::getInfoHelper() { return *getArrayHelper(); } @@ -1061,9 +1103,9 @@ void OPreparedResultSet::getFastPropertyValue(Any& _rValue, sal_Int32 nHandle) c } } -void SAL_CALL OPreparedResultSet::acquire() throw() { OPreparedResultSet_BASE::acquire(); } +void SAL_CALL OPreparedResultSet::acquire() noexcept { OPreparedResultSet_BASE::acquire(); } -void SAL_CALL OPreparedResultSet::release() throw() { OPreparedResultSet_BASE::release(); } +void SAL_CALL OPreparedResultSet::release() noexcept { OPreparedResultSet_BASE::release(); } css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL OPreparedResultSet::getPropertySetInfo() { diff --git a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx index 511a053b8e1a..40912c5534a7 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX +#pragma once #include "mysqlc_preparedstatement.hxx" #include "mysqlc_statement.hxx" @@ -42,9 +41,7 @@ namespace connectivity::mysqlc { -using ::com::sun::star::sdbc::SQLException; using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::RuntimeException; typedef ::cppu::WeakComponentImplHelper12< css::sdbc::XResultSet, css::sdbc::XRow, css::sdbc::XResultSetMetaDataSupplier, @@ -53,7 +50,7 @@ typedef ::cppu::WeakComponentImplHelper12< css::sdbc::XColumnLocate, css::lang::XServiceInfo> OPreparedResultSet_BASE; -class OPreparedResultSet final : public OBase_Mutex, +class OPreparedResultSet final : public cppu::BaseMutex, public OPreparedResultSet_BASE, public ::cppu::OPropertySetHelper, public OPropertyArrayUsageHelper<OPreparedResultSet> @@ -115,8 +112,8 @@ public: // XInterface Any SAL_CALL queryInterface(const css::uno::Type& rType) override; - void SAL_CALL acquire() throw() override; - void SAL_CALL release() throw() override; + void SAL_CALL acquire() noexcept override; + void SAL_CALL release() noexcept override; //XTypeProvider css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override; @@ -250,6 +247,5 @@ private: }; } /* connectivity::mysqlc */ -#endif // CONNECTIVITY_SRESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx index 2b344843deb2..2e7be0894040 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx @@ -23,6 +23,7 @@ #include "mysqlc_propertyids.hxx" #include "mysqlc_resultsetmetadata.hxx" +#include <o3tl/safeint.hxx> #include <sal/log.hxx> #include <com/sun/star/sdbc/DataType.hpp> @@ -31,8 +32,6 @@ using namespace connectivity::mysqlc; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; using namespace com::sun::star::container; using namespace com::sun::star::io; @@ -73,9 +72,9 @@ OPreparedStatement::OPreparedStatement(OConnection* _pConnection, MYSQL_STMT* pS OPreparedStatement::~OPreparedStatement() {} -void SAL_CALL OPreparedStatement::acquire() throw() { OCommonStatement::acquire(); } +void SAL_CALL OPreparedStatement::acquire() noexcept { OCommonStatement::acquire(); } -void SAL_CALL OPreparedStatement::release() throw() { OCommonStatement::release(); } +void SAL_CALL OPreparedStatement::release() noexcept { OCommonStatement::release(); } Any SAL_CALL OPreparedStatement::queryInterface(const Type& rType) { @@ -95,7 +94,7 @@ Sequence<Type> SAL_CALL OPreparedStatement::getTypes() Reference<XResultSetMetaData> SAL_CALL OPreparedStatement::getMetaData() { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); if (!m_xMetaData.is()) { @@ -109,7 +108,7 @@ Reference<XResultSetMetaData> SAL_CALL OPreparedStatement::getMetaData() void SAL_CALL OPreparedStatement::close() { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); if (mysql_stmt_close(m_pStmt)) { @@ -124,7 +123,7 @@ void SAL_CALL OPreparedStatement::close() sal_Bool SAL_CALL OPreparedStatement::execute() { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); if (!m_binds.empty() && mysql_stmt_bind_param(m_pStmt, m_binds.data())) { @@ -149,7 +148,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute() sal_Int32 SAL_CALL OPreparedStatement::executeUpdate() { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); if (!m_binds.empty() && mysql_stmt_bind_param(m_pStmt, m_binds.data())) { @@ -176,7 +175,7 @@ sal_Int32 SAL_CALL OPreparedStatement::executeUpdate() void SAL_CALL OPreparedStatement::setString(sal_Int32 parameter, const OUString& x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); OString stringie(OUStringToOString(x, m_xConnection->getConnectionEncoding())); @@ -191,15 +190,15 @@ void SAL_CALL OPreparedStatement::setString(sal_Int32 parameter, const OUString& Reference<XConnection> SAL_CALL OPreparedStatement::getConnection() { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); - return m_xConnection.get(); + return m_xConnection; } Reference<XResultSet> SAL_CALL OPreparedStatement::executeQuery() { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); if (!m_binds.empty() && mysql_stmt_bind_param(m_pStmt, m_binds.data())) { @@ -226,7 +225,7 @@ Reference<XResultSet> SAL_CALL OPreparedStatement::executeQuery() void SAL_CALL OPreparedStatement::setBoolean(sal_Int32 parameter, sal_Bool x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -238,7 +237,7 @@ void SAL_CALL OPreparedStatement::setBoolean(sal_Int32 parameter, sal_Bool x) void SAL_CALL OPreparedStatement::setByte(sal_Int32 parameter, sal_Int8 x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -250,7 +249,7 @@ void SAL_CALL OPreparedStatement::setByte(sal_Int32 parameter, sal_Int8 x) void SAL_CALL OPreparedStatement::setDate(sal_Int32 parameter, const Date& aData) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); MYSQL_TIME my_time = {}; @@ -268,7 +267,7 @@ void SAL_CALL OPreparedStatement::setDate(sal_Int32 parameter, const Date& aData void SAL_CALL OPreparedStatement::setTime(sal_Int32 parameter, const Time& aVal) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); MYSQL_TIME my_time = {}; @@ -286,7 +285,7 @@ void SAL_CALL OPreparedStatement::setTime(sal_Int32 parameter, const Time& aVal) void SAL_CALL OPreparedStatement::setTimestamp(sal_Int32 parameter, const DateTime& aVal) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); MYSQL_TIME my_time = {}; @@ -307,7 +306,7 @@ void SAL_CALL OPreparedStatement::setTimestamp(sal_Int32 parameter, const DateTi void SAL_CALL OPreparedStatement::setDouble(sal_Int32 parameter, double x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -319,7 +318,7 @@ void SAL_CALL OPreparedStatement::setDouble(sal_Int32 parameter, double x) void SAL_CALL OPreparedStatement::setFloat(sal_Int32 parameter, float x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -331,7 +330,7 @@ void SAL_CALL OPreparedStatement::setFloat(sal_Int32 parameter, float x) void SAL_CALL OPreparedStatement::setInt(sal_Int32 parameter, sal_Int32 x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -343,7 +342,7 @@ void SAL_CALL OPreparedStatement::setInt(sal_Int32 parameter, sal_Int32 x) void SAL_CALL OPreparedStatement::setLong(sal_Int32 parameter, sal_Int64 aVal) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -355,7 +354,7 @@ void SAL_CALL OPreparedStatement::setLong(sal_Int32 parameter, sal_Int64 aVal) void SAL_CALL OPreparedStatement::setNull(sal_Int32 parameter, sal_Int32 /*sqlType*/) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -367,7 +366,7 @@ void SAL_CALL OPreparedStatement::setNull(sal_Int32 parameter, sal_Int32 /*sqlTy void SAL_CALL OPreparedStatement::setClob(sal_Int32 parameter, const Reference<XClob>& /* x */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setClob", *this); @@ -376,7 +375,7 @@ void SAL_CALL OPreparedStatement::setClob(sal_Int32 parameter, const Reference<X void SAL_CALL OPreparedStatement::setBlob(sal_Int32 parameter, const Reference<XBlob>& /* x */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setBlob", *this); @@ -385,7 +384,7 @@ void SAL_CALL OPreparedStatement::setBlob(sal_Int32 parameter, const Reference<X void SAL_CALL OPreparedStatement::setArray(sal_Int32 parameter, const Reference<XArray>& /* x */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setArray", *this); @@ -394,7 +393,7 @@ void SAL_CALL OPreparedStatement::setArray(sal_Int32 parameter, const Reference< void SAL_CALL OPreparedStatement::setRef(sal_Int32 parameter, const Reference<XRef>& /* x */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setRef", *this); @@ -403,7 +402,7 @@ void SAL_CALL OPreparedStatement::setRef(sal_Int32 parameter, const Reference<XR void SAL_CALL OPreparedStatement::setObjectWithInfo(sal_Int32 parameterIndex, const Any& value, sal_Int32 targetSqlType, sal_Int32 /* scale */) { - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); MutexGuard aGuard(m_aMutex); checkParameterIndex(parameterIndex); @@ -432,7 +431,7 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo(sal_Int32 parameterIndex, co { OString sAscii = OUStringToOString(sValue, getOwnConnection()->getConnectionEncoding()); - std::stringstream sStream{ sAscii.getStr() }; + std::stringstream sStream{ std::string(sAscii) }; sStream >> nValue; m_binds[nIndex].buffer_type = MYSQL_TYPE_DOUBLE; mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &nValue, MYSQL_TYPE_DOUBLE, @@ -457,7 +456,7 @@ void SAL_CALL OPreparedStatement::setObjectNull(sal_Int32 parameter, sal_Int32 / const OUString& /* typeName */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setObjectNull", @@ -467,7 +466,7 @@ void SAL_CALL OPreparedStatement::setObjectNull(sal_Int32 parameter, sal_Int32 / void SAL_CALL OPreparedStatement::setObject(sal_Int32 parameter, const Any& /* x */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setObject", *this); @@ -476,7 +475,7 @@ void SAL_CALL OPreparedStatement::setObject(sal_Int32 parameter, const Any& /* x void SAL_CALL OPreparedStatement::setShort(sal_Int32 parameter, sal_Int16 x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; @@ -488,13 +487,14 @@ void SAL_CALL OPreparedStatement::setShort(sal_Int32 parameter, sal_Int16 x) void SAL_CALL OPreparedStatement::setBytes(sal_Int32 parameter, const Sequence<sal_Int8>& x) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); const sal_Int32 nIndex = parameter - 1; - m_binds[nIndex].buffer_type = MYSQL_TYPE_BLOB; // FIXME - mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x, MYSQL_TYPE_BLOB); + m_binds[nIndex].buffer_type = MYSQL_TYPE_BLOB; + mysqlc_sdbc_driver::resetSqlVar(&m_binds[nIndex].buffer, &x[0], MYSQL_TYPE_BLOB, x.getLength()); m_bindMetas[nIndex].is_null = false; + m_bindMetas[nIndex].length = x.getLength(); } void SAL_CALL OPreparedStatement::setCharacterStream(sal_Int32 parameter, @@ -502,7 +502,7 @@ void SAL_CALL OPreparedStatement::setCharacterStream(sal_Int32 parameter, sal_Int32 /* length */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException( @@ -514,7 +514,7 @@ void SAL_CALL OPreparedStatement::setBinaryStream(sal_Int32 parameter, sal_Int32 /* length */) { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); checkParameterIndex(parameter); mysqlc_sdbc_driver::throwFeatureNotImplementedException("OPreparedStatement::setBinaryStream", @@ -524,7 +524,7 @@ void SAL_CALL OPreparedStatement::setBinaryStream(sal_Int32 parameter, void SAL_CALL OPreparedStatement::clearParameters() { MutexGuard aGuard(m_aMutex); - checkDisposed(OPreparedStatement::rBHelper.bDisposed); + checkDisposed(rBHelper.bDisposed); for (size_t i = 0; i < m_binds.size(); ++i) { @@ -569,7 +569,7 @@ void OPreparedStatement::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, con void OPreparedStatement::checkParameterIndex(sal_Int32 column) { - if (column < 1 || column > static_cast<sal_Int32>(m_paramCount)) + if (column < 1 || o3tl::make_unsigned(column) > m_paramCount) { throw SQLException("Parameter index out of range", *this, OUString(), 1, Any()); } diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx index 78471b1e3208..e1743d91dbc4 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_PREPAREDSTATEMENT_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_PREPAREDSTATEMENT_HXX +#pragma once #include "mysqlc_statement.hxx" #include "mysqlc_resultset.hxx" @@ -31,11 +30,9 @@ namespace connectivity::mysqlc { -using ::com::sun::star::sdbc::SQLException; using ::com::sun::star::sdbc::XResultSetMetaData; using ::com::sun::star::uno::Any; using ::com::sun::star::uno::Reference; -using ::com::sun::star::uno::RuntimeException; using ::com::sun::star::uno::Type; #if defined MYSQL_VERSION_ID && (MYSQL_VERSION_ID >= 80000) && !defined MARIADB_BASE_VERSION @@ -79,8 +76,8 @@ public: //XInterface Any SAL_CALL queryInterface(const Type& rType) override; - void SAL_CALL acquire() throw() override; - void SAL_CALL release() throw() override; + void SAL_CALL acquire() noexcept override; + void SAL_CALL release() noexcept override; //XTypeProvider css::uno::Sequence<Type> SAL_CALL getTypes() override; @@ -154,6 +151,5 @@ public: }; } /* connectivity::mysqlc */ -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_PREPAREDSTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_propertyids.hxx b/connectivity/source/drivers/mysqlc/mysqlc_propertyids.hxx index 8d8b541cfa24..113b28a2fee7 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_propertyids.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_propertyids.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_PROPERTYIDS_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_PROPERTYIDS_HXX +#pragma once // this define has to be set to split the names into different dll's or so's // every dll has his own set of property names @@ -42,6 +41,4 @@ enum } /* connectivity::mysqlc */ -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_PROPERTYIDS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx index 75c229823004..397ea7cbab64 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx @@ -30,6 +30,8 @@ #include <cppuhelper/supportsservice.hxx> #include <cppuhelper/typeprovider.hxx> #include <comphelper/seqstream.hxx> +#include <o3tl/safeint.hxx> +#include <o3tl/string_view.hxx> using namespace rtl; @@ -51,14 +53,13 @@ namespace { // copied from string misc, it should be replaced when library is not an // extension anymore -std::vector<OString> lcl_split(const OString& rStr, char cSeparator) +std::vector<OString> lcl_split(std::string_view rStr, char cSeparator) { std::vector<OString> vec; sal_Int32 idx = 0; do { - OString kw = rStr.getToken(0, cSeparator, idx); - kw = kw.trim(); + OString kw(o3tl::trim(o3tl::getToken(rStr, 0, cSeparator, idx))); if (!kw.isEmpty()) { vec.push_back(kw); @@ -107,7 +108,7 @@ OResultSet::OResultSet(OConnection& rConn, OCommonStatement* pStmt, MYSQL_RES* p : OResultSet_BASE(m_aMutex) , OPropertySetHelper(OResultSet_BASE::rBHelper) , m_pMysql(rConn.getMysqlConnection()) - , m_aStatement(static_cast<OWeakObject*>(pStmt)) + , m_aStatement(css::uno::Reference(cppu::getXWeak(pStmt))) , m_pResult(pResult) , m_encoding(_encoding) { @@ -138,8 +139,8 @@ void OResultSet::ensureFieldInfoFetched() MYSQL_FIELD* pFields = mysql_fetch_fields(m_pResult); m_aFields.reserve(nFieldCount); for (unsigned i = 0; i < nFieldCount; ++i) - m_aFields.push_back(OUString{ - pFields[i].name, static_cast<sal_Int32>(strlen(pFields[i].name)), m_encoding }); + m_aFields.emplace_back(pFields[i].name, static_cast<sal_Int32>(strlen(pFields[i].name)), + m_encoding); } void OResultSet::fetchResult() @@ -155,11 +156,11 @@ void OResultSet::fetchResult() { MYSQL_ROW data = mysql_fetch_row(m_pResult); unsigned long* lengths = mysql_fetch_lengths(m_pResult); - m_aRows.push_back(DataFields{}); + m_aRows.emplace_back(); // MYSQL_ROW is char**, array of strings for (std::size_t col = 0; col < m_aFields.size(); ++col) { - m_aRows.back().push_back(OString{ data[col], static_cast<sal_Int32>(lengths[col]) }); + m_aRows.back().emplace_back(data[col], static_cast<sal_Int32>(lengths[col])); } } unsigned errorNum = mysql_errno(m_pMysql); @@ -181,7 +182,7 @@ void OResultSet::disposing() mysql_free_result(m_pResult); m_pResult = nullptr; } - m_aStatement = nullptr; + m_aStatement.clear(); m_xMetaData = nullptr; } @@ -292,24 +293,23 @@ Date SAL_CALL OResultSet::getDate(sal_Int32 column) if (checkNull(column)) return d; - OString dateStr = m_aRows[m_nRowPosition][column - 1]; + const OString& dateStr = m_aRows[m_nRowPosition][column - 1]; - OString dateString(dateStr); - OString token; + std::string_view dateString(dateStr); sal_Int32 nIndex = 0, i = 0; do { - token = dateString.getToken(0, '-', nIndex); + std::string_view token = o3tl::getToken(dateString, 0, '-', nIndex); switch (i) { case 0: - d.Year = static_cast<sal_uInt16>(token.toUInt32()); + d.Year = static_cast<sal_uInt16>(o3tl::toUInt32(token)); break; case 1: - d.Month = static_cast<sal_uInt16>(token.toUInt32()); + d.Month = static_cast<sal_uInt16>(o3tl::toUInt32(token)); break; case 2: - d.Day = static_cast<sal_uInt16>(token.toUInt32()); + d.Day = static_cast<sal_uInt16>(o3tl::toUInt32(token)); break; default:; } @@ -467,25 +467,28 @@ Time SAL_CALL OResultSet::getTime(sal_Int32 column) if (checkNull(column)) return t; - OString sVal = m_aRows[m_nRowPosition][column - 1]; - OString timeString{ sVal.getStr(), getDataLength(column) }; - OString token; + const OString& sVal = m_aRows[m_nRowPosition][column - 1]; + std::string_view timeString{ sVal.getStr(), o3tl::make_unsigned(getDataLength(column)) }; sal_Int32 nIndex, i = 0; - nIndex = timeString.indexOf(' ') + 1; + size_t idx = timeString.find(' '); + if (idx == std::string_view::npos) + nIndex = 0; + else + nIndex = idx + 1; do { - token = timeString.getToken(0, ':', nIndex); + std::string_view token = o3tl::getToken(timeString, 0, ':', nIndex); switch (i) { case 0: - t.Hours = static_cast<sal_uInt16>(token.toUInt32()); + t.Hours = static_cast<sal_uInt16>(o3tl::toUInt32(token)); break; case 1: - t.Minutes = static_cast<sal_uInt16>(token.toUInt32()); + t.Minutes = static_cast<sal_uInt16>(o3tl::toUInt32(token)); break; case 2: - t.Seconds = static_cast<sal_uInt16>(token.toUInt32()); + t.Seconds = static_cast<sal_uInt16>(o3tl::toUInt32(token)); break; } i++; @@ -506,8 +509,7 @@ DateTime SAL_CALL OResultSet::getTimestamp(sal_Int32 column) OString sVal = m_aRows[m_nRowPosition][column - 1]; // YY-MM-DD HH:MM:SS - std::vector<OString> dateAndTime - = lcl_split(OString{ sVal.getStr(), getDataLength(column) }, ' '); + std::vector<OString> dateAndTime = lcl_split(sVal.subView(0, getDataLength(column)), ' '); auto dateParts = lcl_split(dateAndTime.at(0), '-'); auto timeParts = lcl_split(dateAndTime.at(1), ':'); @@ -1007,21 +1009,16 @@ uno::Sequence<sal_Int32> SAL_CALL OResultSet::deleteRows(const uno::Sequence<Any IPropertyArrayHelper* OResultSet::createArrayHelper() const { - uno::Sequence<Property> aProps(5); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION, - cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE, - cppu::UnoType<bool>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, - cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - pProperties[nPos++] = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE, - cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new OPropertyArrayHelper(aProps); + return new OPropertyArrayHelper{ + { { "FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0 }, + { "FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 }, + { "IsBookmarkable", PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), + PropertyAttribute::READONLY }, + { "ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY }, + { "ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY } } + }; } IPropertyArrayHelper& OResultSet::getInfoHelper() { return *getArrayHelper(); } @@ -1086,9 +1083,9 @@ void OResultSet::getFastPropertyValue(Any& _rValue, sal_Int32 nHandle) const } } -void SAL_CALL OResultSet::acquire() throw() { OResultSet_BASE::acquire(); } +void SAL_CALL OResultSet::acquire() noexcept { OResultSet_BASE::acquire(); } -void SAL_CALL OResultSet::release() throw() { OResultSet_BASE::release(); } +void SAL_CALL OResultSet::release() noexcept { OResultSet_BASE::release(); } css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL OResultSet::getPropertySetInfo() { @@ -1097,7 +1094,7 @@ css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL OResultSet::getProper void OResultSet::checkColumnIndex(sal_Int32 index) { - if (index < 1 || index > static_cast<int>(m_aFields.size())) + if (index < 1 || o3tl::make_unsigned(index) > m_aFields.size()) { /* static object for efficiency or thread safety is a problem ? */ throw SQLException("index out of range", *this, OUString(), 1, Any()); diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx index 3854ad92944b..3e43853d364e 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSET_HXX +#pragma once #include "mysqlc_preparedstatement.hxx" #include "mysqlc_statement.hxx" @@ -41,9 +40,7 @@ namespace connectivity::mysqlc { -using ::com::sun::star::sdbc::SQLException; using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::RuntimeException; /* ** OResultSet @@ -55,7 +52,7 @@ typedef ::cppu::WeakComponentImplHelper12< css::sdbc::XColumnLocate, css::lang::XServiceInfo> OResultSet_BASE; -class OResultSet final : public OBase_Mutex, +class OResultSet final : public cppu::BaseMutex, public OResultSet_BASE, public ::cppu::OPropertySetHelper, public OPropertyArrayUsageHelper<OResultSet> @@ -138,8 +135,8 @@ public: // XInterface Any SAL_CALL queryInterface(const css::uno::Type& rType) override; - void SAL_CALL acquire() throw() override; - void SAL_CALL release() throw() override; + void SAL_CALL acquire() noexcept override; + void SAL_CALL release() noexcept override; //XTypeProvider css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override; @@ -272,6 +269,5 @@ private: }; } /* connectivity::mysqlc */ -#endif // CONNECTIVITY_SRESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx index ab9c2fb39992..21dd0fafc686 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx @@ -21,11 +21,11 @@ #include "mysqlc_general.hxx" #include <com/sun/star/sdbc/XRow.hpp> -#include <rtl/ustrbuf.hxx> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <o3tl/safeint.hxx> using namespace connectivity::mysqlc; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; using namespace com::sun::star::sdbc; OResultSetMetaData::OResultSetMetaData(OConnection& rConn, MYSQL_RES* pResult) @@ -80,11 +80,11 @@ sal_Bool SAL_CALL OResultSetMetaData::isCaseSensitive(sal_Int32 column) { // MYSQL_FIELD::charsetnr is the collation identifier // _ci postfix means it's insensitive - OUStringBuffer sql{ "SHOW COLLATION WHERE Id =" }; - sql.append(OUString::number(m_fields.at(column - 1).charsetNumber)); + OUString sql + = "SHOW COLLATION WHERE Id =" + OUString::number(m_fields.at(column - 1).charsetNumber); Reference<XStatement> stmt = m_rConnection.createStatement(); - Reference<XResultSet> rs = stmt->executeQuery(sql.makeStringAndClear()); + Reference<XResultSet> rs = stmt->executeQuery(sql); Reference<XRow> xRow(rs, UNO_QUERY_THROW); if (!rs->next()) // fetch first and only row @@ -199,7 +199,7 @@ sal_Bool SAL_CALL OResultSetMetaData::isWritable(sal_Int32 column) void OResultSetMetaData::checkColumnIndex(sal_Int32 columnIndex) { auto nColCount = m_fields.size(); - if (columnIndex < 1 || columnIndex > static_cast<sal_Int32>(nColCount)) + if (columnIndex < 1 || o3tl::make_unsigned(columnIndex) > nColCount) { OUString str = "Column index out of range (expected 1 to " + OUString::number(sal_Int32(nColCount)) + ", got " diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx index d08d21c47d92..aa84ac05586c 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSETMETADATA_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSETMETADATA_HXX +#pragma once #include "mysqlc_connection.hxx" @@ -31,10 +30,6 @@ namespace connectivity::mysqlc { -using ::com::sun::star::sdbc::SQLException; -using ::com::sun::star::uno::RuntimeException; -using ::com::sun::star::uno::RuntimeException; - struct MySqlFieldInfo { OUString columnName; @@ -101,6 +96,4 @@ public: }; } -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_RESULTSETMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx b/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx index 5e07982773ce..bcb6d3a6cafc 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx @@ -34,9 +34,7 @@ using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; using namespace com::sun::star::container; -using namespace com::sun::star::io; using namespace com::sun::star::util; using ::osl::MutexGuard; @@ -165,7 +163,7 @@ Reference<XConnection> SAL_CALL OStatement::getConnection() checkDisposed(rBHelper.bDisposed); // just return our connection here - return m_xConnection.get(); + return m_xConnection; } sal_Int32 SAL_CALL OStatement::getUpdateCount() { return m_nAffectedRows; } @@ -282,7 +280,7 @@ Any SAL_CALL OCommonStatement::getWarnings() MutexGuard aGuard(m_aMutex); checkDisposed(rBHelper.bDisposed); - return makeAny(m_aLastWarning); + return Any(m_aLastWarning); } void SAL_CALL OCommonStatement::clearWarnings() @@ -297,31 +295,19 @@ void SAL_CALL OCommonStatement::clearWarnings() { // this properties are define by the service statement // they must in alphabetic order - Sequence<Property> aProps(10); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] - = Property("CursorName", PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] - = Property("EscapeProcessing", PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0); - pProperties[nPos++] = Property("FetchDirection", PROPERTY_ID_FETCHDIRECTION, - cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("MaxFieldSize", PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("MaxRows", PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("QueryTimeOut", PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = Property("ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, - cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] - = Property("UseBookmarks", PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper{ + { { "CursorName", PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0 }, + { "EscapeProcessing", PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0 }, + { "FetchDirection", PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0 }, + { "FetchSize", PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0 }, + { "MaxFieldSize", PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0 }, + { "MaxRows", PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0 }, + { "QueryTimeOut", PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0 }, + { "ResultSetConcurrency", PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), 0 }, + { "ResultSetType", PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0 }, + { "UseBookmarks", PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0 } } + }; } ::cppu::IPropertyArrayHelper& OCommonStatement::getInfoHelper() { return *getArrayHelper(); } @@ -386,13 +372,13 @@ sal_Bool OStatement::supportsService(OUString const& ServiceName) return cppu::supportsService(this, ServiceName); } -void SAL_CALL OCommonStatement::acquire() throw() { OCommonStatement_IBase::acquire(); } +void SAL_CALL OCommonStatement::acquire() noexcept { OCommonStatement_IBase::acquire(); } -void SAL_CALL OCommonStatement::release() throw() { OCommonStatement_IBase::release(); } +void SAL_CALL OCommonStatement::release() noexcept { OCommonStatement_IBase::release(); } -void SAL_CALL OStatement::acquire() throw() { OCommonStatement::acquire(); } +void SAL_CALL OStatement::acquire() noexcept { OCommonStatement::acquire(); } -void SAL_CALL OStatement::release() throw() { OCommonStatement::release(); } +void SAL_CALL OStatement::release() noexcept { OCommonStatement::release(); } Reference<css::beans::XPropertySetInfo> SAL_CALL OCommonStatement::getPropertySetInfo() { diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx index c85e054dd732..c710b0b46a6d 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_STATEMENT_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_STATEMENT_HXX +#pragma once #include "mysqlc_connection.hxx" #include "mysqlc_subcomponent.hxx" @@ -37,10 +36,8 @@ namespace connectivity::mysqlc { -using ::com::sun::star::sdbc::SQLException; using ::com::sun::star::sdbc::SQLWarning; using ::com::sun::star::uno::Any; -using ::com::sun::star::uno::RuntimeException; using ::com::sun::star::uno::Type; typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XWarningsSupplier, css::util::XCancellable, @@ -50,7 +47,7 @@ typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XWarningsSupplier, css::util //************ Class: OCommonStatement // is a base class for the normal statement and for the prepared statement -class OCommonStatement : public OBase_Mutex, +class OCommonStatement : public cppu::BaseMutex, public OCommonStatement_IBase, public ::cppu::OPropertySetHelper, public OPropertyArrayUsageHelper<OCommonStatement> @@ -94,8 +91,8 @@ public: void SAL_CALL disposing() override; // XInterface - void SAL_CALL release() throw() override; - void SAL_CALL acquire() throw() override; + void SAL_CALL release() noexcept override; + void SAL_CALL acquire() noexcept override; Any SAL_CALL queryInterface(const css::uno::Type& rType) override; //XTypeProvider @@ -147,8 +144,8 @@ public: //XInterface Any SAL_CALL queryInterface(const css::uno::Type& rType) override; - void SAL_CALL acquire() throw() override; - void SAL_CALL release() throw() override; + void SAL_CALL acquire() noexcept override; + void SAL_CALL release() noexcept override; //XTypeProvider css::uno::Sequence<Type> SAL_CALL getTypes() override; @@ -172,6 +169,5 @@ public: // css::uno::Sequence<sal_Int32> SAL_CALL executeBatch() override; }; } -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_STATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx index 6d1c07801024..edba70a935ab 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_SUBCOMPONENT_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_SUBCOMPONENT_HXX +#pragma once #include <cppuhelper/propshlp.hxx> #include <osl/diagnose.h> @@ -107,12 +106,6 @@ template <class TYPE>::cppu::IPropertyArrayHelper* OPropertyArrayUsageHelper<TYP return s_pProps; } -class OBase_Mutex -{ -public: - ::osl::Mutex m_aMutex; -}; - namespace internal { template <class T> void implCopySequence(const T* _pSource, T*& _pDest, sal_Int32 _nSourceLen) @@ -142,6 +135,4 @@ css::uno::Sequence<T> concatSequences(const css::uno::Sequence<T>& _rLeft, } } -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_SUBCOMPONENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_table.cxx b/connectivity/source/drivers/mysqlc/mysqlc_table.cxx new file mode 100644 index 000000000000..eedcb35d6164 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_table.cxx @@ -0,0 +1,167 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "mysqlc_columns.hxx" +#include "mysqlc_indexes.hxx" +#include "mysqlc_keys.hxx" +#include "mysqlc_table.hxx" + +#include <TConnection.hxx> + +#include <comphelper/types.hxx> +#include <connectivity/dbtools.hxx> + +#include <com/sun/star/sdbcx/Privilege.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> + +connectivity::mysqlc::Table::Table( + Tables* pTables, osl::Mutex& rMutex, + const css::uno::Reference<OMetaConnection::XConnection>& rConnection) + : OTableHelper(pTables, rConnection, true) + , m_rMutex(rMutex) + , m_nPrivileges(0) +{ + construct(); +} + +connectivity::mysqlc::Table::Table( + Tables* pTables, osl::Mutex& rMutex, + const css::uno::Reference<OMetaConnection::XConnection>& rConnection, const OUString& rCatalog, + const OUString& rSchema, const OUString& rName, const OUString& rType, + const OUString& rDescription) + : OTableHelper(pTables, rConnection, true, rName, rType, rDescription, rSchema, rCatalog) + , m_rMutex(rMutex) + , m_nPrivileges(0) +{ + construct(); +} + +void connectivity::mysqlc::Table::construct() +{ + OTableHelper::construct(); + if (isNew()) + return; + + // TODO: get privileges when in non-embedded mode. + m_nPrivileges = css::sdbcx::Privilege::DROP | css::sdbcx::Privilege::REFERENCE + | css::sdbcx::Privilege::ALTER | css::sdbcx::Privilege::CREATE + | css::sdbcx::Privilege::READ | css::sdbcx::Privilege::DELETE + | css::sdbcx::Privilege::UPDATE | css::sdbcx::Privilege::INSERT + | css::sdbcx::Privilege::SELECT; + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PRIVILEGES), + PROPERTY_ID_PRIVILEGES, css::beans::PropertyAttribute::READONLY, + &m_nPrivileges, cppu::UnoType<decltype(m_nPrivileges)>::get()); +} +//----- OTableHelper --------------------------------------------------------- +connectivity::sdbcx::OCollection* +connectivity::mysqlc::Table::createColumns(const ::std::vector<OUString>& rNames) +{ + return new Columns(*this, m_rMutex, rNames); +} + +connectivity::sdbcx::OCollection* +connectivity::mysqlc::Table::createKeys(const ::std::vector<OUString>& rNames) +{ + return new Keys(this, m_rMutex, rNames); +} + +connectivity::sdbcx::OCollection* +connectivity::mysqlc::Table::createIndexes(const ::std::vector<OUString>& rNames) +{ + return new Indexes(this, m_rMutex, rNames); +} + +//----- XAlterTable ----------------------------------------------------------- +void SAL_CALL connectivity::mysqlc::Table::alterColumnByName( + const OUString& rColName, const css::uno::Reference<XPropertySet>& rDescriptor) +{ + osl::MutexGuard aGuard(m_rMutex); + checkDisposed(WeakComponentImplHelperBase::rBHelper.bDisposed); + + css::uno::Reference<XPropertySet> xColumn(m_xColumns->getByName(rColName), css::uno::UNO_QUERY); + + // sdbcx::Descriptor + const bool bNameChanged + = xColumn->getPropertyValue("Name") != rDescriptor->getPropertyValue("Name"); + // sdbcx::ColumnDescriptor + const bool bTypeChanged + = xColumn->getPropertyValue("Type") != rDescriptor->getPropertyValue("Type"); + const bool bTypeNameChanged = !comphelper::getString(xColumn->getPropertyValue("TypeName")) + .equalsIgnoreAsciiCase(comphelper::getString( + rDescriptor->getPropertyValue("TypeName"))); + const bool bPrecisionChanged + = xColumn->getPropertyValue("Precision") != rDescriptor->getPropertyValue("Precision"); + const bool bScaleChanged + = xColumn->getPropertyValue("Scale") != rDescriptor->getPropertyValue("Scale"); + + const bool bIsNullableChanged + = xColumn->getPropertyValue("IsNullable") != rDescriptor->getPropertyValue("IsNullable"); + + const bool bIsAutoIncrementChanged = xColumn->getPropertyValue("IsAutoIncrement") + != rDescriptor->getPropertyValue("IsAutoIncrement"); + + // there's also DefaultValue but not related to database directly, it seems completely internal to LO + // so no need to test it + // TODO: remainder -- these are all "optional" so have to detect presence and change. + if (bTypeChanged || bTypeNameChanged || bPrecisionChanged || bScaleChanged || bIsNullableChanged + || bIsAutoIncrementChanged) + { + // If bPrecisionChanged this will only succeed if we have increased the + // precision, otherwise an exception is thrown -- however the base + // gui then offers to delete and recreate the column. + OUStringBuffer sSql(300); + sSql.append(getAlterTableColumnPart() + " MODIFY COLUMN `" + rColName + "` " + + ::dbtools::createStandardTypePart(rDescriptor, getConnection())); + + if (comphelper::getBOOL(rDescriptor->getPropertyValue("IsAutoIncrement"))) + sSql.append(" auto_increment"); + + // see ColumnValue: NO_NULLS = 0, NULLABLE = 1, NULLABLE_UNKNOWN + // so entry required = yes corresponds to NO_NULLS = 0 and only in this case + // NOT NULL + if (comphelper::getINT32(rDescriptor->getPropertyValue("IsNullable")) == 0) + sSql.append(" NOT NULL"); + + getConnection()->createStatement()->execute(sSql.makeStringAndClear()); + } + + if (bNameChanged) + { + OUString sNewColName; + rDescriptor->getPropertyValue("Name") >>= sNewColName; + OUString sSql(getAlterTableColumnPart() + " RENAME COLUMN `" + rColName + "` TO `" + + sNewColName + "`"); + + getConnection()->createStatement()->execute(sSql); + } + + m_xColumns->refresh(); +} + +void SAL_CALL connectivity::mysqlc::Table::alterColumnByIndex( + sal_Int32 index, const css::uno::Reference<css::beans::XPropertySet>& descriptor) +{ + osl::MutexGuard aGuard(m_rMutex); + css::uno::Reference<XPropertySet> xColumn(m_xColumns->getByIndex(index), + css::uno::UNO_QUERY_THROW); + alterColumnByName(comphelper::getString(xColumn->getPropertyValue( + OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME))), + descriptor); +} + +OUString connectivity::mysqlc::Table::getAlterTableColumnPart() const +{ + return "ALTER TABLE " + + ::dbtools::composeTableName(getMetaData(), m_CatalogName, m_SchemaName, m_Name, true, + ::dbtools::EComposeRule::InTableDefinitions); +} + +OUString connectivity::mysqlc::Table::getRenameStart() const { return "RENAME TABLE "; } + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_table.hxx b/connectivity/source/drivers/mysqlc/mysqlc_table.hxx new file mode 100644 index 000000000000..7487f1bc7b34 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_table.hxx @@ -0,0 +1,69 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include "mysqlc_tables.hxx" + +#include <connectivity/TTableHelper.hxx> + +namespace connectivity::mysqlc +{ +class Table : public OTableHelper +{ +private: + ::osl::Mutex& m_rMutex; + sal_Int32 m_nPrivileges; + +protected: + void construct() override; + +public: + Table(Tables* pTables, ::osl::Mutex& rMutex, + const css::uno::Reference<css::sdbc::XConnection>& _xConnection); + Table(Tables* pTables, ::osl::Mutex& rMutex, + const css::uno::Reference<css::sdbc::XConnection>& _xConnection, const OUString& rCatalog, + const OUString& rSchema, const OUString& rName, const OUString& rType, + const OUString& rDescription); + + // OTableHelper + virtual ::connectivity::sdbcx::OCollection* + createColumns(const ::std::vector<OUString>& rNames) override; + virtual ::connectivity::sdbcx::OCollection* + createKeys(const ::std::vector<OUString>& rNames) override; + virtual ::connectivity::sdbcx::OCollection* + createIndexes(const ::std::vector<OUString>& rNames) override; + + /** Returns always "RENAME TABLE " even for views. + * + * \return The start of the rename statement. + * @see http://dev.mysql.com/doc/refman/5.1/de/rename-table.html + */ + virtual OUString getRenameStart() const override; + + // XAlterTable + /** + * See css::sdbcx::ColumnDescriptor for details of + * rDescriptor. + */ + virtual void SAL_CALL + alterColumnByName(const OUString& rColName, + const css::uno::Reference<css::beans::XPropertySet>& rDescriptor) override; + + virtual void SAL_CALL alterColumnByIndex( + sal_Int32 index, const css::uno::Reference<css::beans::XPropertySet>& descriptor) override; + + /** returns the ALTER TABLE XXX statement + */ + OUString getAlterTableColumnPart() const; +}; + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_tables.cxx b/connectivity/source/drivers/mysqlc/mysqlc_tables.cxx new file mode 100644 index 000000000000..81498978d3a5 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_tables.cxx @@ -0,0 +1,157 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include "mysqlc_table.hxx" +#include "mysqlc_tables.hxx" +#include "mysqlc_catalog.hxx" + +#include <TConnection.hxx> + +#include <connectivity/dbtools.hxx> + +#include <com/sun/star/sdbc/XRow.hpp> +#include <com/sun/star/sdbc/ColumnValue.hpp> +#include <comphelper/types.hxx> + +//----- OCollection ----------------------------------------------------------- +void connectivity::mysqlc::Tables::impl_refresh() +{ + static_cast<Catalog&>(m_rParent).refreshTables(); +} + +static void lcl_unescape(OUString& rName) +{ + // Remove ending ` if there's one + sal_Int32 nLastIndexBacktick = rName.lastIndexOf("`"); + if ((nLastIndexBacktick > 0) && (nLastIndexBacktick == (rName.getLength() - 1))) + { + rName = rName.copy(0, nLastIndexBacktick); + } + + // Remove beginning ` + nLastIndexBacktick = rName.indexOf("`"); + if (nLastIndexBacktick == 0) + { + rName = rName.copy(1, rName.getLength() - 1); + } + + // Replace double ` by simple ` + rName = rName.replaceAll("``", "`"); +} + +connectivity::sdbcx::ObjectType connectivity::mysqlc::Tables::createObject(const OUString& rName) +{ + OUString sCatalog, sSchema, sTable; + ::dbtools::qualifiedNameComponents(m_xMetaData, rName, sCatalog, sSchema, sTable, + ::dbtools::EComposeRule::InDataManipulation); + + css::uno::Any aCatalog; + if (!sCatalog.isEmpty()) + { + lcl_unescape(sCatalog); + aCatalog <<= sCatalog; + } + + lcl_unescape(sSchema); + lcl_unescape(sTable); + + // Only retrieving a single table, so table type is irrelevant (param 4) + css::uno::Reference<css::sdbc::XResultSet> xTables + = m_xMetaData->getTables(aCatalog, sSchema, sTable, css::uno::Sequence<OUString>()); + + if (!xTables.is()) + throw css::uno::RuntimeException("Could not acquire table."); + + css::uno::Reference<css::sdbc::XRow> xRow(xTables, css::uno::UNO_QUERY_THROW); + + if (!xTables->next()) + throw css::uno::RuntimeException(); + + connectivity::sdbcx::ObjectType xRet( + new Table(this, m_rMutex, m_xMetaData->getConnection(), + xRow->getString(1), // Catalog + xRow->getString(2), // Schema + xRow->getString(3), // Name + xRow->getString(4), // Type + xRow->getString(5))); // Description / Remarks / Comments + + if (xTables->next()) + throw css::uno::RuntimeException("Found more tables than expected."); + + return xRet; +} + +css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Tables::createDescriptor() +{ + // There is some internal magic so that the same class can be used as either + // a descriptor or as a normal table. See VTable.cxx for the details. In our + // case we just need to ensure we use the correct constructor. + return new Table(this, m_rMutex, m_xMetaData->getConnection()); +} + +//----- XAppend --------------------------------------------------------------- +void connectivity::mysqlc::Tables::createTable( + const css::uno::Reference<css::beans::XPropertySet>& descriptor) +{ + const css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection(); + OUString aSql = ::dbtools::createSqlCreateTableStatement(descriptor, xConnection); + + css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement(); + if (xStmt.is()) + { + xStmt->execute(aSql); + ::comphelper::disposeComponent(xStmt); + } +} + +// XAppend +connectivity::sdbcx::ObjectType connectivity::mysqlc::Tables::appendObject( + const OUString& _rForName, const css::uno::Reference<css::beans::XPropertySet>& descriptor) +{ + createTable(descriptor); + return createObject(_rForName); +} + +void connectivity::mysqlc::Tables::appendNew(const OUString& _rsNewTable) +{ + insertElement(_rsNewTable, nullptr); + + // notify our container listeners + css::container::ContainerEvent aEvent(static_cast<XContainer*>(this), + css::uno::Any(_rsNewTable), css::uno::Any(), + css::uno::Any()); + comphelper::OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); + while (aListenerLoop.hasMoreElements()) + aListenerLoop.next()->elementInserted(aEvent); +} + +OUString +connectivity::mysqlc::Tables::getNameForObject(const connectivity::sdbcx::ObjectType& _xObject) +{ + OSL_ENSURE(_xObject.is(), "OTables::getNameForObject: Object is NULL!"); + return ::dbtools::composeTableName(m_xMetaData, _xObject, + ::dbtools::EComposeRule::InDataManipulation, false) + .replaceAll(u"`", u"Ì€ `"); +} + +//----- XDrop ----------------------------------------------------------------- +void connectivity::mysqlc::Tables::dropObject(sal_Int32 nPosition, const OUString& sName) +{ + css::uno::Reference<css::beans::XPropertySet> xTable(getObject(nPosition)); + + if (connectivity::sdbcx::ODescriptor::isNew(xTable)) + return; + + OUString sType; + xTable->getPropertyValue("Type") >>= sType; + + m_xMetaData->getConnection()->createStatement()->execute("DROP " + sType + " " + sName); +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_tables.hxx b/connectivity/source/drivers/mysqlc/mysqlc_tables.hxx new file mode 100644 index 000000000000..8b05c5afaf9f --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_tables.hxx @@ -0,0 +1,57 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> + +#include <connectivity/sdbcx/VCollection.hxx> +#include <utility> + +namespace connectivity::mysqlc +{ +/** +* This implements com.sun.star.sdbcx.Container, which seems to be +* also known by the name of Tables and Collection. +*/ +class Tables : public ::connectivity::sdbcx::OCollection +{ +protected: + css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData; + + // OCollection + virtual void impl_refresh() override; + virtual ::connectivity::sdbcx::ObjectType createObject(const OUString& rName) override; + virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override; + virtual ::connectivity::sdbcx::ObjectType + appendObject(const OUString& rName, + const css::uno::Reference<css::beans::XPropertySet>& rDescriptor) override; + + void createTable(const css::uno::Reference<css::beans::XPropertySet>& descriptor); + virtual OUString getNameForObject(const sdbcx::ObjectType& _xObject) override; + // XDrop + virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override; + +public: + Tables(css::uno::Reference<css::sdbc::XDatabaseMetaData> xMetaData, + ::cppu::OWeakObject& rParent, ::osl::Mutex& rMutex, + ::std::vector<OUString> const& rNames) + : sdbcx::OCollection(rParent, true, rMutex, rNames) + , m_xMetaData(std::move(xMetaData)) + { + } + + void appendNew(const OUString& _rsNewTable); + // TODO: should we also implement XDataDescriptorFactory, XRefreshable, + // XAppend, etc. ? +}; + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_types.cxx b/connectivity/source/drivers/mysqlc/mysqlc_types.cxx index 219e0d553d41..ca473cebd84f 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_types.cxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_types.cxx @@ -673,6 +673,27 @@ TypeInfoDef const mysqlc_types[] = { }, // ----------- MySQL-Type: TIMESTAMP SDBC-Type: TIMESTAMP ---------- + + // ----------- MySQL-Type: YEAR SDBC-Type: INTEGER ---------- + { + "YEAR", // Typename + com::sun::star::sdbc::DataType::SMALLINT, // sdbc-type + 10, // Precision + "", // Literal prefix + "", // Literal suffix + "[(M)] [UNSIGNED] [ZEROFILL]", // Create params + com::sun::star::sdbc::ColumnValue::NULLABLE, // nullable + false, // case sensitive + com::sun::star::sdbc::ColumnSearch::FULL, // searchable + true, // unsignable + false, // fixed_prec_scale + true, // auto_increment + "YEAR", // local type name + 0, // minimum scale + 0 // maximum scale + }, + + // ----------- MySQL-Type: YEAR SDBC-Type: INTEGER ---------- { nullptr, 0, 0, nullptr, nullptr, nullptr, 0, false, 0, false, false, false, nullptr, 0, 0 } }; diff --git a/connectivity/source/drivers/mysqlc/mysqlc_types.hxx b/connectivity/source/drivers/mysqlc/mysqlc_types.hxx index 5f577ee0352b..9f2db7715fe6 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_types.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_types.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_MYSQLC_SOURCE_MYSQLC_TYPES_HXX -#define INCLUDED_MYSQLC_SOURCE_MYSQLC_TYPES_HXX +#pragma once #include <sal/types.h> @@ -43,6 +42,4 @@ struct TypeInfoDef extern TypeInfoDef const mysqlc_types[]; -#endif // INCLUDED_MYSQLC_SOURCE_MYSQLC_TYPES_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_user.cxx b/connectivity/source/drivers/mysqlc/mysqlc_user.cxx new file mode 100644 index 000000000000..6e8c3d734a67 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_user.cxx @@ -0,0 +1,211 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <utility> + +#include "mysqlc_user.hxx" +#include <comphelper/types.hxx> +#include <connectivity/dbtools.hxx> +#include <com/sun/star/sdbc/XRow.hpp> +#include <com/sun/star/sdbcx/Privilege.hpp> +#include <com/sun/star/sdbcx/PrivilegeObject.hpp> +#include <TConnection.hxx> + +using namespace ::connectivity; +using namespace ::connectivity::mysqlc; +using namespace ::connectivity::sdbcx; + +using namespace ::com::sun::star; +using namespace ::com::sun::star::sdbc; +using namespace ::com::sun::star::sdbcx; + +User::User(css::uno::Reference<css::sdbc::XConnection> xConnection) + : OUser(true) // Case Sensitive + , m_xConnection(std::move(xConnection)) +{ +} + +User::User(css::uno::Reference<css::sdbc::XConnection> xConnection, const OUString& rName) + : OUser(rName, + true) // Case Sensitive + , m_xConnection(std::move(xConnection)) +{ +} + +OUserExtend::OUserExtend(const css::uno::Reference<css::sdbc::XConnection>& xConnection, + const OUString& rName) + : User(xConnection, rName) +{ + construct(); +} + +void OUserExtend::construct() +{ + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME), + PROPERTY_ID_NAME, 0, &m_Name, ::cppu::UnoType<OUString>::get()); + + registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD), + PROPERTY_ID_PASSWORD, 0, &m_Password, ::cppu::UnoType<OUString>::get()); +} + +void User::changePassword(const OUString& /* oldPassword */, const OUString& newPassword) +{ + css::uno::Reference<XStatement> statement = m_xConnection->createStatement(); + statement->execute("SET PASSWORD FOR " + m_Name + " = PASSWORD('" + newPassword + "')"); + ::comphelper::disposeComponent(statement); +} + +cppu::IPropertyArrayHelper* OUserExtend::createArrayHelper() const +{ + css::uno::Sequence<css::beans::Property> aProps; + describeProperties(aProps); + return new cppu::OPropertyArrayHelper(aProps); +} + +cppu::IPropertyArrayHelper& OUserExtend::getInfoHelper() +{ + return *OUserExtend_PROP::getArrayHelper(); +} + +typedef connectivity::sdbcx::OUser_BASE OUser_BASE_RBHELPER; + +sal_Int32 SAL_CALL User::getPrivileges(const OUString& objName, sal_Int32 objType) +{ + ::osl::MutexGuard aGuard(m_aMutex); + checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed); + + sal_Int32 nRights, nRightsWithGrant; + findPrivilegesAndGrantPrivileges(objName, objType, nRights, nRightsWithGrant); + return nRights; +} + +void User::findPrivilegesAndGrantPrivileges(const OUString& objName, sal_Int32 objType, + sal_Int32& nRights, sal_Int32& nRightsWithGrant) +{ + nRightsWithGrant = nRights = 0; + // first we need to create the sql stmt to select the privs + css::uno::Reference<XDatabaseMetaData> xMeta = m_xConnection->getMetaData(); + OUString sCatalog, sSchema, sTable; + ::dbtools::qualifiedNameComponents(xMeta, objName, sCatalog, sSchema, sTable, + ::dbtools::EComposeRule::InDataManipulation); + css::uno::Reference<XResultSet> xRes; + switch (objType) + { + case css::sdbcx::PrivilegeObject::TABLE: + case css::sdbcx::PrivilegeObject::VIEW: + { + css::uno::Any aCatalog; + if (!sCatalog.isEmpty()) + aCatalog <<= sCatalog; + xRes = xMeta->getTablePrivileges(aCatalog, sSchema, sTable); + } + break; + + case css::sdbcx::PrivilegeObject::COLUMN: + { + css::uno::Any aCatalog; + if (!sCatalog.isEmpty()) + aCatalog <<= sCatalog; + xRes = xMeta->getColumnPrivileges(aCatalog, sSchema, sTable, "%"); + } + break; + } + + if (!xRes.is()) + return; + + static const char sYes[] = "YES"; + + nRightsWithGrant = nRights = 0; + + css::uno::Reference<XRow> xCurrentRow(xRes, css::uno::UNO_QUERY); + while (xCurrentRow.is() && xRes->next()) + { + OUString sGrantee = xCurrentRow->getString(5); + OUString sPrivilege = xCurrentRow->getString(6); + OUString sGrantable = xCurrentRow->getString(7); + + if (!m_Name.equalsIgnoreAsciiCase(sGrantee)) + continue; + + if (sPrivilege.equalsIgnoreAsciiCase("SELECT")) + { + nRights |= Privilege::SELECT; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::SELECT; + } + else if (sPrivilege.equalsIgnoreAsciiCase("INSERT")) + { + nRights |= Privilege::INSERT; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::INSERT; + } + else if (sPrivilege.equalsIgnoreAsciiCase("UPDATE")) + { + nRights |= Privilege::UPDATE; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::UPDATE; + } + else if (sPrivilege.equalsIgnoreAsciiCase("DELETE")) + { + nRights |= Privilege::DELETE; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::DELETE; + } + else if (sPrivilege.equalsIgnoreAsciiCase("READ")) + { + nRights |= Privilege::READ; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::READ; + } + else if (sPrivilege.equalsIgnoreAsciiCase("CREATE")) + { + nRights |= Privilege::CREATE; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::CREATE; + } + else if (sPrivilege.equalsIgnoreAsciiCase("ALTER")) + { + nRights |= Privilege::ALTER; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::ALTER; + } + else if (sPrivilege.equalsIgnoreAsciiCase("REFERENCES")) + { + nRights |= Privilege::REFERENCE; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::REFERENCE; + } + else if (sPrivilege.equalsIgnoreAsciiCase("DROP")) + { + nRights |= Privilege::DROP; + if (sGrantable.equalsIgnoreAsciiCase(sYes)) + nRightsWithGrant |= Privilege::DROP; + } + } + ::comphelper::disposeComponent(xRes); +} + +sal_Int32 SAL_CALL User::getGrantablePrivileges(const OUString& objName, sal_Int32 objType) +{ + ::osl::MutexGuard aGuard(m_aMutex); + checkDisposed(OUser_BASE_RBHELPER::rBHelper.bDisposed); + + sal_Int32 nRights, nRightsWithGrant; + findPrivilegesAndGrantPrivileges(objName, objType, nRights, nRightsWithGrant); + return nRightsWithGrant; +} + +//----- IRefreshableGroups ---------------------------------------------------- +void User::refreshGroups() +{ + // TODO: implement. +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_user.hxx b/connectivity/source/drivers/mysqlc/mysqlc_user.hxx new file mode 100644 index 000000000000..6bebbaa64a11 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_user.hxx @@ -0,0 +1,71 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <sdbcx/VUser.hxx> +#include <com/sun/star/sdbc/XConnection.hpp> + +namespace connectivity::mysqlc +{ +/** +* This implements com.sun.star.sdbcx.Container. +*/ +class User : public ::connectivity::sdbcx::OUser +{ + css::uno::Reference<css::sdbc::XConnection> m_xConnection; + +public: + /** + * Create a "new" descriptor, which isn't yet in the database. + */ + User(css::uno::Reference<css::sdbc::XConnection> xConnection); + /** + * For a user that already exists in the db. + */ + User(css::uno::Reference<css::sdbc::XConnection> xConnection, const OUString& rName); + + // XAuthorizable + virtual void SAL_CALL changePassword(const OUString&, const OUString& newPassword) override; + virtual sal_Int32 SAL_CALL getPrivileges(const OUString&, sal_Int32) override; + // return the privileges and additional the grant rights + /// @throws css::sdbc::SQLException + /// @throws css::uno::RuntimeException + void findPrivilegesAndGrantPrivileges(const OUString& objName, sal_Int32 objType, + sal_Int32& nRights, sal_Int32& nRightsWithGrant); + + virtual sal_Int32 SAL_CALL getGrantablePrivileges(const OUString&, sal_Int32) override; + + // IRefreshableGroups:: + virtual void refreshGroups() override; +}; + +class OUserExtend; +typedef ::comphelper::OPropertyArrayUsageHelper<OUserExtend> OUserExtend_PROP; + +class OUserExtend : public User, public OUserExtend_PROP +{ + OUString m_Password; + +protected: + // OPropertyArrayUsageHelper + virtual ::cppu::IPropertyArrayHelper* createArrayHelper() const override; + // OPropertySetHelper + virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() override; + +public: + OUserExtend(const css::uno::Reference<css::sdbc::XConnection>& _xConnection, + const OUString& rName); + + virtual void construct() override; +}; + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_users.cxx b/connectivity/source/drivers/mysqlc/mysqlc_users.cxx new file mode 100644 index 000000000000..296377c1be94 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_users.cxx @@ -0,0 +1,93 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#include <utility> + +#include "mysqlc_user.hxx" +#include "mysqlc_users.hxx" +#include <comphelper/types.hxx> +#include <connectivity/dbtools.hxx> +#include <TConnection.hxx> + +using namespace ::connectivity; +using namespace ::connectivity::mysqlc; +using namespace ::connectivity::sdbcx; +using namespace ::cppu; +using namespace ::osl; +using namespace ::com::sun::star; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::sdbc; +using namespace ::com::sun::star::uno; + +Users::Users(const uno::Reference<XDatabaseMetaData>& rMetaData, OWeakObject& rParent, + Mutex& rMutex, ::std::vector<OUString> const& rNames) + : OCollection(rParent, true, rMutex, rNames) + , m_xMetaData(rMetaData) +{ +} + +//----- OCollection ----------------------------------------------------------- +void Users::impl_refresh() +{ + // TODO: IMPLEMENT ME +} + +ObjectType Users::createObject(const OUString& rName) +{ + return new OUserExtend(m_xMetaData->getConnection(), rName); +} + +uno::Reference<XPropertySet> Users::createDescriptor() +{ + // There is some internal magic so that the same class can be used as either + // a descriptor or as a normal user. See VUser.cxx for the details. In our + // case we just need to ensure we use the correct constructor. + return new OUserExtend(m_xMetaData->getConnection(), ""); +} + +//----- XAppend --------------------------------------------------------------- +ObjectType Users::appendObject(const OUString& rName, + const uno::Reference<XPropertySet>& descriptor) +{ + OUString aSql("GRANT USAGE ON * TO "); + OUString aQuote = m_xMetaData->getIdentifierQuoteString(); + aSql += ::dbtools::quoteName(aQuote, rName) + " @\"%\" "; + OUString sPassword; + descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_PASSWORD)) + >>= sPassword; + if (!sPassword.isEmpty()) + { + aSql += " IDENTIFIED BY '" + sPassword + "'"; + } + + Reference<XStatement> statement = m_xMetaData->getConnection()->createStatement(); + if (statement.is()) + statement->execute(aSql); + ::comphelper::disposeComponent(statement); + + return createObject(rName); +} + +//----- XDrop ----------------------------------------------------------------- +void Users::dropObject(sal_Int32 nPosition, const OUString& rName) +{ + uno::Reference<XPropertySet> xUser(getObject(nPosition)); + + if (!ODescriptor::isNew(xUser)) + { + Reference<XStatement> statement = m_xMetaData->getConnection()->createStatement(); + if (statement.is()) + { + statement->execute("DROP USER " + rName); + ::comphelper::disposeComponent(statement); + } + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_users.hxx b/connectivity/source/drivers/mysqlc/mysqlc_users.hxx new file mode 100644 index 000000000000..d4c4d3558e42 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_users.hxx @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +#pragma once + +#include <connectivity/sdbcx/VCollection.hxx> +#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> + +namespace connectivity::mysqlc +{ +class Users : public ::connectivity::sdbcx::OCollection +{ + css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData; + +protected: + // OCollection + virtual void impl_refresh() override; + virtual ::connectivity::sdbcx::ObjectType createObject(const OUString& rName) override; + virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override; + virtual ::connectivity::sdbcx::ObjectType + appendObject(const OUString& rName, + const css::uno::Reference<css::beans::XPropertySet>& rDescriptor) override; + +public: + Users(const css::uno::Reference<css::sdbc::XDatabaseMetaData>& rMetaData, + ::cppu::OWeakObject& rParent, ::osl::Mutex& rMutex, + ::std::vector<OUString> const& rNames); + + // TODO: we should also implement XDataDescriptorFactory, XRefreshable, + // XAppend, etc., but all are optional. + + // XDrop + virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override; +}; +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_view.cxx b/connectivity/source/drivers/mysqlc/mysqlc_view.cxx new file mode 100644 index 000000000000..86837381d2bc --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_view.cxx @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "mysqlc_view.hxx" + +#include <propertyids.hxx> + +#include <com/sun/star/sdbc/XRow.hpp> + +namespace connectivity::mysqlc +{ +View::View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive, + const OUString& _rSchemaName, const OUString& _rName) + : View_Base(_bCaseSensitive, _rName, _rxConnection->getMetaData(), OUString(), _rSchemaName, + OUString()) + , m_xConnection(_rxConnection) +{ +} + +View::~View() {} + +void SAL_CALL View::acquire() noexcept { View_Base::acquire(); }; +void SAL_CALL View::release() noexcept { View_Base::release(); }; +css::uno::Any SAL_CALL View::queryInterface(const css::uno::Type& _rType) +{ + css::uno::Any aReturn = View_Base::queryInterface(_rType); + if (!aReturn.hasValue()) + aReturn = View_IBASE::queryInterface(_rType); + return aReturn; +} + +css::uno::Sequence<css::uno::Type> SAL_CALL View::getTypes() +{ + return ::comphelper::concatSequences(View_Base::getTypes(), View_IBASE::getTypes()); +} + +css::uno::Sequence<sal_Int8> SAL_CALL View::getImplementationId() +{ + return css::uno::Sequence<sal_Int8>(); +} + +void SAL_CALL View::alterCommand(const OUString& _rNewCommand) +{ + OUString aCommand = "ALTER VIEW " + m_SchemaName + "." + m_Name + " AS " + _rNewCommand; + m_xMetaData->getConnection()->createStatement()->execute(aCommand); +} + +void SAL_CALL View::getFastPropertyValue(css::uno::Any& _rValue, sal_Int32 _nHandle) const +{ + if (_nHandle == PROPERTY_ID_COMMAND) + { + // retrieve the very current command, don't rely on the base classes cached value + // (which we initialized empty, anyway) + _rValue <<= impl_getCommand(); + return; + } + + View_Base::getFastPropertyValue(_rValue, _nHandle); +} + +OUString View::impl_getCommand() const +{ + OUString aCommand("SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = '" + + m_SchemaName + "' AND TABLE_NAME = '" + m_Name + "'"); + //::utl::SharedUNOComponent< XStatement > xStatement; xStatement.set( m_xConnection->createStatement(), UNO_QUERY_THROW ); + css::uno::Reference<css::sdbc::XResultSet> xResult( + m_xMetaData->getConnection()->createStatement()->executeQuery(aCommand), + css::uno::UNO_SET_THROW); + if (!xResult->next()) + { + // hmm. There is no view the name as we know it. Can only mean some other instance + // dropped this view meanwhile... + std::abort(); + } + + css::uno::Reference<css::sdbc::XRow> xRow(xResult, css::uno::UNO_QUERY_THROW); + return xRow->getString(1); +} + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_view.hxx b/connectivity/source/drivers/mysqlc/mysqlc_view.hxx new file mode 100644 index 000000000000..8450152499c0 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_view.hxx @@ -0,0 +1,72 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <connectivity/sdbcx/VView.hxx> + +#include <com/sun/star/sdbcx/XAlterView.hpp> +#include <com/sun/star/sdbc/XConnection.hpp> + +#include <comphelper/sequence.hxx> +#include <cppuhelper/implbase1.hxx> + +namespace connectivity::mysqlc +{ +typedef ::connectivity::sdbcx::OView View_Base; +typedef ::cppu::ImplHelper1<css::sdbcx::XAlterView> View_IBASE; + +class View : public View_Base, public View_IBASE +{ +public: + View(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, bool _bCaseSensitive, + const OUString& _rSchemaName, const OUString& _rName); + + // UNO + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& aType) override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; + + virtual css::uno::Sequence<css::uno::Type> SAL_CALL getTypes() override; + virtual css::uno::Sequence<sal_Int8> SAL_CALL getImplementationId() override; + + // XAlterView + virtual void SAL_CALL alterCommand(const OUString& NewCommand) override; + +protected: + virtual ~View() override; + +protected: + // OPropertyContainer + virtual void SAL_CALL getFastPropertyValue(css::uno::Any& _rValue, + sal_Int32 _nHandle) const override; + +private: + /** retrieves the current command of the View */ + OUString impl_getCommand() const; + +private: + css::uno::Reference<css::sdbc::XConnection> m_xConnection; + + using View_Base::getFastPropertyValue; +}; + +} // namespace connectivity::mysqlc + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_views.cxx b/connectivity/source/drivers/mysqlc/mysqlc_views.cxx new file mode 100644 index 000000000000..1c79c9225d44 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_views.cxx @@ -0,0 +1,113 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#include "mysqlc_tables.hxx" +#include "mysqlc_views.hxx" +#include "mysqlc_view.hxx" +#include "mysqlc_catalog.hxx" +#include <connectivity/dbtools.hxx> +#include <comphelper/types.hxx> +#include <TConnection.hxx> + +connectivity::mysqlc::Views::Views(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, + ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, + const ::std::vector<OUString>& _rVector) + : sdbcx::OCollection(_rParent, true, _rMutex, _rVector) + , m_xConnection(_rxConnection) + , m_xMetaData(_rxConnection->getMetaData()) +{ +} + +connectivity::sdbcx::ObjectType connectivity::mysqlc::Views::createObject(const OUString& _rName) +{ + OUString sCatalog, sSchema, sTable; + ::dbtools::qualifiedNameComponents(m_xMetaData, _rName, sCatalog, sSchema, sTable, + ::dbtools::EComposeRule::InDataManipulation); + return new View(m_xConnection, isCaseSensitive(), sSchema, sTable); +} + +void connectivity::mysqlc::Views::impl_refresh() +{ + static_cast<Catalog&>(m_rParent).refreshViews(); +} + +css::uno::Reference<css::beans::XPropertySet> connectivity::mysqlc::Views::createDescriptor() +{ + return new connectivity::sdbcx::OView(true, m_xMetaData); +} + +// XAppend +connectivity::sdbcx::ObjectType connectivity::mysqlc::Views::appendObject( + const OUString& _rForName, const css::uno::Reference<css::beans::XPropertySet>& descriptor) +{ + createView(descriptor); + return createObject(_rForName); +} + +// XDrop +void connectivity::mysqlc::Views::dropObject(sal_Int32 _nPos, const OUString& /*_sElementName*/) +{ + css::uno::Reference<XInterface> xObject(getObject(_nPos)); + bool bIsNew = connectivity::sdbcx::ODescriptor::isNew(xObject); + if (!bIsNew) + { + OUString aSql("DROP VIEW"); + + css::uno::Reference<css::beans::XPropertySet> xProp(xObject, css::uno::UNO_QUERY); + aSql += ::dbtools::composeTableName(m_xMetaData, xProp, + ::dbtools::EComposeRule::InTableDefinitions, true); + + css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection(); + css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement(); + xStmt->execute(aSql); + ::comphelper::disposeComponent(xStmt); + } +} + +void connectivity::mysqlc::Views::createView( + const css::uno::Reference<css::beans::XPropertySet>& descriptor) +{ + css::uno::Reference<css::sdbc::XConnection> xConnection = m_xMetaData->getConnection(); + + OUString sCommand; + descriptor->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_COMMAND)) + >>= sCommand; + + OUString aSql = "CREATE VIEW " + + ::dbtools::composeTableName(m_xMetaData, descriptor, + ::dbtools::EComposeRule::InTableDefinitions, true) + + " AS " + sCommand; + + css::uno::Reference<css::sdbc::XStatement> xStmt = xConnection->createStatement(); + if (xStmt.is()) + { + xStmt->execute(aSql); + ::comphelper::disposeComponent(xStmt); + } + connectivity::mysqlc::Tables* pTables = static_cast<connectivity::mysqlc::Tables*>( + static_cast<connectivity::mysqlc::Catalog&>(m_rParent).getPrivateTables()); + if (pTables) + { + OUString sName = ::dbtools::composeTableName( + m_xMetaData, descriptor, ::dbtools::EComposeRule::InDataManipulation, false); + pTables->appendNew(sName); + } +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_views.hxx b/connectivity/source/drivers/mysqlc/mysqlc_views.hxx new file mode 100644 index 000000000000..14570fc8d9a9 --- /dev/null +++ b/connectivity/source/drivers/mysqlc/mysqlc_views.hxx @@ -0,0 +1,50 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ +#pragma once + +#include <connectivity/sdbcx/VCollection.hxx> +#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +namespace connectivity::mysqlc +{ +class Views final : public connectivity::sdbcx::OCollection +{ + css::uno::Reference<css::sdbc::XConnection> m_xConnection; + css::uno::Reference<css::sdbc::XDatabaseMetaData> m_xMetaData; + + // OCollection + virtual connectivity::sdbcx::ObjectType createObject(const OUString& _rName) override; + virtual void impl_refresh() override; + virtual css::uno::Reference<css::beans::XPropertySet> createDescriptor() override; + virtual sdbcx::ObjectType + appendObject(const OUString& _rForName, + const css::uno::Reference<css::beans::XPropertySet>& descriptor) override; + + void createView(const css::uno::Reference<css::beans::XPropertySet>& descriptor); + +public: + Views(const css::uno::Reference<css::sdbc::XConnection>& _rxConnection, + ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, + const ::std::vector<OUString>& _rVector); + + // XDrop + virtual void dropObject(sal_Int32 _nPos, const OUString& _sElementName) override; +}; +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/odbc/OConnection.cxx b/connectivity/source/drivers/odbc/OConnection.cxx index 7ae8c46802e2..b483165212b4 100644 --- a/connectivity/source/drivers/odbc/OConnection.cxx +++ b/connectivity/source/drivers/odbc/OConnection.cxx @@ -37,7 +37,6 @@ using namespace dbtools; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; @@ -98,7 +97,7 @@ SQLRETURN OConnection::OpenConnection(const OUString& aConnectStr, sal_Int32 nTi memcpy(szConnStrIn, aConStr.getStr(), std::min<sal_Int32>(sal_Int32(2048),aConStr.getLength())); #ifndef MACOSX - N3SQLSetConnectAttr(m_aConnectionHandle,SQL_ATTR_LOGIN_TIMEOUT,reinterpret_cast<SQLPOINTER>(nTimeOut),SQL_IS_UINTEGER); + N3SQLSetConnectAttr(m_aConnectionHandle,SQL_ATTR_LOGIN_TIMEOUT,reinterpret_cast<SQLPOINTER>(static_cast<sal_IntPtr>(nTimeOut)),SQL_IS_UINTEGER); #else (void)nTimeOut; /* WaE */ #endif @@ -312,10 +311,10 @@ void SAL_CALL OConnection::setAutoCommit( sal_Bool autoCommit ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - + const sal_IntPtr nAutocommit = autoCommit ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF; OTools::ThrowException(this,N3SQLSetConnectAttr(m_aConnectionHandle, SQL_ATTR_AUTOCOMMIT, - reinterpret_cast<SQLPOINTER>((autoCommit) ? SQL_AUTOCOMMIT_ON : SQL_AUTOCOMMIT_OFF) ,SQL_IS_INTEGER), + reinterpret_cast<SQLPOINTER>(nAutocommit) ,SQL_IS_INTEGER), m_aConnectionHandle,SQL_HANDLE_DBC,*this); } @@ -423,7 +422,7 @@ void SAL_CALL OConnection::setTransactionIsolation( sal_Int32 level ) OTools::ThrowException(this,N3SQLSetConnectAttr(m_aConnectionHandle, SQL_ATTR_TXN_ISOLATION, - reinterpret_cast<SQLPOINTER>(level),SQL_IS_INTEGER), + reinterpret_cast<SQLPOINTER>(static_cast<sal_IntPtr>(level)),SQL_IS_INTEGER), m_aConnectionHandle,SQL_HANDLE_DBC,*this); } diff --git a/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx b/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx index c9ed165a8c26..bd721d60a617 100644 --- a/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx +++ b/connectivity/source/drivers/odbc/ODatabaseMetaData.cxx @@ -28,11 +28,10 @@ #include <TPrivilegesResultSet.hxx> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> +#include <o3tl/string_view.hxx> using namespace connectivity::odbc; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; -using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; ODatabaseMetaData::ODatabaseMetaData(const SQLHANDLE _pHandle,OConnection* _pCon) @@ -65,7 +64,7 @@ Reference< XResultSet > ODatabaseMetaData::impl_getTypeInfo_throw( ) Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openTypeInfo(); } @@ -88,7 +87,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs( ) { try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openCatalogs(); } @@ -115,7 +114,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas( ) Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openSchemas(); } @@ -133,7 +132,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumnPrivileges( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openColumnPrivileges(m_bUseCatalog ? catalog : Any(),schema,table,columnNamePattern); } @@ -151,7 +150,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openColumns(m_bUseCatalog ? catalog : Any(),schemaPattern,tableNamePattern,columnNamePattern); } @@ -169,7 +168,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openTables(m_bUseCatalog ? catalog : Any(),schemaPattern,tableNamePattern,types); } @@ -187,7 +186,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedureColumns( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openProcedureColumns(m_bUseCatalog ? catalog : Any(),schemaPattern,procedureNamePattern,columnNamePattern); } @@ -205,7 +204,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getProcedures( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openProcedures(m_bUseCatalog ? catalog : Any(),schemaPattern,procedureNamePattern); } @@ -225,7 +224,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getVersionColumns( { if ( !m_pConnection->preventGetVersionColumns() ) { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openVersionColumns(m_bUseCatalog ? catalog : Any(),schema,table); bSuccess = true; @@ -333,7 +332,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openExportedKeys(m_bUseCatalog ? catalog : Any(),schema,table); } @@ -350,7 +349,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openImportedKeys(m_bUseCatalog ? catalog : Any(),schema,table); } @@ -367,7 +366,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getPrimaryKeys( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openPrimaryKeys(m_bUseCatalog ? catalog : Any(),schema,table); } @@ -385,7 +384,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openIndexInfo(m_bUseCatalog ? catalog : Any(),schema,table,unique,approximate); } @@ -403,7 +402,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getBestRowIdentifier( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openBestRowIdentifier(m_bUseCatalog ? catalog : Any(),schema,table,scope,nullable); } @@ -421,10 +420,9 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( { return new OResultSetPrivileges(this,catalog,schemaPattern,tableNamePattern); } - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); - Reference< XResultSet > xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); pResult->openTablePrivileges(m_bUseCatalog ? catalog : Any(),schemaPattern,tableNamePattern); - return xRef; + return pResult; } Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference( @@ -435,7 +433,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCrossReference( Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openForeignKeys(m_bUseCatalog ? primaryCatalog : Any(),primarySchema.toChar() == '%' ? &primarySchema : nullptr,&primaryTable, m_bUseCatalog ? foreignCatalog : Any(), foreignSchema.toChar() == '%' ? &foreignSchema : nullptr,&foreignTable); @@ -718,7 +716,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( ) Reference< XResultSet > xRef; try { - ODatabaseMetaDataResultSet* pResult = new ODatabaseMetaDataResultSet(m_pConnection); + rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(m_pConnection); xRef = pResult; pResult->openTablesTypes(); } @@ -1242,7 +1240,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMajorVersion( ) try { OUString aValue; OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_VER,aValue,*this,m_pConnection->getTextEncoding()); - return aValue.copy(0,aValue.indexOf('.')).toInt32(); + return o3tl::toInt32(aValue.subView(0,aValue.indexOf('.'))); } catch (const SQLException &) { @@ -1278,7 +1276,7 @@ sal_Int32 SAL_CALL ODatabaseMetaData::getDriverMinorVersion( ) try { OUString aValue; OTools::GetInfo(m_pConnection,m_aConnectionHandle,SQL_DRIVER_VER,aValue,*this,m_pConnection->getTextEncoding()); - return aValue.copy(0,aValue.lastIndexOf('.')).toInt32(); + return o3tl::toInt32(aValue.subView(0,aValue.lastIndexOf('.'))); } catch (const SQLException &) { diff --git a/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx b/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx index 777f4712ce96..5fbe8bf8f460 100644 --- a/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx +++ b/connectivity/source/drivers/odbc/ODatabaseMetaDataResultSet.cxx @@ -47,7 +47,6 @@ ODatabaseMetaDataResultSet::ODatabaseMetaDataResultSet(OConnection* _pConnection ,OPropertySetHelper(ODatabaseMetaDataResultSet_BASE::rBHelper) ,m_aStatementHandle(_pConnection->createStatementHandle()) - ,m_aStatement(nullptr) ,m_pConnection(_pConnection) ,m_nTextEncoding(_pConnection->getTextEncoding()) ,m_nRowPos(-1) @@ -84,7 +83,7 @@ void ODatabaseMetaDataResultSet::disposing() m_pConnection->freeStatementHandle(m_aStatementHandle); - m_aStatement = nullptr; + m_aStatement.clear(); m_xMetaData.clear(); m_pConnection.clear(); } @@ -100,12 +99,12 @@ Reference< XPropertySetInfo > SAL_CALL ODatabaseMetaDataResultSet::getPropertySe return ::cppu::OPropertySetHelper::createPropertySetInfo(getInfoHelper()); } -void SAL_CALL ODatabaseMetaDataResultSet::acquire() throw() +void SAL_CALL ODatabaseMetaDataResultSet::acquire() noexcept { ODatabaseMetaDataResultSet_BASE::acquire(); } -void SAL_CALL ODatabaseMetaDataResultSet::release() throw() +void SAL_CALL ODatabaseMetaDataResultSet::release() noexcept { ODatabaseMetaDataResultSet_BASE::release(); } @@ -698,21 +697,41 @@ OUString ODatabaseMetaDataResultSet::getCursorName() ::cppu::IPropertyArrayHelper* ODatabaseMetaDataResultSet::createArrayHelper( ) const { - Sequence< css::beans::Property > aProps(5); - css::beans::Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + 0 + } + } + }; } ::cppu::IPropertyArrayHelper & ODatabaseMetaDataResultSet::getInfoHelper() @@ -881,7 +900,7 @@ void ODatabaseMetaDataResultSet::openTablesTypes( ) m_aColMapping.clear(); m_aColMapping.push_back(-1); m_aColMapping.push_back(4); - m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,m_aColMapping); + m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,std::vector(m_aColMapping)); checkColumnCount(); } @@ -898,7 +917,7 @@ void ODatabaseMetaDataResultSet::openCatalogs() m_aColMapping.clear(); m_aColMapping.push_back(-1); m_aColMapping.push_back(1); - m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,m_aColMapping); + m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,std::vector(m_aColMapping)); checkColumnCount(); } @@ -914,7 +933,7 @@ void ODatabaseMetaDataResultSet::openSchemas() m_aColMapping.clear(); m_aColMapping.push_back(-1); m_aColMapping.push_back(2); - m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,m_aColMapping); + m_xMetaData = new OResultSetMetaData(m_pConnection.get(),m_aStatementHandle,std::vector(m_aColMapping)); checkColumnCount(); } diff --git a/connectivity/source/drivers/odbc/ODriver.cxx b/connectivity/source/drivers/odbc/ODriver.cxx index b4318d43b18b..cf3c5596aad4 100644 --- a/connectivity/source/drivers/odbc/ODriver.cxx +++ b/connectivity/source/drivers/odbc/ODriver.cxx @@ -24,6 +24,7 @@ #include <cppuhelper/supportsservice.hxx> #include <strings.hrc> #include <resource/sharedresources.hxx> +#include <utility> using namespace connectivity::odbc; using namespace com::sun::star::uno; @@ -31,9 +32,9 @@ using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; -ODBCDriver::ODBCDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext) +ODBCDriver::ODBCDriver(css::uno::Reference< css::uno::XComponentContext > _xContext) :ODriver_BASE(m_aMutex) - ,m_xContext(_rxContext) + ,m_xContext(std::move(_xContext)) ,m_pDriverHandle(SQL_NULL_HANDLE) { } @@ -87,12 +88,11 @@ Reference< XConnection > SAL_CALL ODBCDriver::connect( const OUString& url, cons if(!EnvironmentHandle(aPath)) throw SQLException(aPath,*this,OUString(),1000,Any()); } - OConnection* pCon = new OConnection(m_pDriverHandle,this); - Reference< XConnection > xCon = pCon; + rtl::Reference<OConnection> pCon = new OConnection(m_pDriverHandle,this); pCon->Construct(url,info); m_xConnections.push_back(WeakReferenceHelper(*pCon)); - return xCon; + return pCon; } sal_Bool SAL_CALL ODBCDriver::acceptsURL( const OUString& url ) @@ -104,77 +104,74 @@ Sequence< DriverPropertyInfo > SAL_CALL ODBCDriver::getPropertyInfo( const OUStr { if ( acceptsURL(url) ) { - std::vector< DriverPropertyInfo > aDriverInfo; - - Sequence< OUString > aBooleanValues(2); - aBooleanValues[0] = "false"; - aBooleanValues[1] = "true"; - - aDriverInfo.push_back(DriverPropertyInfo( - "CharSet" - ,"CharSet of the database." - ,false - ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "UseCatalog" - ,"Use catalog for file-based databases." - ,false - ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "SystemDriverSettings" - ,"Driver settings." - ,false - ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "ParameterNameSubstitution" - ,"Change named parameters with '?'." - ,false - ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "IgnoreDriverPrivileges" - ,"Ignore the privileges from the database driver." - ,false - ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "IsAutoRetrievingEnabled" - ,"Retrieve generated values." - ,false - ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "AutoRetrievingStatement" - ,"Auto-increment statement." - ,false - ,OUString() - ,Sequence< OUString >()) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "GenerateASBeforeCorrelationName" - ,"Generate AS before table correlation names." - ,false - ,"false" - ,aBooleanValues) - ); - aDriverInfo.push_back(DriverPropertyInfo( - "EscapeDateTime" - ,"Escape date time format." - ,false - ,"true" - ,aBooleanValues) - ); - - return Sequence< DriverPropertyInfo >(aDriverInfo.data(),aDriverInfo.size()); + Sequence< OUString > aBooleanValues{ "false", "true" }; + + return + { + { + "CharSet", + "CharSet of the database.", + false, + {}, + {} + }, + { + "UseCatalog", + "Use catalog for file-based databases.", + false, + "false", + aBooleanValues + }, + { + "SystemDriverSettings", + "Driver settings.", + false, + {}, + {} + }, + { + "ParameterNameSubstitution", + "Change named parameters with '?'.", + false, + "false", + aBooleanValues + }, + { + "IgnoreDriverPrivileges", + "Ignore the privileges from the database driver.", + false, + "false", + aBooleanValues + }, + { + "IsAutoRetrievingEnabled", + "Retrieve generated values.", + false, + "false", + aBooleanValues + }, + { + "AutoRetrievingStatement", + "Auto-increment statement.", + false, + {}, + {} + }, + { + "GenerateASBeforeCorrelationName", + "Generate AS before table correlation names.", + false, + "false", + aBooleanValues + }, + { + "EscapeDateTime", + "Escape date time format.", + false, + "true", + aBooleanValues + } + }; } ::connectivity::SharedResources aResources; const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR); diff --git a/connectivity/source/drivers/odbc/OFunctions.cxx b/connectivity/source/drivers/odbc/OFunctions.cxx index ae89531763a1..951eb8b36bff 100644 --- a/connectivity/source/drivers/odbc/OFunctions.cxx +++ b/connectivity/source/drivers/odbc/OFunctions.cxx @@ -89,7 +89,9 @@ bool LoadLibrary_ODBC3(OUString &_rPath) if (bLoaded) return true; -#ifndef DISABLE_DYNLOADING +#ifdef DISABLE_DYNLOADING + (void)_rPath; +#else #ifdef _WIN32 _rPath = "ODBC32.DLL"; #endif @@ -112,7 +114,7 @@ bool LoadLibrary_ODBC3(OUString &_rPath) if ( !pODBCso ) pODBCso = osl_loadModule( _rPath.pData,SAL_LOADMODULE_NOW ); -#endif +#endif // DISABLE_DYNLOADING if( !pODBCso) return false; diff --git a/connectivity/source/drivers/odbc/OPreparedStatement.cxx b/connectivity/source/drivers/odbc/OPreparedStatement.cxx index 65cfbf5e7b5f..21baa12e45c1 100644 --- a/connectivity/source/drivers/odbc/OPreparedStatement.cxx +++ b/connectivity/source/drivers/odbc/OPreparedStatement.cxx @@ -40,9 +40,7 @@ using namespace connectivity; using namespace connectivity::odbc; using namespace com::sun::star::uno; using namespace com::sun::star::lang; -using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; using namespace com::sun::star::container; using namespace com::sun::star::io; using namespace com::sun::star::util; @@ -69,12 +67,12 @@ OPreparedStatement::~OPreparedStatement() { } -void SAL_CALL OPreparedStatement::acquire() throw() +void SAL_CALL OPreparedStatement::acquire() noexcept { OStatement_BASE2::acquire(); } -void SAL_CALL OPreparedStatement::release() throw() +void SAL_CALL OPreparedStatement::release() noexcept { OStatement_BASE2::release(); } @@ -227,7 +225,7 @@ Reference< XConnection > SAL_CALL OPreparedStatement::getConnection( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return Reference< XConnection >(m_pConnection.get()); + return m_pConnection; } @@ -491,7 +489,7 @@ void SAL_CALL OPreparedStatement::setLong( sal_Int32 parameterIndex, sal_Int64 x } catch(SQLException&) { - setString(parameterIndex, ORowSetValue(x)); + setString(parameterIndex, ORowSetValue(x).getString()); } } @@ -584,8 +582,7 @@ void SAL_CALL OPreparedStatement::setObjectWithInfo( sal_Int32 parameterIndex, c { ORowSetValue aValue; aValue.fill(x); - // TODO: make sure that this calls the string overload - setParameter(parameterIndex, sqlType, scale, aValue); + setParameter(parameterIndex, sqlType, scale, aValue.getString()); } else setNull(parameterIndex,sqlType); @@ -910,13 +907,13 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 _parameterIndex) )); SQLException aNext(sError,*this, OUString(),0,Any()); - ::dbtools::throwInvalidIndexException(*this,makeAny(aNext)); + ::dbtools::throwInvalidIndexException(*this,Any(aNext)); } } -OResultSet* OPreparedStatement::createResulSet() +rtl::Reference<OResultSet> OPreparedStatement::createResultSet() { - OResultSet* pReturn = new OResultSet(m_aStatementHandle,this); + rtl::Reference<OResultSet> pReturn = new OResultSet(m_aStatementHandle,this); pReturn->setMetaData(getMetaData()); return pReturn; } diff --git a/connectivity/source/drivers/odbc/OResultSet.cxx b/connectivity/source/drivers/odbc/OResultSet.cxx index 8081e3d80192..9e68cd1763c2 100644 --- a/connectivity/source/drivers/odbc/OResultSet.cxx +++ b/connectivity/source/drivers/odbc/OResultSet.cxx @@ -443,8 +443,33 @@ template < typename T > T OResultSet::getValue( sal_Int32 columnIndex ) checkDisposed(OResultSet_BASE::rBHelper.bDisposed); fillColumn(columnIndex); m_bWasNull = m_aRow[columnIndex].isNull(); - return m_aRow[columnIndex]; + auto const & row = m_aRow[columnIndex]; + if constexpr ( std::is_same_v<css::util::Time, T> ) + return row.getTime(); + else if constexpr ( std::is_same_v<css::util::DateTime, T> ) + return row.getDateTime(); + else if constexpr ( std::is_same_v<css::util::Date, T> ) + return row.getDate(); + else if constexpr ( std::is_same_v<OUString, T> ) + return row.getString(); + else if constexpr ( std::is_same_v<sal_Int64, T> ) + return row.getLong(); + else if constexpr ( std::is_same_v<sal_Int32, T> ) + return row.getInt32(); + else if constexpr ( std::is_same_v<sal_Int16, T> ) + return row.getInt16(); + else if constexpr ( std::is_same_v<sal_Int8, T> ) + return row.getInt8(); + else if constexpr ( std::is_same_v<float, T> ) + return row.getFloat(); + else if constexpr ( std::is_same_v<double, T> ) + return row.getDouble(); + else if constexpr ( std::is_same_v<bool, T> ) + return row.getBool(); + else + return row; } + sal_Bool SAL_CALL OResultSet::getBoolean( sal_Int32 columnIndex ) { return getValue<bool>( columnIndex ); @@ -469,7 +494,7 @@ Sequence< sal_Int8 > SAL_CALL OResultSet::getBytes( sal_Int32 columnIndex ) case DataType::BINARY: case DataType::VARBINARY: case DataType::LONGVARBINARY: - nRet = m_aRow[columnIndex]; + nRet = m_aRow[columnIndex].getSequence(); break; default: { @@ -866,7 +891,7 @@ void SAL_CALL OResultSet::insertRow( ) if(m_pSkipDeletedSet) { - if(moveToBookmark(makeAny(aBookmark))) + if(moveToBookmark(Any(aBookmark))) { sal_Int32 nRowPos = getDriverPos(); if ( -1 == m_nRowPos ) @@ -1378,28 +1403,47 @@ void OResultSet::setFetchSize(sal_Int32 _par0) IPropertyArrayHelper* OResultSet::createArrayHelper( ) const { - Sequence< Property > aProps(6); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE), - PROPERTY_ID_ISBOOKMARKABLE, cppu::UnoType<bool>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), PropertyAttribute::READONLY); - - return new OPropertyArrayHelper(aProps); + return new OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ISBOOKMARKABLE), + PROPERTY_ID_ISBOOKMARKABLE, + cppu::UnoType<bool>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + PropertyAttribute::READONLY + } + } + }; } IPropertyArrayHelper & OResultSet::getInfoHelper() @@ -1599,12 +1643,12 @@ void OResultSet::fillColumn(const sal_Int32 _nColumn) } } -void SAL_CALL OResultSet::acquire() throw() +void SAL_CALL OResultSet::acquire() noexcept { OResultSet_BASE::acquire(); } -void SAL_CALL OResultSet::release() throw() +void SAL_CALL OResultSet::release() noexcept { OResultSet_BASE::release(); } @@ -1642,7 +1686,7 @@ bool OResultSet::move(IResultSetHelper::Movement _eCursorPosition, sal_Int32 _nO TBookmarkPosMap::const_iterator aIter = std::find_if(m_aPosToBookmarks.begin(), m_aPosToBookmarks.end(), [&_nOffset](const TBookmarkPosMap::value_type& rEntry) { return rEntry.second == _nOffset; }); if (aIter != m_aPosToBookmarks.end()) - return moveToBookmark(makeAny(aIter->first)); + return moveToBookmark(Any(aIter->first)); SAL_WARN( "connectivity.odbc", "Bookmark not found!"); } return false; @@ -1764,7 +1808,7 @@ void OResultSet::fillNeededData(SQLRETURN _nRet) case DataType::VARBINARY: case DataType::LONGVARBINARY: case DataType::BLOB: - aSeq = m_aRow[nColumnIndex]; + aSeq = m_aRow[nColumnIndex].getSequence(); N3SQLPutData (m_aStatementHandle, aSeq.getArray(), aSeq.getLength()); break; case SQL_WLONGVARCHAR: diff --git a/connectivity/source/drivers/odbc/OResultSetMetaData.cxx b/connectivity/source/drivers/odbc/OResultSetMetaData.cxx index 21b95c6a7b29..f71e77d19c81 100644 --- a/connectivity/source/drivers/odbc/OResultSetMetaData.cxx +++ b/connectivity/source/drivers/odbc/OResultSetMetaData.cxx @@ -22,7 +22,6 @@ using namespace connectivity::odbc; using namespace com::sun::star::uno; -using namespace com::sun::star::lang; using namespace com::sun::star::sdbc; diff --git a/connectivity/source/drivers/odbc/OStatement.cxx b/connectivity/source/drivers/odbc/OStatement.cxx index dc693b964d56..d8b5d6ce75de 100644 --- a/connectivity/source/drivers/odbc/OStatement.cxx +++ b/connectivity/source/drivers/odbc/OStatement.cxx @@ -49,9 +49,7 @@ using namespace com::sun::star::uno; using namespace com::sun::star::lang; using namespace com::sun::star::beans; using namespace com::sun::star::sdbc; -using namespace com::sun::star::sdbcx; using namespace com::sun::star::container; -using namespace com::sun::star::io; using namespace com::sun::star::util; OStatement_Base::OStatement_Base(OConnection* _pConnection ) @@ -131,9 +129,10 @@ Sequence< Type > SAL_CALL OStatement_Base::getTypes( ) Sequence< Type > aOldTypes = OStatement_BASE::getTypes(); if ( m_pConnection.is() && !m_pConnection->isAutoRetrievingEnabled() ) { - auto newEnd = std::remove(aOldTypes.begin(), aOldTypes.end(), + auto [begin, end] = asNonConstRange(aOldTypes); + auto newEnd = std::remove(begin, end, cppu::UnoType<XGeneratedResultSet>::get()); - aOldTypes.realloc(std::distance(aOldTypes.begin(), newEnd)); + aOldTypes.realloc(std::distance(begin, newEnd)); } return ::comphelper::concatSequences(aTypes.getTypes(),aOldTypes); @@ -319,7 +318,6 @@ sal_Bool SAL_CALL OStatement_Base::execute( const OUString& sql ) OString aSql(OUStringToOString(sql,getOwnConnection()->getTextEncoding())); bool hasResultSet = false; - SQLWarning aWarning; // Reset the statement handle and warning @@ -336,12 +334,10 @@ sal_Bool SAL_CALL OStatement_Base::execute( const OUString& sql ) try { THROW_SQL(N3SQLExecDirect(m_aStatementHandle, reinterpret_cast<SDB_ODBC_CHAR *>(const_cast<char *>(aSql.getStr())), aSql.getLength())); } - catch (const SQLWarning& ex) { + catch (const SQLWarning&) { - // Save pointer to warning and save with ResultSet + //TODO: Save pointer to warning and save with ResultSet // object once it is created. - - aWarning = ex; } // Now determine if there is a result set associated with @@ -372,7 +368,7 @@ Reference< XResultSet > OStatement_Base::getResultSet(bool checkCount) ::dbtools::throwFunctionSequenceException(*this); } - OResultSet* pRs = nullptr; + rtl::Reference<OResultSet> pRs; sal_Int32 numCols = 1; // If we already know we have result columns, checkCount @@ -387,7 +383,7 @@ Reference< XResultSet > OStatement_Base::getResultSet(bool checkCount) if (numCols > 0) { OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!"); - pRs = createResulSet(); + pRs = createResultSet(); pRs->construct(); // Save a copy of our last result set @@ -449,7 +445,7 @@ Reference< XConnection > SAL_CALL OStatement_Base::getConnection( ) ::osl::MutexGuard aGuard( m_aMutex ); checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return Reference< XConnection >(m_pConnection.get()); + return m_pConnection; } @@ -479,8 +475,8 @@ Sequence< sal_Int32 > SAL_CALL OStatement::executeBatch( ) for (auto const& elem : m_aBatchVector) { - aBatchSql.append(OUStringToOString(elem,getOwnConnection()->getTextEncoding())); - aBatchSql.append(";"); + aBatchSql.append(OUStringToOString(elem,getOwnConnection()->getTextEncoding()) + + ";"); } OSL_ENSURE(m_aStatementHandle,"StatementHandle is null!"); @@ -617,7 +613,7 @@ Any SAL_CALL OStatement_Base::getWarnings( ) checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return makeAny(m_aLastWarning); + return Any(m_aLastWarning); } @@ -861,31 +857,71 @@ void OStatement_Base::setUsingBookmarks(bool _bUseBookmark) ::cppu::IPropertyArrayHelper* OStatement_Base::createArrayHelper( ) const { - Sequence< Property > aProps(10); - Property* pProperties = aProps.getArray(); - sal_Int32 nPos = 0; - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), - PROPERTY_ID_CURSORNAME, cppu::UnoType<OUString>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), - PROPERTY_ID_ESCAPEPROCESSING, cppu::UnoType<bool>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), - PROPERTY_ID_FETCHDIRECTION, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), - PROPERTY_ID_FETCHSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), - PROPERTY_ID_MAXFIELDSIZE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), - PROPERTY_ID_MAXROWS, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), - PROPERTY_ID_QUERYTIMEOUT, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), - PROPERTY_ID_RESULTSETCONCURRENCY, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), - PROPERTY_ID_RESULTSETTYPE, cppu::UnoType<sal_Int32>::get(), 0); - pProperties[nPos++] = css::beans::Property(::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), - PROPERTY_ID_USEBOOKMARKS, cppu::UnoType<bool>::get(), 0); - - return new ::cppu::OPropertyArrayHelper(aProps); + return new ::cppu::OPropertyArrayHelper + { + { + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_CURSORNAME), + PROPERTY_ID_CURSORNAME, + cppu::UnoType<OUString>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_ESCAPEPROCESSING), + PROPERTY_ID_ESCAPEPROCESSING, + cppu::UnoType<bool>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHDIRECTION), + PROPERTY_ID_FETCHDIRECTION, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), + PROPERTY_ID_FETCHSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXFIELDSIZE), + PROPERTY_ID_MAXFIELDSIZE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_MAXROWS), + PROPERTY_ID_MAXROWS, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_QUERYTIMEOUT), + PROPERTY_ID_QUERYTIMEOUT, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETCONCURRENCY), + PROPERTY_ID_RESULTSETCONCURRENCY, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_RESULTSETTYPE), + PROPERTY_ID_RESULTSETTYPE, + cppu::UnoType<sal_Int32>::get(), + 0 + }, + { + ::connectivity::OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_USEBOOKMARKS), + PROPERTY_ID_USEBOOKMARKS, + cppu::UnoType<bool>::get(), + 0 + } + } + }; } @@ -1043,27 +1079,27 @@ void OStatement_Base::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const IMPLEMENT_SERVICE_INFO(OStatement,"com.sun.star.sdbcx.OStatement","com.sun.star.sdbc.Statement"); -void SAL_CALL OStatement_Base::acquire() throw() +void SAL_CALL OStatement_Base::acquire() noexcept { OStatement_BASE::acquire(); } -void SAL_CALL OStatement_Base::release() throw() +void SAL_CALL OStatement_Base::release() noexcept { OStatement_BASE::release(); } -void SAL_CALL OStatement::acquire() throw() +void SAL_CALL OStatement::acquire() noexcept { OStatement_BASE2::acquire(); } -void SAL_CALL OStatement::release() throw() +void SAL_CALL OStatement::release() noexcept { OStatement_BASE2::release(); } -OResultSet* OStatement_Base::createResulSet() +rtl::Reference<OResultSet> OStatement_Base::createResultSet() { return new OResultSet(m_aStatementHandle,this); } diff --git a/connectivity/source/drivers/postgresql/pq_array.cxx b/connectivity/source/drivers/postgresql/pq_array.cxx index 5ae646f230e3..841ed70c6cb2 100644 --- a/connectivity/source/drivers/postgresql/pq_array.cxx +++ b/connectivity/source/drivers/postgresql/pq_array.cxx @@ -100,7 +100,7 @@ css::uno::Reference< css::sdbc::XResultSet > Array::getResultSetAtIndex( } return new SequenceResultSet( - m_xMutex, m_owner, getStatics().resultSetArrayColumnNames, ret, m_tc ); + m_xMutex, m_owner, std::vector(getStatics().resultSetArrayColumnNames), std::move(ret), m_tc ); } diff --git a/connectivity/source/drivers/postgresql/pq_array.hxx b/connectivity/source/drivers/postgresql/pq_array.hxx index c0ed6aa97efd..589fe063d234 100644 --- a/connectivity/source/drivers/postgresql/pq_array.hxx +++ b/connectivity/source/drivers/postgresql/pq_array.hxx @@ -34,12 +34,12 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_ARRAY_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_ARRAY_HXX +#pragma once #include <cppuhelper/implbase.hxx> #include <com/sun/star/sdbc/XArray.hpp> #include "pq_connection.hxx" +#include <utility> #include <vector> namespace pq_sdbc_driver @@ -54,14 +54,14 @@ class Array : public cppu::WeakImplHelper< css::sdbc::XArray > public: Array( - const rtl::Reference< comphelper::RefCountedMutex > & mutex, - const std::vector< css::uno::Any > & data, - const css::uno::Reference< css::uno::XInterface > & owner, - const css::uno::Reference< css::script::XTypeConverter > &tc) : - m_data( data ), - m_owner( owner ), - m_tc( tc ), - m_xMutex( mutex ) + rtl::Reference< comphelper::RefCountedMutex > mutex, + std::vector< css::uno::Any > && data, + css::uno::Reference< css::uno::XInterface > owner, + css::uno::Reference< css::script::XTypeConverter > tc) : + m_data( std::move(data) ), + m_owner(std::move( owner )), + m_tc(std::move( tc )), + m_xMutex(std::move( mutex )) {} public: // XArray @@ -95,6 +95,4 @@ private: }; -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_baseresultset.hxx b/connectivity/source/drivers/postgresql/pq_baseresultset.hxx index 8b062ddf9ac0..90e6609a0860 100644 --- a/connectivity/source/drivers/postgresql/pq_baseresultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_baseresultset.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_BASERESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_BASERESULTSET_HXX +#pragma once #include <cppuhelper/propshlp.hxx> #include <cppuhelper/component.hxx> @@ -104,8 +103,8 @@ protected: virtual ~BaseResultSet() override; public: // XInterface - virtual void SAL_CALL acquire() throw() override { BaseResultSet_BASE::acquire(); } - virtual void SAL_CALL release() throw() override { BaseResultSet_BASE::release(); } + virtual void SAL_CALL acquire() noexcept override { BaseResultSet_BASE::acquire(); } + virtual void SAL_CALL release() noexcept override { BaseResultSet_BASE::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -200,6 +199,5 @@ public: // OComponentHelper }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_connection.cxx b/connectivity/source/drivers/postgresql/pq_connection.cxx index 2bc1e4a42af8..091479f87f95 100644 --- a/connectivity/source/drivers/postgresql/pq_connection.cxx +++ b/connectivity/source/drivers/postgresql/pq_connection.cxx @@ -34,6 +34,7 @@ * ************************************************************************/ +#include <utility> #include <vector> #include <string.h> @@ -48,6 +49,7 @@ #include "pq_xviews.hxx" #include "pq_xusers.hxx" +#include <rtl/ref.hxx> #include <rtl/uuid.h> #include <sal/log.hxx> @@ -95,8 +97,8 @@ class ClosableReference : public cppu::WeakImplHelper< css::uno::XReference > rtl::Reference<Connection> m_conn; ::rtl::ByteSequence m_id; public: - ClosableReference( const ::rtl::ByteSequence & id , Connection *that ) - : m_conn( that ), m_id( id ) + ClosableReference( ::rtl::ByteSequence id , Connection *that ) + : m_conn( that ), m_id(std::move( id )) { } @@ -114,9 +116,9 @@ public: Connection::Connection( const rtl::Reference< comphelper::RefCountedMutex > &refMutex, - const css::uno::Reference< css::uno::XComponentContext > & ctx ) + css::uno::Reference< css::uno::XComponentContext > ctx ) : ConnectionBase( refMutex->GetMutex() ), - m_ctx( ctx ) , + m_ctx(std::move( ctx )) , m_xMutex( refMutex ) { } @@ -186,13 +188,12 @@ Reference< XStatement > Connection::createStatement() MutexGuard guard( m_xMutex->GetMutex() ); checkClosed(); - Statement *stmt = new Statement( m_xMutex, this , &m_settings ); - Reference< XStatement > ret( stmt ); + rtl::Reference<Statement> stmt = new Statement( m_xMutex, this , &m_settings ); ::rtl::ByteSequence id( 16 ); rtl_createUuid( reinterpret_cast<sal_uInt8*>(id.getArray()), nullptr, false ); m_myStatements[ id ] = Reference< XCloseable > ( stmt ); stmt->queryAdapter()->addReference( new ClosableReference( id, this ) ); - return ret; + return stmt; } Reference< XPreparedStatement > Connection::prepareStatement( const OUString& sql ) @@ -201,14 +202,14 @@ Reference< XPreparedStatement > Connection::prepareStatement( const OUString& sq checkClosed(); OString byteSql = OUStringToOString( sql, ConnectionSettings::encoding ); - PreparedStatement *stmt = new PreparedStatement( m_xMutex, this, &m_settings, byteSql ); - Reference< XPreparedStatement > ret = stmt; + rtl::Reference<PreparedStatement> stmt + = new PreparedStatement( m_xMutex, this, &m_settings, byteSql ); ::rtl::ByteSequence id( 16 ); rtl_createUuid( reinterpret_cast<sal_uInt8*>(id.getArray()), nullptr, false ); m_myStatements[ id ] = Reference< XCloseable > ( stmt ); stmt->queryAdapter()->addReference( new ClosableReference( id, this ) ); - return ret; + return stmt; } Reference< XPreparedStatement > Connection::prepareCall( const OUString& ) @@ -330,7 +331,15 @@ class cstr_vector std::vector<char*> values; std::vector<bool> acquired; public: - cstr_vector () : values(), acquired() { values.reserve(8); acquired.reserve(8); } +#if defined __GNUC__ && !defined __clang__ && __GNUC__ == 14 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" +#pragma GCC diagnostic ignored "-Wstringop-overflow" +#endif + cstr_vector () { values.reserve(8); acquired.reserve(8); } +#if defined __GNUC__ && !defined __clang__ && __GNUC__ == 14 +#pragma GCC diagnostic pop +#endif ~cstr_vector () { OSL_ENSURE(values.size() == acquired.size(), "pq_connection: cstr_vector values and acquired size mismatch"); diff --git a/connectivity/source/drivers/postgresql/pq_connection.hxx b/connectivity/source/drivers/postgresql/pq_connection.hxx index f8d19c406b18..2bba070a7273 100644 --- a/connectivity/source/drivers/postgresql/pq_connection.hxx +++ b/connectivity/source/drivers/postgresql/pq_connection.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_CONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_CONNECTION_HXX +#pragma once #include <config_lgpl.h> #include <com/sun/star/uno/XComponentContext.hpp> @@ -61,19 +60,18 @@ #include <libpq-fe.h> #include <unordered_map> +#include "pq_xtables.hxx" +#include "pq_xviews.hxx" + namespace pq_sdbc_driver { struct ConnectionSettings; -class Tables; -class Views; struct ConnectionSettings { ConnectionSettings() : pConnection(nullptr), maxNameLen(0), - maxIndexKeys(0), - pTablesImpl(nullptr), - pViewsImpl(nullptr) + maxIndexKeys(0) {} static const rtl_TextEncoding encoding = RTL_TEXTENCODING_UTF8; PGconn *pConnection; @@ -83,8 +81,8 @@ struct ConnectionSettings css::uno::Reference< css::container::XNameAccess > tables; css::uno::Reference< css::container::XNameAccess > users; css::uno::Reference< css::container::XNameAccess > views; - Tables *pTablesImpl; // needed to implement renaming of tables / views - Views *pViewsImpl; // needed to implement renaming of tables / views + rtl::Reference<Tables> pTablesImpl; // needed to implement renaming of tables / views + rtl::Reference<Views> pViewsImpl; // needed to implement renaming of tables / views OUString user; OUString catalog; }; @@ -136,7 +134,7 @@ private: public: Connection( const rtl::Reference< comphelper::RefCountedMutex > &refMutex, - const css::uno::Reference< css::uno::XComponentContext > & ctx ); + css::uno::Reference< css::uno::XComponentContext > ctx ); virtual ~Connection( ) override; @@ -192,6 +190,5 @@ public: // helper function }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx index 07e0e85815c1..1fbcb1aa69f5 100644 --- a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx +++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx @@ -74,6 +74,7 @@ #include "pq_statics.hxx" #include "pq_tools.hxx" +#include <o3tl/string_view.hxx> #include <rtl/ustrbuf.hxx> #include <sal/macros.h> #include <com/sun/star/sdbc/TransactionIsolation.hpp> @@ -83,6 +84,7 @@ #include <com/sun/star/sdbc/IndexType.hpp> #include <com/sun/star/sdbc/ColumnValue.hpp> #include <com/sun/star/sdbc/ColumnSearch.hpp> +#include <utility> using ::osl::MutexGuard; @@ -113,12 +115,12 @@ namespace pq_sdbc_driver #define DEFERRABILITY_NONE 7 DatabaseMetaData::DatabaseMetaData( - const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, - const css::uno::Reference< css::sdbc::XConnection > & origin, + ::rtl::Reference< comphelper::RefCountedMutex > refMutex, + css::uno::Reference< css::sdbc::XConnection > origin, ConnectionSettings *pSettings ) - : m_xMutex( refMutex ), + : m_xMutex(std::move( refMutex )), m_pSettings( pSettings ), - m_origin( origin ), + m_origin(std::move( origin )), m_getIntSetting_stmt ( m_origin->prepareStatement("SELECT setting FROM pg_catalog.pg_settings WHERE name=?") ) { init_getReferences_stmt(); @@ -209,10 +211,10 @@ sal_Int32 DatabaseMetaData::getDriverMinorVersion( ) sal_Bool DatabaseMetaData::usesLocalFiles( ) { // LEM TODO: - // http://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/XDatabaseMetaData_Interface + // https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#XDatabaseMetaData_Interface // says "Returns true when the catalog name of the // database should not appear in the DatasourceBrowser - // of OpenOffice.org API, otherwise false is returned." + // of LibreOffice API, otherwise false is returned." // So, hmmm, think about it. return false; } @@ -309,8 +311,8 @@ OUString DatabaseMetaData::getSQLKeywords( ) } OUString DatabaseMetaData::getNumericFunctions( ) { - // See http://www.postgresql.org/docs/9.1/static/functions-math.html - // LEM TODO: Err... http://wiki.openoffice.org/wiki/Documentation/DevGuide/Database/Support_Scalar_Functions + // See https://www.postgresql.org/docs/9.1/static/functions-math.html + // LEM TODO: Err... https://wiki.documentfoundation.org/Documentation/DevGuide/Database_Access#Support_Scalar_Functions // says this should be "Open Group CLI" names, not PostgreSQL names. // Currently this is just a list of supported functions in PostgreSQL, with PostgreSQL names. // And it is my job to map from Open Group CLI names/syntax to PostgreSQL names/syntax. Where? By parsing the SQL??? @@ -1178,46 +1180,46 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTables( closeable->close(); return new SequenceResultSet( - m_xMutex, *this, statics.tablesRowNames, vec, m_pSettings->tc ); + m_xMutex, *this, std::vector(statics.tablesRowNames), std::move(vec), m_pSettings->tc ); } namespace { // sort no schema first, then "public", then normal schemas, then internal schemas - int compare_schema(const OUString &nsA, const OUString &nsB) + int compare_schema(std::u16string_view nsA, std::u16string_view nsB) { - if (nsA.isEmpty()) + if (nsA.empty()) { - return nsB.isEmpty() ? 0 : -1; + return nsB.empty() ? 0 : -1; } - else if (nsB.isEmpty()) + else if (nsB.empty()) { - assert(!nsA.isEmpty()); + assert(!nsA.empty()); return 1; } - else if(nsA == "public") + else if(nsA == u"public") { - return (nsB == "public") ? 0 : -1; + return (nsB == u"public") ? 0 : -1; } - else if(nsB == "public") + else if(nsB == u"public") { - assert(nsA != "public"); + assert(nsA != u"public"); return 1; } - else if(nsA.startsWith("pg_")) + else if(o3tl::starts_with(nsA, u"pg_")) { - if(nsB.startsWith("pg_")) - return nsA.compareTo(nsB); + if(o3tl::starts_with(nsB, u"pg_")) + return nsA.compare(nsB); else return 1; } - else if(nsB.startsWith("pg_")) + else if(o3tl::starts_with(nsB, u"pg_")) { return -1; } else { - return nsA.compareTo(nsB); + return nsA.compare(nsB); } } @@ -1229,7 +1231,7 @@ namespace OUString valueB; a[0] >>= valueA; b[0] >>= valueB; - return compare_schema(valueA, valueB); + return compare_schema(valueA, valueB) < 0; } }; } @@ -1251,9 +1253,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getSchemas( ) std::vector< std::vector<Any> > vec; while( rs->next() ) { - std::vector<Any> row(1); - row[0] <<= xRow->getString(1); - vec.push_back( row ); + vec.push_back( { Any(xRow->getString(1)) } ); } // sort public first, sort internal schemas last, sort rest in alphabetic order @@ -1263,7 +1263,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getSchemas( ) if( closeable.is() ) closeable->close(); return new SequenceResultSet( - m_xMutex, *this, getStatics().schemaNames, vec, m_pSettings->tc ); + m_xMutex, *this, std::vector(getStatics().schemaNames), std::move(vec), m_pSettings->tc ); } css::uno::Reference< XResultSet > DatabaseMetaData::getCatalogs( ) @@ -1280,7 +1280,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTableTypes( ) // LEM TODO: this can be made dynamic, see JDBC driver MutexGuard guard( m_xMutex->GetMutex() ); return new SequenceResultSet( - m_xMutex, *this, getStatics().tableTypeNames, getStatics().tableTypeData, + m_xMutex, *this, std::vector(getStatics().tableTypeNames), std::vector(getStatics().tableTypeData), m_pSettings->tc ); } @@ -1365,9 +1365,9 @@ namespace { { DatabaseTypeDescription() {} - DatabaseTypeDescription( const OUString &name, const OUString & type ) : - typeName( name ), - typeType( type ) + DatabaseTypeDescription( OUString name, OUString type ) : + typeName(std::move( name )), + typeType(std::move( type )) {} DatabaseTypeDescription( const DatabaseTypeDescription &source ) : typeName( source.typeName ), @@ -1406,8 +1406,7 @@ static void columnMetaData2DatabaseTypeDescription( oidMap[row->getInt(12)] = DatabaseTypeDescription(); if( domains ) queryBuf.append( " OR " ); - queryBuf.append( "oid = " ); - queryBuf.append( row->getInt(12 ) ); + queryBuf.append( "oid = " + OUString::number( row->getInt(12 ) ) ); domains ++; } } @@ -1600,7 +1599,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getColumns( closeable->close(); return new SequenceResultSet( - m_xMutex, *this, statics.columnRowNames, vec, m_pSettings->tc ); + m_xMutex, *this, std::vector(statics.columnRowNames), std::move(vec), m_pSettings->tc ); } css::uno::Reference< XResultSet > DatabaseMetaData::getColumnPrivileges( @@ -1783,7 +1782,7 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getPrimaryKeys( elements ++; } return new SequenceResultSet( - m_xMutex, *this, getStatics().primaryKeyNames, ret, m_pSettings->tc ); + m_xMutex, *this, std::vector(getStatics().primaryKeyNames), std::move(ret), m_pSettings->tc ); } // Copied / adapted / simplified from JDBC driver @@ -2087,45 +2086,45 @@ namespace OUString nameB; a[0 /*TYPE_NAME*/] >>= nameA; b[0 /*TYPE_NAME*/] >>= nameB; - OUString nsA, tnA, nsB, tnB; + std::u16string_view nsA, tnA, nsB, tnB; // parse typename into schema and typename sal_Int32 nIndex=0; - nsA = nameA.getToken(0, '.', nIndex); + nsA = o3tl::getToken(nameA, 0, '.', nIndex); if (nIndex<0) { tnA = nsA; - nsA.clear(); + nsA = std::u16string_view(); } else { - tnA = nameA.getToken(0, '.', nIndex); + tnA = o3tl::getToken(nameA, 0, '.', nIndex); assert(nIndex < 0); } nIndex=0; - nsB = nameB.getToken(0, '.', nIndex); + nsB = o3tl::getToken(nameB, 0, '.', nIndex); if (nIndex<0) { tnB = nsB; - nsB.clear(); + nsB = std::u16string_view(); } else { - tnB = nameB.getToken(0, '.', nIndex); + tnB = o3tl::getToken(nameB, 0, '.', nIndex); assert(nIndex < 0); } const int ns_comp = compare_schema(nsA, nsB); if(ns_comp == 0) { - if(nsA.isEmpty()) + if(nsA.empty()) { - assert(nsB.isEmpty()); + assert(nsB.empty()); // within each type category, sort privileged choice first - if( tnA == "int4" || tnA == "varchar" || tnA == "char" || tnA == "text") + if( tnA == u"int4" || tnA == u"varchar" || tnA == u"char" || tnA == u"text") return true; - if( tnB == "int4" || tnB == "varchar" || tnB == "char" || tnB == "text") + if( tnB == u"int4" || tnB == u"varchar" || tnB == u"char" || tnB == u"text") return false; } return nameA.compareTo( nameB ) < 0; @@ -2299,8 +2298,8 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTypeInfo( ) return new SequenceResultSet( m_xMutex, *this, - getStatics().typeinfoColumnNames, - vec, + std::vector(getStatics().typeinfoColumnNames), + std::move(vec), m_pSettings->tc, &( getStatics().typeInfoMetaData )); } @@ -2424,8 +2423,8 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getIndexInfo( } } return new SequenceResultSet( - m_xMutex, *this, getStatics().indexinfoColumnNames, - vec, + m_xMutex, *this, std::vector(getStatics().indexinfoColumnNames), + std::move(vec), m_pSettings->tc ); } diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx index c016886f2643..4e8b717a96b2 100644 --- a/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx +++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_DATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_DATABASEMETADATA_HXX +#pragma once #include "pq_connection.hxx" #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -75,8 +74,8 @@ class DatabaseMetaData : public: DatabaseMetaData( - const ::rtl::Reference< comphelper::RefCountedMutex > & reMutex, - const css::uno::Reference< css::sdbc::XConnection > & origin, + ::rtl::Reference< comphelper::RefCountedMutex > reMutex, + css::uno::Reference< css::sdbc::XConnection > origin, ConnectionSettings *pSettings ); @@ -235,6 +234,4 @@ public: } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_driver.cxx b/connectivity/source/drivers/postgresql/pq_driver.cxx index 87eb5682a2b2..8e07123a2b0f 100644 --- a/connectivity/source/drivers/postgresql/pq_driver.cxx +++ b/connectivity/source/drivers/postgresql/pq_driver.cxx @@ -40,12 +40,6 @@ #include "pq_driver.hxx" -using osl::MutexGuard; - -using com::sun::star::lang::XSingleComponentFactory; -using com::sun::star::lang::XServiceInfo; -using com::sun::star::lang::XComponent; - using com::sun::star::uno::Sequence; using com::sun::star::uno::Reference; using com::sun::star::uno::XInterface; @@ -70,9 +64,7 @@ Reference< XConnection > Driver::connect( if( ! acceptsURL( url ) ) // XDriver spec tells me to do so ... return Reference< XConnection > (); - Sequence< Any > seq ( 2 ); - seq[0] <<= url; - seq[1] <<= info; + Sequence< Any > seq{ Any(url), Any(info) }; return Reference< XConnection> ( m_smgr->createInstanceWithArgumentsAndContext( "org.openoffice.comp.connectivity.pq.Connection.noext", @@ -143,7 +135,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* connectivity_pq_sdbc_driver_get_implementation( css::uno::XComponentContext* context , css::uno::Sequence<css::uno::Any> const&) { - return cppu::acquire(static_cast<cppu::OWeakObject*>(new pq_sdbc_driver::Driver(context))); + return cppu::acquire(new pq_sdbc_driver::Driver(context)); } diff --git a/connectivity/source/drivers/postgresql/pq_driver.hxx b/connectivity/source/drivers/postgresql/pq_driver.hxx index 3b61a7bcf269..31d407f36965 100644 --- a/connectivity/source/drivers/postgresql/pq_driver.hxx +++ b/connectivity/source/drivers/postgresql/pq_driver.hxx @@ -34,12 +34,11 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_DRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_DRIVER_HXX +#pragma once -#include <osl/mutex.hxx> #include <sal/macros.h> #include <cppuhelper/compbase.hxx> +#include <cppuhelper/basemutex.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -55,7 +54,6 @@ namespace pq_sdbc_driver SAL_STRINGIFY(PQ_SDBC_MINOR) "." \ SAL_STRINGIFY(PQ_SDBC_MICRO) -struct MutexHolder { osl::Mutex m_mutex; }; // use this to switch off sdbc support ! // typedef cppu::WeakComponentImplHelper< // css::sdbc::XDriver, @@ -65,14 +63,14 @@ typedef cppu::WeakComponentImplHelper< css::sdbc::XDriver, css::lang::XServiceInfo, css::sdbcx::XDataDefinitionSupplier > DriverBase ; -class Driver : public MutexHolder, public DriverBase +class Driver : public cppu::BaseMutex, public DriverBase { css::uno::Reference< css::uno::XComponentContext > m_ctx; css::uno::Reference< css::lang::XMultiComponentFactory > m_smgr; public: explicit Driver ( const css::uno::Reference < css::uno::XComponentContext > & ctx ) - : DriverBase( m_mutex ), + : DriverBase( m_aMutex ), m_ctx( ctx ), m_smgr( ctx->getServiceManager() ) {} @@ -115,6 +113,4 @@ public: } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx index a75897ccb211..216a25220355 100644 --- a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx +++ b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.cxx @@ -38,6 +38,7 @@ #include <com/sun/star/sdbc/SQLException.hpp> #include <cppuhelper/typeprovider.hxx> #include <cppuhelper/queryinterface.hxx> +#include <utility> using com::sun::star::uno::Sequence; @@ -58,9 +59,9 @@ FakedUpdateableResultSet::FakedUpdateableResultSet( PGresult *result, const OUString &schema, const OUString &table, - const OUString &aReason ) + OUString aReason ) : ResultSet( mutex, owner, pSettings, result, schema, table ), - m_aReason( aReason ) + m_aReason(std::move( aReason )) {} diff --git a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx index 65113344cdec..44e7dc9bcf13 100644 --- a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_FAKEDUPDATEABLERESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_FAKEDUPDATEABLERESULTSET_HXX +#pragma once #include <com/sun/star/sdbc/XResultSetUpdate.hpp> #include <com/sun/star/sdbc/XRowUpdate.hpp> @@ -62,11 +61,11 @@ public: PGresult *result, const OUString &schema, const OUString &table, - const OUString &aReason ); + OUString aReason ); public: // XInterface - virtual void SAL_CALL acquire() throw() override { ResultSet::acquire(); } - virtual void SAL_CALL release() throw() override { ResultSet::release(); } + virtual void SAL_CALL acquire() noexcept override { ResultSet::acquire(); } + virtual void SAL_CALL release() noexcept override { ResultSet::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -103,6 +102,5 @@ public: // XRowUpdate }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx index 344c27175850..e616e9b22966 100644 --- a/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx +++ b/connectivity/source/drivers/postgresql/pq_preparedstatement.cxx @@ -40,7 +40,7 @@ #include "pq_statics.hxx" #include "pq_statement.hxx" -#include <o3tl/deleter.hxx> +#include <o3tl/safeint.hxx> #include <rtl/strbuf.hxx> #include <rtl/ustrbuf.hxx> @@ -57,6 +57,7 @@ #include <string_view> #include <connectivity/dbconversion.hxx> +#include <utility> using osl::MutexGuard; @@ -149,12 +150,12 @@ PreparedStatement::PreparedStatement( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const Reference< XConnection > & conn, struct ConnectionSettings *pSettings, - const OString & stmt ) + OString stmt ) : PreparedStatement_BASE(refMutex->GetMutex()) , OPropertySetHelper(PreparedStatement_BASE::rBHelper) , m_connection(conn) , m_pSettings(pSettings) - , m_stmt(stmt) + , m_stmt(std::move(stmt)) , m_xMutex(refMutex) , m_multipleResultAvailable(false) , m_multipleResultUpdateCount(0) @@ -198,7 +199,7 @@ PreparedStatement::~PreparedStatement() void PreparedStatement::checkColumnIndex( sal_Int32 parameterIndex ) { - if( parameterIndex < 1 || parameterIndex > static_cast<sal_Int32>(m_vars.size()) ) + if( parameterIndex < 1 || o3tl::make_unsigned(parameterIndex) > m_vars.size() ) { throw SQLException( "pq_preparedstatement: parameter index out of range (expected 1 to " @@ -262,10 +263,9 @@ void PreparedStatement::close( ) void PreparedStatement::raiseSQLException( const char * errorMsg ) { OUStringBuffer buf(128); - buf.append( "pq_driver: "); - buf.append( - OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding ) ); - buf.append( " (caused by statement '" ); + buf.append( "pq_driver: " + + OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding ) + + " (caused by statement '" ); buf.appendAscii( m_executedStatement.getStr() ); buf.append( "')" ); OUString error = buf.makeStringAndClear(); @@ -390,7 +390,7 @@ void PreparedStatement::setNull( sal_Int32 parameterIndex, sal_Int32 ) MutexGuard guard( m_xMutex->GetMutex() ); checkClosed(); checkColumnIndex( parameterIndex ); - m_vars[parameterIndex-1] = OString( "NULL" ); + m_vars[parameterIndex-1] = "NULL"_ostr; } void PreparedStatement::setObjectNull( @@ -399,7 +399,7 @@ void PreparedStatement::setObjectNull( MutexGuard guard( m_xMutex->GetMutex() ); checkClosed(); checkColumnIndex( parameterIndex ); - m_vars[parameterIndex-1] = OString( "NULL" ); + m_vars[parameterIndex-1] = "NULL"_ostr; } @@ -409,9 +409,9 @@ void PreparedStatement::setBoolean( sal_Int32 parameterIndex, sal_Bool x ) checkClosed(); checkColumnIndex( parameterIndex ); if( x ) - m_vars[parameterIndex-1] = OString( "'t'" ); + m_vars[parameterIndex-1] = "'t'"_ostr; else - m_vars[parameterIndex-1] = OString( "'f'" ); + m_vars[parameterIndex-1] = "'f'"_ostr; } void PreparedStatement::setByte( sal_Int32 parameterIndex, sal_Int8 x ) diff --git a/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx b/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx index eb0794f9efe0..ed81420cec7d 100644 --- a/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx +++ b/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_PREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_PREPAREDSTATEMENT_HXX +#pragma once #include <vector> #include <libpq-fe.h> @@ -99,12 +98,12 @@ public: PreparedStatement( const rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection> & con, struct ConnectionSettings *pSettings, - const OString &stmt ); + OString stmt ); virtual ~PreparedStatement() override; public: // XInterface - virtual void SAL_CALL acquire() throw() override { PreparedStatement_BASE::acquire(); } - virtual void SAL_CALL release() throw() override { PreparedStatement_BASE::release(); } + virtual void SAL_CALL acquire() noexcept override { PreparedStatement_BASE::acquire(); } + virtual void SAL_CALL release() noexcept override { PreparedStatement_BASE::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; public: // XCloseable @@ -218,6 +217,5 @@ private: }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_resultset.cxx b/connectivity/source/drivers/postgresql/pq_resultset.cxx index 556bae92d5be..0058041c87b5 100644 --- a/connectivity/source/drivers/postgresql/pq_resultset.cxx +++ b/connectivity/source/drivers/postgresql/pq_resultset.cxx @@ -44,6 +44,7 @@ #include <com/sun/star/sdbc/ResultSetType.hpp> #include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/sdbc/SQLException.hpp> +#include <utility> using osl::MutexGuard; @@ -79,14 +80,14 @@ ResultSet::ResultSet( const ::rtl::Reference< comphelper::RefCountedMutex > & re const Reference< XInterface > & owner, ConnectionSettings **ppSettings, PGresult * result, - const OUString &schema, - const OUString &table) + OUString schema, + OUString table) : BaseResultSet( refMutex, owner, PQntuples( result ), PQnfields( result ),(*ppSettings)->tc ), m_result( result ), - m_schema( schema ), - m_table( table ), + m_schema(std::move( schema )), + m_table(std::move( table )), m_ppSettings( ppSettings ) { // LEM TODO: shouldn't these things be inherited from the statement or something like that? diff --git a/connectivity/source/drivers/postgresql/pq_resultset.hxx b/connectivity/source/drivers/postgresql/pq_resultset.hxx index 4b2bb6f41fb9..cf2888bf5b93 100644 --- a/connectivity/source/drivers/postgresql/pq_resultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_resultset.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_RESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_RESULTSET_HXX +#pragma once #include <cppuhelper/propshlp.hxx> #include <cppuhelper/component.hxx> @@ -73,8 +72,8 @@ public: const css::uno::Reference< css::uno::XInterface > &owner, ConnectionSettings **pSettings, PGresult *result, - const OUString &schema, - const OUString &table ); + OUString schema, + OUString table ); virtual ~ResultSet() override; public: // XCloseable @@ -91,6 +90,5 @@ public: }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx index fbe10f82dacb..26b11de27985 100644 --- a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx +++ b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.cxx @@ -46,6 +46,7 @@ #include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/sdbc/SQLException.hpp> #include <com/sun/star/sdbc/XRow.hpp> +#include <utility> #include <string.h> @@ -113,18 +114,18 @@ static void extractPrecisionAndScale( sal_Int32 atttypmod, sal_Int32 *precision, } ResultSetMetaData::ResultSetMetaData( - const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, - const css::uno::Reference< css::sdbc::XResultSet > & origin, + ::rtl::Reference< comphelper::RefCountedMutex > refMutex, + css::uno::Reference< css::sdbc::XResultSet > origin, ResultSet * pResultSet, ConnectionSettings **ppSettings, PGresult const *pResult, - const OUString &schemaName, - const OUString &tableName ) : - m_xMutex( refMutex ), + OUString schemaName, + OUString tableName ) : + m_xMutex(std::move( refMutex )), m_ppSettings( ppSettings ), - m_origin( origin ), - m_tableName( tableName ), - m_schemaName( schemaName ), + m_origin(std::move( origin )), + m_tableName(std::move( tableName )), + m_schemaName(std::move( schemaName )), m_colDesc( PQnfields( pResult ) ), m_pResultSet( pResultSet ), m_checkedForTable( false ), @@ -166,8 +167,7 @@ void ResultSetMetaData::checkForTypes() if( i > 0 ) buf.append( " OR " ); int oid = m_colDesc[i].typeOid; - buf.append( "oid=" ); - buf.append( static_cast<sal_Int32>(oid) ); + buf.append( "oid=" + OUString::number(static_cast<sal_Int32>(oid)) ); } Reference< XResultSet > rs = stmt->executeQuery( buf.makeStringAndClear() ); Reference< XRow > xRow( rs, UNO_QUERY ); diff --git a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx index 2c1b5e5e5965..71c98190ba2b 100644 --- a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx +++ b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_RESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_RESULTSETMETADATA_HXX +#pragma once #include <vector> #include "pq_connection.hxx" @@ -90,13 +89,13 @@ class ResultSetMetaData : public: ResultSetMetaData( - const ::rtl::Reference< comphelper::RefCountedMutex > & reMutex, - const css::uno::Reference< css::sdbc::XResultSet > & origin, + ::rtl::Reference< comphelper::RefCountedMutex > reMutex, + css::uno::Reference< css::sdbc::XResultSet > origin, ResultSet *pResultSet, ConnectionSettings **pSettings, PGresult const *pResult, - const OUString &schemaName, - const OUString &tableName ); + OUString schemaName, + OUString tableName ); public: // Methods @@ -125,6 +124,4 @@ public: } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx b/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx index 02030729ad73..defb99906048 100644 --- a/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx +++ b/connectivity/source/drivers/postgresql/pq_sequenceresultset.cxx @@ -65,17 +65,17 @@ Any SequenceResultSet::getValue( sal_Int32 columnIndex ) SequenceResultSet::SequenceResultSet( const ::rtl::Reference< comphelper::RefCountedMutex > & mutex, const css::uno::Reference< css::uno::XInterface > &owner, - const std::vector< OUString > &colNames, - const std::vector< std::vector< Any > > &data, + std::vector< OUString >&& colNames, + std::vector< std::vector< Any > >&& data, const Reference< css::script::XTypeConverter > & tc, const ColumnMetaDataVector *pVec) : BaseResultSet( mutex, owner, data.size(), colNames.size(), tc ), - m_data(data ), - m_columnNames( colNames ) + m_data(std::move(data) ), + m_columnNames( std::move(colNames) ) { if( pVec ) { - m_meta = new SequenceResultSetMetaData( *pVec, m_columnNames.size() ); + m_meta = new SequenceResultSetMetaData( std::vector(*pVec), m_columnNames.size() ); } } diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx b/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx index 3b97e24a3001..64ac212b6b76 100644 --- a/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_sequenceresultset.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_SEQUENCERESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_SEQUENCERESULTSET_HXX +#pragma once #include <cppuhelper/propshlp.hxx> #include <cppuhelper/component.hxx> @@ -72,8 +71,8 @@ public: SequenceResultSet( const ::rtl::Reference< comphelper::RefCountedMutex > & mutex, const css::uno::Reference< css::uno::XInterface > &owner, - const std::vector< OUString > &colNames, - const std::vector< std::vector< css::uno::Any > > &data, + std::vector< OUString >&& colNames, + std::vector< std::vector< css::uno::Any > >&& data, const css::uno::Reference< css::script::XTypeConverter > &tc, const ColumnMetaDataVector *pVec = nullptr); virtual ~SequenceResultSet() override; @@ -89,6 +88,5 @@ public: // XColumnLocate }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx index d45ffc0a614a..568e6bb9f49d 100644 --- a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx +++ b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.cxx @@ -46,9 +46,9 @@ namespace pq_sdbc_driver { SequenceResultSetMetaData::SequenceResultSetMetaData( - const ColumnMetaDataVector &metaDataVector, + ColumnMetaDataVector&& metaDataVector, int colCount ) : - m_columnData( metaDataVector ), + m_columnData( std::move(metaDataVector) ), m_colCount( colCount ) { } diff --git a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx index 2bba06aa7d2f..3cd32ff66d7a 100644 --- a/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx +++ b/connectivity/source/drivers/postgresql/pq_sequenceresultsetmetadata.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_SEQUENCERESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_SEQUENCERESULTSETMETADATA_HXX +#pragma once #include <cppuhelper/implbase.hxx> #include <com/sun/star/sdbc/XResultSetMetaData.hpp> @@ -57,7 +56,7 @@ namespace pq_sdbc_driver public: SequenceResultSetMetaData( - const ColumnMetaDataVector &vec, + ColumnMetaDataVector&& vec, int colCount ); public: @@ -87,6 +86,4 @@ namespace pq_sdbc_driver } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_SEQUENCERESULTSETMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_statement.cxx b/connectivity/source/drivers/postgresql/pq_statement.cxx index 946d25b0c91e..648faa69811b 100644 --- a/connectivity/source/drivers/postgresql/pq_statement.cxx +++ b/connectivity/source/drivers/postgresql/pq_statement.cxx @@ -44,7 +44,6 @@ #include <osl/time.h> #include <rtl/ustrbuf.hxx> -#include <rtl/strbuf.hxx> #include <comphelper/sequence.hxx> @@ -60,6 +59,7 @@ #include <com/sun/star/container/XIndexAccess.hpp> #include <com/sun/star/container/XEnumerationAccess.hpp> +#include <cstddef> #include <string.h> #include <string_view> @@ -253,10 +253,10 @@ static void raiseSQLException( buf.append( "]" ); } buf.append( - OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding ) ); - buf.append( " (caused by statement '" ); - buf.append( OStringToOUString( sql, ConnectionSettings::encoding ) ); - buf.append( "')" ); + OUString( errorMsg, strlen(errorMsg) , ConnectionSettings::encoding ) + + " (caused by statement '" + + OStringToOUString( sql, ConnectionSettings::encoding ) + + "')" ); OUString error = buf.makeStringAndClear(); SAL_WARN("connectivity.postgresql", error); throw SQLException( error, owner, OUString(), 1, Any() ); @@ -430,8 +430,8 @@ bool executePostgresCommand( const OString & cmd, struct CommandData *data ) &table); // check, whether the columns are in the result set (required !) - int i; - for( i = 0 ; i < static_cast<int>(sourceTableKeys.size()) ; i ++ ) + std::size_t i; + for( i = 0 ; i < sourceTableKeys.size() ; i ++ ) { if( -1 == PQfnumber( result, @@ -442,12 +442,12 @@ bool executePostgresCommand( const OString & cmd, struct CommandData *data ) } } - if( !sourceTableKeys.empty() && i == static_cast<int>(sourceTableKeys.size()) ) + if( !sourceTableKeys.empty() && i == sourceTableKeys.size() ) { *(data->pLastResultset) = UpdateableResultSet::createFromPGResultSet( data->refMutex, data->owner, data->ppSettings, result, - schema, table,sourceTableKeys ); + schema, table, std::move(sourceTableKeys) ); } else if( ! table.getLength() ) { @@ -456,15 +456,12 @@ bool executePostgresCommand( const OString & cmd, struct CommandData *data ) } else if( !sourceTableKeys.empty() ) { - OStringBuffer buf( 128 ); - buf.append( "can't support updateable resultset for table " ); - buf.append( OUStringToOString( schema, ConnectionSettings::encoding ) ); - buf.append( "." ); - buf.append( OUStringToOString( table, ConnectionSettings::encoding ) ); - buf.append( ", because resultset does not contain a part of the primary key ( column " ); - buf.append( OUStringToOString( sourceTableKeys[i], ConnectionSettings::encoding ) ); - buf.append( " is missing )" ); - aReason = buf.makeStringAndClear(); + aReason = "can't support updateable resultset for table " + + OUStringToOString( schema, ConnectionSettings::encoding ) + "." + + OUStringToOString( table, ConnectionSettings::encoding ) + + ", because resultset does not contain a part of the primary key ( column " + + OUStringToOString( sourceTableKeys[i], ConnectionSettings::encoding ) + + " is missing )"; } else { @@ -559,7 +556,7 @@ static void getAutoValues( const Reference< XConnection > & connection, const OUString &schemaName, const OUString & tableName, - ConnectionSettings *pConnectionSettings ) + const ConnectionSettings *pConnectionSettings ) { OUString strDefaultValue = getColExprForDefaultSettingVal(pConnectionSettings); Reference< XPreparedStatement > stmt = connection->prepareStatement( @@ -593,7 +590,7 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert( ConnectionSettings *pConnectionSettings, const Reference< XConnection > &connection, sal_Int32 nLastOid, - const OUString & lastTableInserted, + std::u16string_view lastTableInserted, const OString & lastQuery ) { Reference< XResultSet > ret; @@ -602,7 +599,7 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert( splitConcatenatedIdentifier( lastTableInserted, &schemaName, &tableName ); - if( nLastOid && lastTableInserted.getLength() ) + if( nLastOid && lastTableInserted.size() ) { OUStringBuffer buf( 128 ); buf.append( "SELECT * FROM " ); @@ -610,11 +607,10 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert( bufferQuoteQualifiedIdentifier(buf, schemaName, tableName, pConnectionSettings ); else bufferQuoteIdentifier( buf, lastTableInserted, pConnectionSettings ); - buf.append( " WHERE oid = " ); - buf.append( nLastOid ); + buf.append( " WHERE oid = " + OUString::number(nLastOid) ); query = buf.makeStringAndClear(); } - else if ( lastTableInserted.getLength() && lastQuery.getLength() ) + else if ( lastTableInserted.size() && lastQuery.getLength() ) { // extract nameValue Pairs String2StringMap namedValues; @@ -703,8 +699,7 @@ Reference< XResultSet > getGeneratedValuesFromLastInsert( if( bAdditionalCondition ) buf.append( " AND " ); bufferQuoteIdentifier( buf, columnNameUnicode, pConnectionSettings ); - buf.append( " = " ); - buf.append( value ); + buf.append( " = " + value ); bAdditionalCondition = true; } query = buf.makeStringAndClear(); diff --git a/connectivity/source/drivers/postgresql/pq_statement.hxx b/connectivity/source/drivers/postgresql/pq_statement.hxx index 6f9fb3bb1ecc..816d2a55afaa 100644 --- a/connectivity/source/drivers/postgresql/pq_statement.hxx +++ b/connectivity/source/drivers/postgresql/pq_statement.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_STATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_STATEMENT_HXX +#pragma once #include <sal/config.h> @@ -101,8 +100,8 @@ public: virtual ~Statement() override; public: // XInterface - virtual void SAL_CALL acquire() throw() override { Statement_BASE::acquire(); } - virtual void SAL_CALL release() throw() override { Statement_BASE::release(); } + virtual void SAL_CALL acquire() noexcept override { Statement_BASE::acquire(); } + virtual void SAL_CALL release() noexcept override { Statement_BASE::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; public: // XCloseable @@ -190,11 +189,10 @@ css::uno::Reference< css::sdbc::XResultSet > getGeneratedValuesFromLastInsert( ConnectionSettings *pConnectionSettings, const css::uno::Reference< css::sdbc::XConnection > &connection, sal_Int32 nLastOid, - const OUString & lastTableInserted, + std::u16string_view lastTableInserted, const OString & lastQuery ); } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_statics.cxx b/connectivity/source/drivers/postgresql/pq_statics.cxx index a68242e2c55d..f69556202240 100644 --- a/connectivity/source/drivers/postgresql/pq_statics.cxx +++ b/connectivity/source/drivers/postgresql/pq_statics.cxx @@ -35,9 +35,9 @@ ************************************************************************/ #include "pq_statics.hxx" -#include "pq_updateableresultset.hxx" #include <com/sun/star/sdbc/DataType.hpp> #include <com/sun/star/beans/PropertyAttribute.hpp> +#include <utility> using com::sun::star::uno::Sequence; using com::sun::star::uno::Any; @@ -69,8 +69,8 @@ struct BaseTypeDef { const char * typeName; sal_Int32 value; }; struct PropertyDef { - PropertyDef( const OUString &str, const Type &t ) - : name( str ) , type( t ) {} + PropertyDef( OUString str, const Type &t ) + : name(std::move( str )) , type( t ) {} OUString name; css::uno::Type type; }; @@ -89,9 +89,10 @@ static cppu::IPropertyArrayHelper * createPropertyArrayHelper( PropertyDef const *props, int count , sal_Int16 attr ) { Sequence< Property > seq( count ); + auto seqRange = asNonConstRange(seq); for( int i = 0 ; i < count ; i ++ ) { - seq[i] = Property( props[i].name, i, props[i].type, attr ); + seqRange[i] = Property( props[i].name, i, props[i].type, attr ); } return new cppu::OPropertyArrayHelper( seq, true ); } @@ -100,9 +101,10 @@ static cppu::IPropertyArrayHelper * createPropertyArrayHelper( PropertyDefEx const *props, int count ) { Sequence< Property > seq( count ); + auto seqRange = asNonConstRange(seq); for( int i = 0 ; i < count ; i ++ ) { - seq[i] = Property( props[i].name, i, props[i].type, props[i].attribute ); + seqRange[i] = Property( props[i].name, i, props[i].type, props[i].attribute ); } return new cppu::OPropertyArrayHelper( seq, true ); } @@ -184,8 +186,7 @@ Statics & getStatics() // Table props set ImplementationStatics &ist = statics.refl.table; ist.implName = "org.openoffice.comp.pq.sdbcx.Table"; - ist.serviceNames = Sequence< OUString > ( 1 ); - ist.serviceNames[0] = "com.sun.star.sdbcx.Table"; + ist.serviceNames = { "com.sun.star.sdbcx.Table" }; PropertyDef tableDef[] = { PropertyDef( statics.CATALOG_NAME , tString ), @@ -196,13 +197,11 @@ Statics & getStatics() PropertyDef( statics.TYPE , tString ) }; ist.pProps = createPropertyArrayHelper( - tableDef, SAL_N_ELEMENTS(tableDef), READONLY ); + tableDef, std::size(tableDef), READONLY ); statics.refl.tableDescriptor.implName = "org.openoffice.comp.pq.sdbcx.TableDescriptor"; - statics.refl.tableDescriptor.serviceNames = Sequence< OUString > (1); - statics.refl.tableDescriptor.serviceNames[0] = - "com.sun.star.sdbcx.TableDescriptor"; + statics.refl.tableDescriptor.serviceNames = { "com.sun.star.sdbcx.TableDescriptor" }; PropertyDef tableDescDef[] = { PropertyDef( statics.CATALOG_NAME , tString ), @@ -212,12 +211,11 @@ Statics & getStatics() PropertyDef( statics.SCHEMA_NAME , tString ) }; statics.refl.tableDescriptor.pProps = createPropertyArrayHelper( - tableDescDef, SAL_N_ELEMENTS(tableDescDef), 0 ); + tableDescDef, std::size(tableDescDef), 0 ); // Column props set statics.refl.column.implName = "org.openoffice.comp.pq.sdbcx.Column"; - statics.refl.column.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.column.serviceNames[0] = "com.sun.star.sdbcx.Column"; + statics.refl.column.serviceNames = { "com.sun.star.sdbcx.Column" }; PropertyDefEx columnDef[] = { PropertyDefEx( statics.CATALOG_NAME , tString, READONLY ), @@ -235,13 +233,11 @@ Statics & getStatics() PropertyDefEx( statics.TYPE_NAME , tString ,READONLY) }; statics.refl.column.pProps = createPropertyArrayHelper( - columnDef, SAL_N_ELEMENTS(columnDef) ); + columnDef, std::size(columnDef) ); statics.refl.columnDescriptor.implName = "org.openoffice.comp.pq.sdbcx.ColumnDescriptor"; - statics.refl.columnDescriptor.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.columnDescriptor.serviceNames[0] = - "com.sun.star.sdbcx.ColumnDescriptor"; + statics.refl.columnDescriptor.serviceNames = { "com.sun.star.sdbcx.ColumnDescriptor" }; PropertyDef columnDescDef[] = { PropertyDef( statics.CATALOG_NAME , tString ), @@ -260,12 +256,11 @@ Statics & getStatics() }; statics.refl.columnDescriptor.pProps = createPropertyArrayHelper( - columnDescDef, SAL_N_ELEMENTS(columnDescDef), 0 ); + columnDescDef, std::size(columnDescDef), 0 ); // Key properties statics.refl.key.implName = "org.openoffice.comp.pq.sdbcx.Key"; - statics.refl.key.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.key.serviceNames[0] = "com.sun.star.sdbcx.Key"; + statics.refl.key.serviceNames = { "com.sun.star.sdbcx.Key" }; PropertyDef keyDef[] = { PropertyDef( statics.DELETE_RULE, tInt ), @@ -277,15 +272,13 @@ Statics & getStatics() PropertyDef( statics.UPDATE_RULE, tInt ) }; statics.refl.key.pProps = createPropertyArrayHelper( - keyDef, SAL_N_ELEMENTS(keyDef), READONLY ); + keyDef, std::size(keyDef), READONLY ); // Key properties statics.refl.keyDescriptor.implName = "org.openoffice.comp.pq.sdbcx.KeyDescriptor"; - statics.refl.keyDescriptor.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.keyDescriptor.serviceNames[0] = - "com.sun.star.sdbcx.KeyDescriptor"; + statics.refl.keyDescriptor.serviceNames = { "com.sun.star.sdbcx.KeyDescriptor" }; PropertyDef keyDescDef[] = { PropertyDef( statics.DELETE_RULE, tInt ), @@ -295,13 +288,12 @@ Statics & getStatics() PropertyDef( statics.UPDATE_RULE, tInt ) }; statics.refl.keyDescriptor.pProps = createPropertyArrayHelper( - keyDescDef, SAL_N_ELEMENTS(keyDescDef), 0 ); + keyDescDef, std::size(keyDescDef), 0 ); // KeyColumn props set statics.refl.keycolumn.implName = "org.openoffice.comp.pq.sdbcx.KeyColumn"; - statics.refl.keycolumn.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.keycolumn.serviceNames[0] = "com.sun.star.sdbcx.KeyColumn"; + statics.refl.keycolumn.serviceNames = { "com.sun.star.sdbcx.KeyColumn" }; PropertyDef keycolumnDef[] = { PropertyDef( statics.CATALOG_NAME , tString ), @@ -319,26 +311,24 @@ Statics & getStatics() PropertyDef( statics.TYPE_NAME , tString ) }; statics.refl.keycolumn.pProps = createPropertyArrayHelper( - keycolumnDef, SAL_N_ELEMENTS(keycolumnDef), READONLY ); + keycolumnDef, std::size(keycolumnDef), READONLY ); // KeyColumn props set statics.refl.keycolumnDescriptor.implName = "org.openoffice.comp.pq.sdbcx.KeyColumnDescriptor"; - statics.refl.keycolumnDescriptor.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.keycolumnDescriptor.serviceNames[0] = - "com.sun.star.sdbcx.KeyColumnDescriptor"; + statics.refl.keycolumnDescriptor.serviceNames = + { "com.sun.star.sdbcx.KeyColumnDescriptor" }; PropertyDef keycolumnDescDef[] = { PropertyDef( statics.NAME , tString ), PropertyDef( statics.RELATED_COLUMN, tString ) }; statics.refl.keycolumnDescriptor.pProps = createPropertyArrayHelper( - keycolumnDescDef, SAL_N_ELEMENTS(keycolumnDescDef), 0 ); + keycolumnDescDef, std::size(keycolumnDescDef), 0 ); // view props set statics.refl.view.implName = "org.openoffice.comp.pq.sdbcx.View"; - statics.refl.view.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.view.serviceNames[0] = "com.sun.star.sdbcx.View"; + statics.refl.view.serviceNames = { "com.sun.star.sdbcx.View" }; PropertyDef viewDef[] = { PropertyDef( statics.CATALOG_NAME , tString ), @@ -348,43 +338,38 @@ Statics & getStatics() PropertyDef( statics.SCHEMA_NAME , tString ) }; statics.refl.view.pProps = createPropertyArrayHelper( - viewDef, SAL_N_ELEMENTS(viewDef), READONLY ); + viewDef, std::size(viewDef), READONLY ); // view props set statics.refl.viewDescriptor.implName = "org.openoffice.comp.pq.sdbcx.ViewDescriptor"; - statics.refl.viewDescriptor.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.viewDescriptor.serviceNames[0] = "com.sun.star.sdbcx.ViewDescriptor"; + statics.refl.viewDescriptor.serviceNames = { "com.sun.star.sdbcx.ViewDescriptor" }; statics.refl.viewDescriptor.pProps = createPropertyArrayHelper( - viewDef, SAL_N_ELEMENTS(viewDef), 0 ); // reuse view, as it is identical + viewDef, std::size(viewDef), 0 ); // reuse view, as it is identical // user props set statics.refl.user.implName = "org.openoffice.comp.pq.sdbcx.User"; - statics.refl.user.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.user.serviceNames[0] = "com.sun.star.sdbcx.User"; + statics.refl.user.serviceNames = { "com.sun.star.sdbcx.User" }; PropertyDef userDefRO[] = { PropertyDef( statics.NAME , tString ) }; statics.refl.user.pProps = createPropertyArrayHelper( - userDefRO, SAL_N_ELEMENTS(userDefRO), READONLY ); + userDefRO, std::size(userDefRO), READONLY ); // user props set statics.refl.userDescriptor.implName = "org.openoffice.comp.pq.sdbcx.UserDescriptor"; - statics.refl.userDescriptor.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.userDescriptor.serviceNames[0] = - "com.sun.star.sdbcx.UserDescriptor"; + statics.refl.userDescriptor.serviceNames = { "com.sun.star.sdbcx.UserDescriptor" }; PropertyDef userDefWR[] = { PropertyDef( statics.NAME , tString ), PropertyDef( statics.PASSWORD , tString ) }; statics.refl.userDescriptor.pProps = createPropertyArrayHelper( - userDefWR, SAL_N_ELEMENTS(userDefWR), 0 ); + userDefWR, std::size(userDefWR), 0 ); // index props set statics.refl.index.implName = "org.openoffice.comp.pq.sdbcx.Index"; - statics.refl.index.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.index.serviceNames[0] = "com.sun.star.sdbcx.Index"; + statics.refl.index.serviceNames = { "com.sun.star.sdbcx.Index" }; PropertyDef indexDef[] = { PropertyDef( statics.CATALOG , tString ), @@ -395,21 +380,18 @@ Statics & getStatics() PropertyDef( statics.PRIVATE_COLUMN_INDEXES, tStringSequence ) }; statics.refl.index.pProps = createPropertyArrayHelper( - indexDef, SAL_N_ELEMENTS(indexDef), READONLY ); + indexDef, std::size(indexDef), READONLY ); // index props set statics.refl.indexDescriptor.implName = "org.openoffice.comp.pq.sdbcx.IndexDescriptor"; - statics.refl.indexDescriptor.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.indexDescriptor.serviceNames[0] = - "com.sun.star.sdbcx.IndexDescriptor"; + statics.refl.indexDescriptor.serviceNames = { "com.sun.star.sdbcx.IndexDescriptor" }; statics.refl.indexDescriptor.pProps = createPropertyArrayHelper( - indexDef, SAL_N_ELEMENTS(indexDef), 0 ); + indexDef, std::size(indexDef), 0 ); // indexColumn props set statics.refl.indexColumn.implName = "org.openoffice.comp.pq.sdbcx.IndexColumn"; - statics.refl.indexColumn.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.indexColumn.serviceNames[0] = "com.sun.star.sdbcx.IndexColumn"; + statics.refl.indexColumn.serviceNames = { "com.sun.star.sdbcx.IndexColumn" }; PropertyDef indexColumnDef[] = { PropertyDef( statics.CATALOG_NAME , tString ), @@ -427,47 +409,20 @@ Statics & getStatics() PropertyDef( statics.TYPE_NAME , tString ) }; statics.refl.indexColumn.pProps = createPropertyArrayHelper( - indexColumnDef, SAL_N_ELEMENTS(indexColumnDef), READONLY ); + indexColumnDef, std::size(indexColumnDef), READONLY ); // indexColumn props set statics.refl.indexColumnDescriptor.implName = "org.openoffice.comp.pq.sdbcx.IndexColumnDescriptor"; - statics.refl.indexColumnDescriptor.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.indexColumnDescriptor.serviceNames[0] = - "com.sun.star.sdbcx.IndexColumnDescriptor"; + statics.refl.indexColumnDescriptor.serviceNames = + { "com.sun.star.sdbcx.IndexColumnDescriptor" }; PropertyDef indexColumnDescDef[] = { PropertyDef( statics.IS_ASCENDING, tBool ), PropertyDef( statics.NAME , tString ) }; statics.refl.indexColumnDescriptor.pProps = createPropertyArrayHelper( - indexColumnDescDef, SAL_N_ELEMENTS(indexColumnDescDef), 0 ); - - // resultset - statics.refl.resultSet.implName = "org.openoffice.comp.pq.ResultSet"; - statics.refl.resultSet.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.resultSet.serviceNames[0] = "com.sun.star.sdbc.ResultSet"; - statics.refl.resultSet.types = UpdateableResultSet::getStaticTypes( false /* updateable */ ); - PropertyDef resultSet[] = - { - PropertyDef( statics.CURSOR_NAME , tString ), - PropertyDef( statics.ESCAPE_PROCESSING , tBool ), - PropertyDef( statics.FETCH_DIRECTION , tInt ), - PropertyDef( statics.FETCH_SIZE , tInt ), - PropertyDef( statics.IS_BOOKMARKABLE , tBool ), - PropertyDef( statics.RESULT_SET_CONCURRENCY , tInt ), - PropertyDef( statics.RESULT_SET_TYPE , tInt ) - }; - statics.refl.resultSet.pProps = createPropertyArrayHelper( - resultSet, SAL_N_ELEMENTS(resultSet), 0 ); - - // updateableResultset - statics.refl.updateableResultSet.implName = "org.openoffice.comp.pq.UpdateableResultSet"; - statics.refl.updateableResultSet.serviceNames = Sequence< OUString > ( 1 ); - statics.refl.updateableResultSet.serviceNames[0] = "com.sun.star.sdbc.ResultSet"; - statics.refl.updateableResultSet.types = UpdateableResultSet::getStaticTypes( true /* updateable */ ); - statics.refl.updateableResultSet.pProps = createPropertyArrayHelper( - resultSet, SAL_N_ELEMENTS(resultSet), 0 ); + indexColumnDescDef, std::size(indexColumnDescDef), 0 ); // databasemetadata statics.tablesRowNames = std::vector< OUString > ( 5 ); diff --git a/connectivity/source/drivers/postgresql/pq_statics.hxx b/connectivity/source/drivers/postgresql/pq_statics.hxx index 017f49b5a655..4e745e4086ee 100644 --- a/connectivity/source/drivers/postgresql/pq_statics.hxx +++ b/connectivity/source/drivers/postgresql/pq_statics.hxx @@ -34,10 +34,10 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_STATICS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_STATICS_HXX +#pragma once #include <unordered_map> +#include <utility> #include <vector> #include <com/sun/star/uno/Any.hxx> @@ -51,20 +51,20 @@ namespace pq_sdbc_driver struct ColumnMetaData { ColumnMetaData( - const OUString &_columnName, - const OUString &_tableName, - const OUString &_schemaTableName, - const OUString &_typeName, + OUString _columnName, + OUString _tableName, + OUString _schemaTableName, + OUString _typeName, sal_Int32 _type, sal_Int32 _precision, sal_Int32 _scale, bool _isCurrency, bool _isNullable, bool _isAutoIncrement ) : - columnName( _columnName ), - tableName( _tableName ), - schemaTableName( _schemaTableName ), - typeName( _typeName ), + columnName(std::move( _columnName )), + tableName(std::move( _tableName )), + schemaTableName(std::move( _schemaTableName )), + typeName(std::move( _typeName )), type( _type ), precision( _precision ), scale( _scale ), @@ -123,9 +123,6 @@ struct ReflectionImplementations struct ImplementationStatics indexDescriptor; struct ImplementationStatics indexColumn; struct ImplementationStatics indexColumnDescriptor; - - struct ImplementationStatics updateableResultSet; - struct ImplementationStatics resultSet; }; const sal_Int32 TABLE_INDEX_CATALOG = 0; @@ -239,6 +236,5 @@ private: Statics & getStatics(); } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_tools.cxx b/connectivity/source/drivers/postgresql/pq_tools.cxx index 1bb089a5407a..fb42f864f97e 100644 --- a/connectivity/source/drivers/postgresql/pq_tools.cxx +++ b/connectivity/source/drivers/postgresql/pq_tools.cxx @@ -37,6 +37,7 @@ #include <sal/config.h> #include <o3tl/any.hxx> +#include <o3tl/string_view.hxx> #include <rtl/strbuf.hxx> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> @@ -79,7 +80,6 @@ using com::sun::star::uno::Reference; using com::sun::star::uno::Sequence; using com::sun::star::uno::XInterface; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::container::XEnumeration; using com::sun::star::container::XEnumerationAccess; @@ -125,7 +125,7 @@ void bufferEscapeConstant( OUStringBuffer & buf, std::u16string_view value, Conn strbuf.setLength( len ); // Previously here RTL_TEXTENCODING_ASCII_US; as we set the PostgreSQL client_encoding to UTF8, // we get UTF8 here, too. I'm not sure why it worked well before... - buf.append( OStringToOUString( strbuf.makeStringAndClear(), RTL_TEXTENCODING_UTF8 ) ); + buf.append( OStringToOUString( strbuf, RTL_TEXTENCODING_UTF8 ) ); } static void ibufferQuoteConstant( OUStringBuffer & buf, std::u16string_view value, ConnectionSettings *settings ) @@ -315,30 +315,30 @@ bool isWhitespace( sal_Unicode c ) return ' ' == c || 9 == c || 10 == c || 13 == c; } -OUString extractTableFromInsert( const OUString & sql ) +OUString extractTableFromInsert( std::u16string_view sql ) { OUString ret; - int i = 0; - while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } + size_t i = 0; + while (i < sql.size() && isWhitespace(sql[i])) { i++; } - if( sql.matchIgnoreAsciiCase("insert", i) ) + if( o3tl::matchIgnoreAsciiCase(sql, u"insert", i) ) { i += 6; - while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } - if( sql.matchIgnoreAsciiCase("into", i) ) + while (i < sql.size() && isWhitespace(sql[i])) { i++; } + if( o3tl::matchIgnoreAsciiCase(sql, u"into", i) ) { i +=4; - while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } + while (i < sql.size() && isWhitespace(sql[i])) { i++; } int start = i; bool quote = (sql[i] == '"'); - for( i++ ; i < sql.getLength() ; i ++ ) + for( i++ ; i < sql.size() ; i ++ ) { if( quote && sql[i] == '"' ) { - while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } + while (i < sql.size() && isWhitespace(sql[i])) { i++; } if( '.' == sql[i] ) { - while (i < sql.getLength() && isWhitespace(sql[i])) { i++; } + while (i < sql.size() && isWhitespace(sql[i])) { i++; } if( '"' == sql[i] ) { // the second part of the table name does not use quotes @@ -361,7 +361,7 @@ OUString extractTableFromInsert( const OUString & sql ) } } } - ret = sql.copy(start, i - start ).trim(); + ret = o3tl::trim(sql.substr(start, i - start )); // printf( "pq_statement: parsed table name %s from insert\n" , // OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US).getStr() ); } @@ -416,7 +416,7 @@ void splitSQL( const OString & sql, std::vector< OString > &vec ) { if( '"' == c ) { - vec.push_back( OString( &sql.getStr()[start], i-start+1 ) ); + vec.emplace_back( &sql.getStr()[start], i-start+1 ); start = i + 1; doubleQuote = false; } @@ -431,7 +431,7 @@ void splitSQL( const OString & sql, std::vector< OString > &vec ) } else if( '\'' == c ) { - vec.push_back( OString( &sql.getStr()[start], i - start +1 ) ); + vec.emplace_back( &sql.getStr()[start], i - start +1 ); start = i + 1; // leave single quotes ! singleQuote = false; } @@ -440,20 +440,20 @@ void splitSQL( const OString & sql, std::vector< OString > &vec ) { if( '"' == c ) { - vec.push_back( OString( &sql.getStr()[start], i - start ) ); + vec.emplace_back( &sql.getStr()[start], i - start ); doubleQuote = true; start = i; } else if( '\'' == c ) { - vec.push_back( OString( &sql.getStr()[start], i - start ) ); + vec.emplace_back( &sql.getStr()[start], i - start ); singleQuote = true; start = i; } } } if( start < i ) - vec.push_back( OString( &sql.getStr()[start] , i - start ) ); + vec.emplace_back( &sql.getStr()[start] , i - start ); // for( i = 0 ; i < vec.size() ; i ++ ) // printf( "%s!" , vec[i].getStr() ); @@ -476,7 +476,7 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec ) { if( '"' == c ) { - vec.push_back( OString( &sql.getStr()[start], i-start ) ); + vec.emplace_back( &sql.getStr()[start], i-start ); start = i + 1; doubleQuote = false; } @@ -485,7 +485,7 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec ) { if( '\'' == c ) { - vec.push_back( OString( &sql.getStr()[start], i - start +1 ) ); + vec.emplace_back( &sql.getStr()[start], i - start +1 ); start = i + 1; // leave single quotes ! singleQuote = false; } @@ -508,15 +508,15 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec ) start ++; // skip additional whitespace else { - vec.push_back( OString( &sql.getStr()[start], i - start ) ); + vec.emplace_back( &sql.getStr()[start], i - start ); start = i +1; } } else if( ',' == c || isOperator( c ) || '(' == c || ')' == c ) { if( i - start ) - vec.push_back( OString( &sql.getStr()[start], i - start ) ); - vec.push_back( OString( &sql.getStr()[i], 1 ) ); + vec.emplace_back( &sql.getStr()[start], i - start ); + vec.emplace_back( &sql.getStr()[i], 1 ); start = i + 1; } else if( '.' == c ) @@ -529,15 +529,15 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec ) else { if( i - start ) - vec.push_back( OString( &sql.getStr()[start], i - start ) ); - vec.push_back( OString( "." ) ); + vec.emplace_back( &sql.getStr()[start], i - start ); + vec.emplace_back( "." ); start = i + 1; } } } } if( start < i ) - vec.push_back( OString( &sql.getStr()[start] , i - start ) ); + vec.emplace_back( &sql.getStr()[start] , i - start ); // for( i = 0 ; i < vec.size() ; i ++ ) // printf( "%s!" , vec[i].getStr() ); @@ -596,12 +596,12 @@ OUString array2String( const css::uno::Sequence< Any > &seq ) } -std::vector< Any > parseArray( const OUString & str ) +std::vector< Any > parseArray( std::u16string_view str ) { - int len = str.getLength(); + size_t len = str.size(); bool doubleQuote = false; int brackets = 0; - int i = 0; + size_t i = 0; OUStringBuffer current; std::vector<Any> elements; @@ -644,7 +644,7 @@ std::vector< Any > parseArray( const OUString & str ) if( brackets == 0 ) { if( !current.isEmpty() || doubleQuotedValue ) - elements.push_back( makeAny( current.makeStringAndClear() ) ); + elements.emplace_back( current.makeStringAndClear() ); } else { @@ -673,7 +673,7 @@ std::vector< Any > parseArray( const OUString & str ) else if( ',' == c && brackets == 1) { doubleQuotedValue = false; - elements.push_back( makeAny( current.makeStringAndClear() ) ); + elements.emplace_back( current.makeStringAndClear() ); } else if( isWhitespace( c ) ) { @@ -840,17 +840,17 @@ OUString getColExprForDefaultSettingVal(ConnectionSettings const *settings) OUString("pg_get_expr(pg_attrdef.adbin, pg_attrdef.adrelid, true)"); } -css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str ) +css::uno::Sequence< sal_Int32 > string2intarray( std::u16string_view str ) { css::uno::Sequence< sal_Int32 > ret; - const sal_Int32 strlen = str.getLength(); - if( str.getLength() > 1 ) + const sal_Int32 strlen = str.size(); + if( strlen > 1 ) { sal_Int32 start = 0; sal_uInt32 c; for (;;) { - c = str.iterateCodePoints(&start); + c = o3tl::iterateCodePoints(str, &start); if (!iswspace(c)) break; if ( start == strlen) @@ -860,7 +860,7 @@ css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str ) return ret; for (;;) { - c = str.iterateCodePoints(&start); + c = o3tl::iterateCodePoints(str, &start); if ( !iswspace(c) ) break; if ( start == strlen) @@ -879,7 +879,7 @@ css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str ) break; if ( start == strlen) return ret; - c=str.iterateCodePoints(&start); + c = o3tl::iterateCodePoints(str, &start); } while ( c ); do { @@ -888,20 +888,20 @@ css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str ) if ( start == strlen) return ret; digits.append(OUString(&c, 1)); - c = str.iterateCodePoints(&start); + c = o3tl::iterateCodePoints(str, &start); } while ( c ); - vec.push_back( digits.makeStringAndClear().toInt32() ); + vec.push_back( o3tl::toInt32(digits) ); do { if(!iswspace(c)) break; if ( start == strlen) return ret; - c = str.iterateCodePoints(&start); + c = o3tl::iterateCodePoints(str, &start); } while ( c ); if ( c == L'}' ) break; - if ( str.iterateCodePoints(&start) != L',' ) + if ( o3tl::iterateCodePoints(str, &start) != L',' ) return ret; if ( start == strlen) return ret; @@ -918,11 +918,12 @@ Sequence< OUString > convertMappedIntArray2StringArray( const Int2StringMap &map, const Sequence< sal_Int32 > &intArray ) { Sequence< OUString > ret( intArray.getLength() ); + auto retRange = asNonConstRange(ret); for( int i = 0; i < intArray.getLength() ; i ++ ) { Int2StringMap::const_iterator ii = map.find( intArray[i] ); if( ii != map.end() ) - ret[i] = ii->second; + retRange[i] = ii->second; } return ret; } @@ -942,19 +943,17 @@ OUString sqltype2string( const Reference< XPropertySet > & desc ) case css::sdbc::DataType::VARCHAR: case css::sdbc::DataType::CHAR: { - typeName.append( "(" ); - typeName.append( precision ); - typeName.append( ")" ); + typeName.append( "(" + OUString::number(precision) + ")" ); break; } case css::sdbc::DataType::DECIMAL: case css::sdbc::DataType::NUMERIC: { - typeName.append( "(" ); - typeName.append( precision ); - typeName.append( "," ); - typeName.append( extractIntProperty( desc, getStatics().SCALE ) ); - typeName.append( ")" ); + typeName.append( "(" + + OUString::number(precision) + + "," + + OUString::number(extractIntProperty( desc, getStatics().SCALE )) + + ")" ); break; } default: diff --git a/connectivity/source/drivers/postgresql/pq_tools.hxx b/connectivity/source/drivers/postgresql/pq_tools.hxx index 6d11e9b40425..c5f9174111ca 100644 --- a/connectivity/source/drivers/postgresql/pq_tools.hxx +++ b/connectivity/source/drivers/postgresql/pq_tools.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_TOOLS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_TOOLS_HXX +#pragma once #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/sdbc/XParameters.hpp> @@ -107,7 +106,7 @@ bool extractBoolProperty( void disposeNoThrow( const css::uno::Reference< css::uno::XInterface > & r ); void disposeObject( const css::uno::Reference< css::uno::XInterface > & r ); -OUString extractTableFromInsert( const OUString & sql ); +OUString extractTableFromInsert( std::u16string_view sql ); OString extractSingleTableFromSelect( const std::vector< OString > &vec ); OUString getColExprForDefaultSettingVal(ConnectionSettings const *settings); @@ -116,7 +115,7 @@ void tokenizeSQL( const OString & sql, std::vector< OString > &vec ); void splitSQL( const OString & sql, std::vector< OString > &vec ); std::vector< sal_Int32 > parseIntArray( const OUString & str ); /// @throws css::sdbc::SQLException -std::vector< css::uno::Any > parseArray( const OUString & str ); +std::vector< css::uno::Any > parseArray( std::u16string_view str ); OUString array2String( const css::uno::Sequence< css::uno::Any > &seq ); @@ -132,7 +131,7 @@ void fillAttnum2attnameMap( const OUString &schema, const OUString &table ); -css::uno::Sequence< sal_Int32 > string2intarray( const OUString & str ); +css::uno::Sequence< sal_Int32 > string2intarray( std::u16string_view str ); css::uno::Sequence< OUString > convertMappedIntArray2StringArray( const Int2StringMap &map, const css::uno::Sequence< sal_Int32> &source ); @@ -174,6 +173,4 @@ public: } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx b/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx index d8780e76c563..49eb65cd9fbf 100644 --- a/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx +++ b/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx @@ -35,6 +35,7 @@ ************************************************************************/ #include <sal/log.hxx> +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <cppuhelper/queryinterface.hxx> @@ -88,7 +89,7 @@ css::uno::Reference< css::sdbc::XCloseable > UpdateableResultSet::createFromPGRe PGresult *result, const OUString &schema, const OUString &table, - const std::vector< OUString > &primaryKey ) + std::vector< OUString > && primaryKey ) { sal_Int32 columnCount = PQnfields( result ); sal_Int32 rowCount = PQntuples( result ); @@ -118,16 +119,14 @@ css::uno::Reference< css::sdbc::XCloseable > UpdateableResultSet::createFromPGRe data[row] = aRow; } - UpdateableResultSet *pRS = new UpdateableResultSet( - mutex, owner, columnNames, data, ppSettings, schema, table, primaryKey ); - - Reference <XCloseable > ret = pRS; // give it a refcount + rtl::Reference<UpdateableResultSet> pRS = new UpdateableResultSet( + mutex, owner, std::move(columnNames), std::move(data), ppSettings, schema, table, std::move(primaryKey) ); pRS->m_meta = new ResultSetMetaData( mutex, pRS,nullptr, ppSettings, result, schema, table ); PQclear( result ); // we don't need it anymore - return ret; + return pRS; } css::uno::Any UpdateableResultSet::queryInterface( @@ -297,8 +296,8 @@ void UpdateableResultSet::updateRow( ) buf.append( ", " ); columns ++; - buf.append( m_columnNames[i] ); - buf.append( " = " ); + buf.append( m_columnNames[i] + + " = " ); bufferQuoteAnyConstant( buf, m_updateableField[i].value, *m_ppSettings ); // OUString val; // m_updateableField[i].value >>= val; @@ -343,8 +342,8 @@ void UpdateableResultSet::deleteRow( ) OUStringBuffer buf( 128 ); buf.append( "DELETE FROM " ); bufferQuoteQualifiedIdentifier( buf, m_schema, m_table, *m_ppSettings ); - buf.append( " " ); - buf.append( buildWhereClause() ); + buf.append( " " + + buildWhereClause() ); stmt->executeUpdate( buf.makeStringAndClear() ); diff --git a/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx b/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx index feb3f53225d5..52cb513a5856 100644 --- a/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_UPDATEABLERESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_UPDATEABLERESULTSET_HXX +#pragma once #include "pq_sequenceresultset.hxx" #include "pq_resultsetmetadata.hxx" @@ -45,6 +44,7 @@ #include <com/sun/star/sdbc/ResultSetType.hpp> #include <com/sun/star/sdbc/XResultSetUpdate.hpp> #include <com/sun/star/sdbc/XRowUpdate.hpp> +#include <utility> namespace pq_sdbc_driver { @@ -76,17 +76,17 @@ private: UpdateableResultSet( const ::rtl::Reference< comphelper::RefCountedMutex > & mutex, const css::uno::Reference< css::uno::XInterface > &owner, - const std::vector< OUString > &colNames, - const std::vector< std::vector< css::uno::Any > > &data, + std::vector< OUString >&& colNames, + std::vector< std::vector< css::uno::Any > >&& data, ConnectionSettings **ppSettings, - const OUString &schema, - const OUString &table, - const std::vector< OUString > &primaryKey) - : SequenceResultSet( mutex, owner, colNames, data, (*ppSettings)->tc ), + OUString schema, + OUString table, + std::vector< OUString >&& primaryKey) + : SequenceResultSet( mutex, owner, std::move(colNames), std::move(data), (*ppSettings)->tc ), m_ppSettings( ppSettings ), - m_schema( schema ), - m_table( table ), - m_primaryKey( primaryKey ), + m_schema(std::move( schema )), + m_table(std::move( table )), + m_primaryKey( std::move(primaryKey) ), m_insertRow( false ) { // LEM TODO: this duplicates code in pq_resultset.cxx, except for different value @@ -119,11 +119,11 @@ public: PGresult *result, const OUString &schema, const OUString &table, - const std::vector< OUString > &primaryKey ); + std::vector< OUString > && primaryKey ); public: // XInterface - virtual void SAL_CALL acquire() throw() override { SequenceResultSet::acquire(); } - virtual void SAL_CALL release() throw() override { SequenceResultSet::release(); } + virtual void SAL_CALL acquire() noexcept override { SequenceResultSet::acquire(); } + virtual void SAL_CALL release() noexcept override { SequenceResultSet::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -167,6 +167,4 @@ public: } -#endif // INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_UPDATEABLERESULTSET_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xbase.cxx b/connectivity/source/drivers/postgresql/pq_xbase.cxx index 1fec4130a9db..001046aa52fa 100644 --- a/connectivity/source/drivers/postgresql/pq_xbase.cxx +++ b/connectivity/source/drivers/postgresql/pq_xbase.cxx @@ -36,7 +36,9 @@ #include <cppuhelper/supportsservice.hxx> #include <comphelper/sequence.hxx> +#include <utility> +#include "pq_statics.hxx" #include "pq_tools.hxx" #include "pq_xbase.hxx" @@ -55,18 +57,18 @@ namespace pq_sdbc_driver { ReflectionBase::ReflectionBase( - const OUString &implName, + OUString implName, const css::uno::Sequence< OUString > &supportedServices, const ::rtl::Reference< comphelper::RefCountedMutex >& refMutex, - const css::uno::Reference< css::sdbc::XConnection > &conn, + css::uno::Reference< css::sdbc::XConnection > conn, ConnectionSettings *pSettings, cppu::IPropertyArrayHelper & props /* must survive this object !*/ ) : ReflectionBase_BASE( refMutex->GetMutex() ), OPropertySetHelper( ReflectionBase_BASE::rBHelper ), - m_implName( implName ), + m_implName(std::move( implName )), m_supportedServices( supportedServices ), m_xMutex( refMutex ), - m_conn( conn ), + m_conn(std::move( conn )), m_pSettings( pSettings ), m_propsDesc( props ), m_values( props.getProperties().getLength() ) diff --git a/connectivity/source/drivers/postgresql/pq_xbase.hxx b/connectivity/source/drivers/postgresql/pq_xbase.hxx index 6e7ac8413f47..e4ca16fd5e6a 100644 --- a/connectivity/source/drivers/postgresql/pq_xbase.hxx +++ b/connectivity/source/drivers/postgresql/pq_xbase.hxx @@ -34,10 +34,8 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XBASE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XBASE_HXX +#pragma once #include <cppuhelper/propshlp.hxx> -#include <cppuhelper/component.hxx> #include <cppuhelper/compbase.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -67,10 +65,10 @@ protected: std::vector< css::uno::Any > m_values; public: ReflectionBase( - const OUString &implName, + OUString implName, const css::uno::Sequence< OUString > &supportedServices, const ::rtl::Reference< comphelper::RefCountedMutex >& refMutex, - const css::uno::Reference< css::sdbc::XConnection > &conn, + css::uno::Reference< css::sdbc::XConnection > conn, ConnectionSettings *pSettings, cppu::IPropertyArrayHelper & props /* must survive this object !*/ ); @@ -82,8 +80,8 @@ public: // for initialization purposes only, not exported via an interface ! const OUString & name, const css::uno::Any & value ); public: //XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase_BASE::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase_BASE::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase_BASE::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase_BASE::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -129,6 +127,5 @@ public: // XNamed }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xcolumn.cxx b/connectivity/source/drivers/postgresql/pq_xcolumn.cxx index c6d98b0fcb85..b19d95c3c994 100644 --- a/connectivity/source/drivers/postgresql/pq_xcolumn.cxx +++ b/connectivity/source/drivers/postgresql/pq_xcolumn.cxx @@ -34,6 +34,11 @@ * ************************************************************************/ +#include <sal/config.h> + +#include <rtl/ref.hxx> + +#include "pq_statics.hxx" #include "pq_xcolumn.hxx" using com::sun::star::uno::Reference; @@ -56,7 +61,7 @@ Column::Column( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex Reference< XPropertySet > Column::createDataDescriptor( ) { - ColumnDescriptor * pColumn = new ColumnDescriptor( + rtl::Reference<ColumnDescriptor> pColumn = new ColumnDescriptor( m_xMutex, m_conn, m_pSettings ); pColumn->copyValuesFrom( this ); return Reference< XPropertySet > ( pColumn ); @@ -77,7 +82,7 @@ ColumnDescriptor::ColumnDescriptor( Reference< XPropertySet > ColumnDescriptor::createDataDescriptor( ) { - ColumnDescriptor * pColumn = new ColumnDescriptor( + rtl::Reference<ColumnDescriptor> pColumn = new ColumnDescriptor( m_xMutex, m_conn, m_pSettings ); pColumn->copyValuesFrom( this ); diff --git a/connectivity/source/drivers/postgresql/pq_xcolumn.hxx b/connectivity/source/drivers/postgresql/pq_xcolumn.hxx index ea4e099fcd2b..794b5851d3c7 100644 --- a/connectivity/source/drivers/postgresql/pq_xcolumn.hxx +++ b/connectivity/source/drivers/postgresql/pq_xcolumn.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XCOLUMN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XCOLUMN_HXX +#pragma once #include <cppuhelper/component.hxx> #include <cppuhelper/propshlp.hxx> @@ -80,6 +79,4 @@ public: // XDataDescriptorFactory } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xcolumns.cxx b/connectivity/source/drivers/postgresql/pq_xcolumns.cxx index ed3af3579d2a..2902879c49b0 100644 --- a/connectivity/source/drivers/postgresql/pq_xcolumns.cxx +++ b/connectivity/source/drivers/postgresql/pq_xcolumns.cxx @@ -34,6 +34,13 @@ * ************************************************************************/ +#include <sal/config.h> + +#include <string_view> + +#include <o3tl/safeint.hxx> +#include <o3tl/string_view.hxx> +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> @@ -43,6 +50,7 @@ #include <com/sun/star/sdbc/ColumnValue.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <utility> #include "pq_xcolumns.hxx" #include "pq_xcolumn.hxx" @@ -55,7 +63,6 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; using com::sun::star::uno::RuntimeException; @@ -69,9 +76,9 @@ using com::sun::star::sdbc::SQLException; namespace pq_sdbc_driver { -static Any isCurrency( const OUString & typeName ) +static Any isCurrency( std::u16string_view typeName ) { - return Any( typeName.equalsIgnoreAsciiCase("money") ); + return Any( o3tl::equalsIgnoreAsciiCase(typeName, u"money") ); } // static sal_Bool isAutoIncrement8( const OUString & typeName ) @@ -80,9 +87,9 @@ static Any isCurrency( const OUString & typeName ) // typeName.equalsIgnoreAsciiCase("bigserial"); // } -static Any isAutoIncrement( const OUString & defaultValue ) +static Any isAutoIncrement( std::u16string_view defaultValue ) { - bool ret = defaultValue.startsWith( "nextval(" ); + bool ret = o3tl::starts_with( defaultValue, u"nextval(" ); // printf( "%s %d\n", // OUStringToOString(defaultValue, RTL_TEXTENCODING_ASCII_US).getStr(), // ret ); @@ -103,11 +110,11 @@ Columns::Columns( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName) + OUString schemaName, + OUString tableName) : Container( refMutex, origin, pSettings, "COLUMN" ), - m_schemaName( schemaName ), - m_tableName( tableName ) + m_schemaName(std::move( schemaName )), + m_tableName(std::move( tableName )) {} Columns::~Columns() @@ -179,25 +186,25 @@ OUString columnMetaData2SDBCX( OUString typeName = xRow->getString( TYPE_NAME ); pBase->setPropertyValue_NoBroadcast_public( - st.NAME, makeAny( name ) ); + st.NAME, Any( name ) ); pBase->setPropertyValue_NoBroadcast_public( - st.TYPE, makeAny( xRow->getInt( DATA_TYPE ) ) ); + st.TYPE, Any( xRow->getInt( DATA_TYPE ) ) ); pBase->setPropertyValue_NoBroadcast_public( - st.TYPE_NAME, makeAny( typeName ) ); + st.TYPE_NAME, Any( typeName ) ); pBase->setPropertyValue_NoBroadcast_public( - st.PRECISION, makeAny( xRow->getInt( COLUMN_SIZE ) ) ); + st.PRECISION, Any( xRow->getInt( COLUMN_SIZE ) ) ); pBase->setPropertyValue_NoBroadcast_public( - st.SCALE, makeAny( xRow->getInt( DECIMAL_DIGITS ) ) ); + st.SCALE, Any( xRow->getInt( DECIMAL_DIGITS ) ) ); pBase->setPropertyValue_NoBroadcast_public( - st.IS_NULLABLE, makeAny( xRow->getInt( IS_NULLABLE ) ) ); + st.IS_NULLABLE, Any( xRow->getInt( IS_NULLABLE ) ) ); pBase->setPropertyValue_NoBroadcast_public( - st.DEFAULT_VALUE, makeAny( xRow->getString( DEFAULT_VALUE ) ) ); + st.DEFAULT_VALUE, Any( xRow->getString( DEFAULT_VALUE ) ) ); // pBase->setPropertyValue_NoBroadcast_public( // st.DESCRIPTION, makeAny( xRow->getString( DESCRIPTION ) ) ); @@ -207,7 +214,7 @@ OUString columnMetaData2SDBCX( // st.HELP_TEXT, makeAny( xRow->getString( DESCRIPTION ) ) ); // else // for key columns, etc. ... pBase->setPropertyValue_NoBroadcast_public( - st.DESCRIPTION, makeAny( xRow->getString( DESCRIPTION ) ) ); + st.DESCRIPTION, Any( xRow->getString( DESCRIPTION ) ) ); // maybe a better criterion than the type name can be found in future @@ -294,11 +301,11 @@ void Columns::refresh() int columnIndex = 0; while( rs->next() ) { - Column * pColumn = + rtl::Reference<Column> pColumn = new Column( m_xMutex, m_origin, m_pSettings ); Reference< css::beans::XPropertySet > prop = pColumn; - OUString name = columnMetaData2SDBCX( pColumn, xRow ); + OUString name = columnMetaData2SDBCX( pColumn.get(), xRow ); // pColumn->addPropertyChangeListener( // st.HELP_TEXT, // new CommentChanger( @@ -310,7 +317,7 @@ void Columns::refresh() // name ) ); { - m_values.push_back( makeAny( prop ) ); + m_values.emplace_back(prop); map[ name ] = columnIndex; ++columnIndex; } @@ -399,11 +406,10 @@ void alterColumnByDescriptor( bufferQuoteQualifiedIdentifier( buf, schemaName, tableName, settings ); buf.append( "ALTER COLUMN" ); bufferQuoteIdentifier( buf, futureColumnName, settings ); - buf.append( "SET DEFAULT " ); // LEM TODO: check out // default value is not quoted, caller needs to quote himself (otherwise // how to pass e.g. nextval('something' ) ???? - buf.append( futureDefaultValue ); + buf.append( "SET DEFAULT " + futureDefaultValue ); // bufferQuoteConstant( buf, defaultValue, encoding ); transaction.executeUpdate( buf.makeStringAndClear() ); } @@ -455,7 +461,7 @@ void Columns::appendByDescriptor( osl::MutexGuard guard( m_xMutex->GetMutex() ); Statics & st = getStatics(); Reference< XPropertySet > past = createDataDescriptor(); - past->setPropertyValue( st.IS_NULLABLE, makeAny( css::sdbc::ColumnValue::NULLABLE ) ); + past->setPropertyValue( st.IS_NULLABLE, Any( css::sdbc::ColumnValue::NULLABLE ) ); alterColumnByDescriptor( m_schemaName, m_tableName, m_pSettings, m_origin->createStatement() , past, future ); @@ -487,7 +493,7 @@ void Columns::appendByDescriptor( void Columns::dropByIndex( sal_Int32 index ) { osl::MutexGuard guard( m_xMutex->GetMutex() ); - if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) ) + if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() ) { throw css::lang::IndexOutOfBoundsException( "COLUMNS: Index out of range (allowed 0 to " @@ -526,14 +532,13 @@ Reference< css::container::XNameAccess > Columns::create( ConnectionSettings *pSettings, const OUString &schemaName, const OUString &tableName, - Columns **ppColumns) + rtl::Reference<Columns> *ppColumns) { *ppColumns = new Columns( refMutex, origin, pSettings, schemaName, tableName ); - Reference< css::container::XNameAccess > ret = *ppColumns; (*ppColumns)->refresh(); - return ret; + return *ppColumns; } diff --git a/connectivity/source/drivers/postgresql/pq_xcolumns.hxx b/connectivity/source/drivers/postgresql/pq_xcolumns.hxx index 78bb9770ebdf..8ff8fcfbd95c 100644 --- a/connectivity/source/drivers/postgresql/pq_xcolumns.hxx +++ b/connectivity/source/drivers/postgresql/pq_xcolumns.hxx @@ -34,13 +34,14 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XCOLUMNS_HXX +#pragma once #include <sal/config.h> #include <string_view> +#include <rtl/ref.hxx> + #include "pq_xcontainer.hxx" #include "pq_xbase.hxx" @@ -72,15 +73,15 @@ public: // instances Columns 'exception safe' ConnectionSettings *pSettings, const OUString &schemaName, const OUString &tableName, - Columns **pColumns); + rtl::Reference<Columns> *pColumns); private: Columns( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName); + OUString schemaName, + OUString tableName); virtual ~Columns() override; @@ -117,6 +118,5 @@ public: // XDataDescriptorFactory }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xcontainer.cxx b/connectivity/source/drivers/postgresql/pq_xcontainer.cxx index 06323615f4b7..131148c3e192 100644 --- a/connectivity/source/drivers/postgresql/pq_xcontainer.cxx +++ b/connectivity/source/drivers/postgresql/pq_xcontainer.cxx @@ -36,7 +36,10 @@ #include <com/sun/star/container/ElementExistException.hpp> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> +#include <comphelper/diagnose_ex.hxx> #include <cppuhelper/implbase.hxx> +#include <o3tl/safeint.hxx> +#include <utility> #include "pq_xcontainer.hxx" #include "pq_statics.hxx" @@ -47,7 +50,6 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::Type; using com::sun::star::uno::XInterface; using com::sun::star::uno::Reference; @@ -76,7 +78,7 @@ public: const OUString & name, const Any & newElement, const OUString & oldElement ) : - m_event( source, makeAny( name ), newElement, makeAny(oldElement) ) + m_event( source, Any( name ), newElement, Any(oldElement) ) {} virtual void fire( XEventListener * listener ) const override @@ -97,7 +99,7 @@ public: const Reference< XInterface > & source, const OUString & name, const Any & newElement ) : - m_event( source, makeAny( name ), newElement, Any() ) + m_event( source, Any( name ), newElement, Any() ) {} virtual void fire( XEventListener * listener ) const override @@ -118,7 +120,7 @@ public: RemovedBroadcaster( const Reference< XInterface > & source, const OUString & name) : - m_event( source, makeAny( name ), Any(), Any() ) + m_event( source, Any( name ), Any(), Any() ) {} virtual void fire( XEventListener * listener ) const override @@ -136,14 +138,14 @@ public: Container::Container( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, - const css::uno::Reference< css::sdbc::XConnection > & origin, + css::uno::Reference< css::sdbc::XConnection > origin, ConnectionSettings *pSettings, - const OUString &type) + OUString type) : ContainerBase( refMutex->GetMutex() ), m_xMutex( refMutex ), m_pSettings( pSettings ), - m_origin( origin ), - m_type( type ) + m_origin(std::move( origin )), + m_type(std::move( type )) { } @@ -156,17 +158,18 @@ Any Container::getByName( const OUString& aName ) "Element " + aName + " unknown in " + m_type + "-Container", *this ); } - OSL_ASSERT( ii->second >= 0 && ii->second < static_cast<int>(m_values.size()) ); + OSL_ASSERT( ii->second >= 0 && o3tl::make_unsigned(ii->second) < m_values.size() ); return m_values[ ii->second ]; } Sequence< OUString > Container::getElementNames( ) { Sequence< OUString > ret( m_values.size() ); + auto retRange = asNonConstRange(ret); for( const auto& [rName, rIndex] : m_name2index ) { // give element names in index order ! - ret[rIndex] = rName; + retRange[rIndex] = rName; } return ret; } @@ -188,7 +191,7 @@ sal_Bool Container::hasElements( ) Any Container::getByIndex( sal_Int32 Index ) { - if( Index < 0 || Index >= static_cast<sal_Int32>(m_values.size()) ) + if( Index < 0 || o3tl::make_unsigned(Index) >= m_values.size() ) { throw IndexOutOfBoundsException( "Index " + OUString::number( Index ) @@ -211,8 +214,8 @@ class ContainerEnumeration : public ::cppu::WeakImplHelper< XEnumeration > std::vector< css::uno::Any > m_vec; sal_Int32 m_index; public: - explicit ContainerEnumeration( const std::vector< css::uno::Any > &vec ) - : m_vec( vec ), + explicit ContainerEnumeration( std::vector< css::uno::Any >&& vec ) + : m_vec( std::move(vec) ), m_index( -1 ) {} @@ -243,7 +246,7 @@ css::uno::Any ContainerEnumeration::nextElement() Reference< XEnumeration > Container::createEnumeration( ) { - return new ContainerEnumeration( m_values ); + return new ContainerEnumeration( std::vector(m_values) ); } void Container::addRefreshListener( @@ -298,7 +301,7 @@ void Container::dropByName( const OUString& elementName ) void Container::dropByIndex( sal_Int32 index ) { osl::MutexGuard guard( m_xMutex->GetMutex() ); - if( index < 0 || index >=static_cast<sal_Int32>(m_values.size()) ) + if( index < 0 || o3tl::make_unsigned(index) >=m_values.size() ) { throw css::lang::IndexOutOfBoundsException( "Index out of range (allowed 0 to " @@ -349,10 +352,10 @@ void Container::append( } int index = m_values.size(); - m_values.push_back( makeAny( descriptor ) ); + m_values.emplace_back(descriptor); m_name2index[name] = index; - fire( InsertedBroadcaster( *this, name, makeAny( descriptor ) ) ); + fire( InsertedBroadcaster( *this, name, Any( descriptor ) ) ); } void Container::appendByDescriptor( @@ -390,13 +393,13 @@ void Container::fire( const EventBroadcastHelper &helper ) } catch ( css::uno::RuntimeException & ) { - OSL_ENSURE( false, "exception caught" ); + TOOLS_WARN_EXCEPTION( "connectivity.postgresql", "exception caught" ); // loose coupling, a runtime exception shall not break anything // TODO: log away as warning ! } catch( css::uno::Exception & ) { - OSL_ENSURE( false, "exception from listener flying through" ); + TOOLS_WARN_EXCEPTION( "connectivity.postgresql", "exception from listener flying through" ); throw; } } diff --git a/connectivity/source/drivers/postgresql/pq_xcontainer.hxx b/connectivity/source/drivers/postgresql/pq_xcontainer.hxx index f53b0303ae1b..4b6c190b0a59 100644 --- a/connectivity/source/drivers/postgresql/pq_xcontainer.hxx +++ b/connectivity/source/drivers/postgresql/pq_xcontainer.hxx @@ -34,29 +34,30 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XCONTAINER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XCONTAINER_HXX +#pragma once #include <com/sun/star/container/XNameAccess.hpp> #include <com/sun/star/container/XIndexAccess.hpp> #include <com/sun/star/container/XEnumerationAccess.hpp> #include <com/sun/star/container/XContainer.hpp> +#include <com/sun/star/sdbc/XConnection.hpp> #include <com/sun/star/sdbcx/XAppend.hpp> #include <com/sun/star/sdbcx/XDrop.hpp> #include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp> #include <com/sun/star/util/XRefreshable.hpp> +#include <comphelper/refcountedmutex.hxx> #include <cppuhelper/compbase.hxx> +#include <rtl/ref.hxx> #include <unordered_map> -#include "pq_connection.hxx" -#include "pq_statics.hxx" - namespace pq_sdbc_driver { +struct ConnectionSettings; + class EventBroadcastHelper { public: @@ -116,9 +117,9 @@ protected: public: Container( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, - const css::uno::Reference< css::sdbc::XConnection > & origin, + css::uno::Reference< css::sdbc::XConnection > origin, ConnectionSettings *pSettings, - const OUString & type // for exception messages + OUString type // for exception messages ); public: // XIndexAccess @@ -183,6 +184,5 @@ protected: }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xindex.cxx b/connectivity/source/drivers/postgresql/pq_xindex.cxx index c340484a17df..4753b5fd4e3c 100644 --- a/connectivity/source/drivers/postgresql/pq_xindex.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindex.cxx @@ -36,6 +36,8 @@ #include <cppuhelper/typeprovider.hxx> #include <cppuhelper/queryinterface.hxx> +#include <rtl/ref.hxx> +#include <utility> #include "pq_xindex.hxx" #include "pq_xindexcolumns.hxx" @@ -57,8 +59,8 @@ namespace pq_sdbc_driver Index::Index( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const Reference< css::sdbc::XConnection > & connection, ConnectionSettings *pSettings, - const OUString & schemaName, - const OUString & tableName ) + OUString schemaName, + OUString tableName ) : ReflectionBase( getStatics().refl.index.implName, getStatics().refl.index.serviceNames, @@ -66,13 +68,13 @@ Index::Index( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, connection, pSettings, * getStatics().refl.index.pProps ), - m_schemaName( schemaName ), - m_tableName( tableName ) + m_schemaName(std::move( schemaName )), + m_tableName(std::move( tableName )) {} Reference< XPropertySet > Index::createDataDescriptor( ) { - IndexDescriptor * pIndex = new IndexDescriptor( + rtl::Reference<IndexDescriptor> pIndex = new IndexDescriptor( m_xMutex, m_conn, m_pSettings ); pIndex->copyValuesFrom( this ); @@ -133,7 +135,7 @@ IndexDescriptor::IndexDescriptor( Reference< XPropertySet > IndexDescriptor::createDataDescriptor( ) { - IndexDescriptor * pIndex = new IndexDescriptor( + rtl::Reference<IndexDescriptor> pIndex = new IndexDescriptor( m_xMutex, m_conn, m_pSettings ); pIndex->copyValuesFrom( this ); return Reference< XPropertySet > ( pIndex ); diff --git a/connectivity/source/drivers/postgresql/pq_xindex.hxx b/connectivity/source/drivers/postgresql/pq_xindex.hxx index 26e5613630a2..8ccf45660467 100644 --- a/connectivity/source/drivers/postgresql/pq_xindex.hxx +++ b/connectivity/source/drivers/postgresql/pq_xindex.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEX_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEX_HXX +#pragma once #include <cppuhelper/component.hxx> #include <cppuhelper/propshlp.hxx> @@ -62,12 +61,12 @@ public: Index( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & connection, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName); + OUString schemaName, + OUString tableName); public: // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -98,8 +97,8 @@ public: ConnectionSettings *pSettings); public: // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -121,6 +120,4 @@ public: // XDataDescriptorFactory } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx b/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx index 58b36234b1fb..fe72059bc15a 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx @@ -34,6 +34,11 @@ * ************************************************************************/ +#include <sal/config.h> + +#include <rtl/ref.hxx> + +#include "pq_statics.hxx" #include "pq_xindexcolumn.hxx" using com::sun::star::uno::Reference; @@ -56,7 +61,7 @@ IndexColumn::IndexColumn( const ::rtl::Reference< comphelper::RefCountedMutex > Reference< XPropertySet > IndexColumn::createDataDescriptor( ) { - IndexColumnDescriptor * pIndexColumn = new IndexColumnDescriptor( + rtl::Reference<IndexColumnDescriptor> pIndexColumn = new IndexColumnDescriptor( m_xMutex, m_conn, m_pSettings ); pIndexColumn->copyValuesFrom( this ); @@ -79,7 +84,7 @@ IndexColumnDescriptor::IndexColumnDescriptor( Reference< XPropertySet > IndexColumnDescriptor::createDataDescriptor( ) { - IndexColumnDescriptor * pIndexColumn = new IndexColumnDescriptor( + rtl::Reference<IndexColumnDescriptor> pIndexColumn = new IndexColumnDescriptor( m_xMutex, m_conn, m_pSettings ); pIndexColumn->copyValuesFrom( this ); diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumn.hxx b/connectivity/source/drivers/postgresql/pq_xindexcolumn.hxx index 5e7ae8d4fa65..7872985ec801 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexcolumn.hxx +++ b/connectivity/source/drivers/postgresql/pq_xindexcolumn.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEXCOLUMN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEXCOLUMN_HXX +#pragma once #include <cppuhelper/component.hxx> #include <cppuhelper/propshlp.hxx> @@ -81,6 +80,4 @@ public: // XDataDescriptorFactory } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx index a16d22d0cf2f..2bca00e13b77 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx @@ -37,12 +37,14 @@ #include <sal/log.hxx> #include <string_view> +#include <utility> #include <vector> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> #include <com/sun/star/sdbc/SQLException.hpp> #include <com/sun/star/sdbc/XRow.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <rtl/ref.hxx> #include "pq_xcolumns.hxx" #include "pq_xindexcolumns.hxx" @@ -55,7 +57,6 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; using com::sun::star::uno::Sequence; @@ -72,14 +73,14 @@ IndexColumns::IndexColumns( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName, - const OUString &indexName, + OUString schemaName, + OUString tableName, + OUString indexName, const css::uno::Sequence< OUString > &columns ) : Container( refMutex, origin, pSettings, "INDEX_COLUMN" ), - m_schemaName( schemaName ), - m_tableName( tableName ), - m_indexName( indexName ), + m_schemaName(std::move( schemaName )), + m_tableName(std::move( tableName )), + m_indexName(std::move( indexName )), m_columns( columns ) {} @@ -124,13 +125,13 @@ void IndexColumns::refresh() if( index >= m_columns.getLength() ) continue; - IndexColumn * pIndexColumn = + rtl::Reference<IndexColumn> pIndexColumn = new IndexColumn( m_xMutex, m_origin, m_pSettings ); Reference< css::beans::XPropertySet > prop = pIndexColumn; - columnMetaData2SDBCX( pIndexColumn, xRow ); + columnMetaData2SDBCX( pIndexColumn.get(), xRow ); pIndexColumn->setPropertyValue_NoBroadcast_public( - st.IS_ASCENDING , makeAny( false ) ); + st.IS_ASCENDING , Any( false ) ); m_values[ index ] <<= prop; m_name2index[ columnName ] = index; @@ -234,12 +235,11 @@ Reference< css::container::XNameAccess > IndexColumns::create( const OUString &indexName, const Sequence< OUString > &columns ) { - IndexColumns *pIndexColumns = new IndexColumns( + rtl::Reference<IndexColumns> pIndexColumns = new IndexColumns( refMutex, origin, pSettings, schemaName, tableName, indexName, columns ); - Reference< css::container::XNameAccess > ret = pIndexColumns; pIndexColumns->refresh(); - return ret; + return pIndexColumns; } diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx b/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx index 353b75ddbf63..a838d5d66908 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx +++ b/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEXCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEXCOLUMNS_HXX +#pragma once #include "pq_xcontainer.hxx" @@ -64,9 +63,9 @@ private: const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName, - const OUString &indexName, + OUString schemaName, + OUString tableName, + OUString indexName, const css::uno::Sequence< OUString > &columns ); virtual ~IndexColumns() override; @@ -107,6 +106,5 @@ public: // XDataDescriptorFactory }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xindexes.cxx b/connectivity/source/drivers/postgresql/pq_xindexes.cxx index 2f6df914f0a2..bff96216c568 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexes.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindexes.cxx @@ -35,6 +35,7 @@ ************************************************************************/ #include <sal/log.hxx> +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> @@ -42,6 +43,8 @@ #include <com/sun/star/sdbc/XRow.hpp> #include <com/sun/star/sdbc/XParameters.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <o3tl/safeint.hxx> +#include <utility> #include "pq_xindexes.hxx" #include "pq_xindex.hxx" @@ -54,7 +57,6 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; using com::sun::star::uno::Sequence; @@ -77,11 +79,11 @@ Indexes::Indexes( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName) + OUString schemaName, + OUString tableName) : Container( refMutex, origin, pSettings, getStatics().KEY ), - m_schemaName( schemaName ), - m_tableName( tableName ) + m_schemaName(std::move( schemaName )), + m_tableName(std::move( tableName )) { } @@ -133,7 +135,7 @@ void Indexes::refresh() static const sal_Int32 C_IS_PRIMARY = 6; static const sal_Int32 C_COLUMNS = 7; OUString currentIndexName = row->getString( C_INDEXNAME ); - Index *pIndex = + rtl::Reference<Index> pIndex = new Index( m_xMutex, m_origin, m_pSettings, m_schemaName, m_tableName ); @@ -148,20 +150,21 @@ void Indexes::refresh() pIndex->setPropertyValue_NoBroadcast_public( st.IS_CLUSTERED, Any( isClusterd ) ); pIndex->setPropertyValue_NoBroadcast_public( - st.NAME, makeAny( currentIndexName ) ); + st.NAME, Any( currentIndexName ) ); std::vector< sal_Int32 > seq = parseIntArray( row->getString( C_COLUMNS ) ); Sequence< OUString > columnNames(seq.size()); + auto columnNamesRange = asNonConstRange(columnNames); for( size_t columns = 0 ; columns < seq.size() ; columns ++ ) { - columnNames[columns] = column2NameMap[ seq[columns] ]; + columnNamesRange[columns] = column2NameMap[ seq[columns] ]; } pIndex->setPropertyValue_NoBroadcast_public( - st.PRIVATE_COLUMN_INDEXES, makeAny( columnNames )); + st.PRIVATE_COLUMN_INDEXES, Any( columnNames )); { - m_values.push_back( makeAny( prop ) ); + m_values.emplace_back(prop); map[ currentIndexName ] = index; ++index; } @@ -233,7 +236,7 @@ void Indexes::dropByIndex( sal_Int32 index ) osl::MutexGuard guard( m_xMutex->GetMutex() ); - if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) ) + if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() ) { throw css::lang::IndexOutOfBoundsException( "Indexes: Index out of range (allowed 0 to " @@ -268,10 +271,10 @@ Reference< css::container::XNameAccess > Indexes::create( const OUString & schemaName, const OUString & tableName) { - Indexes *pIndexes = new Indexes( refMutex, origin, pSettings, schemaName, tableName ); - Reference< css::container::XNameAccess > ret = pIndexes; + rtl::Reference<Indexes> pIndexes + = new Indexes( refMutex, origin, pSettings, schemaName, tableName ); pIndexes->refresh(); - return ret; + return pIndexes; } diff --git a/connectivity/source/drivers/postgresql/pq_xindexes.hxx b/connectivity/source/drivers/postgresql/pq_xindexes.hxx index 7991058f5799..536d17b96198 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexes.hxx +++ b/connectivity/source/drivers/postgresql/pq_xindexes.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEXES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XINDEXES_HXX +#pragma once #include "pq_xcontainer.hxx" @@ -59,8 +58,8 @@ private: const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName); + OUString schemaName, + OUString tableName); virtual ~Indexes() override; @@ -99,6 +98,5 @@ public: // XDataDescriptorFactory }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xkey.cxx b/connectivity/source/drivers/postgresql/pq_xkey.cxx index ed0b2669e894..81d1f7a86eb6 100644 --- a/connectivity/source/drivers/postgresql/pq_xkey.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkey.cxx @@ -36,6 +36,8 @@ #include <cppuhelper/typeprovider.hxx> #include <cppuhelper/queryinterface.hxx> +#include <rtl/ref.hxx> +#include <utility> #include "pq_xkey.hxx" #include "pq_xkeycolumns.hxx" @@ -56,8 +58,8 @@ namespace pq_sdbc_driver Key::Key( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const Reference< css::sdbc::XConnection > & connection, ConnectionSettings *pSettings, - const OUString & schemaName, - const OUString & tableName ) + OUString schemaName, + OUString tableName ) : ReflectionBase( getStatics().refl.key.implName, getStatics().refl.key.serviceNames, @@ -65,13 +67,13 @@ Key::Key( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, connection, pSettings, * getStatics().refl.key.pProps ), - m_schemaName( schemaName ), - m_tableName( tableName ) + m_schemaName(std::move( schemaName )), + m_tableName(std::move( tableName )) {} Reference< XPropertySet > Key::createDataDescriptor( ) { - KeyDescriptor * pKeyDescriptor = new KeyDescriptor( + rtl::Reference<KeyDescriptor> pKeyDescriptor = new KeyDescriptor( m_xMutex, m_conn, m_pSettings ); pKeyDescriptor->copyValuesFrom( this ); @@ -134,7 +136,7 @@ KeyDescriptor::KeyDescriptor( const ::rtl::Reference< comphelper::RefCountedMute Reference< XPropertySet > KeyDescriptor::createDataDescriptor( ) { - KeyDescriptor * pKeyDescriptor = new KeyDescriptor( + rtl::Reference<KeyDescriptor> pKeyDescriptor = new KeyDescriptor( m_xMutex, m_conn, m_pSettings ); pKeyDescriptor->copyValuesFrom( this ); diff --git a/connectivity/source/drivers/postgresql/pq_xkey.hxx b/connectivity/source/drivers/postgresql/pq_xkey.hxx index 3174d189206b..68f05fd27d4e 100644 --- a/connectivity/source/drivers/postgresql/pq_xkey.hxx +++ b/connectivity/source/drivers/postgresql/pq_xkey.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEY_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEY_HXX +#pragma once #include <cppuhelper/component.hxx> #include <cppuhelper/propshlp.hxx> @@ -62,12 +61,12 @@ public: Key( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & connection, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName); + OUString schemaName, + OUString tableName); public: // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -96,8 +95,8 @@ public: ConnectionSettings *pSettings ); public: // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -117,6 +116,4 @@ public: // XDataDescriptorFactory } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx b/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx index 9eea45204f3d..30eef179716c 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx @@ -34,6 +34,11 @@ * ************************************************************************/ +#include <sal/config.h> + +#include <rtl/ref.hxx> + +#include "pq_statics.hxx" #include "pq_xkeycolumn.hxx" using com::sun::star::uno::Reference; @@ -56,7 +61,7 @@ KeyColumn::KeyColumn( const ::rtl::Reference< comphelper::RefCountedMutex > & re Reference< XPropertySet > KeyColumn::createDataDescriptor( ) { - KeyColumnDescriptor * pKeyColumn = new KeyColumnDescriptor( + rtl::Reference<KeyColumnDescriptor> pKeyColumn = new KeyColumnDescriptor( m_xMutex, m_conn, m_pSettings ); pKeyColumn->copyValuesFrom( this ); @@ -78,7 +83,7 @@ KeyColumnDescriptor::KeyColumnDescriptor( Reference< XPropertySet > KeyColumnDescriptor::createDataDescriptor( ) { - KeyColumnDescriptor * pKeyColumn = new KeyColumnDescriptor( + rtl::Reference<KeyColumnDescriptor> pKeyColumn = new KeyColumnDescriptor( m_xMutex, m_conn, m_pSettings ); pKeyColumn->copyValuesFrom( this ); diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumn.hxx b/connectivity/source/drivers/postgresql/pq_xkeycolumn.hxx index 14baf7f66cf2..7d49d5d26570 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeycolumn.hxx +++ b/connectivity/source/drivers/postgresql/pq_xkeycolumn.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEYCOLUMN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEYCOLUMN_HXX +#pragma once #include <cppuhelper/component.hxx> #include <cppuhelper/propshlp.hxx> @@ -80,6 +79,4 @@ public: // XDataDescriptorFactory } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx b/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx index 890b57fa7420..89f63ceb5a65 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx @@ -39,6 +39,8 @@ #include <com/sun/star/sdbc/SQLException.hpp> #include <com/sun/star/sdbc/XRow.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <rtl/ref.hxx> +#include <utility> #include "pq_xcolumns.hxx" #include "pq_xkeycolumns.hxx" @@ -51,7 +53,6 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; using com::sun::star::uno::Sequence; @@ -68,13 +69,13 @@ KeyColumns::KeyColumns( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName, + OUString schemaName, + OUString tableName, const Sequence< OUString > &columnNames, const Sequence< OUString > &foreignColumnNames ) : Container( refMutex, origin, pSettings, "KEY_COLUMN" ), - m_schemaName( schemaName ), - m_tableName( tableName ), + m_schemaName(std::move( schemaName )), + m_tableName(std::move( tableName )), m_columnNames( columnNames ), m_foreignColumnNames( foreignColumnNames ) {} @@ -117,19 +118,19 @@ void KeyColumns::refresh() if( m_columnNames.getLength() == keyindex ) continue; - KeyColumn * pKeyColumn = + rtl::Reference<KeyColumn> pKeyColumn = new KeyColumn( m_xMutex, m_origin, m_pSettings ); Reference< css::beans::XPropertySet > prop = pKeyColumn; - OUString name = columnMetaData2SDBCX( pKeyColumn, xRow ); + OUString name = columnMetaData2SDBCX( pKeyColumn.get(), xRow ); if( keyindex < m_foreignColumnNames.getLength() ) { pKeyColumn->setPropertyValue_NoBroadcast_public( - st.RELATED_COLUMN, makeAny( m_foreignColumnNames[keyindex]) ); + st.RELATED_COLUMN, Any( m_foreignColumnNames[keyindex]) ); } { - m_values.push_back( makeAny( prop ) ); + m_values.emplace_back(prop); map[ name ] = columnIndex; ++columnIndex; } @@ -214,12 +215,11 @@ Reference< css::container::XNameAccess > KeyColumns::create( const Sequence< OUString > &columnNames , const Sequence< OUString > &foreignColumnNames ) { - KeyColumns *pKeyColumns = new KeyColumns( + rtl::Reference<KeyColumns> pKeyColumns = new KeyColumns( refMutex, origin, pSettings, schemaName, tableName, columnNames, foreignColumnNames ); - Reference< css::container::XNameAccess > ret = pKeyColumns; pKeyColumns->refresh(); - return ret; + return pKeyColumns; } diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx b/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx index 0ada98aa4052..60bbd0c0de36 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx +++ b/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEYCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEYCOLUMNS_HXX +#pragma once #include "pq_xcontainer.hxx" @@ -64,8 +63,8 @@ private: const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName, + OUString schemaName, + OUString tableName, const css::uno::Sequence< OUString > &keyColumns, const css::uno::Sequence< OUString > &foreignColumnNames); @@ -98,6 +97,5 @@ public: // XDataDescriptorFactory virtual css::uno::Reference< css::beans::XPropertySet > SAL_CALL createDataDescriptor( ) override; }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xkeys.cxx b/connectivity/source/drivers/postgresql/pq_xkeys.cxx index 969ce4dd398c..0758be630e04 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeys.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkeys.cxx @@ -39,6 +39,7 @@ #include <string_view> #include <sal/log.hxx> +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> @@ -48,6 +49,8 @@ #include <com/sun/star/sdbc/KeyRule.hpp> #include <com/sun/star/sdbcx/KeyType.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <o3tl/safeint.hxx> +#include <utility> #include "pq_xkeys.hxx" #include "pq_xkey.hxx" @@ -59,7 +62,7 @@ using osl::MutexGuard; using css::beans::XPropertySet; -using com::sun::star::uno::makeAny; +using com::sun::star::uno::Any; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; @@ -77,11 +80,11 @@ Keys::Keys( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName) + OUString schemaName, + OUString tableName) : Container( refMutex, origin, pSettings, getStatics().KEY ), - m_schemaName( schemaName ), - m_tableName( tableName ) + m_schemaName(std::move( schemaName )), + m_tableName(std::move( tableName )) {} Keys::~Keys() @@ -150,37 +153,36 @@ void Keys::refresh() int keyIndex = 0; while( rs->next() ) { - Key * pKey = + rtl::Reference<Key> pKey = new Key( m_xMutex, m_origin, m_pSettings , m_schemaName, m_tableName ); Reference< css::beans::XPropertySet > prop = pKey; pKey->setPropertyValue_NoBroadcast_public( - st.NAME, makeAny( xRow->getString( 1 ) ) ); + st.NAME, Any( xRow->getString( 1 ) ) ); sal_Int32 keyType = string2keytype( xRow->getString(2) ); - pKey->setPropertyValue_NoBroadcast_public( st.TYPE, makeAny( keyType ) ); + pKey->setPropertyValue_NoBroadcast_public( st.TYPE, Any( keyType ) ); pKey->setPropertyValue_NoBroadcast_public( - st.UPDATE_RULE, makeAny( string2keyrule( xRow->getString(3) ) ) ); + st.UPDATE_RULE, Any( string2keyrule( xRow->getString(3) ) ) ); pKey->setPropertyValue_NoBroadcast_public( - st.DELETE_RULE, makeAny( string2keyrule( xRow->getString(4) ) ) ); + st.DELETE_RULE, Any( string2keyrule( xRow->getString(4) ) ) ); pKey->setPropertyValue_NoBroadcast_public( st.PRIVATE_COLUMNS, - makeAny( + Any( convertMappedIntArray2StringArray( mainMap, string2intarray( xRow->getString( 7 ) ) ) ) ); if( css::sdbcx::KeyType::FOREIGN == keyType ) { - OUStringBuffer buf( 128 ); - buf.append( xRow->getString( 6 ) ).append( "." ).append( xRow->getString( 5 ) ); + OUString buf = xRow->getString( 6 ) + "." + xRow->getString( 5 ); pKey->setPropertyValue_NoBroadcast_public( - st.REFERENCED_TABLE, makeAny( buf.makeStringAndClear() ) ); + st.REFERENCED_TABLE, Any( buf ) ); Int2StringMap foreignMap; fillAttnum2attnameMap( foreignMap, m_origin, xRow->getString(6), xRow->getString(5)); pKey->setPropertyValue_NoBroadcast_public( st.PRIVATE_FOREIGN_COLUMNS, - makeAny( + Any( convertMappedIntArray2StringArray( foreignMap, string2intarray( xRow->getString(8) ) ) ) ); @@ -189,7 +191,7 @@ void Keys::refresh() { map[ xRow->getString( 1 ) ] = keyIndex; - m_values.push_back( makeAny( prop ) ); + m_values.push_back( Any( prop ) ); ++keyIndex; } } @@ -226,7 +228,7 @@ void Keys::appendByDescriptor( void Keys::dropByIndex( sal_Int32 index ) { osl::MutexGuard guard( m_xMutex->GetMutex() ); - if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) ) + if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() ) { throw css::lang::IndexOutOfBoundsException( "TABLES: Index out of range (allowed 0 to " + OUString::number(m_values.size() -1) @@ -262,11 +264,10 @@ Reference< css::container::XIndexAccess > Keys::create( const OUString & schemaName, const OUString & tableName) { - Keys *pKeys = new Keys( refMutex, origin, pSettings, schemaName, tableName ); - Reference< css::container::XIndexAccess > ret = pKeys; + rtl::Reference<Keys> pKeys = new Keys( refMutex, origin, pSettings, schemaName, tableName ); pKeys->refresh(); - return ret; + return pKeys; } KeyDescriptors::KeyDescriptors( diff --git a/connectivity/source/drivers/postgresql/pq_xkeys.hxx b/connectivity/source/drivers/postgresql/pq_xkeys.hxx index aedd46b578da..ef6376d4d780 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeys.hxx +++ b/connectivity/source/drivers/postgresql/pq_xkeys.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEYS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XKEYS_HXX +#pragma once #include "pq_xcontainer.hxx" @@ -59,8 +58,8 @@ private: const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - const OUString &schemaName, - const OUString &tableName); + OUString schemaName, + OUString tableName); virtual ~Keys() override; @@ -98,6 +97,5 @@ public: // XDataDescriptorFactory }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xtable.cxx b/connectivity/source/drivers/postgresql/pq_xtable.cxx index 82b66a316a3f..de8196f9fecd 100644 --- a/connectivity/source/drivers/postgresql/pq_xtable.cxx +++ b/connectivity/source/drivers/postgresql/pq_xtable.cxx @@ -34,6 +34,7 @@ * ************************************************************************/ +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <cppuhelper/typeprovider.hxx> @@ -59,7 +60,6 @@ using com::sun::star::uno::Reference; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Sequence; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::Type; using com::sun::star::beans::XPropertySet; @@ -78,13 +78,12 @@ Table::Table( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, refMutex, connection, pSettings, - * getStatics().refl.table.pProps ), - m_pColumns( nullptr ) + * getStatics().refl.table.pProps ) {} Reference< XPropertySet > Table::createDataDescriptor( ) { - TableDescriptor * pTable = new TableDescriptor( + rtl::Reference<TableDescriptor> pTable = new TableDescriptor( m_xMutex, m_conn, m_pSettings ); pTable->copyValuesFrom( this ); @@ -168,7 +167,7 @@ void Table::rename( const OUString& newName ) if( Xrename.is() ) { Xrename->rename( newName ); - setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, makeAny(newSchemaName) ); + setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, Any(newSchemaName) ); } } else @@ -185,14 +184,13 @@ void Table::rename( const OUString& newName ) bufferQuoteIdentifier( buf, newSchemaName, m_pSettings ); Reference< XStatement > statement = m_conn->createStatement(); statement->executeUpdate( buf.makeStringAndClear() ); - setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, makeAny(newSchemaName) ); + setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, Any(newSchemaName) ); disposeNoThrow( statement ); schema = newSchemaName; } catch( css::sdbc::SQLException &e ) { - OUString buf( e.Message + "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)" ); - e.Message = buf; + e.Message += "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)"; throw; } @@ -209,7 +207,7 @@ void Table::rename( const OUString& newName ) disposeNoThrow( statement ); } } - setPropertyValue_NoBroadcast_public( st.NAME, makeAny(newTableName) ); + setPropertyValue_NoBroadcast_public( st.NAME, Any(newTableName) ); // inform the container of the name change ! if( m_pSettings->tables.is() ) { @@ -381,7 +379,7 @@ Any TableDescriptor::queryInterface( const Type & reqType ) Reference< XPropertySet > TableDescriptor::createDataDescriptor( ) { - TableDescriptor * pTable = new TableDescriptor( + rtl::Reference<TableDescriptor> pTable = new TableDescriptor( m_xMutex, m_conn, m_pSettings ); // TODO: deep copies diff --git a/connectivity/source/drivers/postgresql/pq_xtable.hxx b/connectivity/source/drivers/postgresql/pq_xtable.hxx index 69e9d6435c8a..7c8ca73f566b 100644 --- a/connectivity/source/drivers/postgresql/pq_xtable.hxx +++ b/connectivity/source/drivers/postgresql/pq_xtable.hxx @@ -34,22 +34,16 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XTABLE_HXX +#pragma once -#include <cppuhelper/component.hxx> -#include <cppuhelper/propshlp.hxx> - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp> #include <com/sun/star/sdbcx/XColumnsSupplier.hpp> #include <com/sun/star/sdbcx/XIndexesSupplier.hpp> #include <com/sun/star/sdbcx/XKeysSupplier.hpp> #include <com/sun/star/sdbcx/XRename.hpp> #include <com/sun/star/sdbcx/XAlterTable.hpp> -#include <com/sun/star/container/XNamed.hpp> #include "pq_xbase.hxx" +#include "pq_xcolumns.hxx" namespace pq_sdbc_driver { @@ -66,7 +60,7 @@ class Table : public ReflectionBase, css::uno::Reference< css::container::XNameAccess > m_columns; css::uno::Reference< css::container::XIndexAccess > m_keys; css::uno::Reference< css::container::XNameAccess > m_indexes; - Columns *m_pColumns; + rtl::Reference<Columns> m_pColumns; public: Table( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, @@ -74,8 +68,8 @@ public: ConnectionSettings *pSettings); // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -134,8 +128,8 @@ public: ConnectionSettings *pSettings); public: // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -164,6 +158,4 @@ public: // XDataDescriptorFactory } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xtables.cxx b/connectivity/source/drivers/postgresql/pq_xtables.cxx index 83758208b203..423ec81f2166 100644 --- a/connectivity/source/drivers/postgresql/pq_xtables.cxx +++ b/connectivity/source/drivers/postgresql/pq_xtables.cxx @@ -34,6 +34,7 @@ * ************************************************************************/ +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> @@ -42,6 +43,7 @@ #include <com/sun/star/sdbcx/Privilege.hpp> #include <com/sun/star/sdbc/DataType.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <o3tl/safeint.hxx> #include "pq_xtables.hxx" #include "pq_xviews.hxx" @@ -54,7 +56,6 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; using com::sun::star::uno::Sequence; @@ -103,23 +104,23 @@ void Tables::refresh() { // if creating all these tables turns out to have too bad performance, we might // instead offer a factory interface - Table * pTable = + rtl::Reference<Table> pTable = new Table( m_xMutex, m_origin, m_pSettings ); Reference< css::beans::XPropertySet > prop = pTable; OUString name = xRow->getString( TABLE_INDEX_NAME+1); OUString schema = xRow->getString( TABLE_INDEX_SCHEMA+1); pTable->setPropertyValue_NoBroadcast_public( - st.CATALOG_NAME , makeAny(xRow->getString( TABLE_INDEX_CATALOG+1) ) ); - pTable->setPropertyValue_NoBroadcast_public( st.NAME , makeAny( name ) ); - pTable->setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME , makeAny( schema )); + st.CATALOG_NAME , Any(xRow->getString( TABLE_INDEX_CATALOG+1) ) ); + pTable->setPropertyValue_NoBroadcast_public( st.NAME , Any( name ) ); + pTable->setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME , Any( schema )); pTable->setPropertyValue_NoBroadcast_public( - st.TYPE , makeAny( xRow->getString( TABLE_INDEX_TYPE+1) ) ); + st.TYPE , Any( xRow->getString( TABLE_INDEX_TYPE+1) ) ); pTable->setPropertyValue_NoBroadcast_public( - st.DESCRIPTION , makeAny( xRow->getString( TABLE_INDEX_REMARKS+1) ) ); + st.DESCRIPTION , Any( xRow->getString( TABLE_INDEX_REMARKS+1) ) ); pTable->setPropertyValue_NoBroadcast_public( st.PRIVILEGES , - makeAny( sal_Int32( css::sdbcx::Privilege::SELECT | + Any( sal_Int32( css::sdbcx::Privilege::SELECT | css::sdbcx::Privilege::INSERT | css::sdbcx::Privilege::UPDATE | css::sdbcx::Privilege::DELETE | @@ -130,7 +131,7 @@ void Tables::refresh() css::sdbcx::Privilege::DROP ) ) ); { - m_values.push_back( makeAny( prop ) ); + m_values.push_back( Any( prop ) ); map[ schema + "." + name ] = tableIndex; ++tableIndex; } @@ -310,7 +311,7 @@ void Tables::appendByDescriptor( void Tables::dropByIndex( sal_Int32 index ) { osl::MutexGuard guard( m_xMutex->GetMutex() ); - if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) ) + if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() ) { throw css::lang::IndexOutOfBoundsException( "TABLES: Index out of range (allowed 0 to " + OUString::number(m_values.size() -1) @@ -355,13 +356,12 @@ Reference< css::container::XNameAccess > Tables::create( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - Tables **ppTables) + rtl::Reference<Tables> *ppTables) { *ppTables = new Tables( refMutex, origin, pSettings ); - Reference< css::container::XNameAccess > ret = *ppTables; (*ppTables)->refresh(); - return ret; + return *ppTables; } }; diff --git a/connectivity/source/drivers/postgresql/pq_xtables.hxx b/connectivity/source/drivers/postgresql/pq_xtables.hxx index 33eab3a5b8c4..9222db82c77f 100644 --- a/connectivity/source/drivers/postgresql/pq_xtables.hxx +++ b/connectivity/source/drivers/postgresql/pq_xtables.hxx @@ -34,14 +34,19 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XTABLES_HXX +#pragma once + +#include <sal/config.h> + +#include <rtl/ref.hxx> #include "pq_xcontainer.hxx" namespace pq_sdbc_driver { +struct ConnectionSettings; + class Tables : public Container { @@ -50,7 +55,7 @@ public: // instances Tables 'exception safe' const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - Tables ** ppTables); + rtl::Reference<Tables> * ppTables); protected: Tables( @@ -82,6 +87,5 @@ protected: }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xuser.cxx b/connectivity/source/drivers/postgresql/pq_xuser.cxx index bc06c541064e..4d0a01f6366f 100644 --- a/connectivity/source/drivers/postgresql/pq_xuser.cxx +++ b/connectivity/source/drivers/postgresql/pq_xuser.cxx @@ -35,6 +35,7 @@ ************************************************************************/ #include <sal/log.hxx> +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <cppuhelper/typeprovider.hxx> @@ -73,7 +74,7 @@ User::User( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, Reference< XPropertySet > User::createDataDescriptor( ) { - UserDescriptor * pUser = new UserDescriptor( m_xMutex, m_conn, m_pSettings ); + rtl::Reference<UserDescriptor> pUser = new UserDescriptor( m_xMutex, m_conn, m_pSettings ); pUser->copyValuesFrom( this ); return Reference< XPropertySet > ( pUser ); @@ -159,7 +160,7 @@ UserDescriptor::UserDescriptor( Reference< XPropertySet > UserDescriptor::createDataDescriptor( ) { - UserDescriptor * pUser = new UserDescriptor( m_xMutex, m_conn, m_pSettings ); + rtl::Reference<UserDescriptor> pUser = new UserDescriptor( m_xMutex, m_conn, m_pSettings ); pUser->copyValuesFrom( this ); return Reference< XPropertySet > ( pUser ); diff --git a/connectivity/source/drivers/postgresql/pq_xuser.hxx b/connectivity/source/drivers/postgresql/pq_xuser.hxx index 950cd998b0d5..702787a67496 100644 --- a/connectivity/source/drivers/postgresql/pq_xuser.hxx +++ b/connectivity/source/drivers/postgresql/pq_xuser.hxx @@ -34,14 +34,8 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XUSER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XUSER_HXX +#pragma once -#include <cppuhelper/component.hxx> -#include <cppuhelper/propshlp.hxx> - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp> #include <com/sun/star/sdbcx/XUser.hpp> #include "pq_xbase.hxx" @@ -59,8 +53,8 @@ public: ConnectionSettings *pSettings); // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -96,6 +90,4 @@ public: // XDataDescriptorFactory } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xusers.cxx b/connectivity/source/drivers/postgresql/pq_xusers.cxx index a6fe3489fa7f..08cdf2d1c135 100644 --- a/connectivity/source/drivers/postgresql/pq_xusers.cxx +++ b/connectivity/source/drivers/postgresql/pq_xusers.cxx @@ -34,12 +34,14 @@ * ************************************************************************/ +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> #include <com/sun/star/sdbc/SQLException.hpp> #include <com/sun/star/sdbc/XRow.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <o3tl/safeint.hxx> #include "pq_xusers.hxx" #include "pq_xuser.hxx" @@ -50,7 +52,7 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; -using com::sun::star::uno::makeAny; +using com::sun::star::uno::Any; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; @@ -91,16 +93,16 @@ void Users::refresh() sal_Int32 tableIndex = 0; while( rs->next() ) { - User * pUser = + rtl::Reference<User> pUser = new User( m_xMutex, m_origin, m_pSettings ); Reference< css::beans::XPropertySet > prop = pUser; OUString name = xRow->getString( 1); pUser->setPropertyValue_NoBroadcast_public( - st.NAME , makeAny(xRow->getString( TABLE_INDEX_CATALOG+1) ) ); + st.NAME , Any(xRow->getString( TABLE_INDEX_CATALOG+1) ) ); { - m_values.push_back( makeAny( prop ) ); + m_values.push_back( Any( prop ) ); map[ name ] = tableIndex; ++tableIndex; } @@ -150,7 +152,7 @@ void Users::dropByIndex( sal_Int32 index ) { osl::MutexGuard guard( m_xMutex->GetMutex() ); - if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) ) + if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() ) { throw css::lang::IndexOutOfBoundsException( "USERS: Index out of range (allowed 0 to " @@ -185,11 +187,10 @@ Reference< css::container::XNameAccess > Users::create( const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings ) { - Users *pUsers = new Users( refMutex, origin, pSettings ); - Reference< css::container::XNameAccess > ret = pUsers; + rtl::Reference<Users> pUsers = new Users( refMutex, origin, pSettings ); pUsers->refresh(); - return ret; + return pUsers; } void Users::disposing() diff --git a/connectivity/source/drivers/postgresql/pq_xusers.hxx b/connectivity/source/drivers/postgresql/pq_xusers.hxx index 359b97dd11cf..f95ec174915f 100644 --- a/connectivity/source/drivers/postgresql/pq_xusers.hxx +++ b/connectivity/source/drivers/postgresql/pq_xusers.hxx @@ -34,8 +34,7 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XUSERS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XUSERS_HXX +#pragma once #include "pq_xcontainer.hxx" @@ -79,6 +78,5 @@ private: }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xview.cxx b/connectivity/source/drivers/postgresql/pq_xview.cxx index 1b00b9b5d326..c2e936e9a314 100644 --- a/connectivity/source/drivers/postgresql/pq_xview.cxx +++ b/connectivity/source/drivers/postgresql/pq_xview.cxx @@ -34,6 +34,7 @@ * ************************************************************************/ +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <cppuhelper/typeprovider.hxx> @@ -51,7 +52,6 @@ using osl::MutexGuard; using com::sun::star::uno::Reference; using com::sun::star::uno::Sequence; using com::sun::star::uno::Any; -using com::sun::star::uno::makeAny; using com::sun::star::uno::Type; using com::sun::star::beans::XPropertySet; @@ -76,7 +76,7 @@ View::View( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, Reference< XPropertySet > View::createDataDescriptor( ) { - ViewDescriptor * pView = new ViewDescriptor( + rtl::Reference<ViewDescriptor> pView = new ViewDescriptor( m_xMutex, m_conn, m_pSettings ); pView->copyValuesFrom( this ); @@ -120,14 +120,13 @@ void View::rename( const OUString& newName ) bufferQuoteIdentifier( buf, newSchemaName, m_pSettings ); Reference< XStatement > statement = m_conn->createStatement(); statement->executeUpdate( buf.makeStringAndClear() ); - setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, makeAny(newSchemaName) ); + setPropertyValue_NoBroadcast_public( st.SCHEMA_NAME, Any(newSchemaName) ); disposeNoThrow( statement ); schema = newSchemaName; } catch( css::sdbc::SQLException &e ) { - OUString buf( e.Message + "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)" ); - e.Message = buf; + e.Message += "(NOTE: Only postgresql server >= V8.1 support changing a table's schema)"; throw; } @@ -141,7 +140,7 @@ void View::rename( const OUString& newName ) bufferQuoteIdentifier( buf, newTableName, m_pSettings ); Reference< XStatement > statement = m_conn->createStatement(); statement->executeUpdate( buf.makeStringAndClear() ); - setPropertyValue_NoBroadcast_public( st.NAME, makeAny(newTableName) ); + setPropertyValue_NoBroadcast_public( st.NAME, Any(newTableName) ); } // inform the container of the name change ! @@ -205,7 +204,7 @@ ViewDescriptor::ViewDescriptor( Reference< XPropertySet > ViewDescriptor::createDataDescriptor( ) { - ViewDescriptor * pView = new ViewDescriptor( + rtl::Reference<ViewDescriptor> pView = new ViewDescriptor( m_xMutex, m_conn, m_pSettings ); pView->copyValuesFrom( this ); diff --git a/connectivity/source/drivers/postgresql/pq_xview.hxx b/connectivity/source/drivers/postgresql/pq_xview.hxx index d5c86981f6f4..f68b5535a8d7 100644 --- a/connectivity/source/drivers/postgresql/pq_xview.hxx +++ b/connectivity/source/drivers/postgresql/pq_xview.hxx @@ -34,16 +34,9 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XVIEW_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XVIEW_HXX +#pragma once -#include <cppuhelper/component.hxx> -#include <cppuhelper/propshlp.hxx> - -#include <com/sun/star/lang/XServiceInfo.hpp> -#include <com/sun/star/sdbcx/XDataDescriptorFactory.hpp> #include <com/sun/star/sdbcx/XRename.hpp> -#include <com/sun/star/container/XNamed.hpp> #include "pq_xbase.hxx" @@ -58,8 +51,8 @@ public: ConnectionSettings *pSettings); // XInterface - virtual void SAL_CALL acquire() throw() override { ReflectionBase::acquire(); } - virtual void SAL_CALL release() throw() override { ReflectionBase::release(); } + virtual void SAL_CALL acquire() noexcept override { ReflectionBase::acquire(); } + virtual void SAL_CALL release() noexcept override { ReflectionBase::release(); } virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & reqType ) override; @@ -96,6 +89,4 @@ public: } -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/postgresql/pq_xviews.cxx b/connectivity/source/drivers/postgresql/pq_xviews.cxx index ac684a16c124..1f5b6c4fa52c 100644 --- a/connectivity/source/drivers/postgresql/pq_xviews.cxx +++ b/connectivity/source/drivers/postgresql/pq_xviews.cxx @@ -34,12 +34,14 @@ * ************************************************************************/ +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> #include <com/sun/star/lang/IndexOutOfBoundsException.hpp> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> #include <com/sun/star/sdbc/SQLException.hpp> #include <com/sun/star/sdbc/XRow.hpp> #include <cppuhelper/exc_hlp.hxx> +#include <o3tl/safeint.hxx> #include "pq_xviews.hxx" #include "pq_xview.hxx" @@ -51,7 +53,7 @@ using osl::MutexGuard; using com::sun::star::beans::XPropertySet; -using com::sun::star::uno::makeAny; +using com::sun::star::uno::Any; using com::sun::star::uno::UNO_QUERY; using com::sun::star::uno::Reference; @@ -106,15 +108,15 @@ void Views::refresh() table = xRow->getString( 2 ); command = xRow->getString( 3 ); - View *pView = new View (m_xMutex, m_origin, m_pSettings ); + rtl::Reference<View> pView = new View (m_xMutex, m_origin, m_pSettings ); Reference< css::beans::XPropertySet > prop = pView; - pView->setPropertyValue_NoBroadcast_public(st.NAME , makeAny(table) ); - pView->setPropertyValue_NoBroadcast_public(st.SCHEMA_NAME, makeAny(schema) ); - pView->setPropertyValue_NoBroadcast_public(st.COMMAND, makeAny(command) ); + pView->setPropertyValue_NoBroadcast_public(st.NAME , Any(table) ); + pView->setPropertyValue_NoBroadcast_public(st.SCHEMA_NAME, Any(schema) ); + pView->setPropertyValue_NoBroadcast_public(st.COMMAND, Any(command) ); { - m_values.push_back( makeAny( prop ) ); + m_values.push_back( Any( prop ) ); map[ schema + "." + table ] = viewIndex; ++viewIndex; } @@ -148,7 +150,7 @@ void Views::appendByDescriptor( buf.append( "CREATE VIEW "); bufferQuoteQualifiedIdentifier( buf, schema, name, m_pSettings ); - buf.append(" AS " ).append( command ); + buf.append(" AS " + command ); stmt->executeUpdate( buf.makeStringAndClear() ); @@ -174,7 +176,7 @@ void Views::dropByName( const OUString& elementName ) void Views::dropByIndex( sal_Int32 index ) { osl::MutexGuard guard( m_xMutex->GetMutex() ); - if( index < 0 || index >= static_cast<sal_Int32>(m_values.size()) ) + if( index < 0 || o3tl::make_unsigned(index) >= m_values.size() ) { throw css::lang::IndexOutOfBoundsException( "VIEWS: Index out of range (allowed 0 to " + OUString::number(m_values.size() -1) @@ -204,13 +206,12 @@ Reference< css::container::XNameAccess > Views::create( const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - Views **ppViews) + rtl::Reference<Views> *ppViews) { *ppViews = new Views( refMutex, origin, pSettings ); - Reference< css::container::XNameAccess > ret = *ppViews; (*ppViews)->refresh(); - return ret; + return *ppViews; } }; diff --git a/connectivity/source/drivers/postgresql/pq_xviews.hxx b/connectivity/source/drivers/postgresql/pq_xviews.hxx index 5ce5b879bd0e..04137b6868a1 100644 --- a/connectivity/source/drivers/postgresql/pq_xviews.hxx +++ b/connectivity/source/drivers/postgresql/pq_xviews.hxx @@ -34,14 +34,19 @@ * ************************************************************************/ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XVIEWS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_DRIVERS_POSTGRESQL_PQ_XVIEWS_HXX +#pragma once + +#include <sal/config.h> + +#include <rtl/ref.hxx> #include "pq_xcontainer.hxx" namespace pq_sdbc_driver { +struct ConnectionSettings; + class Views : public Container { @@ -50,7 +55,7 @@ public: // instances Views 'exception safe' const ::rtl::Reference< comphelper::RefCountedMutex > & refMutex, const css::uno::Reference< css::sdbc::XConnection > & origin, ConnectionSettings *pSettings, - Views **ppViews ); + rtl::Reference<Views> *ppViews ); protected: Views( @@ -79,6 +84,5 @@ protected: }; } -#endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/drivers/writer/WConnection.cxx b/connectivity/source/drivers/writer/WConnection.cxx index c4cc699e4ad2..c9900a4e5544 100644 --- a/connectivity/source/drivers/writer/WConnection.cxx +++ b/connectivity/source/drivers/writer/WConnection.cxx @@ -32,7 +32,7 @@ #include <unotools/pathoptions.hxx> #include <connectivity/dbexception.hxx> #include <cppuhelper/exc_hlp.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::com::sun::star; @@ -42,7 +42,6 @@ namespace connectivity::writer { OWriterConnection::OWriterConnection(ODriver* _pDriver) : OConnection(_pDriver) - , m_nDocCount(0) { } @@ -55,9 +54,9 @@ void OWriterConnection::construct(const OUString& rURL, sal_Int32 nLen = rURL.indexOf(':'); nLen = rURL.indexOf(':', nLen + 1); - OUString aDSN(rURL.copy(nLen + 1)); - m_aFileName = aDSN; + m_aFileName = rURL.copy(nLen + 1); // DSN + INetURLObject aURL; aURL.SetSmartProtocol(INetProtocol::File); { @@ -97,18 +96,17 @@ uno::Reference<text::XTextDocument> const& OWriterConnection::acquireDoc() return m_xDoc; } // open read-only as long as updating isn't implemented - uno::Sequence<beans::PropertyValue> aArgs(2); - aArgs[0].Name = "Hidden"; - aArgs[0].Value <<= true; - aArgs[1].Name = "ReadOnly"; - aArgs[1].Value <<= true; + uno::Sequence<beans::PropertyValue> aArgs(m_sPassword.isEmpty() ? 2 : 3); + auto pArgs = aArgs.getArray(); + pArgs[0].Name = "Hidden"; + pArgs[0].Value <<= true; + pArgs[1].Name = "ReadOnly"; + pArgs[1].Value <<= true; if (!m_sPassword.isEmpty()) { - const sal_Int32 nPos = aArgs.getLength(); - aArgs.realloc(nPos + 1); - aArgs[nPos].Name = "Password"; - aArgs[nPos].Value <<= m_sPassword; + pArgs[2].Name = "Password"; + pArgs[2].Value <<= m_sPassword; } uno::Reference<frame::XDesktop2> xDesktop @@ -203,8 +201,7 @@ css::uno::Reference<css::sdbcx::XTablesSupplier> OWriterConnection::createCatalo uno::Reference<css::sdbcx::XTablesSupplier> xTab = m_xCatalog; if (!xTab.is()) { - auto pCat = new OWriterCatalog(this); - xTab = pCat; + xTab = new OWriterCatalog(this); m_xCatalog = xTab; } return xTab; @@ -216,7 +213,7 @@ uno::Reference<sdbc::XStatement> SAL_CALL OWriterConnection::createStatement() checkDisposed(OConnection_BASE::rBHelper.bDisposed); uno::Reference<sdbc::XStatement> xReturn = new component::OComponentStatement(this); - m_aStatements.push_back(uno::WeakReferenceHelper(xReturn)); + m_aStatements.emplace_back(xReturn); return xReturn; } @@ -226,10 +223,10 @@ uno::Reference<sdbc::XPreparedStatement> ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OConnection_BASE::rBHelper.bDisposed); - auto pStmt = new component::OComponentPreparedStatement(this); - uno::Reference<sdbc::XPreparedStatement> xHoldAlive = pStmt; + rtl::Reference<component::OComponentPreparedStatement> pStmt + = new component::OComponentPreparedStatement(this); pStmt->construct(sql); - m_aStatements.push_back(uno::WeakReferenceHelper(*pStmt)); + m_aStatements.emplace_back(*pStmt); return pStmt; } diff --git a/connectivity/source/drivers/writer/WDatabaseMetaData.cxx b/connectivity/source/drivers/writer/WDatabaseMetaData.cxx index 2e55a46d2c6d..1eed92ddcf07 100644 --- a/connectivity/source/drivers/writer/WDatabaseMetaData.cxx +++ b/connectivity/source/drivers/writer/WDatabaseMetaData.cxx @@ -47,8 +47,8 @@ uno::Reference<sdbc::XResultSet> SAL_CALL OWriterDatabaseMetaData::getTables( { ::osl::MutexGuard aGuard(m_aMutex); - auto pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); - uno::Reference<sdbc::XResultSet> xRef = pResult; + rtl::Reference<ODatabaseMetaDataResultSet> pResult + = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTables); // check if ORowSetValue type is given // when no types are given then we have to return all tables e.g. TABLE @@ -73,7 +73,7 @@ uno::Reference<sdbc::XResultSet> SAL_CALL OWriterDatabaseMetaData::getTables( } } if (!bTableFound) - return xRef; + return pResult; // get the table names from the document @@ -90,21 +90,22 @@ uno::Reference<sdbc::XResultSet> SAL_CALL OWriterDatabaseMetaData::getTables( sal_Int32 nTableCount = aTableNames.getLength(); for (sal_Int32 nTable = 0; nTable < nTableCount; nTable++) { - OUString aName = aTableNames[nTable]; - if (match(tableNamePattern, aName, '\0')) + const OUString& rName = aTableNames[nTable]; + if (match(tableNamePattern, rName, '\0')) { - ODatabaseMetaDataResultSet::ORow aRow{ nullptr, nullptr, nullptr }; - aRow.reserve(6); - aRow.push_back(new ORowSetValueDecorator(aName)); - aRow.push_back(new ORowSetValueDecorator(aTable)); - aRow.push_back(ODatabaseMetaDataResultSet::getEmptyValue()); + ODatabaseMetaDataResultSet::ORow aRow{ nullptr, + nullptr, + nullptr, + new ORowSetValueDecorator(rName), + new ORowSetValueDecorator(aTable), + ODatabaseMetaDataResultSet::getEmptyValue() }; aRows.push_back(aRow); } } - pResult->setRows(aRows); + pResult->setRows(std::move(aRows)); - return xRef; + return pResult; } } // namespace diff --git a/connectivity/source/drivers/writer/WDriver.cxx b/connectivity/source/drivers/writer/WDriver.cxx index 9bd3bc76c1e8..bbd0f71838c1 100644 --- a/connectivity/source/drivers/writer/WDriver.cxx +++ b/connectivity/source/drivers/writer/WDriver.cxx @@ -38,17 +38,14 @@ extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* connectivity_writer_ODriver(css::uno::XComponentContext* context, css::uno::Sequence<css::uno::Any> const& /*rArguments*/) { - rtl::Reference<ODriver> ret; try { - ret = new ODriver(context); + return acquire(new ODriver(context)); } catch (...) { } - if (ret) - ret->acquire(); - return static_cast<cppu::OWeakObject*>(ret.get()); + return nullptr; } uno::Reference<sdbc::XConnection> @@ -61,12 +58,11 @@ uno::Reference<sdbc::XConnection> if (!acceptsURL(url)) return nullptr; - auto pCon = new OWriterConnection(this); + rtl::Reference<OWriterConnection> pCon = new OWriterConnection(this); pCon->construct(url, info); - uno::Reference<sdbc::XConnection> xCon = pCon; - m_xConnections.push_back(uno::WeakReferenceHelper(*pCon)); + m_xConnections.emplace_back(*pCon); - return xCon; + return pCon; } sal_Bool SAL_CALL ODriver::acceptsURL(const OUString& url) @@ -83,7 +79,7 @@ ODriver::getPropertyInfo(const OUString& url, const uno::Sequence<beans::Propert const OUString sMessage = aResources.getResourceString(STR_URI_SYNTAX_ERROR); ::dbtools::throwGenericSQLException(sMessage, *this); } - return uno::Sequence<sdbc::DriverPropertyInfo>(); + return {}; } } // namespace diff --git a/connectivity/source/drivers/writer/WTable.cxx b/connectivity/source/drivers/writer/WTable.cxx index 7236df2476dd..2f0f44855d86 100644 --- a/connectivity/source/drivers/writer/WTable.cxx +++ b/connectivity/source/drivers/writer/WTable.cxx @@ -30,8 +30,6 @@ #include <writer/WConnection.hxx> #include <connectivity/sdbcx/VColumn.hxx> #include <sal/log.hxx> -#include <comphelper/servicehelper.hxx> -#include <cppuhelper/typeprovider.hxx> namespace com::sun::star::text { @@ -159,12 +157,11 @@ void OWriterTable::fillColumns() aFind = connectivity::find(m_aColumns->begin(), m_aColumns->end(), aAlias, aCase); } - auto pColumn = new sdbcx::OColumn( + rtl::Reference<sdbcx::OColumn> pColumn = new sdbcx::OColumn( aAlias, aTypeName, OUString(), OUString(), sdbc::ColumnValue::NULLABLE, nPrecision, nDecimals, eType, false, false, bCurrency, bStoresMixedCaseQuotedIdentifiers, m_CatalogName, getSchema(), getName()); - uno::Reference<XPropertySet> xCol = pColumn; - m_aColumns->push_back(xCol); + m_aColumns->push_back(pColumn); } } @@ -173,9 +170,6 @@ OWriterTable::OWriterTable(sdbcx::OCollection* _pTables, OWriterConnection* _pCo : OWriterTable_BASE(_pTables, _pConnection, Name, Type, OUString() /*Description*/, OUString() /*SchemaName*/, OUString() /*CatalogName*/) , m_pWriterConnection(_pConnection) - , m_nStartCol(0) - , m_nDataCols(0) - , m_bHasHeaders(false) { } @@ -212,19 +206,6 @@ void SAL_CALL OWriterTable::disposing() m_pWriterConnection = nullptr; } -uno::Sequence<sal_Int8> OWriterTable::getUnoTunnelId() -{ - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); -} - -sal_Int64 OWriterTable::getSomething(const uno::Sequence<sal_Int8>& rId) -{ - return (isUnoTunnelId<OWriterTable>(rId)) ? reinterpret_cast<sal_Int64>(this) - : OWriterTable_BASE::getSomething(rId); -} - bool OWriterTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns& _rCols, bool bRetrieveData) { // read the bookmark diff --git a/connectivity/source/drivers/writer/WTables.cxx b/connectivity/source/drivers/writer/WTables.cxx index 15dc9e0c1941..8b2692d93a01 100644 --- a/connectivity/source/drivers/writer/WTables.cxx +++ b/connectivity/source/drivers/writer/WTables.cxx @@ -31,13 +31,13 @@ namespace connectivity::writer { sdbcx::ObjectType OWriterTables::createObject(const OUString& rName) { - auto pTable = new OWriterTable(this, - static_cast<OWriterConnection*>( - static_cast<file::OFileCatalog&>(m_rParent).getConnection()), - rName, "TABLE"); - sdbcx::ObjectType xRet = pTable; + rtl::Reference<OWriterTable> pTable + = new OWriterTable(this, + static_cast<OWriterConnection*>( + static_cast<file::OFileCatalog&>(m_rParent).getConnection()), + rName, "TABLE"); pTable->construct(); - return xRet; + return pTable; } } // namespace diff --git a/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx b/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx index f8327e308e65..f0a3fef76d00 100644 --- a/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx +++ b/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx @@ -32,16 +32,15 @@ #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/sdbc/XWarningsSupplier.hpp> -#include <cppuhelper/compbase.hxx> -#include <cppuhelper/basemutex.hxx> #include <comphelper/proparrhlp.hxx> -#include <comphelper/propertycontainer.hxx> +#include <comphelper/propertycontainer2.hxx> #include <connectivity/FValue.hxx> #include <connectivity/dbtoolsdllapi.hxx> +#include <comphelper/compbase.hxx> namespace connectivity { - typedef ::cppu::WeakComponentImplHelper< css::sdbc::XResultSet, + typedef ::comphelper::WeakComponentImplHelper< css::sdbc::XResultSet, css::sdbc::XRow, css::sdbc::XResultSetMetaDataSupplier, css::util::XCancellable, @@ -54,11 +53,10 @@ namespace connectivity // typedef ORefVector<ORowSetValue> ORow; // typedef ORefVector<ORow> ORows; - class OOO_DLLPUBLIC_DBTOOLS ODatabaseMetaDataResultSet : - public cppu::BaseMutex, - public ODatabaseMetaDataResultSet_BASE, - public ::comphelper::OPropertyContainer, - public ::comphelper::OPropertyArrayUsageHelper<ODatabaseMetaDataResultSet> + class SAL_DLLPUBLIC_RTTI ODatabaseMetaDataResultSet : + public ODatabaseMetaDataResultSet_BASE, + public ::comphelper::OPropertyContainer2, + public ::comphelper::OPropertyArrayUsageHelper<ODatabaseMetaDataResultSet> { public: @@ -118,8 +116,9 @@ namespace connectivity void construct(); /// @throws css::sdbc::SQLException - void checkIndex(sal_Int32 columnIndex ); + void checkIndex(std::unique_lock<std::mutex>& rGuard, sal_Int32 columnIndex ); void setType(MetaDataResultSetType _eType); + css::uno::Reference< css::sdbc::XResultSetMetaData > getMetaData( std::unique_lock<std::mutex>& ); protected: ORows m_aRows; @@ -130,22 +129,26 @@ namespace connectivity virtual const ORowSetValue& getValue(sal_Int32 columnIndex); // OPropertyArrayUsageHelper - virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override; + OOO_DLLPUBLIC_DBTOOLS virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override; // OPropertySetHelper - virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override; + OOO_DLLPUBLIC_DBTOOLS virtual ::cppu::IPropertyArrayHelper & getInfoHelper() override; + + bool next(std::unique_lock<std::mutex>& ); + bool isBeforeFirst(std::unique_lock<std::mutex>& ); + bool isAfterLast(std::unique_lock<std::mutex>& ); virtual ~ODatabaseMetaDataResultSet() override; public: - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + OOO_DLLPUBLIC_DBTOOLS virtual void SAL_CALL acquire() noexcept override; + OOO_DLLPUBLIC_DBTOOLS virtual void SAL_CALL release() noexcept override; /// default construction ODatabaseMetaDataResultSet(); /// construction of a pre-defined result set type - ODatabaseMetaDataResultSet( MetaDataResultSetType _eType ); + OOO_DLLPUBLIC_DBTOOLS ODatabaseMetaDataResultSet( MetaDataResultSetType _eType ); - void setRows(const ORows& _rRows); + OOO_DLLPUBLIC_DBTOOLS void setRows(ORows&& _rRows); // XServiceInfo @@ -153,14 +156,14 @@ namespace connectivity virtual OUString SAL_CALL getImplementationName( ) override; virtual sal_Bool SAL_CALL supportsService( const OUString& ServiceName ) override; virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames( ) override; - // ::cppu::OComponentHelper - virtual void SAL_CALL disposing() override; + // ::comphelper::WeakComponentImplHelper + virtual void disposing(std::unique_lock<std::mutex>&) override; // XInterface - virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; + OOO_DLLPUBLIC_DBTOOLS virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet - virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override; + OOO_DLLPUBLIC_DBTOOLS virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) override; // XResultSet virtual sal_Bool SAL_CALL next( ) override; virtual sal_Bool SAL_CALL isBeforeFirst( ) override; @@ -238,31 +241,31 @@ namespace connectivity // some methods to get already defined ORowSetValues // this increase the reuse of ORowSetValues /// return an empty ORowSetValueDecorator - static ORowSetValueDecoratorRef const & getEmptyValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getEmptyValue(); /// return an ORowSetValueDecorator with 0 as value - static ORowSetValueDecoratorRef const & get0Value(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & get0Value(); /// return an ORowSetValueDecorator with 1 as value - static ORowSetValueDecoratorRef const & get1Value(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & get1Value(); /// return an ORowSetValueDecorator with ColumnSearch::BASIC as value - static ORowSetValueDecoratorRef const & getBasicValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getBasicValue(); /// return an ORowSetValueDecorator with string SELECT as value - static ORowSetValueDecoratorRef const & getSelectValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getSelectValue(); /// return an ORowSetValueDecorator with string INSERT as value - static ORowSetValueDecoratorRef const & getInsertValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getInsertValue(); /// return an ORowSetValueDecorator with string DELETE as value - static ORowSetValueDecoratorRef const & getDeleteValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getDeleteValue(); /// return an ORowSetValueDecorator with string UPDATE as value - static ORowSetValueDecoratorRef const & getUpdateValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getUpdateValue(); /// return an ORowSetValueDecorator with string CREATE as value - static ORowSetValueDecoratorRef const & getCreateValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getCreateValue(); /// return an ORowSetValueDecorator with string READ as value - static ORowSetValueDecoratorRef const & getReadValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getReadValue(); /// return an ORowSetValueDecorator with string ALTER as value - static ORowSetValueDecoratorRef const & getAlterValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getAlterValue(); /// return an ORowSetValueDecorator with string DROP as value - static ORowSetValueDecoratorRef const & getDropValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getDropValue(); /// return an ORowSetValueDecorator with string ' as value - static ORowSetValueDecoratorRef const & getQuoteValue(); + OOO_DLLPUBLIC_DBTOOLS static ORowSetValueDecoratorRef const & getQuoteValue(); }; } diff --git a/connectivity/source/inc/OColumn.hxx b/connectivity/source/inc/OColumn.hxx index a60f44e2bb8b..2131b3e15254 100644 --- a/connectivity/source/inc/OColumn.hxx +++ b/connectivity/source/inc/OColumn.hxx @@ -17,12 +17,12 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_OCOLUMN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_OCOLUMN_HXX +#pragma once #include <rtl/ustring.hxx> #include <sal/types.h> #include <connectivity/dbtoolsdllapi.hxx> +#include <utility> namespace connectivity { @@ -65,14 +65,14 @@ namespace connectivity , m_DefinitelyWritable(false) {} - OColumn(const OUString &_aTableName, + OColumn(OUString _aTableName, const OUString &_aColumnName, sal_Int32 _aNullable, sal_Int32 _aColumnDisplaySize, sal_Int32 _aPrecision, sal_Int32 _aScale, sal_Int32 _aColumnType) - : m_TableName(_aTableName), + : m_TableName(std::move(_aTableName)), m_ColumnName(_aColumnName), m_ColumnLabel(), @@ -116,6 +116,4 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_OCOLUMN_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/OTypeInfo.hxx b/connectivity/source/inc/OTypeInfo.hxx index 772a46223c88..4e9cbdf05e6a 100644 --- a/connectivity/source/inc/OTypeInfo.hxx +++ b/connectivity/source/inc/OTypeInfo.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_OTYPEINFO_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_OTYPEINFO_HXX +#pragma once #include <com/sun/star/sdbc/DataType.hpp> @@ -48,6 +47,4 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_OTYPEINFO_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ParameterSubstitution.hxx b/connectivity/source/inc/ParameterSubstitution.hxx index e0a540332ff3..a76bd09398fa 100644 --- a/connectivity/source/inc/ParameterSubstitution.hxx +++ b/connectivity/source/inc/ParameterSubstitution.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_PARAMETERSUBSTITUTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_PARAMETERSUBSTITUTION_HXX +#pragma once #include <com/sun/star/util/XStringSubstitution.hpp> #include <com/sun/star/lang/XInitialization.hpp> @@ -42,7 +41,7 @@ namespace connectivity ParameterSubstitution( const ParameterSubstitution& ) = delete; ParameterSubstitution& operator=( const ParameterSubstitution& ) = delete; public: - ParameterSubstitution(const css::uno::Reference< css::uno::XComponentContext >& _rxContext ); + ParameterSubstitution(css::uno::Reference< css::uno::XComponentContext > _rContext ); private: // XServiceInfo @@ -61,6 +60,4 @@ namespace connectivity } // connectivity -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/RowFunctionParser.hxx b/connectivity/source/inc/RowFunctionParser.hxx index 28ed97689410..059544e51f2d 100644 --- a/connectivity/source/inc/RowFunctionParser.hxx +++ b/connectivity/source/inc/RowFunctionParser.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ROWFUNCTIONPARSER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ROWFUNCTIONPARSER_HXX +#pragma once #include <sal/config.h> #include "FDatabaseMetaDataResultSet.hxx" @@ -107,6 +106,4 @@ private: } // namespace connectivity -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ROWFUNCTIONPARSER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/TConnection.hxx b/connectivity/source/inc/TConnection.hxx index 85e6e4fac546..2dbe2ef6a756 100644 --- a/connectivity/source/inc/TConnection.hxx +++ b/connectivity/source/inc/TConnection.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_TCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_TCONNECTION_HXX +#pragma once #include <rtl/textenc.h> #include <com/sun/star/beans/PropertyValue.hpp> @@ -62,7 +61,7 @@ namespace connectivity rtl_TextEncoding getTextEncoding() const { return m_nTextEncoding; } const OUString& getURL() const { return m_sURL; } void setURL(const OUString& _rsUrl) { m_sURL = _rsUrl; } - void throwGenericSQLException(const char* pErrorResourceId, const css::uno::Reference< css::uno::XInterface>& _xContext); + void throwGenericSQLException(TranslateId pErrorResourceId, const css::uno::Reference< css::uno::XInterface>& _xContext); const SharedResources& getResources() const { return m_aResources;} void setConnectionInfo(const css::uno::Sequence< css::beans::PropertyValue >& _aInfo) { m_aConnectionInfo = _aInfo; } @@ -74,10 +73,9 @@ namespace connectivity //XUnoTunnel virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); + static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId(); }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_TCONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/TDatabaseMetaDataBase.hxx b/connectivity/source/inc/TDatabaseMetaDataBase.hxx index a13adf215167..4d8c7715ca2d 100644 --- a/connectivity/source/inc/TDatabaseMetaDataBase.hxx +++ b/connectivity/source/inc/TDatabaseMetaDataBase.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_TDATABASEMETADATABASE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_TDATABASEMETADATABASE_HXX +#pragma once #include <com/sun/star/sdbc/XDatabaseMetaData2.hpp> #include <cppuhelper/implbase.hxx> @@ -130,6 +129,5 @@ namespace connectivity virtual sal_Bool SAL_CALL storesMixedCaseQuotedIdentifiers( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_TDATABASEMETADATABASE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/TKeyValue.hxx b/connectivity/source/inc/TKeyValue.hxx index abf61a4c7429..49d41e0144f2 100644 --- a/connectivity/source/inc/TKeyValue.hxx +++ b/connectivity/source/inc/TKeyValue.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_TKEYVALUE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_TKEYVALUE_HXX +#pragma once #include <connectivity/FValue.hxx> #include <connectivity/dbtoolsdllapi.hxx> @@ -45,18 +44,16 @@ namespace connectivity OUString getKeyString(std::vector<ORowSetValueDecoratorRef>::size_type i) const { OSL_ENSURE(m_aKeys.size() > i,"Wrong index for KEyValue"); - return m_aKeys[i]->getValue(); + return m_aKeys[i]->getValue().getString(); } double getKeyDouble(std::vector<ORowSetValueDecoratorRef>::size_type i) const { OSL_ENSURE(m_aKeys.size() > i,"Wrong index for KEyValue"); - return m_aKeys[i]->getValue(); + return m_aKeys[i]->getValue().getDouble(); } sal_Int32 getValue() const { return m_nValue; } }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_TKEYVALUE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/TPrivilegesResultSet.hxx b/connectivity/source/inc/TPrivilegesResultSet.hxx index d8f31194dc16..8c4070fce97a 100644 --- a/connectivity/source/inc/TPrivilegesResultSet.hxx +++ b/connectivity/source/inc/TPrivilegesResultSet.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_TPRIVILEGESRESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_TPRIVILEGESRESULTSET_HXX +#pragma once #include "FDatabaseMetaDataResultSet.hxx" #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -37,12 +36,11 @@ namespace connectivity OResultSetPrivileges(const css::uno::Reference< css::sdbc::XDatabaseMetaData>& _rxMeta ,const css::uno::Any& catalog, const OUString& schemaPattern, const OUString& tableNamePattern); - // ::cppu::OComponentHelper - virtual void SAL_CALL disposing() override; + // ::comphelper::WeakComponentImplHelper + virtual void disposing(std::unique_lock<std::mutex>&) override; // XResultSet virtual sal_Bool SAL_CALL next( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_TPRIVILEGESRESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/TResultSetHelper.hxx b/connectivity/source/inc/TResultSetHelper.hxx index e6c0efd9c97f..cedea102725a 100644 --- a/connectivity/source/inc/TResultSetHelper.hxx +++ b/connectivity/source/inc/TResultSetHelper.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_TRESULTSETHELPER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_TRESULTSETHELPER_HXX +#pragma once #include <sal/types.h> #include <connectivity/dbtoolsdllapi.hxx> @@ -49,6 +48,4 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_TRESULTSETHELPER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/TSkipDeletedSet.hxx b/connectivity/source/inc/TSkipDeletedSet.hxx index 3935264696ed..efe142af548c 100644 --- a/connectivity/source/inc/TSkipDeletedSet.hxx +++ b/connectivity/source/inc/TSkipDeletedSet.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_TSKIPDELETEDSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_TSKIPDELETEDSET_HXX +#pragma once #include "TResultSetHelper.hxx" #include <vector> @@ -77,6 +76,5 @@ namespace connectivity void SetDeletedVisible(bool _bDeletedVisible) { m_bDeletedVisible = _bDeletedVisible; } }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_TSKIPDELETEDSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/TSortIndex.hxx b/connectivity/source/inc/TSortIndex.hxx index c0354316efd9..3ac339f7e9f0 100644 --- a/connectivity/source/inc/TSortIndex.hxx +++ b/connectivity/source/inc/TSortIndex.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_TSORTINDEX_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_TSORTINDEX_HXX +#pragma once #include <connectivity/dbtoolsdllapi.hxx> #include "TKeyValue.hxx" @@ -58,8 +57,8 @@ namespace connectivity public: - OSortIndex( const std::vector<OKeyType>& _aKeyType, - const std::vector<TAscendingOrder>& _aAscending); + OSortIndex( std::vector<OKeyType>&& _aKeyType, + std::vector<TAscendingOrder>&& _aAscending); OSortIndex(OSortIndex const &) = delete; // MSVC2015 workaround OSortIndex& operator=(OSortIndex const &) = delete; // MSVC2015 workaround @@ -107,6 +106,5 @@ namespace connectivity void setFrozen() { m_bFrozen = true; } }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_TSORTINDEX_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ACallableStatement.hxx b/connectivity/source/inc/ado/ACallableStatement.hxx index 3114242558ac..e58617b3b00e 100644 --- a/connectivity/source/inc/ado/ACallableStatement.hxx +++ b/connectivity/source/inc/ado/ACallableStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACALLABLESTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACALLABLESTATEMENT_HXX +#pragma once #include <ado/APreparedStatement.hxx> #include <com/sun/star/sdbc/XRow.hpp> @@ -43,8 +42,8 @@ namespace connectivity::ado OCallableStatement( OConnection* _pConnection, const OUString& sql ); virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; // XRow virtual sal_Bool SAL_CALL wasNull( ) override; @@ -72,7 +71,6 @@ namespace connectivity::ado virtual void SAL_CALL registerNumericOutParameter( sal_Int32 parameterIndex, sal_Int32 sqlType, sal_Int32 scale ) override; }; } -#endif // _CONNECTIVITY_OCallableStatement_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ACatalog.hxx b/connectivity/source/inc/ado/ACatalog.hxx index 9afe9e41cfb9..fd09e9ad3c40 100644 --- a/connectivity/source/inc/ado/ACatalog.hxx +++ b/connectivity/source/inc/ado/ACatalog.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACATALOG_HXX +#pragma once #include <sdbcx/VCatalog.hxx> #include <ado/Awrapadox.hxx> @@ -46,6 +45,5 @@ namespace connectivity::ado WpADOCatalog getCatalog() const { return m_aCatalog; } }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACATALOG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AColumn.hxx b/connectivity/source/inc/ado/AColumn.hxx index 84344ece755e..f297964820dc 100644 --- a/connectivity/source/inc/ado/AColumn.hxx +++ b/connectivity/source/inc/ado/AColumn.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACOLUMN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACOLUMN_HXX +#pragma once #include <connectivity/sdbcx/VColumn.hxx> #include <ado/Awrapadox.hxx> @@ -45,13 +44,9 @@ namespace connectivity::ado OAdoColumn(bool _bCase,OConnection* _pConnection); // ODescriptor virtual void construct() override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); WpADOColumn getColumnImpl() const; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACOLUMN_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AColumns.hxx b/connectivity/source/inc/ado/AColumns.hxx index f9773ba48460..25decfa6877f 100644 --- a/connectivity/source/inc/ado/AColumns.hxx +++ b/connectivity/source/inc/ado/AColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACOLUMNS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -53,6 +52,5 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACOLUMNS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AConnection.hxx b/connectivity/source/inc/ado/AConnection.hxx index 29f552946a89..c2c82100363d 100644 --- a/connectivity/source/inc/ado/AConnection.hxx +++ b/connectivity/source/inc/ado/AConnection.hxx @@ -16,13 +16,13 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACONNECTION_HXX +#pragma once #include <com/sun/star/sdbc/SQLWarning.hpp> #include <com/sun/star/sdbcx/XTablesSupplier.hpp> #include <com/sun/star/beans/PropertyValue.hpp> #include <map> +#include <string_view> #include <connectivity/CommonTools.hxx> #include <OTypeInfo.hxx> #include <TConnection.hxx> @@ -57,7 +57,7 @@ namespace connectivity::ado css::uno::WeakReference< css::sdbcx::XTablesSupplier> m_xCatalog; ODriver* m_pDriver; private: - WpADOConnection* m_pAdoConnection; + WpADOConnection m_aAdoConnection; OCatalog* m_pCatalog; sal_Int32 m_nEngineType; bool m_bClosed; @@ -72,7 +72,7 @@ namespace connectivity::ado OConnection(ODriver* _pDriver); // OConnection(const SQLHANDLE _pConnectionHandle); ~OConnection() override; - void construct(const OUString& url,const css::uno::Sequence< css::beans::PropertyValue >& info); + void construct(std::u16string_view url,const css::uno::Sequence< css::beans::PropertyValue >& info); //XUnoTunnel virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; @@ -107,7 +107,7 @@ namespace connectivity::ado virtual css::uno::Any SAL_CALL getWarnings( ) override; virtual void SAL_CALL clearWarnings( ) override; - WpADOConnection* getConnection() { return m_pAdoConnection; } + WpADOConnection& getConnection() { return m_aAdoConnection; } void setCatalog(const css::uno::WeakReference< css::sdbcx::XTablesSupplier>& _xCat) { m_xCatalog = _xCat; } void setCatalog(OCatalog* _pCatalog) { m_pCatalog = _pCatalog; } @@ -130,6 +130,5 @@ namespace connectivity::ado bool& _brForceToType); }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ACONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ADatabaseMetaData.hxx b/connectivity/source/inc/ado/ADatabaseMetaData.hxx index af59ab2429e1..1661ca44181c 100644 --- a/connectivity/source/inc/ado/ADatabaseMetaData.hxx +++ b/connectivity/source/inc/ado/ADatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATA_HXX +#pragma once #include <TDatabaseMetaDataBase.hxx> #include <map> @@ -41,7 +40,7 @@ namespace connectivity::ado }; std::map<sal_uInt32,LiteralInfo> m_aLiteralInfo; - WpADOConnection* m_pADOConnection; + WpADOConnection& m_rADOConnection; OConnection* m_pConnection; void fillLiterals(); @@ -218,7 +217,5 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ADatabaseMetaDataResultSet.hxx b/connectivity/source/inc/ado/ADatabaseMetaDataResultSet.hxx index a13ae359a5cc..dce6971658d3 100644 --- a/connectivity/source/inc/ado/ADatabaseMetaDataResultSet.hxx +++ b/connectivity/source/inc/ado/ADatabaseMetaDataResultSet.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATARESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATARESULTSET_HXX +#pragma once #include <com/sun/star/sdbc/XResultSet.hpp> #include <com/sun/star/sdbc/XRow.hpp> @@ -132,8 +131,8 @@ namespace connectivity::ado virtual void SAL_CALL disposing() override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -222,6 +221,5 @@ namespace connectivity::ado } } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATARESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ADatabaseMetaDataResultSetMetaData.hxx b/connectivity/source/inc/ado/ADatabaseMetaDataResultSetMetaData.hxx index 59750edfd400..abac49ba1d9b 100644 --- a/connectivity/source/inc/ado/ADatabaseMetaDataResultSetMetaData.hxx +++ b/connectivity/source/inc/ado/ADatabaseMetaDataResultSetMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATARESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADATABASEMETADATARESULTSETMETADATA_HXX +#pragma once #include <com/sun/star/sdbc/XResultSetMetaData.hpp> #include <cppuhelper/implbase.hxx> @@ -73,7 +72,7 @@ namespace connectivity::ado ~ODatabaseMetaDataResultSetMetaData() override; /// Avoid ambiguous cast error from the compiler. - operator css::uno::Reference< css::sdbc::XResultSetMetaData > () throw() + operator css::uno::Reference< css::sdbc::XResultSetMetaData > () noexcept { return this; } virtual sal_Int32 SAL_CALL getColumnCount( ) override; @@ -99,6 +98,5 @@ namespace connectivity::ado virtual OUString SAL_CALL getColumnServiceName( sal_Int32 column ) override; }; } -#endif // _CONNECTIVITY_ADO_ADATABASEMETARESULTSETMETADATA_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ADriver.hxx b/connectivity/source/inc/ado/ADriver.hxx index a428ed1636ca..8542e03f6d60 100644 --- a/connectivity/source/inc/ado/ADriver.hxx +++ b/connectivity/source/inc/ado/ADriver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADRIVER_HXX +#pragma once #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp> @@ -76,7 +75,6 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADRIVER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AGroup.hxx b/connectivity/source/inc/ado/AGroup.hxx index 73b526006647..00207a5fa23a 100644 --- a/connectivity/source/inc/ado/AGroup.hxx +++ b/connectivity/source/inc/ado/AGroup.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AGROUP_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AGROUP_HXX +#pragma once #include <sdbcx/VGroup.hxx> #include <ado/Awrapadox.hxx> @@ -46,10 +45,6 @@ namespace connectivity::ado OAdoGroup(OCatalog* _pParent,bool _bCase, ADOGroup* _pGroup=nullptr); OAdoGroup(OCatalog* _pParent,bool _bCase, const OUString& Name); - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); - // XAuthorizable virtual sal_Int32 SAL_CALL getPrivileges( const OUString& objName, sal_Int32 objType ) override; virtual sal_Int32 SAL_CALL getGrantablePrivileges( const OUString& objName, sal_Int32 objType ) override; @@ -59,6 +54,5 @@ namespace connectivity::ado WpADOGroup getImpl() const { return m_aGroup; } }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AGROUP_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AGroups.hxx b/connectivity/source/inc/ado/AGroups.hxx index 91c38dc64b1b..85817cec84d0 100644 --- a/connectivity/source/inc/ado/AGroups.hxx +++ b/connectivity/source/inc/ado/AGroups.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AGROUPS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AGROUPS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <ado/Awrapadox.hxx> @@ -49,6 +48,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AGROUPS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AIndex.hxx b/connectivity/source/inc/ado/AIndex.hxx index 41a839619b78..98c3a77d1ceb 100644 --- a/connectivity/source/inc/ado/AIndex.hxx +++ b/connectivity/source/inc/ado/AIndex.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AINDEX_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AINDEX_HXX +#pragma once #include <sdbcx/VIndex.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -39,13 +38,9 @@ namespace connectivity::ado public: OAdoIndex(bool _bCase, OConnection* _pConnection,ADOIndex* _pIndex); OAdoIndex(bool _bCase, OConnection* _pConnection); - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); WpADOIndex getImpl() const { return m_aIndex;} }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AINDEX_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AIndexes.hxx b/connectivity/source/inc/ado/AIndexes.hxx index 065c8a0b1843..48c2d1abee83 100644 --- a/connectivity/source/inc/ado/AIndexes.hxx +++ b/connectivity/source/inc/ado/AIndexes.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AINDEXES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AINDEXES_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -51,6 +50,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AINDEXES_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AKey.hxx b/connectivity/source/inc/ado/AKey.hxx index ffb1eebe4216..5ec3fa972b12 100644 --- a/connectivity/source/inc/ado/AKey.hxx +++ b/connectivity/source/inc/ado/AKey.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AKEY_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AKEY_HXX +#pragma once #include <sdbcx/VKey.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -42,10 +41,6 @@ namespace connectivity::ado OAdoKey(bool _bCase,OConnection* _pConnection,ADOKey* _pKey); OAdoKey(bool _bCase,OConnection* _pConnection); - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); - WpADOKey getImpl() const { return m_aKey;} // map the update/delete rules static RuleEnum Map2Rule(sal_Int32 _eNum); @@ -56,6 +51,5 @@ namespace connectivity::ado static KeyTypeEnum Map2KeyRule(sal_Int32 _eNum); }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AKEY_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AKeys.hxx b/connectivity/source/inc/ado/AKeys.hxx index 6de3d5a2055a..45e127e29bf7 100644 --- a/connectivity/source/inc/ado/AKeys.hxx +++ b/connectivity/source/inc/ado/AKeys.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AKEYS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AKEYS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <ado/Awrapadox.hxx> @@ -51,6 +50,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AKEYS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/APreparedStatement.hxx b/connectivity/source/inc/ado/APreparedStatement.hxx index 214f277c16bf..2ce394dbdefb 100644 --- a/connectivity/source/inc/ado/APreparedStatement.hxx +++ b/connectivity/source/inc/ado/APreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_APREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_APREPAREDSTATEMENT_HXX +#pragma once #include <ado/AStatement.hxx> #include <com/sun/star/sdbc/XPreparedStatement.hpp> @@ -63,8 +62,8 @@ namespace connectivity // a Constructor, that is needed for when Returning the Object is needed: OPreparedStatement( OConnection* _pConnection, const OUString& sql); - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; @@ -110,6 +109,5 @@ namespace connectivity }; } } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_APREPAREDSTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AResultSet.hxx b/connectivity/source/inc/ado/AResultSet.hxx index 101835f26019..58de2baeb539 100644 --- a/connectivity/source/inc/ado/AResultSet.hxx +++ b/connectivity/source/inc/ado/AResultSet.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ARESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ARESULTSET_HXX +#pragma once #include <com/sun/star/sdbc/XResultSet.hpp> #include <com/sun/star/sdbc/XRow.hpp> @@ -135,8 +134,8 @@ namespace connectivity::ado virtual void SAL_CALL disposing() override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -230,7 +229,6 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ARESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AResultSetMetaData.hxx b/connectivity/source/inc/ado/AResultSetMetaData.hxx index 6389efc04a70..1eeb22656245 100644 --- a/connectivity/source/inc/ado/AResultSetMetaData.hxx +++ b/connectivity/source/inc/ado/AResultSetMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ARESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ARESULTSETMETADATA_HXX +#pragma once #include <com/sun/star/sdbc/XResultSetMetaData.hpp> #include <cppuhelper/implbase.hxx> @@ -76,6 +75,5 @@ namespace connectivity::ado virtual OUString SAL_CALL getColumnServiceName( sal_Int32 column ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ARESULTSETMETADATA_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AStatement.hxx b/connectivity/source/inc/ado/AStatement.hxx index a85992d01f03..625339917591 100644 --- a/connectivity/source/inc/ado/AStatement.hxx +++ b/connectivity/source/inc/ado/AStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ASTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ASTATEMENT_HXX +#pragma once #include <com/sun/star/sdbc/XStatement.hpp> #include <com/sun/star/sdbc/XWarningsSupplier.hpp> @@ -168,8 +167,8 @@ namespace connectivity::ado // OComponentHelper virtual void SAL_CALL disposing() override; // XInterface - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; @@ -205,8 +204,8 @@ namespace connectivity::ado DECLARE_SERVICE_INFO(); - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; // XBatchExecution virtual void SAL_CALL addBatch( const OUString& sql ) override; @@ -214,6 +213,5 @@ namespace connectivity::ado virtual css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ASTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ATable.hxx b/connectivity/source/inc/ado/ATable.hxx index dd0949dd2c3d..827485a6b480 100644 --- a/connectivity/source/inc/ado/ATable.hxx +++ b/connectivity/source/inc/ado/ATable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ATABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ATABLE_HXX +#pragma once #include <connectivity/sdbcx/VTable.hxx> #include <ado/Awrapadox.hxx> @@ -54,9 +53,6 @@ namespace connectivity::ado virtual OUString SAL_CALL getName() override; OUString getSchema() const { return m_SchemaName; } virtual css::uno::Reference< css::sdbc::XDatabaseMetaData> getMetaData() const override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); // XRename virtual void SAL_CALL rename( const OUString& newName ) override; @@ -69,6 +65,5 @@ namespace connectivity::ado OCatalog* getCatalog() const { return m_pCatalog; } }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ATABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/ATables.hxx b/connectivity/source/inc/ado/ATables.hxx index 2ca881051ff6..4fff5b97956e 100644 --- a/connectivity/source/inc/ado/ATables.hxx +++ b/connectivity/source/inc/ado/ATables.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ATABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ATABLES_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <ado/Awrapadox.hxx> @@ -49,6 +48,5 @@ namespace connectivity::ado void appendNew(const OUString& _rsNewTable); }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ATABLES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AUser.hxx b/connectivity/source/inc/ado/AUser.hxx index 1368ed46d922..8d0c0f7321b6 100644 --- a/connectivity/source/inc/ado/AUser.hxx +++ b/connectivity/source/inc/ado/AUser.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AUSER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AUSER_HXX +#pragma once #include <sdbcx/VUser.hxx> #include <ado/Awrapadox.hxx> @@ -49,9 +48,6 @@ namespace connectivity::ado OAdoUser(OCatalog* _pParent,bool _bCase, ADOUser* _pUser=nullptr); OAdoUser(OCatalog* _pParent,bool _bCase, const OUString& Name); - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); // XUser virtual void SAL_CALL changePassword( const OUString& objPassword, const OUString& newPassword ) override; // XAuthorizable @@ -83,6 +79,5 @@ namespace connectivity::ado OUString getPassword() const { return m_Password;} }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AUSER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AUsers.hxx b/connectivity/source/inc/ado/AUsers.hxx index 17979351ef0a..1ec0bd5ad8f7 100644 --- a/connectivity/source/inc/ado/AUsers.hxx +++ b/connectivity/source/inc/ado/AUsers.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AUSERS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AUSERS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <ado/Awrapadox.hxx> @@ -51,6 +50,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AUSERS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AView.hxx b/connectivity/source/inc/ado/AView.hxx index 8aabc1053ba8..db81c4e70bb5 100644 --- a/connectivity/source/inc/ado/AView.hxx +++ b/connectivity/source/inc/ado/AView.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AVIEW_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AVIEW_HXX +#pragma once #include <connectivity/sdbcx/VView.hxx> #include <ado/Awrapadox.hxx> @@ -41,14 +40,8 @@ namespace connectivity::ado public: OAdoView(bool _bCase, ADOView* _pView=nullptr); - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); - WpADOView getImpl() const { return m_aView;} }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AVIEW_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/AViews.hxx b/connectivity/source/inc/ado/AViews.hxx index be90d1463f08..ef0c692fdfc3 100644 --- a/connectivity/source/inc/ado/AViews.hxx +++ b/connectivity/source/inc/ado/AViews.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AVIEWS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AVIEWS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <ado/Awrapadox.hxx> @@ -48,6 +47,5 @@ namespace connectivity::ado } }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AVIEWS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/Aolevariant.hxx b/connectivity/source/inc/ado/Aolevariant.hxx index d44287d7440c..ba0653156a94 100644 --- a/connectivity/source/inc/ado/Aolevariant.hxx +++ b/connectivity/source/inc/ado/Aolevariant.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AOLEVARIANT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AOLEVARIANT_HXX +#pragma once #include <sal/types.h> #include <rtl/ustring.hxx> @@ -34,27 +33,6 @@ namespace com::sun::star::util namespace connectivity::ado { - class OLEString - { - BSTR m_sStr; - public: - OLEString(); - OLEString(const BSTR& _sBStr); - OLEString(std::u16string_view _sBStr); - OLEString(const OLEString& _rRh) - { - OLEString::operator=(_rRh); - } - ~OLEString(); - OLEString& operator=(std::u16string_view _rSrc); - OLEString& operator=(const BSTR& _rSrc); - OLEString& operator=(const OLEString& _rSrc); - OUString asOUString() const; - BSTR asBSTR() const; - BSTR* getAddress(); - sal_Int32 length() const; - }; - class OLEVariant : public ::tagVARIANT { public: @@ -142,6 +120,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AOLEVARIANT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/Aolewrap.hxx b/connectivity/source/inc/ado/Aolewrap.hxx index 3fb6b0713040..9d402fcf21b1 100644 --- a/connectivity/source/inc/ado/Aolewrap.hxx +++ b/connectivity/source/inc/ado/Aolewrap.hxx @@ -16,11 +16,12 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AOLEWRAP_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AOLEWRAP_HXX +#pragma once #include <osl/diagnose.h> #include <osl/thread.h> +#include <systools/win32/comtools.hxx> + #include <map> #include <vector> @@ -32,101 +33,59 @@ namespace rtl } namespace connectivity::ado { - class WpBase - { - protected: - IDispatch* pIUnknown; - - void setIDispatch(IDispatch* _pIUnknown); - public: - WpBase(); - WpBase(IDispatch* pInt); - //inline - WpBase& operator=(const WpBase& rhs); - WpBase& operator=(IDispatch* rhs); - WpBase(const WpBase& aWrapper); - virtual ~WpBase(); - void clear(); - - - bool IsValid() const; - operator IDispatch*(); - - }; - // Template class WpOLEBase<class T> // ================================== // // Objects of this class contain a pointer to an interface of the type T. - // The ctors and operator= make sure, that AddRef() and Release() are being - // called adhering to COM conventions. - // An object can also hold no pointer (null pointer), calling IsValid() then - // returns false. - // - // In order to do efficient pass-by-value, this class (as all derived classes) - // is a thin wrapper class, avoiding virtual methods and inlining. - template<class T> class WpOLEBase : public WpBase + template<class T> class WpOLEBase { protected: - T* pInterface; + sal::systools::COMReference<T> pInterface; public: - WpOLEBase(T* pInt = nullptr) : WpBase(pInt),pInterface(pInt){} + WpOLEBase(T* pInt = nullptr) : pInterface(pInt){} + WpOLEBase(const WpOLEBase<T>& aWrapper) + : pInterface( aWrapper.pInterface ) + { + } //inline WpOLEBase<T>& operator=(const WpOLEBase<T>& rhs) { - WpBase::operator=(rhs); pInterface = rhs.pInterface; return *this; }; - WpOLEBase<T>& operator=(T* rhs) - { - WpBase::operator=(rhs); - pInterface = rhs.pInterface; - return *this; - } - - WpOLEBase(const WpOLEBase<T>& aWrapper) - : WpBase( aWrapper ) - , pInterface( aWrapper.pInterface ) - { - } - - operator T*() const { return pInterface; } - void setWithOutAddRef(T* _pInterface) - { - pInterface = _pInterface; - WpBase::setIDispatch(_pInterface); - } + operator T*() const { return pInterface.get(); } + T** operator&() { return &pInterface; } + bool IsValid() const { return pInterface.is(); } + void set(T* p) { pInterface = p; } + void clear() { pInterface.clear(); } }; - // Template class WpOLECollection<class Ts, class T, class WrapT> + // Template class WpOLECollection<class Ts, class WrapT> // =============================================================== // // This class (derived from WpOLEBase<Ts>), abstracts away the properties // common to DAO collections: // // They are accessed via an interface Ts (e.g. DAOFields) and can return - // Items of the Type T (actually: with the interface T, e.g. DAOField) - // via get_Item (here GetItem). + // Items of the type wrapped by WrapT (actually: with the interface, e.g. + // DAOField) via get_Item (here GetItem). // - // This wrapper class does not expose an interface T, however, - // it exposes an object of the class WrapT. This must allow a construction - // by T, preferably it is derived from WpOLEBase<T>. + // This wrapper class exposes an object of the class WrapT. - template<class Ts, class T, class WrapT> class WpOLECollection : public WpOLEBase<Ts> + template<class Ts, class WrapT> class WpOLECollection : public WpOLEBase<Ts> { public: using WpOLEBase<Ts>::pInterface; using WpOLEBase<Ts>::IsValid; // Ctors, operator= // They only call the superclass - WpOLECollection(Ts* pInt=nullptr):WpOLEBase<Ts>(pInt){} + WpOLECollection() = default; WpOLECollection(const WpOLECollection& rhs) : WpOLEBase<Ts>(rhs) {} WpOLECollection& operator=(const WpOLECollection& rhs) {WpOLEBase<Ts>::operator=(rhs); return *this;}; @@ -143,35 +102,28 @@ namespace connectivity::ado WrapT GetItem(sal_Int32 index) const { OSL_ENSURE(index >= 0 && index<GetItemCount(),"Wrong index for field!"); - T* pT = NULL; - WrapT aRet(NULL); - if(SUCCEEDED(pInterface->get_Item(OLEVariant(index), &pT))) - aRet.setWithOutAddRef(pT); + WrapT aRet; + pInterface->get_Item(OLEVariant(index), &aRet); return aRet; } WrapT GetItem(const OLEVariant& index) const { - T* pT = NULL; - WrapT aRet(NULL); - if(SUCCEEDED(pInterface->get_Item(index, &pT))) - aRet.setWithOutAddRef(pT); + WrapT aRet; + pInterface->get_Item(index, &aRet); return aRet; } WrapT GetItem(const OUString& sStr) const { - WrapT aRet(NULL); - T* pT = NULL; - if (FAILED(pInterface->get_Item(OLEVariant(sStr), &pT))) + WrapT aRet; + if (FAILED(pInterface->get_Item(OLEVariant(sStr), &aRet))) { #if OSL_DEBUG_LEVEL > 0 OString sTemp("Unknown Item: " + OString(sStr.getStr(),sStr.getLength(),osl_getThreadTextEncoding())); OSL_FAIL(sTemp.getStr()); #endif } - else - aRet.setWithOutAddRef(pT); return aRet; } void fillElementNames(::std::vector< OUString>& _rVector) @@ -191,23 +143,23 @@ namespace connectivity::ado } }; - template<class Ts, class T, class WrapT> class WpOLEAppendCollection: - public WpOLECollection<Ts,T,WrapT> + template<class Ts, class WrapT> class WpOLEAppendCollection: + public WpOLECollection<Ts,WrapT> { public: // Ctors, operator= // They only call the superclass using WpOLEBase<Ts>::pInterface; - WpOLEAppendCollection(Ts* pInt=nullptr):WpOLECollection<Ts,T,WrapT>(pInt){} - WpOLEAppendCollection(const WpOLEAppendCollection& rhs) : WpOLECollection<Ts, T, WrapT>(rhs) {} + WpOLEAppendCollection() = default; + WpOLEAppendCollection(const WpOLEAppendCollection& rhs) : WpOLECollection<Ts, WrapT>(rhs) {} WpOLEAppendCollection& operator=(const WpOLEAppendCollection& rhs) {WpOLEBase<Ts>::operator=(rhs); return *this;}; bool Append(const WrapT& aWrapT) { - return SUCCEEDED(pInterface->Append(OLEVariant(static_cast<T*>(aWrapT)))); + return SUCCEEDED(pInterface->Append(OLEVariant(aWrapT))); }; bool Delete(const OUString& sName) @@ -219,6 +171,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AOLEWRAP_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/Awrapado.hxx b/connectivity/source/inc/ado/Awrapado.hxx index 4e52d13847cb..507b85522674 100644 --- a/connectivity/source/inc/ado/Awrapado.hxx +++ b/connectivity/source/inc/ado/Awrapado.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AWRAPADO_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AWRAPADO_HXX +#pragma once #include <sal/config.h> @@ -43,16 +42,15 @@ namespace connectivity::ado class WpADOError; class WpADOProperty; - typedef WpOLEAppendCollection< ADOFields, ADOField, WpADOField> WpADOFields; - typedef WpOLECollection< ADOProperties, ADOProperty, WpADOProperty> WpADOProperties; + typedef WpOLEAppendCollection< ADOFields, WpADOField> WpADOFields; + typedef WpOLECollection< ADOProperties, WpADOProperty> WpADOProperties; class WpADOConnection : public WpOLEBase<ADOConnection> { - friend class WpADOCommand; public: - WpADOConnection(ADOConnection* pInt) : WpOLEBase<ADOConnection>(pInt){} + WpADOConnection() = default; WpADOConnection(const WpADOConnection& rhs) : WpOLEBase<ADOConnection>(rhs) {} @@ -108,7 +106,7 @@ namespace connectivity::ado ADORecordset* getIndexInfo( const css::uno::Any& catalog, const OUString& schema, std::u16string_view table, bool unique, bool approximate ); ADORecordset* getTablePrivileges( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& tableNamePattern ); + std::u16string_view tableNamePattern ); ADORecordset* getCrossReference( const css::uno::Any& primaryCatalog, const OUString& primarySchema, std::u16string_view primaryTable, @@ -117,18 +115,18 @@ namespace connectivity::ado std::u16string_view foreignTable); ADORecordset* getProcedures( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& procedureNamePattern ); + std::u16string_view procedureNamePattern ); ADORecordset* getProcedureColumns( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& procedureNamePattern, - const OUString& columnNamePattern ); + std::u16string_view procedureNamePattern, + std::u16string_view columnNamePattern ); ADORecordset* getTables( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& tableNamePattern, + std::u16string_view tableNamePattern, const css::uno::Sequence< OUString >& types ); ADORecordset* getColumns( const css::uno::Any& catalog, const OUString& schemaPattern, - const OUString& tableNamePattern, + std::u16string_view tableNamePattern, std::u16string_view columnNamePattern ); ADORecordset* getColumnPrivileges( const css::uno::Any& catalog, const OUString& schemaPattern, @@ -141,11 +139,9 @@ namespace connectivity::ado class WpADOCommand : public WpOLEBase<ADOCommand> { public: - WpADOCommand(){} + WpADOCommand() = default; // Ctors, operator= // They only call the superclass - WpADOCommand(ADOCommand* pInt) : WpOLEBase<ADOCommand>(pInt){} - WpADOCommand(const WpADOCommand& rhs) : WpOLEBase<ADOCommand>(rhs) {} WpADOCommand& operator=(const WpADOCommand& rhs) @@ -153,7 +149,7 @@ namespace connectivity::ado WpOLEBase<ADOCommand>::operator=(rhs); return *this;} - bool putref_ActiveConnection( WpADOConnection *pCon); + bool putref_ActiveConnection(const WpADOConnection& rCon); void put_ActiveConnection(/* [in] */ const OLEVariant& vConn); void Create(); @@ -182,7 +178,7 @@ namespace connectivity::ado // Ctors, operator= // They only call the superclass - WpADOError(ADOError* pInt):WpOLEBase<ADOError>(pInt){} + WpADOError() = default; WpADOError(const WpADOError& rhs) : WpOLEBase<ADOError>(rhs) {} @@ -205,7 +201,7 @@ namespace connectivity::ado // Ctors, operator= // They only call the superclass - WpADOField(ADOField* pInt=nullptr):WpOLEBase<ADOField>(pInt){} + WpADOField() = default; WpADOField(const WpADOField& rhs) : WpOLEBase<ADOField>(rhs) {} WpADOField& operator=(const WpADOField& rhs) @@ -251,7 +247,7 @@ namespace connectivity::ado public: // Ctors, operator= // They only call the superclass - WpADOProperty(ADOProperty* pInt=nullptr):WpOLEBase<ADOProperty>(pInt){} + WpADOProperty() = default; WpADOProperty(const WpADOProperty& rhs) : WpOLEBase<ADOProperty>(rhs) {} WpADOProperty& operator=(const WpADOProperty& rhs) {WpOLEBase<ADOProperty>::operator=(rhs); return *this;} @@ -273,7 +269,7 @@ namespace connectivity::ado public: // Ctors, operator= // They only call the superclass - WpADORecordset(ADORecordset* pInt=nullptr):WpOLEBase<ADORecordset>(pInt){} + WpADORecordset() = default; WpADORecordset(const WpADORecordset& rhs) : WpOLEBase<ADORecordset>() {operator=(rhs);} WpADORecordset& operator=(const WpADORecordset& rhs) { @@ -333,7 +329,7 @@ namespace connectivity::ado public: // Ctors, operator= // They only call the superclass - WpADOParameter(ADOParameter* pInt):WpOLEBase<ADOParameter>(pInt){} + WpADOParameter() = default; WpADOParameter(const WpADOParameter& rhs):WpOLEBase<ADOParameter>(rhs){} WpADOParameter& operator=(const WpADOParameter& rhs) {WpOLEBase<ADOParameter>::operator=(rhs); return *this;} @@ -373,6 +369,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_AWRAPADO_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/Awrapadox.hxx b/connectivity/source/inc/ado/Awrapadox.hxx index 6bda5b4878d8..ba91422a1d09 100644 --- a/connectivity/source/inc/ado/Awrapadox.hxx +++ b/connectivity/source/inc/ado/Awrapadox.hxx @@ -89,7 +89,7 @@ namespace connectivity::ado class WpADOGroup : public WpOLEBase<ADOGroup> { public: - WpADOGroup(ADOGroup* pInt=nullptr) : WpOLEBase<ADOGroup>(pInt){} + WpADOGroup() = default; WpADOGroup(const WpADOGroup& rhs) : WpOLEBase<ADOGroup>(rhs) {} WpADOGroup& operator=(const WpADOGroup& rhs) @@ -113,7 +113,7 @@ namespace connectivity::ado class WpADOUser : public WpOLEBase<_ADOUser> { public: - WpADOUser(_ADOUser* pInt=nullptr) : WpOLEBase<_ADOUser>(pInt){} + WpADOUser() = default; WpADOUser(const WpADOUser& rhs) : WpOLEBase<_ADOUser>(rhs) {} WpADOUser& operator=(const WpADOUser& rhs) diff --git a/connectivity/source/inc/ado/WrapCatalog.hxx b/connectivity/source/inc/ado/WrapCatalog.hxx index 34834236b7dc..0bcff441c23a 100644 --- a/connectivity/source/inc/ado/WrapCatalog.hxx +++ b/connectivity/source/inc/ado/WrapCatalog.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPCATALOG_HXX +#pragma once #include <sal/config.h> @@ -48,6 +47,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPCATALOG_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/WrapColumn.hxx b/connectivity/source/inc/ado/WrapColumn.hxx index 096dcd326154..f1b73585fba9 100644 --- a/connectivity/source/inc/ado/WrapColumn.hxx +++ b/connectivity/source/inc/ado/WrapColumn.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPCOLUMN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPCOLUMN_HXX +#pragma once #include <sal/config.h> @@ -32,7 +31,7 @@ namespace connectivity::ado class WpADOColumn : public WpOLEBase<_ADOColumn> { public: - WpADOColumn(_ADOColumn* pInt=nullptr) : WpOLEBase<_ADOColumn>(pInt){} + WpADOColumn() = default; WpADOColumn(const WpADOColumn& rhs) : WpOLEBase<_ADOColumn>(rhs) {} void Create(); @@ -60,6 +59,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPCOLUMN_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/WrapIndex.hxx b/connectivity/source/inc/ado/WrapIndex.hxx index f4318c45873f..4444bb340ae5 100644 --- a/connectivity/source/inc/ado/WrapIndex.hxx +++ b/connectivity/source/inc/ado/WrapIndex.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPINDEX_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPINDEX_HXX +#pragma once #include <sal/config.h> @@ -30,7 +29,7 @@ namespace connectivity::ado class WpADOIndex : public WpOLEBase<_ADOIndex> { public: - WpADOIndex(_ADOIndex* pInt=nullptr) : WpOLEBase<_ADOIndex>(pInt){} + WpADOIndex() = default; WpADOIndex(const WpADOIndex& rhs) : WpOLEBase<_ADOIndex>(rhs) {} WpADOIndex& operator=(const WpADOIndex& rhs) @@ -50,6 +49,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPINDEX_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/WrapKey.hxx b/connectivity/source/inc/ado/WrapKey.hxx index 49969c41bb61..1f984445b8ae 100644 --- a/connectivity/source/inc/ado/WrapKey.hxx +++ b/connectivity/source/inc/ado/WrapKey.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPKEY_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPKEY_HXX +#pragma once #include <sal/config.h> @@ -30,7 +29,7 @@ namespace connectivity::ado class WpADOKey : public WpOLEBase<ADOKey> { public: - WpADOKey(ADOKey* pInt=nullptr) : WpOLEBase<ADOKey>(pInt){} + WpADOKey() = default; WpADOKey(const WpADOKey& rhs) : WpOLEBase<ADOKey>(rhs) {} WpADOKey& operator=(const WpADOKey& rhs) @@ -52,6 +51,4 @@ namespace connectivity::ado }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPKEY_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/WrapTable.hxx b/connectivity/source/inc/ado/WrapTable.hxx index 4119bfb58e3b..dc06dbc03a8e 100644 --- a/connectivity/source/inc/ado/WrapTable.hxx +++ b/connectivity/source/inc/ado/WrapTable.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPTABLE_HXX +#pragma once #include <sal/config.h> @@ -32,7 +31,7 @@ namespace connectivity::ado class WpADOTable : public WpOLEBase<_ADOTable> { public: - WpADOTable(_ADOTable* pInt=nullptr) : WpOLEBase<_ADOTable>(pInt){} + WpADOTable() = default; WpADOTable(const WpADOTable& rhs) : WpOLEBase<_ADOTable>(rhs) {} WpADOTable& operator=(const WpADOTable& rhs) @@ -52,9 +51,7 @@ namespace connectivity::ado }; - typedef WpOLEAppendCollection<ADOTables, _ADOTable, WpADOTable> WpADOTables; + typedef WpOLEAppendCollection<ADOTables, WpADOTable> WpADOTables; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPTABLE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/WrapTypeDefs.hxx b/connectivity/source/inc/ado/WrapTypeDefs.hxx index 991d0018e5d8..91bea8453480 100644 --- a/connectivity/source/inc/ado/WrapTypeDefs.hxx +++ b/connectivity/source/inc/ado/WrapTypeDefs.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPTYPEDEFS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPTYPEDEFS_HXX +#pragma once namespace connectivity::ado @@ -30,15 +29,13 @@ namespace connectivity::ado class WpADOView; class WpADOUser; - typedef WpOLEAppendCollection<ADOTables, _ADOTable, WpADOTable> WpADOTables; - typedef WpOLEAppendCollection<ADOKeys, ADOKey, WpADOKey> WpADOKeys; - typedef WpOLEAppendCollection<ADOIndexes, _ADOIndex, WpADOIndex> WpADOIndexes; - typedef WpOLEAppendCollection<ADOColumns, _ADOColumn, WpADOColumn> WpADOColumns; - typedef WpOLEAppendCollection<ADOGroups, ADOGroup, WpADOGroup> WpADOGroups; - typedef WpOLEAppendCollection<ADOViews, ADOView, WpADOView> WpADOViews; - typedef WpOLEAppendCollection<ADOUsers, _ADOUser, WpADOUser> WpADOUsers; + typedef WpOLEAppendCollection<ADOTables, WpADOTable> WpADOTables; + typedef WpOLEAppendCollection<ADOKeys, WpADOKey> WpADOKeys; + typedef WpOLEAppendCollection<ADOIndexes, WpADOIndex> WpADOIndexes; + typedef WpOLEAppendCollection<ADOColumns, WpADOColumn> WpADOColumns; + typedef WpOLEAppendCollection<ADOGroups, WpADOGroup> WpADOGroups; + typedef WpOLEAppendCollection<ADOViews, WpADOView> WpADOViews; + typedef WpOLEAppendCollection<ADOUsers, WpADOUser> WpADOUsers; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_WRAPTYPEDEFS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/ado/adoimp.hxx b/connectivity/source/inc/ado/adoimp.hxx index 5394aac3e4a0..60c6fd313d77 100644 --- a/connectivity/source/inc/ado/adoimp.hxx +++ b/connectivity/source/inc/ado/adoimp.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADOIMP_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADOIMP_HXX +#pragma once #include <com/sun/star/sdbc/SQLException.hpp> @@ -25,16 +24,17 @@ struct ADOConnection; +namespace sal::systools { class BStr; }; + namespace connectivity::ado { class WpADOField; - class OLEString; class ADOS { public: // Also here: Free BSTR with SysFreeString()! - static OLEString& GetKeyStr(); + static sal::systools::BStr& GetKeyStr(); static const CLSID CLSID_ADOCATALOG_25; static const IID IID_ADOCATALOG_25; @@ -96,10 +96,8 @@ namespace connectivity::ado if(aProp.IsValid()) \ aVar = aProp.GetValue(); \ else \ - ADOS::ThrowException(*m_pADOConnection,*this); - + ADOS::ThrowException(m_rADOConnection,*this); -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ADO_ADOIMP_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/calc/CTable.hxx b/connectivity/source/inc/calc/CTable.hxx index a8f49b661bc4..b4751fd876d7 100644 --- a/connectivity/source/inc/calc/CTable.hxx +++ b/connectivity/source/inc/calc/CTable.hxx @@ -64,10 +64,6 @@ namespace connectivity::calc virtual void SAL_CALL disposing() override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); - void construct() override; }; diff --git a/connectivity/source/inc/component/CColumns.hxx b/connectivity/source/inc/component/CColumns.hxx index 627372e14282..a63cae4bde6e 100644 --- a/connectivity/source/inc/component/CColumns.hxx +++ b/connectivity/source/inc/component/CColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CCOLUMNS_HXX +#pragma once #include <file/FColumns.hxx> @@ -40,6 +39,4 @@ namespace connectivity::component } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CCOLUMNS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/component/CDatabaseMetaData.hxx b/connectivity/source/inc/component/CDatabaseMetaData.hxx index 3f1d9ba7fd71..c4721ecadb9f 100644 --- a/connectivity/source/inc/component/CDatabaseMetaData.hxx +++ b/connectivity/source/inc/component/CDatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CDATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CDATABASEMETADATA_HXX +#pragma once #include <file/FDatabaseMetaData.hxx> @@ -45,6 +44,4 @@ namespace connectivity::component } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CDATABASEMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/component/CPreparedStatement.hxx b/connectivity/source/inc/component/CPreparedStatement.hxx index cd104abd68cd..d39a3edad136 100644 --- a/connectivity/source/inc/component/CPreparedStatement.hxx +++ b/connectivity/source/inc/component/CPreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CPREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CPREPAREDSTATEMENT_HXX +#pragma once #include <file/FPreparedStatement.hxx> @@ -29,7 +28,7 @@ namespace connectivity::component class OOO_DLLPUBLIC_FILE OComponentPreparedStatement : public file::OPreparedStatement { protected: - virtual file::OResultSet* createResultSet() override; + virtual rtl::Reference<file::OResultSet> createResultSet() override; public: OComponentPreparedStatement( file::OConnection* _pConnection) : file::OPreparedStatement( _pConnection){} DECLARE_SERVICE_INFO(); @@ -37,6 +36,4 @@ namespace connectivity::component } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CPREPAREDSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/component/CResultSet.hxx b/connectivity/source/inc/component/CResultSet.hxx index 4fc46dfe7417..4874f22151b6 100644 --- a/connectivity/source/inc/component/CResultSet.hxx +++ b/connectivity/source/inc/component/CResultSet.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CRESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CRESULTSET_HXX +#pragma once #include <file/FResultSet.hxx> #include <com/sun/star/sdbcx/XRowLocate.hpp> @@ -54,8 +53,8 @@ namespace connectivity::component private: // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -77,6 +76,4 @@ namespace connectivity::component } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CRESULTSET_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/component/CStatement.hxx b/connectivity/source/inc/component/CStatement.hxx index dd6bea02d0e1..10346e7c8559 100644 --- a/connectivity/source/inc/component/CStatement.hxx +++ b/connectivity/source/inc/component/CStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CSTATEMENT_HXX +#pragma once #include <file/FStatement.hxx> @@ -29,7 +28,7 @@ namespace connectivity::component class OOO_DLLPUBLIC_FILE OComponentStatement : public file::OStatement { protected: - virtual file::OResultSet* createResultSet() override; + virtual rtl::Reference<file::OResultSet> createResultSet() override; public: OComponentStatement( file::OConnection* _pConnection) : file::OStatement( _pConnection){} DECLARE_SERVICE_INFO(); @@ -37,6 +36,4 @@ namespace connectivity::component } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/component/CTable.hxx b/connectivity/source/inc/component/CTable.hxx index d4713b1f82f7..3ace6f922ae0 100644 --- a/connectivity/source/inc/component/CTable.hxx +++ b/connectivity/source/inc/component/CTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CTABLE_HXX +#pragma once #include <file/FTable.hxx> @@ -64,6 +63,4 @@ namespace connectivity::component } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_COMPONENT_CTABLE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DCatalog.hxx b/connectivity/source/inc/dbase/DCatalog.hxx index 553f7c2aa78b..f8954d012211 100644 --- a/connectivity/source/inc/dbase/DCatalog.hxx +++ b/connectivity/source/inc/dbase/DCatalog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCATALOG_HXX +#pragma once #include <file/FCatalog.hxx> @@ -35,6 +34,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCATALOG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DColumns.hxx b/connectivity/source/inc/dbase/DColumns.hxx index bb84e11fa102..dbbbbec90acc 100644 --- a/connectivity/source/inc/dbase/DColumns.hxx +++ b/connectivity/source/inc/dbase/DColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCOLUMNS_HXX +#pragma once #include <file/FColumns.hxx> @@ -39,8 +38,6 @@ namespace connectivity::dbase ) : file::OColumns(_pTable,_rMutex,_rVector) {} }; - } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCOLUMNS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DConnection.hxx b/connectivity/source/inc/dbase/DConnection.hxx index fb68d921f60e..864e9a22c870 100644 --- a/connectivity/source/inc/dbase/DConnection.hxx +++ b/connectivity/source/inc/dbase/DConnection.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCONNECTION_HXX +#pragma once #include <file/FConnection.hxx> @@ -43,6 +42,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DCONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DDatabaseMetaData.hxx b/connectivity/source/inc/dbase/DDatabaseMetaData.hxx index 7ec7545903ea..fed3fcc70ea9 100644 --- a/connectivity/source/inc/dbase/DDatabaseMetaData.hxx +++ b/connectivity/source/inc/dbase/DDatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DDATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DDATABASEMETADATA_HXX +#pragma once #include <file/FDatabaseMetaData.hxx> @@ -54,6 +53,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DDATABASEMETADATA_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DDriver.hxx b/connectivity/source/inc/dbase/DDriver.hxx index 99ee297361cd..310f9b1dc8d5 100644 --- a/connectivity/source/inc/dbase/DDriver.hxx +++ b/connectivity/source/inc/dbase/DDriver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DDRIVER_HXX +#pragma once #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <connectivity/CommonTools.hxx> @@ -43,6 +42,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DDRIVER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DIndex.hxx b/connectivity/source/inc/dbase/DIndex.hxx index 3d9e4b7dc923..3cc7da9ad1d3 100644 --- a/connectivity/source/inc/dbase/DIndex.hxx +++ b/connectivity/source/inc/dbase/DIndex.hxx @@ -17,14 +17,13 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEX_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEX_HXX +#pragma once #include <sdbcx/VIndex.hxx> #include <dbase/DTable.hxx> #include <dbase/dindexnode.hxx> -#define dBASE_III_GROUP "dBase III" +inline constexpr OString dBASE_III_GROUP = "dBase III"_ostr; namespace connectivity::dbase { @@ -35,7 +34,7 @@ namespace connectivity::dbase class ODbaseIndex : public ODbaseIndex_BASE { - friend SvStream& WriteODbaseIndex(SvStream &rStream, ODbaseIndex&); + friend SvStream& WriteODbaseIndex(SvStream &rStream, const ODbaseIndex&); friend SvStream& operator >> (SvStream &rStream, ODbaseIndex&); friend class ONDXNode; @@ -82,7 +81,7 @@ namespace connectivity::dbase OUString getCompletePath() const; void closeImpl(); // Closes and kills the index file and throws an error - void impl_killFileAndthrowError_throw(const char* pErrorId, const OUString& _sFile); + void impl_killFileAndthrowError_throw(TranslateId pErrorId, const OUString& _sFile); protected: virtual ~ODbaseIndex() override; public: @@ -92,10 +91,6 @@ namespace connectivity::dbase void openIndexFile(); virtual void refreshColumns() override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); - const ODbaseTable* getTable() const { return m_pTable; } const NDXHeader& getHeader() const { return m_aHeader; } std::unique_ptr<OIndexIterator> createIterator(); @@ -130,13 +125,11 @@ namespace connectivity::dbase bool ConvertToKey(ONDXKey* rKey, sal_uInt32 nRec, const ORowSetValue& rValue); }; - SvStream& WriteODbaseIndex(SvStream &rStream, ODbaseIndex&); + SvStream& WriteODbaseIndex(SvStream &rStream, const ODbaseIndex&); SvStream& operator >> (SvStream &rStream, ODbaseIndex&); void ReadHeader(SvStream & rStream, ODbaseIndex::NDXHeader & rHeader); } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEX_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DIndexColumns.hxx b/connectivity/source/inc/dbase/DIndexColumns.hxx index bf373d3dc633..8f7a895b95ad 100644 --- a/connectivity/source/inc/dbase/DIndexColumns.hxx +++ b/connectivity/source/inc/dbase/DIndexColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXCOLUMNS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <dbase/DIndex.hxx> @@ -45,7 +44,6 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXCOLUMNS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DIndexIter.hxx b/connectivity/source/inc/dbase/DIndexIter.hxx index 0b9323f6b342..2de327be1138 100644 --- a/connectivity/source/inc/dbase/DIndexIter.hxx +++ b/connectivity/source/inc/dbase/DIndexIter.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXITER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXITER_HXX +#pragma once #include <file/fcode.hxx> #include <dbase/DIndex.hxx> @@ -64,6 +63,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXITER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DIndexes.hxx b/connectivity/source/inc/dbase/DIndexes.hxx index 76962b2320c4..a5b1c27e67f2 100644 --- a/connectivity/source/inc/dbase/DIndexes.hxx +++ b/connectivity/source/inc/dbase/DIndexes.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXES_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <dbase/DTable.hxx> @@ -47,6 +46,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DPreparedStatement.hxx b/connectivity/source/inc/dbase/DPreparedStatement.hxx index 7ffa1bfa091e..a2a792f62342 100644 --- a/connectivity/source/inc/dbase/DPreparedStatement.hxx +++ b/connectivity/source/inc/dbase/DPreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DPREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DPREPAREDSTATEMENT_HXX +#pragma once #include <file/FPreparedStatement.hxx> @@ -28,7 +27,7 @@ namespace connectivity::dbase class ODbasePreparedStatement : public file::OPreparedStatement { protected: - virtual file::OResultSet* createResultSet() override; + virtual rtl::Reference<file::OResultSet> createResultSet() override; public: ODbasePreparedStatement( file::OConnection* _pConnection) : file::OPreparedStatement( _pConnection){} DECLARE_SERVICE_INFO(); @@ -36,6 +35,4 @@ namespace connectivity::dbase } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DPREPAREDSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DResultSet.hxx b/connectivity/source/inc/dbase/DResultSet.hxx index 1668a340b32a..106a63cbb842 100644 --- a/connectivity/source/inc/dbase/DResultSet.hxx +++ b/connectivity/source/inc/dbase/DResultSet.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DRESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DRESULTSET_HXX +#pragma once #include <file/FResultSet.hxx> #include <com/sun/star/sdbcx/XRowLocate.hpp> @@ -52,8 +51,8 @@ namespace connectivity::dbase // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -75,6 +74,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DRESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DStatement.hxx b/connectivity/source/inc/dbase/DStatement.hxx index defcf1c769a6..cb4b1d8e4a03 100644 --- a/connectivity/source/inc/dbase/DStatement.hxx +++ b/connectivity/source/inc/dbase/DStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DSTATEMENT_HXX +#pragma once #include <file/FStatement.hxx> @@ -28,7 +27,7 @@ namespace connectivity::dbase class ODbaseStatement : public file::OStatement { protected: - virtual file::OResultSet* createResultSet() override; + virtual rtl::Reference<file::OResultSet> createResultSet() override; public: ODbaseStatement( file::OConnection* _pConnection) : file::OStatement( _pConnection){} DECLARE_SERVICE_INFO(); @@ -36,6 +35,4 @@ namespace connectivity::dbase } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DTable.hxx b/connectivity/source/inc/dbase/DTable.hxx index 872b4d3d8c1b..bb0b6baa5fa2 100644 --- a/connectivity/source/inc/dbase/DTable.hxx +++ b/connectivity/source/inc/dbase/DTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DTABLE_HXX +#pragma once #include <file/FTable.hxx> #include <connectivity/CommonTools.hxx> @@ -116,7 +115,7 @@ namespace connectivity::dbase void copyData(ODbaseTable* _pNewTable,sal_Int32 _nPos); bool CreateFile(const INetURLObject& aFile, bool& bCreateMemo); bool CreateMemoFile(const INetURLObject& aFile); - bool HasMemoFields() const { return m_aHeader.type > dBaseIV;} + bool HasMemoFields() const; void ReadMemoHeader(); bool ReadMemo(std::size_t nBlockNo, ORowSetValue& aVariable); @@ -131,7 +130,7 @@ namespace connectivity::dbase /// @throws css::container::ElementExistException /// @throws css::uno::RuntimeException void renameImpl( const OUString& newName ); - void throwInvalidColumnType(const char* pErrorId, const OUString& _sColumnName); + void throwInvalidColumnType(TranslateId pErrorId, const OUString& _sColumnName); protected: virtual void FileClose() override; @@ -162,9 +161,6 @@ namespace connectivity::dbase virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; virtual void SAL_CALL disposing() override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); // XAlterTable virtual void SAL_CALL alterColumnByName( const OUString& colName, const css::uno::Reference< css::beans::XPropertySet >& descriptor ) override; virtual void SAL_CALL alterColumnByIndex( sal_Int32 index, const css::uno::Reference< css::beans::XPropertySet >& descriptor ) override; @@ -183,7 +179,7 @@ namespace connectivity::dbase virtual void dropColumn(sal_Int32 _nPos) override; static OUString getEntry(file::OConnection const * _pConnection, std::u16string_view _sURL ); - static bool Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, sdbcx::OCollection* _pIndexes ); + static bool Drop_Static(std::u16string_view _sUrl, bool _bHasMemoFields, sdbcx::OCollection* _pIndexes ); virtual void refreshHeader() override; @@ -191,6 +187,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DTABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/DTables.hxx b/connectivity/source/inc/dbase/DTables.hxx index b22721d798d2..c85a1ab3cd07 100644 --- a/connectivity/source/inc/dbase/DTables.hxx +++ b/connectivity/source/inc/dbase/DTables.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DTABLES_HXX +#pragma once #include <file/FTables.hxx> @@ -43,6 +42,5 @@ namespace connectivity::dbase }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DTABLES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/dbase/dindexnode.hxx b/connectivity/source/inc/dbase/dindexnode.hxx index 2b001de056f6..c1db23f76b60 100644 --- a/connectivity/source/inc/dbase/dindexnode.hxx +++ b/connectivity/source/inc/dbase/dindexnode.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXNODE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXNODE_HXX +#pragma once #include <file/fcode.hxx> #include <connectivity/FValue.hxx> @@ -45,7 +44,7 @@ namespace connectivity::dbase public: ONDXKey(); - ONDXKey(const ORowSetValue& rVal, sal_Int32 eType, sal_uInt32 nRec); + ONDXKey(ORowSetValue aVal, sal_Int32 eType, sal_uInt32 nRec); ONDXKey(const OUString& aStr, sal_uInt32 nRec); ONDXKey(double aVal, sal_uInt32 nRec); @@ -164,8 +163,8 @@ namespace connectivity::dbase const ODbaseIndex& GetIndex() const {return rIndex;} // Setting the child, via reference to retain the PagePos - void SetChild(ONDXPagePtr aCh); - void SetParent(ONDXPagePtr aPa); + void SetChild(const ONDXPagePtr& rCh); + void SetParent(const ONDXPagePtr& rPa); sal_uInt16 Search(const ONDXKey& rSearch); sal_uInt16 Search(const ONDXPage* pPage); @@ -210,14 +209,14 @@ namespace connectivity::dbase inline bool ONDXPage::HasParent() const {return aParent.Is();} inline const ONDXPagePtr& ONDXPage::GetParent() const {return aParent;} - inline void ONDXPage::SetParent(ONDXPagePtr aPa = ONDXPagePtr()) + inline void ONDXPage::SetParent(const ONDXPagePtr& rPa = ONDXPagePtr()) { - aParent = aPa; + aParent = rPa; } - inline void ONDXPage::SetChild(ONDXPagePtr aCh = ONDXPagePtr()) + inline void ONDXPage::SetChild(const ONDXPagePtr& rCh = ONDXPagePtr()) { - aChild = aCh; + aChild = rCh; if (aChild.Is()) aChild->SetParent(this); } @@ -247,7 +246,7 @@ namespace connectivity::dbase ONDXKey& GetKey() { return aKey;} // Setting the child, via reference to retain the PagePos - void SetChild(ONDXPagePtr aCh = ONDXPagePtr(), ONDXPage* = nullptr); + void SetChild(const ONDXPagePtr& rCh = ONDXPagePtr(), ONDXPage* = nullptr); void Write(SvStream &rStream, const ONDXPage& rPage) const; void Read(SvStream &rStream, ODbaseIndex const &); @@ -294,9 +293,9 @@ namespace connectivity::dbase return !operator > (rKey); } - inline void ONDXNode::SetChild(ONDXPagePtr aCh, ONDXPage* pParent) + inline void ONDXNode::SetChild(const ONDXPagePtr& rCh, ONDXPage* pParent) { - aChild = aCh; + aChild = rCh; if (aChild.Is()) aChild->SetParent(pParent); } @@ -304,7 +303,5 @@ namespace connectivity::dbase } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_DBASE_DINDEXNODE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FCatalog.hxx b/connectivity/source/inc/file/FCatalog.hxx index 89d1ac353136..2bcf82df2a57 100644 --- a/connectivity/source/inc/file/FCatalog.hxx +++ b/connectivity/source/inc/file/FCatalog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCATALOG_HXX +#pragma once #include <sdbcx/VCatalog.hxx> @@ -57,6 +56,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCATALOG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FColumns.hxx b/connectivity/source/inc/file/FColumns.hxx index 76bff286f301..056934f88c65 100644 --- a/connectivity/source/inc/file/FColumns.hxx +++ b/connectivity/source/inc/file/FColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCOLUMNS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -27,7 +26,7 @@ namespace connectivity::file { - class OOO_DLLPUBLIC_FILE OColumns : public sdbcx::OCollection + class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OColumns : public sdbcx::OCollection { protected: OFileTable* m_pTable; @@ -44,6 +43,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCOLUMNS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FConnection.hxx b/connectivity/source/inc/file/FConnection.hxx index 9fbe65dfee47..e6412992ab77 100644 --- a/connectivity/source/inc/file/FConnection.hxx +++ b/connectivity/source/inc/file/FConnection.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCONNECTION_HXX +#pragma once #include <com/sun/star/ucb/XContent.hpp> #include <com/sun/star/beans/PropertyValue.hpp> @@ -99,7 +98,7 @@ namespace connectivity::file virtual void SAL_CALL clearWarnings( ) override; //XUnoTunnel virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); + static const css::uno::Sequence< sal_Int8 > & getUnoTunnelId(); // no interface methods css::uno::Reference< css::ucb::XDynamicResultSet > getDir() const; @@ -128,6 +127,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FDatabaseMetaData.hxx b/connectivity/source/inc/file/FDatabaseMetaData.hxx index 238bfe81b2c3..5c766c31d1f4 100644 --- a/connectivity/source/inc/file/FDatabaseMetaData.hxx +++ b/connectivity/source/inc/file/FDatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDATABASEMETADATA_HXX +#pragma once #include <TDatabaseMetaDataBase.hxx> #include <file/FConnection.hxx> @@ -183,6 +182,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDATABASEMETADATA_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FDateFunctions.hxx b/connectivity/source/inc/file/FDateFunctions.hxx index 155588438fe2..e8eb12d0cf24 100644 --- a/connectivity/source/inc/file/FDateFunctions.hxx +++ b/connectivity/source/inc/file/FDateFunctions.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDATEFUNCTIONS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDATEFUNCTIONS_HXX +#pragma once #include <file/fcode.hxx> @@ -226,6 +225,4 @@ namespace connectivity::file } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDATEFUNCTIONS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FDriver.hxx b/connectivity/source/inc/file/FDriver.hxx index 109d0940c7b3..0351c59ca27a 100644 --- a/connectivity/source/inc/file/FDriver.hxx +++ b/connectivity/source/inc/file/FDriver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDRIVER_HXX +#pragma once #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -43,7 +42,7 @@ namespace connectivity::file // for this Driver css::uno::Reference< css::uno::XComponentContext > m_xContext; public: - OFileDriver(const css::uno::Reference< css::uno::XComponentContext >& _rxContext); + OFileDriver(css::uno::Reference< css::uno::XComponentContext > _xContext); // OComponentHelper virtual void SAL_CALL disposing() override; @@ -68,7 +67,6 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FDRIVER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FNumericFunctions.hxx b/connectivity/source/inc/file/FNumericFunctions.hxx index 3dea7ab98111..765f2cde8223 100644 --- a/connectivity/source/inc/file/FNumericFunctions.hxx +++ b/connectivity/source/inc/file/FNumericFunctions.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FNUMERICFUNCTIONS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FNUMERICFUNCTIONS_HXX +#pragma once #include <file/fcode.hxx> @@ -360,6 +359,4 @@ namespace connectivity::file } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FNUMERICFUNCTIONS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FPreparedStatement.hxx b/connectivity/source/inc/file/FPreparedStatement.hxx index d8e86a3f49cf..f83d74a6d065 100644 --- a/connectivity/source/inc/file/FPreparedStatement.hxx +++ b/connectivity/source/inc/file/FPreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FPREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FPREPAREDSTATEMENT_HXX +#pragma once #include <file/filedllapi.hxx> #include <file/FStatement.hxx> @@ -48,7 +47,7 @@ namespace connectivity::file ::rtl::Reference<connectivity::OSQLColumns> m_xParamColumns; // the parameter columns // factory method for resultset's - virtual OResultSet* createResultSet() override; + virtual rtl::Reference<OResultSet> createResultSet() override; ::rtl::Reference< OResultSet > makeResultSet(); void initResultSet(OResultSet*); @@ -76,8 +75,8 @@ namespace connectivity::file virtual void SAL_CALL disposing() override; //XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; @@ -117,7 +116,6 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FPREPAREDSTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FResultSet.hxx b/connectivity/source/inc/file/FResultSet.hxx index e6c85e0c5cf3..0870593e6388 100644 --- a/connectivity/source/inc/file/FResultSet.hxx +++ b/connectivity/source/inc/file/FResultSet.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FRESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FRESULTSET_HXX +#pragma once #include <com/sun/star/sdbc/XResultSet.hpp> #include <com/sun/star/sdbc/XRow.hpp> @@ -41,6 +40,7 @@ #include <TSortIndex.hxx> #include <TSkipDeletedSet.hxx> #include <com/sun/star/lang/XEventListener.hpp> +#include <o3tl/safeint.hxx> namespace connectivity::file { @@ -54,10 +54,9 @@ namespace connectivity::file css::sdbc::XCloseable, css::sdbc::XColumnLocate, css::lang::XServiceInfo, - css::lang::XEventListener, - css::lang::XUnoTunnel> OResultSet_BASE; + css::lang::XEventListener> OResultSet_BASE; - class OOO_DLLPUBLIC_FILE OResultSet : + class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OResultSet : public cppu::BaseMutex, public ::connectivity::IResultSetHelper, public OResultSet_BASE, @@ -164,8 +163,8 @@ namespace connectivity::file virtual void SAL_CALL disposing() override final; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -246,9 +245,6 @@ namespace connectivity::file virtual void SAL_CALL updateNumericObject( sal_Int32 columnIndex, const css::uno::Any& x, sal_Int32 scale ) override; // XColumnLocate virtual sal_Int32 SAL_CALL findColumn( const OUString& columnName ) override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); //XEventlistener virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override; @@ -266,11 +262,11 @@ namespace connectivity::file m_aSelectRow = _rRow; m_nColumnCount = m_aSelectRow->size(); } - void setColumnMapping(const std::vector<sal_Int32>& _aColumnMapping) { m_aColMapping = _aColumnMapping; } + void setColumnMapping(std::vector<sal_Int32>&& _aColumnMapping) { m_aColMapping = std::move(_aColumnMapping); } void setSqlAnalyzer(OSQLAnalyzer* _pSQLAnalyzer) { m_pSQLAnalyzer = _pSQLAnalyzer; } - void setOrderByColumns(const std::vector<sal_Int32>& _aColumnOrderBy) { m_aOrderbyColumnNumber = _aColumnOrderBy; } - void setOrderByAscending(const std::vector<TAscendingOrder>& _aOrderbyAsc) { m_aOrderbyAscending = _aOrderbyAsc; } + void setOrderByColumns(std::vector<sal_Int32>&& _aColumnOrderBy) { m_aOrderbyColumnNumber = std::move(_aColumnOrderBy); } + void setOrderByAscending(std::vector<TAscendingOrder>&& _aOrderbyAsc) { m_aOrderbyAscending = std::move(_aOrderbyAsc); } void setMetaData(const css::uno::Reference< css::sdbc::XResultSetMetaData>& _xMetaData) { m_xMetaData = _xMetaData;} static void setBoundedColumns(const OValueRefRow& _rRow, @@ -293,14 +289,13 @@ namespace connectivity::file OSL_ENSURE(column > 0, "file::OResultSet::mapColumn: invalid column index!"); // the first column (index 0) is for convenience only. The first real select column is number 1. - if ((column > 0) && (column < static_cast<sal_Int32>(m_aColMapping.size()))) + if ((column > 0) && (o3tl::make_unsigned(column) < m_aColMapping.size())) map = m_aColMapping[column]; return map; } } -#endif // _CONNECTIVITY_FILE_ORESULTSET_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FResultSetMetaData.hxx b/connectivity/source/inc/file/FResultSetMetaData.hxx index ed55d269b82c..dee656a915f4 100644 --- a/connectivity/source/inc/file/FResultSetMetaData.hxx +++ b/connectivity/source/inc/file/FResultSetMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FRESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FRESULTSETMETADATA_HXX +#pragma once #include <com/sun/star/sdbc/XResultSetMetaData.hpp> #include <cppuhelper/implbase.hxx> @@ -47,7 +46,7 @@ namespace connectivity::file virtual ~OResultSetMetaData() override; public: // a Constructor, that is needed for when Returning the Object is needed: - OResultSetMetaData(const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns,const OUString& _aTableName,OFileTable* _pTable); + OResultSetMetaData(::rtl::Reference<connectivity::OSQLColumns> _xColumns, OUString _aTableName, OFileTable* _pTable); virtual sal_Int32 SAL_CALL getColumnCount( ) override; virtual sal_Bool SAL_CALL isAutoIncrement( sal_Int32 column ) override; @@ -73,7 +72,6 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FRESULTSETMETADATA_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FStatement.hxx b/connectivity/source/inc/file/FStatement.hxx index 93063d460794..57ce0a2fc0de 100644 --- a/connectivity/source/inc/file/FStatement.hxx +++ b/connectivity/source/inc/file/FStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FSTATEMENT_HXX +#pragma once #include <com/sun/star/sdbc/XStatement.hpp> #include <com/sun/star/sdbc/XWarningsSupplier.hpp> @@ -96,7 +95,7 @@ namespace connectivity::file // initialize the column index map (mapping select columns to table columns) void createColumnMapping(); // searches the statement for sort criteria - void anylizeSQL(); + void analyzeSQL(); void setOrderbyColumn( connectivity::OSQLParseNode const * pColumnRef, connectivity::OSQLParseNode const * pAscendingDescending); @@ -117,7 +116,7 @@ namespace connectivity::file virtual void parseParamterElem(const OUString& _sColumnName,OSQLParseNode* pRow_Value_Constructor_Elem); // factory method for resultset's - virtual OResultSet* createResultSet() = 0; + virtual rtl::Reference<OResultSet> createResultSet() = 0; // OPropertyArrayUsageHelper virtual ::cppu::IPropertyArrayHelper* createArrayHelper( ) const override; // OPropertySetHelper @@ -140,7 +139,7 @@ namespace connectivity::file virtual void SAL_CALL disposing() override; // XInterface // virtual void SAL_CALL release() throw(css::uno::RuntimeException) = 0; - virtual void SAL_CALL acquire() throw() override; + virtual void SAL_CALL acquire() noexcept override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider @@ -165,7 +164,7 @@ namespace connectivity::file // OComponentHelper virtual void SAL_CALL disposing() override; // XInterface - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL release() noexcept override; }; typedef ::cppu::ImplHelper2< css::sdbc::XStatement,css::lang::XServiceInfo > OStatement_XStatement; @@ -175,15 +174,15 @@ namespace connectivity::file { protected: // factory method for resultset's - virtual OResultSet* createResultSet() override; + virtual rtl::Reference<OResultSet> createResultSet() override; public: // a Constructor, that is needed for when Returning the Object is needed: OStatement( OConnection* _pConnection) : OStatement_BASE2( _pConnection){} DECLARE_SERVICE_INFO(); virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; // XStatement virtual css::uno::Reference< css::sdbc::XResultSet > SAL_CALL executeQuery( const OUString& sql ) override ; @@ -193,6 +192,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FSTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FStringFunctions.hxx b/connectivity/source/inc/file/FStringFunctions.hxx index 70dabe3e1d92..b3d72294fa68 100644 --- a/connectivity/source/inc/file/FStringFunctions.hxx +++ b/connectivity/source/inc/file/FStringFunctions.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FSTRINGFUNCTIONS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FSTRINGFUNCTIONS_HXX +#pragma once #include <file/fcode.hxx> @@ -267,6 +266,4 @@ namespace connectivity::file } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FSTRINGFUNCTIONS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FTable.hxx b/connectivity/source/inc/file/FTable.hxx index 2d3622fd7d78..d8bbd92d6c85 100644 --- a/connectivity/source/inc/file/FTable.hxx +++ b/connectivity/source/inc/file/FTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FTABLE_HXX +#pragma once #include <connectivity/sdbcx/VTable.hxx> #include <file/FConnection.hxx> @@ -84,10 +83,6 @@ namespace connectivity::file const OUString& getSchema() const { return m_SchemaName; } bool isReadOnly() const { return !m_bWriteable; } // m_pFileStream && !m_pFileStream->IsWritable(); } - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); - sal_Int32 getFilePos() const { return m_nFilePos; } @@ -100,6 +95,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FTABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/FTables.hxx b/connectivity/source/inc/file/FTables.hxx index 0041c65e3ab6..9d14c3627916 100644 --- a/connectivity/source/inc/file/FTables.hxx +++ b/connectivity/source/inc/file/FTables.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FTABLES_HXX +#pragma once #include <file/filedllapi.hxx> #include <connectivity/sdbcx/VCollection.hxx> @@ -41,6 +40,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FTABLES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/fanalyzer.hxx b/connectivity/source/inc/file/fanalyzer.hxx index 6375c71108d3..f913529d268e 100644 --- a/connectivity/source/inc/file/fanalyzer.hxx +++ b/connectivity/source/inc/file/fanalyzer.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FANALYZER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FANALYZER_HXX +#pragma once #include <file/fcomp.hxx> @@ -67,6 +66,5 @@ namespace connectivity::file }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FANALYZER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/fcode.hxx b/connectivity/source/inc/file/fcode.hxx index 6a6feb412844..541377c7dd5f 100644 --- a/connectivity/source/inc/file/fcode.hxx +++ b/connectivity/source/inc/file/fcode.hxx @@ -17,15 +17,16 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCODE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCODE_HXX +#pragma once +#include <config_options.h> #include <connectivity/sqliterator.hxx> #include <com/sun/star/sdbc/DataType.hpp> #include <connectivity/FValue.hxx> #include <file/filedllapi.hxx> #include <stack> +#include <utility> namespace connectivity { @@ -36,7 +37,7 @@ namespace connectivity class OOperand; typedef std::stack<OOperand*> OCodeStack; - class OOO_DLLPUBLIC_FILE OCode + class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OCode { public: //virtual dtor to allow this to be the root of the class hierarchy @@ -97,7 +98,7 @@ namespace connectivity class OOperandParam : public OOperandRow { public: - OOperandParam(connectivity::OSQLParseNode const * pNode, sal_Int32 _nPos); + OOperandParam(sal_Int32 _nPos); }; // Value operands @@ -108,9 +109,9 @@ namespace connectivity protected: OOperandValue(){} - OOperandValue(const ORowSetValue& _rVar, sal_Int32 eDbType) + OOperandValue(ORowSetValue _aVar, sal_Int32 eDbType) : OOperand(eDbType) - , m_aValue(_rVar) + , m_aValue(std::move(_aVar)) {} OOperandValue(sal_Int32 eDbType) :OOperand(eDbType){} @@ -244,7 +245,7 @@ namespace connectivity virtual bool operate(const OOperand*, const OOperand*) const override; }; - class OOO_DLLPUBLIC_FILE OOp_COMPARE : public OBoolOperator + class UNLESS_MERGELIBS_MORE(OOO_DLLPUBLIC_FILE) OOp_COMPARE : public OBoolOperator { sal_Int32 aPredicateType; @@ -328,6 +329,4 @@ namespace connectivity } } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCODE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/fcomp.hxx b/connectivity/source/inc/file/fcomp.hxx index f43b05374b60..72afcdb0a84e 100644 --- a/connectivity/source/inc/file/fcomp.hxx +++ b/connectivity/source/inc/file/fcomp.hxx @@ -16,10 +16,10 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCOMP_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCOMP_HXX +#pragma once #include <file/fcode.hxx> +#include <utility> namespace connectivity { @@ -87,7 +87,7 @@ namespace connectivity ::rtl::Reference<OPredicateCompiler> m_rCompiler; public: - OPredicateInterpreter(const ::rtl::Reference<OPredicateCompiler>& rComp) : m_rCompiler(rComp){} + OPredicateInterpreter(::rtl::Reference<OPredicateCompiler> xComp) : m_rCompiler(std::move(xComp)){} virtual ~OPredicateInterpreter() override; bool evaluate(OCodeList& rCodeList); @@ -107,6 +107,5 @@ namespace connectivity }; } } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FCOMP_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/filedllapi.hxx b/connectivity/source/inc/file/filedllapi.hxx index 7bc8ed0ce0e7..e32f5f17cb05 100644 --- a/connectivity/source/inc/file/filedllapi.hxx +++ b/connectivity/source/inc/file/filedllapi.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FILEDLLAPI_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_FILEDLLAPI_HXX +#pragma once #include <sal/config.h> @@ -30,6 +29,4 @@ #define OOO_DLLPUBLIC_FILE SAL_DLLPUBLIC_IMPORT #endif -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/file/quotedstring.hxx b/connectivity/source/inc/file/quotedstring.hxx index 8d80d15f0319..7c6becc37feb 100644 --- a/connectivity/source/inc/file/quotedstring.hxx +++ b/connectivity/source/inc/file/quotedstring.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_QUOTEDSTRING_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_QUOTEDSTRING_HXX +#pragma once #include <rtl/ustring.hxx> #include <file/filedllapi.hxx> @@ -44,6 +43,4 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FILE_QUOTEDSTRING_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/ECatalog.hxx b/connectivity/source/inc/flat/ECatalog.hxx index 2998f26defef..d1252e464cfa 100644 --- a/connectivity/source/inc/flat/ECatalog.hxx +++ b/connectivity/source/inc/flat/ECatalog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECATALOG_HXX +#pragma once #include <file/FCatalog.hxx> @@ -35,6 +34,5 @@ namespace connectivity::flat }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECATALOG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/EColumns.hxx b/connectivity/source/inc/flat/EColumns.hxx index 88cf069bfa85..d25f79aae240 100644 --- a/connectivity/source/inc/flat/EColumns.hxx +++ b/connectivity/source/inc/flat/EColumns.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECOLUMNS_HXX +#pragma once #include <file/FColumns.hxx> @@ -38,6 +37,5 @@ namespace connectivity::flat }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECOLUMNS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/EConnection.hxx b/connectivity/source/inc/flat/EConnection.hxx index d6d179362684..be7c3596d4d9 100644 --- a/connectivity/source/inc/flat/EConnection.hxx +++ b/connectivity/source/inc/flat/EConnection.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ECONNECTION_HXX +#pragma once #include <file/FConnection.hxx> @@ -59,6 +58,5 @@ namespace connectivity::flat }; } -#endif // _CONNECTIVITY_FLAT_DCONNECTION_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/EDatabaseMetaData.hxx b/connectivity/source/inc/flat/EDatabaseMetaData.hxx index 73793a71d1f9..bd6ce7758162 100644 --- a/connectivity/source/inc/flat/EDatabaseMetaData.hxx +++ b/connectivity/source/inc/flat/EDatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_EDATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_EDATABASEMETADATA_HXX +#pragma once #include <file/FDatabaseMetaData.hxx> @@ -41,6 +40,5 @@ namespace connectivity::flat }; } -#endif // _CONNECTIVITY_FLAT_ODATABASEMETADATA_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/EDriver.hxx b/connectivity/source/inc/flat/EDriver.hxx index b64b52c5e35d..7ed2718f2014 100644 --- a/connectivity/source/inc/flat/EDriver.hxx +++ b/connectivity/source/inc/flat/EDriver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_EDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_EDRIVER_HXX +#pragma once #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <connectivity/CommonTools.hxx> @@ -42,6 +41,5 @@ namespace connectivity::flat }; } -#endif //_CONNECTIVITY_FLAT_DDRIVER_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/EPreparedStatement.hxx b/connectivity/source/inc/flat/EPreparedStatement.hxx index 216051d168a9..ca164be8d5ba 100644 --- a/connectivity/source/inc/flat/EPreparedStatement.hxx +++ b/connectivity/source/inc/flat/EPreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_EPREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_EPREPAREDSTATEMENT_HXX +#pragma once #include <file/FPreparedStatement.hxx> @@ -28,7 +27,7 @@ namespace connectivity::flat class OFlatPreparedStatement : public file::OPreparedStatement { protected: - virtual file::OResultSet* createResultSet() override; + virtual rtl::Reference<file::OResultSet> createResultSet() override; public: OFlatPreparedStatement( file::OConnection* _pConnection) : file::OPreparedStatement( _pConnection){} DECLARE_SERVICE_INFO(); @@ -36,6 +35,4 @@ namespace connectivity::flat } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_EPREPAREDSTATEMENT_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/EResultSet.hxx b/connectivity/source/inc/flat/EResultSet.hxx index 3f38dfc054e1..8d99ed55da04 100644 --- a/connectivity/source/inc/flat/EResultSet.hxx +++ b/connectivity/source/inc/flat/EResultSet.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ERESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ERESULTSET_HXX +#pragma once #include <file/FResultSet.hxx> #include <com/sun/star/sdbcx/XRowLocate.hpp> @@ -50,8 +49,8 @@ namespace connectivity::flat // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -67,6 +66,5 @@ namespace connectivity::flat }; } -#endif //_CONNECTIVITY_FLAT_DRESULTSET_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/EStatement.hxx b/connectivity/source/inc/flat/EStatement.hxx index add447e5dabc..d30bfc70977f 100644 --- a/connectivity/source/inc/flat/EStatement.hxx +++ b/connectivity/source/inc/flat/EStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ESTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ESTATEMENT_HXX +#pragma once #include <file/FStatement.hxx> @@ -28,7 +27,7 @@ namespace connectivity::flat class OFlatStatement : public file::OStatement { protected: - virtual file::OResultSet* createResultSet() override; + virtual rtl::Reference<file::OResultSet> createResultSet() override; public: OFlatStatement( file::OConnection* _pConnection) : file::OStatement( _pConnection){} DECLARE_SERVICE_INFO(); @@ -36,6 +35,4 @@ namespace connectivity::flat } -#endif //_CONNECTIVITY_FLAT_DSTATEMENT_HXX_ - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/ETable.hxx b/connectivity/source/inc/flat/ETable.hxx index eeec70199f6e..99359edfddaa 100644 --- a/connectivity/source/inc/flat/ETable.hxx +++ b/connectivity/source/inc/flat/ETable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ETABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ETABLE_HXX +#pragma once #include <file/FTable.hxx> #include <flat/EConnection.hxx> @@ -93,14 +92,9 @@ namespace connectivity::flat virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; virtual void SAL_CALL disposing() override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); - OUString getEntry() const; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ETABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/flat/ETables.hxx b/connectivity/source/inc/flat/ETables.hxx index 4a00c5133eaf..cb9b032dbc45 100644 --- a/connectivity/source/inc/flat/ETables.hxx +++ b/connectivity/source/inc/flat/ETables.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ETABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ETABLES_HXX +#pragma once #include <file/FTables.hxx> @@ -37,6 +36,5 @@ namespace connectivity::flat }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_FLAT_ETABLES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HCatalog.hxx b/connectivity/source/inc/hsqldb/HCatalog.hxx index b7cce48fee9e..8d1da42de111 100644 --- a/connectivity/source/inc/hsqldb/HCatalog.hxx +++ b/connectivity/source/inc/hsqldb/HCatalog.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCATALOG_HXX +#pragma once #include <sdbcx/VCatalog.hxx> @@ -57,6 +56,5 @@ namespace connectivity::hsqldb }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCATALOG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HColumns.hxx b/connectivity/source/inc/hsqldb/HColumns.hxx index 111a0c3aa81c..c27645f45891 100644 --- a/connectivity/source/inc/hsqldb/HColumns.hxx +++ b/connectivity/source/inc/hsqldb/HColumns.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCOLUMNS_HXX +#pragma once #include <connectivity/TColumnsHelper.hxx> #include <connectivity/sdbcx/VColumn.hxx> @@ -53,6 +52,5 @@ namespace connectivity::hsqldb }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCOLUMNS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HConnection.hxx b/connectivity/source/inc/hsqldb/HConnection.hxx index 78bcfe26eaf1..6e2a54c9ce85 100644 --- a/connectivity/source/inc/hsqldb/HConnection.hxx +++ b/connectivity/source/inc/hsqldb/HConnection.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCONNECTION_HXX +#pragma once #include <connectivity/ConnectionWrapper.hxx> #include <com/sun/star/util/XFlushable.hpp> @@ -139,6 +138,5 @@ namespace connectivity::hsqldb }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HCONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HDriver.hxx b/connectivity/source/inc/hsqldb/HDriver.hxx index 9727d38cb3b0..0dda7e5e0fa2 100644 --- a/connectivity/source/inc/hsqldb/HDriver.hxx +++ b/connectivity/source/inc/hsqldb/HDriver.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HDRIVER_HXX +#pragma once #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/sdbcx/XDataDefinitionSupplier.hpp> @@ -121,6 +120,4 @@ namespace connectivity::hsqldb } // namespace connectivity::hsqldb -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HDRIVER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HStorageAccess.hxx b/connectivity/source/inc/hsqldb/HStorageAccess.hxx index feab18e412c6..5a49162c2e6b 100644 --- a/connectivity/source/inc/hsqldb/HStorageAccess.hxx +++ b/connectivity/source/inc/hsqldb/HStorageAccess.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HSTORAGEACCESS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HSTORAGEACCESS_HXX +#pragma once #include <sal/config.h> @@ -41,6 +40,4 @@ jint read_from_storage_stream_into_buffer( JNIEnv * env, jstring name, jstring k void write_to_storage_stream_from_buffer( JNIEnv* env, jstring name, jstring key, jbyteArray buffer, jint off, jint len ); void write_to_storage_stream( JNIEnv* env, jstring name, jstring key, jint v ); -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HSTORAGEACCESS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HStorageMap.hxx b/connectivity/source/inc/hsqldb/HStorageMap.hxx index 15aecc02cfe4..1186c680ac07 100644 --- a/connectivity/source/inc/hsqldb/HStorageMap.hxx +++ b/connectivity/source/inc/hsqldb/HStorageMap.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HSTORAGEMAP_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HSTORAGEMAP_HXX +#pragma once #include <sal/config.h> @@ -87,7 +86,7 @@ namespace connectivity::hsqldb static TStreamMap::mapped_type getRegisteredStream( JNIEnv * env, jstring name, jstring key); static OUString jstring2ustring(JNIEnv * env, jstring jstr); - static OUString removeURLPrefix(const OUString& _sURL,const OUString& _sFileURL); + static OUString removeURLPrefix(std::u16string_view _sURL, std::u16string_view _sFileURL); static OUString removeOldURLPrefix(const OUString& _sURL); static void throwJavaException(const css::uno::Exception& _aException,JNIEnv * env); }; @@ -95,6 +94,4 @@ namespace connectivity::hsqldb } // namespace connectivity::hsqldb -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HSTORAGEMAP_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HTable.hxx b/connectivity/source/inc/hsqldb/HTable.hxx index ff947cbf484c..d6ac5ced7646 100644 --- a/connectivity/source/inc/hsqldb/HTable.hxx +++ b/connectivity/source/inc/hsqldb/HTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTABLE_HXX +#pragma once #include <sal/config.h> @@ -86,9 +85,6 @@ namespace connectivity::hsqldb // ODescriptor virtual void construct() override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider @@ -112,6 +108,5 @@ namespace connectivity::hsqldb }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HTables.hxx b/connectivity/source/inc/hsqldb/HTables.hxx index fea00f37f095..bff5e0e6421a 100644 --- a/connectivity/source/inc/hsqldb/HTables.hxx +++ b/connectivity/source/inc/hsqldb/HTables.hxx @@ -16,11 +16,11 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTABLES_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +#include <utility> namespace connectivity::hsqldb { class OTables final : public sdbcx::OCollection @@ -36,9 +36,9 @@ namespace connectivity::hsqldb void createTable( const css::uno::Reference< css::beans::XPropertySet >& descriptor ); virtual OUString getNameForObject(const sdbcx::ObjectType& _xObject) override; public: - OTables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, + OTables(css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData, ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector< OUString> &_rVector) : sdbcx::OCollection(_rParent, true, _rMutex, _rVector) - ,m_xMetaData(_rMetaData) + ,m_xMetaData(std::move(_xMetaData)) {} // only the name is identical to ::cppu::OComponentHelper @@ -49,6 +49,5 @@ namespace connectivity::hsqldb }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTABLES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HTools.hxx b/connectivity/source/inc/hsqldb/HTools.hxx index be30e8e281ee..a847b2d9a589 100644 --- a/connectivity/source/inc/hsqldb/HTools.hxx +++ b/connectivity/source/inc/hsqldb/HTools.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTOOLS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTOOLS_HXX +#pragma once #include <rtl/ustrbuf.hxx> @@ -37,8 +36,8 @@ namespace connectivity::hsqldb have the short form (TABLE_CAT instead of TABLE_CATALOG, and so on) */ static void appendTableFilterCrit( - OUStringBuffer& _inout_rBuffer, const OUString& _rCatalog, - const OUString& _rSchema, const OUString& _rName, + OUStringBuffer& _inout_rBuffer, std::u16string_view _rCatalog, + std::u16string_view _rSchema, std::u16string_view _rName, bool _bShortForm ); }; @@ -47,6 +46,4 @@ namespace connectivity::hsqldb } // namespace connectivity::hsqldb -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HTOOLS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HUser.hxx b/connectivity/source/inc/hsqldb/HUser.hxx index 935209b1a669..67c44e185bd2 100644 --- a/connectivity/source/inc/hsqldb/HUser.hxx +++ b/connectivity/source/inc/hsqldb/HUser.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HUSER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HUSER_HXX +#pragma once #include <sdbcx/VUser.hxx> #include <com/sun/star/sdbc/XConnection.hpp> @@ -39,8 +38,8 @@ namespace connectivity::hsqldb public: virtual void refreshGroups() override; public: - OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection); - OHSQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection,const OUString& Name); + OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection); + OHSQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection, const OUString& Name); // XUser virtual void SAL_CALL changePassword( const OUString& objPassword, const OUString& newPassword ) override; @@ -70,6 +69,5 @@ namespace connectivity::hsqldb }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HUSER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HUsers.hxx b/connectivity/source/inc/hsqldb/HUsers.hxx index 392b3412a39b..a5a099e9927e 100644 --- a/connectivity/source/inc/hsqldb/HUsers.hxx +++ b/connectivity/source/inc/hsqldb/HUsers.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HUSERS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HUSERS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XConnection.hpp> @@ -44,12 +43,10 @@ namespace connectivity OUsers( ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector< OUString> &_rVector, - const css::uno::Reference< css::sdbc::XConnection >& _xConnection, + css::uno::Reference< css::sdbc::XConnection > _xConnection, connectivity::sdbcx::IRefreshableUsers* _pParent); }; } } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HUSERS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HView.hxx b/connectivity/source/inc/hsqldb/HView.hxx index 3e158c753d1b..62e8e5f4568a 100644 --- a/connectivity/source/inc/hsqldb/HView.hxx +++ b/connectivity/source/inc/hsqldb/HView.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HVIEW_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HVIEW_HXX +#pragma once #include <connectivity/sdbcx/VView.hxx> @@ -86,6 +85,4 @@ namespace connectivity::hsqldb } // namespace connectivity::hsqldb -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HVIEW_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/hsqldb/HViews.hxx b/connectivity/source/inc/hsqldb/HViews.hxx index 05357324969c..cb2041524ecc 100644 --- a/connectivity/source/inc/hsqldb/HViews.hxx +++ b/connectivity/source/inc/hsqldb/HViews.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HVIEWS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HVIEWS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> @@ -48,6 +47,5 @@ namespace connectivity::hsqldb }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_HSQLDB_HVIEWS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/ContextClassLoader.hxx b/connectivity/source/inc/java/ContextClassLoader.hxx index dea3fb58b50a..e7079239aa05 100644 --- a/connectivity/source/inc/java/ContextClassLoader.hxx +++ b/connectivity/source/inc/java/ContextClassLoader.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_CONTEXTCLASSLOADER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_CONTEXTCLASSLOADER_HXX +#pragma once #include <java/GlobalRef.hxx> @@ -77,6 +76,4 @@ namespace connectivity::jdbc } // namespace connectivity::jdbc -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_CONTEXTCLASSLOADER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/GlobalRef.hxx b/connectivity/source/inc/java/GlobalRef.hxx index 80888cb48810..1a97bfb33a45 100644 --- a/connectivity/source/inc/java/GlobalRef.hxx +++ b/connectivity/source/inc/java/GlobalRef.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_GLOBALREF_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_GLOBALREF_HXX +#pragma once #include <java/LocalRef.hxx> #include <java/lang/Object.hxx> @@ -100,6 +99,4 @@ namespace connectivity::jdbc } // namespace connectivity::jdbc -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_GLOBALREF_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/LocalRef.hxx b/connectivity/source/inc/java/LocalRef.hxx index dc9531507ee2..ad40737f8620 100644 --- a/connectivity/source/inc/java/LocalRef.hxx +++ b/connectivity/source/inc/java/LocalRef.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LOCALREF_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LOCALREF_HXX +#pragma once #if defined __clang__ #pragma clang diagnostic push @@ -93,6 +92,4 @@ namespace connectivity::jdbc } // namespace connectivity::jdbc -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LOCALREF_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/io/InputStream.hxx b/connectivity/source/inc/java/io/InputStream.hxx index c05309e87c1b..4a0b5788f19b 100644 --- a/connectivity/source/inc/java/io/InputStream.hxx +++ b/connectivity/source/inc/java/io/InputStream.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_IO_INPUTSTREAM_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_IO_INPUTSTREAM_HXX +#pragma once #include <java/lang/Object.hxx> #include <cppuhelper/implbase.hxx> @@ -48,6 +47,5 @@ namespace connectivity virtual void SAL_CALL closeInput( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_IO_INPUTSTREAM_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/io/Reader.hxx b/connectivity/source/inc/java/io/Reader.hxx index 7a2cf0524483..8386eda449e3 100644 --- a/connectivity/source/inc/java/io/Reader.hxx +++ b/connectivity/source/inc/java/io/Reader.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_IO_READER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_IO_READER_HXX +#pragma once #include <java/lang/Object.hxx> #include <cppuhelper/implbase.hxx> @@ -49,6 +48,5 @@ namespace connectivity virtual void SAL_CALL closeInput( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_IO_READER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/lang/Boolean.hxx b/connectivity/source/inc/java/lang/Boolean.hxx index 27a7e06685c2..536ba5de316b 100644 --- a/connectivity/source/inc/java/lang/Boolean.hxx +++ b/connectivity/source/inc/java/lang/Boolean.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_BOOLEAN_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_BOOLEAN_HXX +#pragma once #include <java/lang/Object.hxx> @@ -40,7 +39,5 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_BOOLEAN_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/lang/Class.hxx b/connectivity/source/inc/java/lang/Class.hxx index bdf8e2742472..bcd5628c1d87 100644 --- a/connectivity/source/inc/java/lang/Class.hxx +++ b/connectivity/source/inc/java/lang/Class.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_CLASS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_CLASS_HXX +#pragma once //************ Class: java.lang.Class @@ -47,6 +46,4 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_CLASS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/lang/Exception.hxx b/connectivity/source/inc/java/lang/Exception.hxx index 5e11e7890be7..28b2d56dc90a 100644 --- a/connectivity/source/inc/java/lang/Exception.hxx +++ b/connectivity/source/inc/java/lang/Exception.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_EXCEPTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_EXCEPTION_HXX +#pragma once #include <java/lang/Throwable.hxx> @@ -39,6 +38,5 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_EXCEPTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/lang/Object.hxx b/connectivity/source/inc/java/lang/Object.hxx index ba9414008163..63d7af3f5976 100644 --- a/connectivity/source/inc/java/lang/Object.hxx +++ b/connectivity/source/inc/java/lang/Object.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_OBJECT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_OBJECT_HXX +#pragma once #include <com/sun/star/uno/XComponentContext.hpp> #include <jvmaccess/virtualmachine.hxx> @@ -143,7 +142,6 @@ namespace connectivity }; } -#endif //_CONNECTIVITY_JAVA_LANG_OBJECT_HXX_ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/lang/String.hxx b/connectivity/source/inc/java/lang/String.hxx index 25ba03d0da4c..2783b6eeb9bf 100644 --- a/connectivity/source/inc/java/lang/String.hxx +++ b/connectivity/source/inc/java/lang/String.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_STRING_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_STRING_HXX +#pragma once #include <java/lang/Object.hxx> @@ -41,6 +40,4 @@ namespace connectivity } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_STRING_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/lang/Throwable.hxx b/connectivity/source/inc/java/lang/Throwable.hxx index d24395286116..65cfc24fe73d 100644 --- a/connectivity/source/inc/java/lang/Throwable.hxx +++ b/connectivity/source/inc/java/lang/Throwable.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_THROWABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_THROWABLE_HXX +#pragma once #include <java/lang/Object.hxx> @@ -46,6 +45,5 @@ namespace connectivity static jclass st_getMyClass(); }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_LANG_THROWABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/math/BigDecimal.hxx b/connectivity/source/inc/java/math/BigDecimal.hxx index e345aeed250d..f4fb684b87ac 100644 --- a/connectivity/source/inc/java/math/BigDecimal.hxx +++ b/connectivity/source/inc/java/math/BigDecimal.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_MATH_BIGDECIMAL_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_MATH_BIGDECIMAL_HXX +#pragma once #include <java/lang/Object.hxx> @@ -38,7 +37,5 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_MATH_BIGDECIMAL_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/Array.hxx b/connectivity/source/inc/java/sql/Array.hxx index 8677daa47763..93cce6938661 100644 --- a/connectivity/source/inc/java/sql/Array.hxx +++ b/connectivity/source/inc/java/sql/Array.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_ARRAY_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_ARRAY_HXX +#pragma once #include <java/lang/Object.hxx> #include <com/sun/star/sdbc/XArray.hpp> @@ -51,6 +50,5 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_ARRAY_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/Blob.hxx b/connectivity/source/inc/java/sql/Blob.hxx index 605853f60e6a..02ac0df13401 100644 --- a/connectivity/source/inc/java/sql/Blob.hxx +++ b/connectivity/source/inc/java/sql/Blob.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_BLOB_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_BLOB_HXX +#pragma once #include <java/lang/Object.hxx> #include <com/sun/star/sdbc/XBlob.hpp> @@ -51,6 +50,5 @@ namespace connectivity virtual sal_Int64 SAL_CALL positionOfBlob( const css::uno::Reference< css::sdbc::XBlob >& pattern, sal_Int64 start ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_BLOB_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/CallableStatement.hxx b/connectivity/source/inc/java/sql/CallableStatement.hxx index df9aa389c64f..7391837741ef 100644 --- a/connectivity/source/inc/java/sql/CallableStatement.hxx +++ b/connectivity/source/inc/java/sql/CallableStatement.hxx @@ -47,8 +47,8 @@ namespace connectivity java_sql_CallableStatement( JNIEnv * pEnv, java_sql_Connection& _rCon, const OUString& sql ); virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; diff --git a/connectivity/source/inc/java/sql/Clob.hxx b/connectivity/source/inc/java/sql/Clob.hxx index ecea073fa1f2..67a69bb6db17 100644 --- a/connectivity/source/inc/java/sql/Clob.hxx +++ b/connectivity/source/inc/java/sql/Clob.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CLOB_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CLOB_HXX +#pragma once #include <java/lang/Object.hxx> #include <com/sun/star/sdbc/XClob.hpp> @@ -51,6 +50,5 @@ namespace connectivity virtual sal_Int64 SAL_CALL positionOfClob( const css::uno::Reference< css::sdbc::XClob >& pattern, sal_Int64 start ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CLOB_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/Connection.hxx b/connectivity/source/inc/java/sql/Connection.hxx index cc453e6e87ca..444d44df51e7 100644 --- a/connectivity/source/inc/java/sql/Connection.hxx +++ b/connectivity/source/inc/java/sql/Connection.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CONNECTION_HXX +#pragma once #include <java/lang/Object.hxx> #include <TConnection.hxx> @@ -132,6 +131,5 @@ namespace connectivity virtual void SAL_CALL clearWarnings( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/ConnectionLog.hxx b/connectivity/source/inc/java/sql/ConnectionLog.hxx index 780b7f27eb2c..cea19cdff0ac 100644 --- a/connectivity/source/inc/java/sql/ConnectionLog.hxx +++ b/connectivity/source/inc/java/sql/ConnectionLog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CONNECTIONLOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CONNECTIONLOG_HXX +#pragma once #include <com/sun/star/logging/LogLevel.hpp> @@ -125,6 +124,4 @@ namespace connectivity::java::sql { } // namespace connectivity::java::sql -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_CONNECTIONLOG_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/DatabaseMetaData.hxx b/connectivity/source/inc/java/sql/DatabaseMetaData.hxx index d87cd6c21849..eb43f2537aef 100644 --- a/connectivity/source/inc/java/sql/DatabaseMetaData.hxx +++ b/connectivity/source/inc/java/sql/DatabaseMetaData.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_DATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_DATABASEMETADATA_HXX +#pragma once #include <java/lang/Object.hxx> #include <TDatabaseMetaDataBase.hxx> @@ -213,6 +212,5 @@ namespace connectivity const OUString* _pOptionalAdditionalString = nullptr); }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_DATABASEMETADATA_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/Driver.hxx b/connectivity/source/inc/java/sql/Driver.hxx index 2fd49b252bdc..805df2ed12ee 100644 --- a/connectivity/source/inc/java/sql/Driver.hxx +++ b/connectivity/source/inc/java/sql/Driver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_DRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_DRIVER_HXX +#pragma once #include <com/sun/star/sdbc/XDriver.hpp> #include <cppuhelper/implbase.hxx> @@ -56,6 +55,5 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_DRIVER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/JStatement.hxx b/connectivity/source/inc/java/sql/JStatement.hxx index 62cbe81547d2..89a091bd96a7 100644 --- a/connectivity/source/inc/java/sql/JStatement.hxx +++ b/connectivity/source/inc/java/sql/JStatement.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_JSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_JSTATEMENT_HXX +#pragma once #include <java/lang/Object.hxx> #include <com/sun/star/sdbc/XStatement.hpp> @@ -163,8 +162,8 @@ namespace connectivity // OComponentHelper virtual void SAL_CALL disposing() override; // XInterface - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; @@ -223,14 +222,13 @@ namespace connectivity java_sql_Statement( JNIEnv * pEnv, java_sql_Connection& _rCon ) : OStatement_BASE2( pEnv, _rCon){}; virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; // XBatchExecution virtual void SAL_CALL addBatch( const OUString& sql ) override; virtual void SAL_CALL clearBatch( ) override; virtual css::uno::Sequence< sal_Int32 > SAL_CALL executeBatch( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_JSTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/PreparedStatement.hxx b/connectivity/source/inc/java/sql/PreparedStatement.hxx index 8920c88e9404..711fd2d00661 100644 --- a/connectivity/source/inc/java/sql/PreparedStatement.hxx +++ b/connectivity/source/inc/java/sql/PreparedStatement.hxx @@ -52,8 +52,8 @@ namespace connectivity java_sql_PreparedStatement( JNIEnv * pEnv, java_sql_Connection& _rCon,const OUString& sql ); virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; diff --git a/connectivity/source/inc/java/sql/Ref.hxx b/connectivity/source/inc/java/sql/Ref.hxx index eb658925fd92..f127178b277d 100644 --- a/connectivity/source/inc/java/sql/Ref.hxx +++ b/connectivity/source/inc/java/sql/Ref.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_REF_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_REF_HXX +#pragma once #include <java/lang/Object.hxx> #include <com/sun/star/sdbc/XRef.hpp> @@ -46,6 +45,5 @@ namespace connectivity virtual OUString SAL_CALL getBaseTypeName( ) override; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_REF_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/ResultSet.hxx b/connectivity/source/inc/java/sql/ResultSet.hxx index e5e0155ff3e9..183c6fa3a362 100644 --- a/connectivity/source/inc/java/sql/ResultSet.hxx +++ b/connectivity/source/inc/java/sql/ResultSet.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_RESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_RESULTSET_HXX +#pragma once #include <java/lang/Object.hxx> #include <com/sun/star/sdbc/XResultSet.hpp> @@ -120,8 +119,8 @@ namespace connectivity virtual void SAL_CALL disposing() override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -207,6 +206,5 @@ namespace connectivity using ::cppu::OPropertySetHelper::getFastPropertyValue; }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_RESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/SQLException.hxx b/connectivity/source/inc/java/sql/SQLException.hxx index 88a147faaebe..cff1aad4662d 100644 --- a/connectivity/source/inc/java/sql/SQLException.hxx +++ b/connectivity/source/inc/java/sql/SQLException.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_SQLEXCEPTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_SQLEXCEPTION_HXX +#pragma once #include <java/lang/Exception.hxx> #include <com/sun/star/sdbc/SQLException.hpp> @@ -53,6 +52,5 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_SQLEXCEPTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/SQLWarning.hxx b/connectivity/source/inc/java/sql/SQLWarning.hxx index 68a83f4635be..5fd8c979430d 100644 --- a/connectivity/source/inc/java/sql/SQLWarning.hxx +++ b/connectivity/source/inc/java/sql/SQLWarning.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_SQLWARNING_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_SQLWARNING_HXX +#pragma once #include <java/sql/SQLException.hxx> @@ -46,6 +45,5 @@ namespace connectivity : java_sql_SQLException(_rW,_rContext) {} }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_SQLWARNING_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/sql/Timestamp.hxx b/connectivity/source/inc/java/sql/Timestamp.hxx index 0d41d46d69c5..599dfb78e4dd 100644 --- a/connectivity/source/inc/java/sql/Timestamp.hxx +++ b/connectivity/source/inc/java/sql/Timestamp.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_TIMESTAMP_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_TIMESTAMP_HXX +#pragma once #include <java/util/Date.hxx> #include <com/sun/star/util/Date.hpp> @@ -85,6 +84,5 @@ namespace connectivity static jclass st_getMyClass(); }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_SQL_TIMESTAMP_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/tools.hxx b/connectivity/source/inc/java/tools.hxx index e17fa9c42ebb..44a35ecee3f9 100644 --- a/connectivity/source/inc/java/tools.hxx +++ b/connectivity/source/inc/java/tools.hxx @@ -17,8 +17,11 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_TOOLS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_TOOLS_HXX +#pragma once + +#include <sal/config.h> + +#include <memory> #include <com/sun/star/beans/PropertyValue.hpp> #include <com/sun/star/uno/Sequence.h> @@ -60,6 +63,4 @@ namespace connectivity jobject createCharArrayReader(const css::uno::Reference< css::io::XInputStream >& x,sal_Int32 length); } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_TOOLS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/util/Date.hxx b/connectivity/source/inc/java/util/Date.hxx index 9c2e8a3ee76a..fe552428675f 100644 --- a/connectivity/source/inc/java/util/Date.hxx +++ b/connectivity/source/inc/java/util/Date.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_UTIL_DATE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_UTIL_DATE_HXX +#pragma once #include <java/lang/Object.hxx> //#include <com/sun/star/util/Date.hpp> @@ -42,6 +41,5 @@ namespace connectivity java_util_Date( JNIEnv * pEnv, jobject myObj ) : java_lang_Object( pEnv, myObj ){} }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_UTIL_DATE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/java/util/Property.hxx b/connectivity/source/inc/java/util/Property.hxx index f7835e5f1d8d..628f951ba4d8 100644 --- a/connectivity/source/inc/java/util/Property.hxx +++ b/connectivity/source/inc/java/util/Property.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_UTIL_PROPERTY_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_UTIL_PROPERTY_HXX +#pragma once #include <java/lang/Object.hxx> @@ -36,6 +35,4 @@ namespace connectivity }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_JAVA_UTIL_PROPERTY_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YCatalog.hxx b/connectivity/source/inc/mysql/YCatalog.hxx index df23bb3f07b6..5eb348af997d 100644 --- a/connectivity/source/inc/mysql/YCatalog.hxx +++ b/connectivity/source/inc/mysql/YCatalog.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YCATALOG_HXX +#pragma once #include <sdbcx/VCatalog.hxx> @@ -57,6 +56,5 @@ namespace connectivity::mysql }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YCATALOG_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YColumns.hxx b/connectivity/source/inc/mysql/YColumns.hxx index 00a68f1c3134..1ffcfc95338b 100644 --- a/connectivity/source/inc/mysql/YColumns.hxx +++ b/connectivity/source/inc/mysql/YColumns.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YCOLUMNS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YCOLUMNS_HXX +#pragma once #include <connectivity/TColumnsHelper.hxx> #include <connectivity/sdbcx/VColumn.hxx> @@ -53,6 +52,5 @@ namespace connectivity::mysql }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YCOLUMNS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YDriver.hxx b/connectivity/source/inc/mysql/YDriver.hxx index 545e9dde05fa..84fad1af1c99 100644 --- a/connectivity/source/inc/mysql/YDriver.hxx +++ b/connectivity/source/inc/mysql/YDriver.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YDRIVER_HXX +#pragma once #include <sal/config.h> @@ -73,7 +72,7 @@ namespace connectivity @return The driver which was currently selected. */ - css::uno::Reference< css::sdbc::XDriver > loadDriver( const OUString& url, const css::uno::Sequence< css::beans::PropertyValue >& info ); + css::uno::Reference< css::sdbc::XDriver > loadDriver( std::u16string_view url, const css::uno::Sequence< css::beans::PropertyValue >& info ); public: /** creates a new delegator for a mysql driver @@ -104,6 +103,4 @@ namespace connectivity } // namespace connectivity -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YDRIVER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YTable.hxx b/connectivity/source/inc/mysql/YTable.hxx index 7df10ead2af3..c891b7d7d95e 100644 --- a/connectivity/source/inc/mysql/YTable.hxx +++ b/connectivity/source/inc/mysql/YTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YTABLE_HXX +#pragma once #include <sal/config.h> @@ -93,9 +92,6 @@ namespace connectivity::mysql // ODescriptor virtual void construct() override; - // css::lang::XUnoTunnel - virtual sal_Int64 SAL_CALL getSomething( const css::uno::Sequence< sal_Int8 >& aIdentifier ) override; - static css::uno::Sequence< sal_Int8 > getUnoTunnelId(); // XAlterTable virtual void SAL_CALL alterColumnByName( const OUString& colName, const css::uno::Reference< css::beans::XPropertySet >& descriptor ) override; @@ -112,6 +108,5 @@ namespace connectivity::mysql }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YTABLE_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YTables.hxx b/connectivity/source/inc/mysql/YTables.hxx index 5754c0085bad..3e3283ca96da 100644 --- a/connectivity/source/inc/mysql/YTables.hxx +++ b/connectivity/source/inc/mysql/YTables.hxx @@ -16,12 +16,12 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YTABLES_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <SQLStatementHelper.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +#include <utility> namespace connectivity::mysql { class OTables final : public sdbcx::OCollection, @@ -38,9 +38,9 @@ namespace connectivity::mysql void createTable( const css::uno::Reference< css::beans::XPropertySet >& descriptor ); virtual OUString getNameForObject(const sdbcx::ObjectType& _xObject) override; public: - OTables(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, + OTables(css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData, ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector< OUString> &_rVector) : sdbcx::OCollection(_rParent, true, _rMutex, _rVector) - ,m_xMetaData(_rMetaData) + ,m_xMetaData(std::move(_xMetaData)) {} // only the name is identical to ::cppu::OComponentHelper @@ -59,6 +59,5 @@ namespace connectivity::mysql }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YTABLES_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YUser.hxx b/connectivity/source/inc/mysql/YUser.hxx index bf4bce0dfc04..1713f63bfb64 100644 --- a/connectivity/source/inc/mysql/YUser.hxx +++ b/connectivity/source/inc/mysql/YUser.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YUSER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YUSER_HXX +#pragma once #include <sdbcx/VUser.hxx> #include <com/sun/star/sdbc/XConnection.hpp> @@ -39,8 +38,8 @@ namespace connectivity::mysql public: virtual void refreshGroups() override; public: - OMySQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection); - OMySQLUser( const css::uno::Reference< css::sdbc::XConnection >& _xConnection,const OUString& Name); + OMySQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection); + OMySQLUser( css::uno::Reference< css::sdbc::XConnection > _xConnection, const OUString& Name); // XUser virtual void SAL_CALL changePassword( const OUString& objPassword, const OUString& newPassword ) override; @@ -70,6 +69,5 @@ namespace connectivity::mysql }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YUSER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YUsers.hxx b/connectivity/source/inc/mysql/YUsers.hxx index 69695ca642b6..e4b35c12e718 100644 --- a/connectivity/source/inc/mysql/YUsers.hxx +++ b/connectivity/source/inc/mysql/YUsers.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YUSERS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YUSERS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XConnection.hpp> @@ -44,12 +43,10 @@ namespace connectivity OUsers( ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector< OUString> &_rVector, - const css::uno::Reference< css::sdbc::XConnection >& _xConnection, + css::uno::Reference< css::sdbc::XConnection > _xConnection, connectivity::sdbcx::IRefreshableUsers* _pParent); }; } } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YUSERS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/mysql/YViews.hxx b/connectivity/source/inc/mysql/YViews.hxx index d12744662322..2e9a1b25162a 100644 --- a/connectivity/source/inc/mysql/YViews.hxx +++ b/connectivity/source/inc/mysql/YViews.hxx @@ -16,11 +16,11 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YVIEWS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YVIEWS_HXX +#pragma once #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +#include <utility> namespace connectivity::mysql { class OViews final : public sdbcx::OCollection @@ -35,9 +35,9 @@ namespace connectivity::mysql void createView( const css::uno::Reference< css::beans::XPropertySet >& descriptor ); public: - OViews(const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _rMetaData,::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, + OViews(css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData, ::cppu::OWeakObject& _rParent, ::osl::Mutex& _rMutex, const ::std::vector< OUString> &_rVector) : sdbcx::OCollection(_rParent, true, _rMutex, _rVector) - ,m_xMetaData(_rMetaData) + ,m_xMetaData(std::move(_xMetaData)) ,m_bInDrop(false) {} @@ -48,6 +48,5 @@ namespace connectivity::mysql }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_MYSQL_YVIEWS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OBoundParam.hxx b/connectivity/source/inc/odbc/OBoundParam.hxx index 5765aad01523..77d09ba29789 100644 --- a/connectivity/source/inc/odbc/OBoundParam.hxx +++ b/connectivity/source/inc/odbc/OBoundParam.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OBOUNDPARAM_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OBOUNDPARAM_HXX +#pragma once #include <com/sun/star/io/XInputStream.hpp> #include <com/sun/star/sdbc/DataType.hpp> @@ -125,6 +124,5 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OBOUNDPARAM_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OConnection.hxx b/connectivity/source/inc/odbc/OConnection.hxx index 842ad47c1d10..93875c66193c 100644 --- a/connectivity/source/inc/odbc/OConnection.hxx +++ b/connectivity/source/inc/odbc/OConnection.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OCONNECTION_HXX +#pragma once #include <com/sun/star/sdbc/SQLWarning.hpp> #include <com/sun/star/beans/PropertyValue.hpp> @@ -42,7 +41,7 @@ namespace connectivity::odbc typedef connectivity::OMetaConnection OConnection_BASE; typedef std::vector< ::connectivity::OTypeInfo> TTypeInfoVector; - class OOO_DLLPUBLIC_ODBCBASE OConnection final : + class OConnection final : public OConnection_BASE, public OAutoRetrievingBase { @@ -123,6 +122,5 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OCONNECTION_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/ODatabaseMetaData.hxx b/connectivity/source/inc/odbc/ODatabaseMetaData.hxx index 177feb2dbddf..457d1e684206 100644 --- a/connectivity/source/inc/odbc/ODatabaseMetaData.hxx +++ b/connectivity/source/inc/odbc/ODatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODATABASEMETADATA_HXX +#pragma once #include <odbc/OConnection.hxx> #include <odbc/odbcbasedllapi.hxx> @@ -30,7 +29,7 @@ namespace connectivity::odbc //************ Class: ODatabaseMetaData - class OOO_DLLPUBLIC_ODBCBASE ODatabaseMetaData final : + class ODatabaseMetaData final : public ODatabaseMetaDataBase { SQLHANDLE m_aConnectionHandle; @@ -200,6 +199,5 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODATABASEMETADATA_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx b/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx index 8f10f3c10ad4..dc011f37802c 100644 --- a/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx +++ b/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODATABASEMETADATARESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODATABASEMETADATARESULTSET_HXX +#pragma once #include <com/sun/star/sdbc/ResultSetType.hpp> #include <com/sun/star/sdbc/FetchDirection.hpp> @@ -54,7 +53,7 @@ namespace connectivity::odbc css::sdbc::XCloseable, css::sdbc::XColumnLocate> ODatabaseMetaDataResultSet_BASE; - class OOO_DLLPUBLIC_ODBCBASE ODatabaseMetaDataResultSet : + class ODatabaseMetaDataResultSet : public cppu::BaseMutex, public ODatabaseMetaDataResultSet_BASE, public ::cppu::OPropertySetHelper, @@ -123,8 +122,8 @@ namespace connectivity::odbc virtual void SAL_CALL disposing() override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -256,6 +255,5 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODATABASEMETADATARESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/ODriver.hxx b/connectivity/source/inc/odbc/ODriver.hxx index 29262aea777e..6cba90648d6e 100644 --- a/connectivity/source/inc/odbc/ODriver.hxx +++ b/connectivity/source/inc/odbc/ODriver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODRIVER_HXX +#pragma once #include <com/sun/star/sdbc/XDriver.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -50,7 +49,7 @@ namespace connectivity::odbc public: - ODBCDriver(const css::uno::Reference< css::uno::XComponentContext >& rxContext); + ODBCDriver(css::uno::Reference< css::uno::XComponentContext > xContext); // only possibility to get the odbc functions virtual oslGenericFunction getOdbcFunction(ODBC3SQLFunctionId _nIndex) const = 0; @@ -73,7 +72,6 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODRIVER_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OFunctions.hxx b/connectivity/source/inc/odbc/OFunctions.hxx index 95787a1db4d2..a44fe5a15031 100644 --- a/connectivity/source/inc/odbc/OFunctions.hxx +++ b/connectivity/source/inc/odbc/OFunctions.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OFUNCTIONS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OFUNCTIONS_HXX +#pragma once #include <connectivity/odbc.hxx> #include <rtl/ustring.hxx> @@ -524,7 +523,7 @@ bool LoadLibrary_ODBC3(OUString &_rPath); #define N3SQLGetCursorName(a,b,c,d) (*reinterpret_cast<T3SQLGetCursorName>(getOdbcFunction(ODBC3SQLFunctionId::GetCursorName)))(a,b,c,d) - typedef SQLRETURN (SQL_API *T3SQLNativeSql) ( SQLHSTMT ConnectionHandle, + typedef SQLRETURN (SQL_API *T3SQLNativeSql) ( SQLHDBC ConnectionHandle, SQLCHAR * InStatementText, SQLINTEGER TextLength1, SQLCHAR * OutStatementText, @@ -597,7 +596,5 @@ bool LoadLibrary_ODBC3(OUString &_rPath); extern T3SQLNativeSql pODBC3SQLNativeSql; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OFUNCTIONS_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OPreparedStatement.hxx b/connectivity/source/inc/odbc/OPreparedStatement.hxx index 288ce319acb9..aa5e895bfc79 100644 --- a/connectivity/source/inc/odbc/OPreparedStatement.hxx +++ b/connectivity/source/inc/odbc/OPreparedStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OPREPAREDSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OPREPAREDSTATEMENT_HXX +#pragma once #include <odbc/odbcbasedllapi.hxx> #include <odbc/OStatement.hxx> @@ -39,7 +38,7 @@ namespace connectivity::odbc css::sdbc::XResultSetMetaDataSupplier, css::lang::XServiceInfo> OPreparedStatement_BASE; - class OOO_DLLPUBLIC_ODBCBASE OPreparedStatement final : + class OPreparedStatement final : public OStatement_BASE2, public OPreparedStatement_BASE { @@ -82,7 +81,7 @@ namespace connectivity::odbc /** creates the driver specific resultset (factory) */ - virtual OResultSet* createResulSet() override; + virtual rtl::Reference<OResultSet> createResultSet() override; virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any& rValue) override; @@ -96,8 +95,8 @@ namespace connectivity::odbc //XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; @@ -146,6 +145,5 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OPREPAREDSTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OResultSet.hxx b/connectivity/source/inc/odbc/OResultSet.hxx index bf82844df51f..719c6be14da8 100644 --- a/connectivity/source/inc/odbc/OResultSet.hxx +++ b/connectivity/source/inc/odbc/OResultSet.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ORESULTSET_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ORESULTSET_HXX +#pragma once #include <com/sun/star/sdbc/FetchDirection.hpp> #include <com/sun/star/sdbc/XResultSet.hpp> @@ -103,12 +102,12 @@ namespace connectivity::odbc typedef std::map< css::uno::Sequence<sal_Int8>, sal_Int32,TBookmarkPosMapCompare > TBookmarkPosMap; - class OOO_DLLPUBLIC_ODBCBASE OResultSet : - public cppu::BaseMutex, - public ::connectivity::IResultSetHelper, - public OResultSet_BASE, - public ::cppu::OPropertySetHelper, - public ::comphelper::OPropertyArrayUsageHelper<OResultSet> + class OResultSet : + public cppu::BaseMutex, + public ::connectivity::IResultSetHelper, + public OResultSet_BASE, + public ::cppu::OPropertySetHelper, + public ::comphelper::OPropertyArrayUsageHelper<OResultSet> { protected: TBookmarkPosMap m_aPosToBookmarks; @@ -248,8 +247,8 @@ namespace connectivity::odbc virtual void SAL_CALL disposing() override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; //XTypeProvider virtual css::uno::Sequence< css::uno::Type > SAL_CALL getTypes( ) override; // XPropertySet @@ -350,7 +349,6 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ORESULTSET_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OResultSetMetaData.hxx b/connectivity/source/inc/odbc/OResultSetMetaData.hxx index 6a1f089c4084..76abe6eecd06 100644 --- a/connectivity/source/inc/odbc/OResultSetMetaData.hxx +++ b/connectivity/source/inc/odbc/OResultSetMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ORESULTSETMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ORESULTSETMETADATA_HXX +#pragma once #include <com/sun/star/sdbc/XResultSetMetaData.hpp> #include <cppuhelper/implbase.hxx> @@ -34,7 +33,7 @@ namespace connectivity::odbc typedef ::cppu::WeakImplHelper< css::sdbc::XResultSetMetaData> OResultSetMetaData_BASE; - class OOO_DLLPUBLIC_ODBCBASE OResultSetMetaData final : + class OResultSetMetaData final : public OResultSetMetaData_BASE { std::vector<sal_Int32> m_vMapping; // when not every column is needed @@ -59,11 +58,11 @@ namespace connectivity::odbc ,m_nColCount(-1) ,m_bUseODBC2Types(false) {} - OResultSetMetaData(OConnection* _pConnection, SQLHANDLE _pStmt ,const std::vector<sal_Int32> & _vMapping) - :m_vMapping(_vMapping) + OResultSetMetaData(OConnection* _pConnection, SQLHANDLE _pStmt, std::vector<sal_Int32>&& _vMapping) + :m_vMapping(std::move(_vMapping)) ,m_aStatementHandle( _pStmt ) ,m_pConnection(_pConnection) - ,m_nColCount(_vMapping.size()-1) + ,m_nColCount(m_vMapping.size()-1) ,m_bUseODBC2Types(false) {} virtual ~OResultSetMetaData() override; @@ -113,6 +112,5 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ORESULTSETMETADATA_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OStatement.hxx b/connectivity/source/inc/odbc/OStatement.hxx index 1b7b3a569434..2f0d0d814fea 100644 --- a/connectivity/source/inc/odbc/OStatement.hxx +++ b/connectivity/source/inc/odbc/OStatement.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OSTATEMENT_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OSTATEMENT_HXX +#pragma once #include <com/sun/star/sdbc/XStatement.hpp> #include <com/sun/star/sdbc/XWarningsSupplier.hpp> @@ -53,11 +52,11 @@ namespace connectivity::odbc //************ Class: java.sql.Statement - class OOO_DLLPUBLIC_ODBCBASE OStatement_Base : - public cppu::BaseMutex, - public OStatement_BASE, - public ::cppu::OPropertySetHelper, - public ::comphelper::OPropertyArrayUsageHelper<OStatement_Base> + class OStatement_Base : + public cppu::BaseMutex, + public OStatement_BASE, + public ::cppu::OPropertySetHelper, + public ::comphelper::OPropertyArrayUsageHelper<OStatement_Base> { css::sdbc::SQLWarning m_aLastWarning; @@ -127,7 +126,7 @@ namespace connectivity::odbc /** creates the driver specific resultset (factory) */ - virtual OResultSet* createResulSet(); + virtual rtl::Reference<OResultSet> createResultSet(); /// @throws css::sdbc::SQLException /// @throws css::uno::RuntimeException @@ -166,8 +165,8 @@ namespace connectivity::odbc // OComponentHelper virtual void SAL_CALL disposing() override; // XInterface - virtual void SAL_CALL release() throw() override; - virtual void SAL_CALL acquire() throw() override; + virtual void SAL_CALL release() noexcept override; + virtual void SAL_CALL acquire() noexcept override; // XInterface virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; //XTypeProvider @@ -219,10 +218,10 @@ namespace connectivity::odbc virtual void SAL_CALL disposing() override; }; - class OOO_DLLPUBLIC_ODBCBASE OStatement : - public OStatement_BASE2, - public css::sdbc::XBatchExecution, - public css::lang::XServiceInfo + class OStatement : + public OStatement_BASE2, + public css::sdbc::XBatchExecution, + public css::lang::XServiceInfo { protected: virtual ~OStatement() override {} @@ -232,8 +231,8 @@ namespace connectivity::odbc DECLARE_SERVICE_INFO(); virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) override; - virtual void SAL_CALL acquire() throw() override; - virtual void SAL_CALL release() throw() override; + virtual void SAL_CALL acquire() noexcept override; + virtual void SAL_CALL release() noexcept override; // XBatchExecution virtual void SAL_CALL addBatch( const OUString& sql ) override; virtual void SAL_CALL clearBatch( ) override; @@ -241,6 +240,5 @@ namespace connectivity::odbc }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OSTATEMENT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/OTools.hxx b/connectivity/source/inc/odbc/OTools.hxx index e3138fd716f5..b03db91dce33 100644 --- a/connectivity/source/inc/odbc/OTools.hxx +++ b/connectivity/source/inc/odbc/OTools.hxx @@ -16,8 +16,7 @@ * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OTOOLS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OTOOLS_HXX +#pragma once #include <connectivity/odbc.hxx> #include <odbc/odbcbasedllapi.hxx> @@ -242,6 +241,5 @@ namespace connectivity::odbc } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_OTOOLS_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/odbc/odbcbasedllapi.hxx b/connectivity/source/inc/odbc/odbcbasedllapi.hxx index 59619eee7014..bf7f5a486dc2 100644 --- a/connectivity/source/inc/odbc/odbcbasedllapi.hxx +++ b/connectivity/source/inc/odbc/odbcbasedllapi.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODBCBASEDLLAPI_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_ODBC_ODBCBASEDLLAPI_HXX +#pragma once #include <sal/config.h> @@ -30,6 +29,4 @@ #define OOO_DLLPUBLIC_ODBCBASE SAL_DLLPUBLIC_IMPORT #endif -#endif - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/propertyids.hxx b/connectivity/source/inc/propertyids.hxx index 538fe88c586e..b10b4f008e64 100644 --- a/connectivity/source/inc/propertyids.hxx +++ b/connectivity/source/inc/propertyids.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_PROPERTYIDS_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_PROPERTYIDS_HXX +#pragma once // this define has to be set to split the names into different dll's or so's // every dll has his own set of property names @@ -37,76 +36,76 @@ namespace dbtools }; } -#define PROPERTY_ID_QUERYTIMEOUT 1 -#define PROPERTY_ID_MAXFIELDSIZE 2 -#define PROPERTY_ID_MAXROWS 3 -#define PROPERTY_ID_CURSORNAME 4 -#define PROPERTY_ID_RESULTSETCONCURRENCY 5 -#define PROPERTY_ID_RESULTSETTYPE 6 -#define PROPERTY_ID_FETCHDIRECTION 7 -#define PROPERTY_ID_FETCHSIZE 8 -#define PROPERTY_ID_ESCAPEPROCESSING 9 -#define PROPERTY_ID_USEBOOKMARKS 10 -// Column -#define PROPERTY_ID_NAME 11 -#define PROPERTY_ID_TYPE 12 -#define PROPERTY_ID_TYPENAME 13 -#define PROPERTY_ID_PRECISION 14 -#define PROPERTY_ID_SCALE 15 -#define PROPERTY_ID_ISNULLABLE 16 -#define PROPERTY_ID_ISAUTOINCREMENT 17 -#define PROPERTY_ID_ISROWVERSION 18 -#define PROPERTY_ID_DESCRIPTION 19 -#define PROPERTY_ID_DEFAULTVALUE 20 +enum PropertyId +{ + PROPERTY_ID_QUERYTIMEOUT = 1, + PROPERTY_ID_MAXFIELDSIZE = 2, + PROPERTY_ID_MAXROWS = 3, + PROPERTY_ID_CURSORNAME = 4, + PROPERTY_ID_RESULTSETCONCURRENCY = 5, + PROPERTY_ID_RESULTSETTYPE = 6, + PROPERTY_ID_FETCHDIRECTION = 7, + PROPERTY_ID_FETCHSIZE = 8, + PROPERTY_ID_ESCAPEPROCESSING = 9, + PROPERTY_ID_USEBOOKMARKS = 10, -#define PROPERTY_ID_REFERENCEDTABLE 21 -#define PROPERTY_ID_UPDATERULE 22 -#define PROPERTY_ID_DELETERULE 23 -#define PROPERTY_ID_CATALOG 24 -#define PROPERTY_ID_ISUNIQUE 25 -#define PROPERTY_ID_ISPRIMARYKEYINDEX 26 -#define PROPERTY_ID_ISCLUSTERED 27 -#define PROPERTY_ID_ISASCENDING 28 -#define PROPERTY_ID_SCHEMANAME 29 -#define PROPERTY_ID_CATALOGNAME 30 + // Column + PROPERTY_ID_NAME = 11, + PROPERTY_ID_TYPE = 12, + PROPERTY_ID_TYPENAME = 13, + PROPERTY_ID_PRECISION = 14, + PROPERTY_ID_SCALE = 15, + PROPERTY_ID_ISNULLABLE = 16, + PROPERTY_ID_ISAUTOINCREMENT = 17, + PROPERTY_ID_ISROWVERSION = 18, + PROPERTY_ID_DESCRIPTION = 19, + PROPERTY_ID_DEFAULTVALUE = 20, -#define PROPERTY_ID_COMMAND 31 -#define PROPERTY_ID_CHECKOPTION 32 -#define PROPERTY_ID_PASSWORD 33 -#define PROPERTY_ID_RELATEDCOLUMN 34 + PROPERTY_ID_REFERENCEDTABLE = 21, + PROPERTY_ID_UPDATERULE = 22, + PROPERTY_ID_DELETERULE = 23, + PROPERTY_ID_CATALOG = 24, + PROPERTY_ID_ISUNIQUE = 25, + PROPERTY_ID_ISPRIMARYKEYINDEX = 26, + PROPERTY_ID_ISCLUSTERED = 27, + PROPERTY_ID_ISASCENDING = 28, + PROPERTY_ID_SCHEMANAME = 29, + PROPERTY_ID_CATALOGNAME = 30, -#define PROPERTY_ID_FUNCTION 35 -#define PROPERTY_ID_TABLENAME 36 -#define PROPERTY_ID_REALNAME 37 -#define PROPERTY_ID_DBASEPRECISIONCHANGED 38 -#define PROPERTY_ID_ISCURRENCY 39 -#define PROPERTY_ID_ISBOOKMARKABLE 40 + PROPERTY_ID_COMMAND = 31, + PROPERTY_ID_CHECKOPTION = 32, + PROPERTY_ID_PASSWORD = 33, + PROPERTY_ID_RELATEDCOLUMN = 34, -#define PROPERTY_ID_INVALID_INDEX 41 -#define PROPERTY_ID_HY010 43 -#define PROPERTY_ID_LABEL 44 -#define PROPERTY_ID_DELIMITER 45 -#define PROPERTY_ID_FORMATKEY 46 -#define PROPERTY_ID_LOCALE 47 -#define PROPERTY_ID_IM001 48 + PROPERTY_ID_FUNCTION = 35, + PROPERTY_ID_TABLENAME = 36, + PROPERTY_ID_REALNAME = 37, + PROPERTY_ID_DBASEPRECISIONCHANGED = 38, + PROPERTY_ID_ISCURRENCY = 39, + PROPERTY_ID_ISBOOKMARKABLE = 40, -#define PROPERTY_ID_AUTOINCREMENTCREATION 49 + PROPERTY_ID_HY010 = 41, + PROPERTY_ID_LABEL = 42, + PROPERTY_ID_DELIMITER = 43, + PROPERTY_ID_FORMATKEY = 44, + PROPERTY_ID_LOCALE = 45, -#define PROPERTY_ID_PRIVILEGES 50 -#define PROPERTY_ID_HAVINGCLAUSE 51 + PROPERTY_ID_AUTOINCREMENTCREATION = 46, -#define PROPERTY_ID_ISSIGNED 52 -#define PROPERTY_ID_AGGREGATEFUNCTION 53 -#define PROPERTY_ID_ISSEARCHABLE 54 + PROPERTY_ID_PRIVILEGES = 47, + PROPERTY_ID_HAVINGCLAUSE = 48, -#define PROPERTY_ID_APPLYFILTER 55 -#define PROPERTY_ID_FILTER 56 -#define PROPERTY_ID_MASTERFIELDS 57 -#define PROPERTY_ID_DETAILFIELDS 58 -#define PROPERTY_ID_FIELDTYPE 59 -#define PROPERTY_ID_VALUE 60 -#define PROPERTY_ID_ACTIVE_CONNECTION 61 + PROPERTY_ID_ISSIGNED = 49, + PROPERTY_ID_AGGREGATEFUNCTION = 50, + PROPERTY_ID_ISSEARCHABLE = 51, -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_PROPERTYIDS_HXX + PROPERTY_ID_APPLYFILTER = 52, + PROPERTY_ID_FILTER = 53, + PROPERTY_ID_MASTERFIELDS = 54, + PROPERTY_ID_DETAILFIELDS = 55, + PROPERTY_ID_FIELDTYPE = 56, + PROPERTY_ID_VALUE = 57, + PROPERTY_ID_ACTIVE_CONNECTION = 58 +}; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/resource/sharedresources.hxx b/connectivity/source/inc/resource/sharedresources.hxx index bc4c1aecaa06..0c439cdf24e3 100644 --- a/connectivity/source/inc/resource/sharedresources.hxx +++ b/connectivity/source/inc/resource/sharedresources.hxx @@ -17,13 +17,12 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_RESOURCE_SHAREDRESOURCES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_RESOURCE_SHAREDRESOURCES_HXX +#pragma once #include <rtl/ustring.hxx> #include <vector> #include <connectivity/dbtoolsdllapi.hxx> - +#include <unotools/resmgr.hxx> namespace connectivity { @@ -48,7 +47,7 @@ namespace connectivity */ OUString getResourceString( - const char* pResId + TranslateId pResId ) const; /** loads a string from the shared resource file, and replaces @@ -66,7 +65,7 @@ namespace connectivity */ OUString getResourceStringWithSubstitution( - const char* pResId, + TranslateId pResId, const char* _pAsciiPatternToReplace, const OUString& _rStringToSubstitute ) const; @@ -90,7 +89,7 @@ namespace connectivity */ OUString getResourceStringWithSubstitution( - const char* pResId, + TranslateId pResId, const char* _pAsciiPatternToReplace1, const OUString& _rStringToSubstitute1, const char* _pAsciiPatternToReplace2, @@ -120,7 +119,7 @@ namespace connectivity */ OUString getResourceStringWithSubstitution( - const char* pResId, + TranslateId pResId, const char* _pAsciiPatternToReplace1, const OUString& _rStringToSubstitute1, const char* _pAsciiPatternToReplace2, @@ -139,7 +138,7 @@ namespace connectivity @return the string from the resource file, with applied string substitution */ - OUString getResourceStringWithSubstitution( const char* pResId, + OUString getResourceStringWithSubstitution( TranslateId pResId, const std::vector< std::pair<const char* , OUString > >& _rStringToSubstitutes) const; }; @@ -147,6 +146,4 @@ namespace connectivity } // namespace connectivity -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_RESOURCE_SHAREDRESOURCES_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/writer/WCatalog.hxx b/connectivity/source/inc/writer/WCatalog.hxx index 9fb289f2d893..be61dbabd1e0 100644 --- a/connectivity/source/inc/writer/WCatalog.hxx +++ b/connectivity/source/inc/writer/WCatalog.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WCATALOG_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WCATALOG_HXX +#pragma once #include <file/FCatalog.hxx> @@ -35,6 +34,4 @@ public: } // namespace connectivity::writer -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WCATALOG_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/writer/WConnection.hxx b/connectivity/source/inc/writer/WConnection.hxx index 1ae1dac85817..5ae8b2818e0f 100644 --- a/connectivity/source/inc/writer/WConnection.hxx +++ b/connectivity/source/inc/writer/WConnection.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WCONNECTION_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WCONNECTION_HXX +#pragma once #include <memory> #include <file/FConnection.hxx> @@ -41,11 +40,11 @@ namespace connectivity::writer class ODriver; class OWriterConnection : public file::OConnection { - // the spreadsheet document: + // the text document: css::uno::Reference<css::text::XTextDocument> m_xDoc; OUString m_sPassword; OUString m_aFileName; - oslInterlockedCount m_nDocCount; + oslInterlockedCount m_nDocCount = 0; class CloseVetoButTerminateListener : public cppu::WeakComponentImplHelper<css::frame::XTerminateListener> @@ -152,6 +151,4 @@ public: }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WCONNECTION_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/writer/WDatabaseMetaData.hxx b/connectivity/source/inc/writer/WDatabaseMetaData.hxx index c9fdcf9dd9f7..b464be11c46b 100644 --- a/connectivity/source/inc/writer/WDatabaseMetaData.hxx +++ b/connectivity/source/inc/writer/WDatabaseMetaData.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WDATABASEMETADATA_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WDATABASEMETADATA_HXX +#pragma once #include <component/CDatabaseMetaData.hxx> @@ -41,6 +40,4 @@ public: } // namespace connectivity::writer -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WDATABASEMETADATA_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/writer/WDriver.hxx b/connectivity/source/inc/writer/WDriver.hxx index 361d7f5c2acc..b43168eac9a8 100644 --- a/connectivity/source/inc/writer/WDriver.hxx +++ b/connectivity/source/inc/writer/WDriver.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WDRIVER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WDRIVER_HXX +#pragma once #include <file/FDriver.hxx> @@ -50,6 +49,4 @@ public: }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WDRIVER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/writer/WTable.hxx b/connectivity/source/inc/writer/WTable.hxx index b82ef86647b2..46ee5412e0a6 100644 --- a/connectivity/source/inc/writer/WTable.hxx +++ b/connectivity/source/inc/writer/WTable.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WTABLE_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WTABLE_HXX +#pragma once #include <component/CTable.hxx> @@ -41,9 +40,9 @@ class OWriterTable : public OWriterTable_BASE private: css::uno::Reference<css::text::XTextTable> m_xTable; OWriterConnection* m_pWriterConnection; - sal_Int32 m_nStartCol; - sal_Int32 m_nDataCols; - bool m_bHasHeaders; + sal_Int32 m_nStartCol = 0; + sal_Int32 m_nDataCols = 0; + bool m_bHasHeaders = false; void fillColumns(); @@ -55,15 +54,9 @@ public: void SAL_CALL disposing() override; - // css::lang::XUnoTunnel - sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override; - static css::uno::Sequence<sal_Int8> getUnoTunnelId(); - void construct() override; }; } // namespace connectivity::writer -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WTABLE_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/inc/writer/WTables.hxx b/connectivity/source/inc/writer/WTables.hxx index e83184c82e32..df39cc1c22ce 100644 --- a/connectivity/source/inc/writer/WTables.hxx +++ b/connectivity/source/inc/writer/WTables.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WTABLES_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WTABLES_HXX +#pragma once #include <file/FTables.hxx> @@ -41,6 +40,4 @@ public: }; } -#endif // INCLUDED_CONNECTIVITY_SOURCE_INC_WRITER_WTABLES_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/manager/mdrivermanager.cxx b/connectivity/source/manager/mdrivermanager.cxx index 0edf495bd8ab..ed09cc3c816e 100644 --- a/connectivity/source/manager/mdrivermanager.cxx +++ b/connectivity/source/manager/mdrivermanager.cxx @@ -17,6 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ +#include <config_fuzzers.h> #include "mdrivermanager.hxx" #include <com/sun/star/configuration/theDefaultProvider.hpp> @@ -26,7 +27,7 @@ #include <com/sun/star/beans/NamedValue.hpp> #include <com/sun/star/logging/LogLevel.hpp> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <cppuhelper/implbase.hxx> #include <cppuhelper/supportsservice.hxx> #include <cppuhelper/weak.hxx> @@ -34,6 +35,7 @@ #include <algorithm> #include <iterator> +#include <utility> #include <vector> namespace drivermanager @@ -47,13 +49,7 @@ using namespace ::com::sun::star::container; using namespace ::com::sun::star::logging; using namespace ::osl; -#define SERVICE_SDBC_DRIVER "com.sun.star.sdbc.Driver" - -/// @throws NoSuchElementException -static void throwNoSuchElementException() -{ - throw NoSuchElementException(); -} +constexpr OUStringLiteral SERVICE_SDBC_DRIVER = u"com.sun.star.sdbc.Driver"; class ODriverEnumeration : public ::cppu::WeakImplHelper< XEnumeration > { @@ -67,7 +63,7 @@ class ODriverEnumeration : public ::cppu::WeakImplHelper< XEnumeration > protected: virtual ~ODriverEnumeration() override; public: - explicit ODriverEnumeration(const DriverArray& _rDriverSequence); + explicit ODriverEnumeration(DriverArray&& _rDriverSequence); // XEnumeration virtual sal_Bool SAL_CALL hasMoreElements( ) override; @@ -75,8 +71,8 @@ public: }; -ODriverEnumeration::ODriverEnumeration(const DriverArray& _rDriverSequence) - :m_aDrivers( _rDriverSequence ) +ODriverEnumeration::ODriverEnumeration(DriverArray&& _rDriverSequence) + :m_aDrivers( std::move(_rDriverSequence) ) ,m_aPos( m_aDrivers.begin() ) { } @@ -96,13 +92,13 @@ sal_Bool SAL_CALL ODriverEnumeration::hasMoreElements( ) Any SAL_CALL ODriverEnumeration::nextElement( ) { if ( !hasMoreElements() ) - throwNoSuchElementException(); + throw NoSuchElementException(); - return makeAny( *m_aPos++ ); + return Any( *m_aPos++ ); } - namespace { - +namespace +{ /// an STL functor which ensures that a SdbcDriver described by a DriverAccess is loaded struct EnsureDriver { @@ -112,23 +108,23 @@ Any SAL_CALL ODriverEnumeration::nextElement( ) const DriverAccess& operator()( const DriverAccess& _rDescriptor ) const { // we did not load this driver, yet - if (!_rDescriptor.xDriver.is()) + if (_rDescriptor.xDriver.is()) + return _rDescriptor; + + // we have a factory for it + if (_rDescriptor.xComponentFactory.is()) { - // we have a factory for it - if (_rDescriptor.xComponentFactory.is()) + DriverAccess& rDesc = const_cast<DriverAccess&>(_rDescriptor); + try { - DriverAccess& rDesc = const_cast<DriverAccess&>(_rDescriptor); - try - { - //load driver - rDesc.xDriver.set( - rDesc.xComponentFactory->createInstanceWithContext(mxContext), css::uno::UNO_QUERY); - } - catch (const Exception&) - { - //failure, abandon driver - rDesc.xComponentFactory.clear(); - } + //load driver + rDesc.xDriver.set( + rDesc.xComponentFactory->createInstanceWithContext(mxContext), css::uno::UNO_QUERY); + } + catch (const Exception&) + { + //failure, abandon driver + rDesc.xComponentFactory.clear(); } } return _rDescriptor; @@ -156,26 +152,14 @@ Any SAL_CALL ODriverEnumeration::nextElement( ) }; // predicate for checking whether or not a driver accepts a given URL - class AcceptsURL + bool AcceptsURL( const OUString& _rURL, const Reference<XDriver>& _rDriver ) { - protected: - const OUString& m_rURL; - - public: - // ctor - explicit AcceptsURL( const OUString& _rURL ) : m_rURL( _rURL ) { } - - - bool operator()( const Reference<XDriver>& _rDriver ) const - { - // ask the driver - return _rDriver.is() && _rDriver->acceptsURL( m_rURL ); - } - }; - + // ask the driver + return _rDriver.is() && _rDriver->acceptsURL( _rURL ); } - static sal_Int32 lcl_getDriverPrecedence( const Reference<XComponentContext>& _rContext, Sequence< OUString >& _rPrecedence ) +#if !ENABLE_FUZZERS + sal_Int32 lcl_getDriverPrecedence( const Reference<XComponentContext>& _rContext, Sequence< OUString >& _rPrecedence ) { _rPrecedence.realloc( 0 ); try @@ -185,8 +169,8 @@ Any SAL_CALL ODriverEnumeration::nextElement( ) css::configuration::theDefaultProvider::get( _rContext ) ); // one argument for creating the node access: the path to the configuration node - Sequence< Any > aCreationArgs(1); - aCreationArgs[0] <<= NamedValue( "nodepath", makeAny( OUString("org.openoffice.Office.DataAccess/DriverManager") ) ); + Sequence< Any > aCreationArgs{ Any(NamedValue( + "nodepath", Any( OUString("org.openoffice.Office.DataAccess/DriverManager") ) )) }; // create the node access Reference< XNameAccess > xDriverManagerNode( @@ -209,10 +193,9 @@ Any SAL_CALL ODriverEnumeration::nextElement( ) return _rPrecedence.getLength(); } +#endif - namespace { - - /// an STL argorithm compatible predicate comparing two DriverAccess instances by their implementation names + /// an STL algorithm compatible predicate comparing two DriverAccess instances by their implementation names struct CompareDriverAccessByName { @@ -222,19 +205,18 @@ Any SAL_CALL ODriverEnumeration::nextElement( ) } }; - /// and STL argorithm compatible predicate comparing a DriverAccess' impl name to a string + /// and an STL algorithm compatible predicate comparing the impl name of a DriverAccess to a string struct EqualDriverAccessToName { OUString m_sImplName; - explicit EqualDriverAccessToName(const OUString& _sImplName) : m_sImplName(_sImplName){} + explicit EqualDriverAccessToName(OUString _sImplName) : m_sImplName(std::move(_sImplName)){} bool operator()( const DriverAccess& lhs) { return lhs.sImplementationName == m_sImplName; } }; - - } +} OSDBCDriverManager::OSDBCDriverManager( const Reference< XComponentContext >& _rxContext ) :OSDBCDriverManager_Base(m_aMutex) @@ -328,6 +310,7 @@ void OSDBCDriverManager::bootstrapDrivers() void OSDBCDriverManager::initializeDriverPrecedence() { +#if !ENABLE_FUZZERS if ( m_aDriversBS.empty() ) // nothing to do return; @@ -360,7 +343,7 @@ void OSDBCDriverManager::initializeDriverPrecedence() // at the moment this is the first of all drivers we know // loop through the names in the precedence order - for ( const OUString& rDriverOrder : std::as_const(aDriverOrder) ) + for (const OUString& rDriverOrder : aDriverOrder) { if (aNoPrefDriversStart == m_aDriversBS.end()) break; @@ -395,6 +378,7 @@ void OSDBCDriverManager::initializeDriverPrecedence() { TOOLS_WARN_EXCEPTION( "connectivity.hsqldb", "OSDBCDriverManager::initializeDriverPrecedence: caught an exception while sorting the drivers!"); } +#endif } @@ -489,7 +473,7 @@ Reference< XEnumeration > SAL_CALL OSDBCDriverManager::createEnumeration( ) ExtractDriverFromCollectionElement() // transformation to apply (extract a driver from a driver access) ); - return new ODriverEnumeration( aDrivers ); + return new ODriverEnumeration( std::move(aDrivers) ); } @@ -528,9 +512,9 @@ Reference< XInterface > SAL_CALL OSDBCDriverManager::getRegisteredObject( const MutexGuard aGuard(m_aMutex); DriverCollection::const_iterator aSearch = m_aDriversRT.find(_rName); if (aSearch == m_aDriversRT.end()) - throwNoSuchElementException(); + throw NoSuchElementException(); - return aSearch->second.get(); + return aSearch->second; } @@ -570,7 +554,7 @@ void SAL_CALL OSDBCDriverManager::revokeObject( const OUString& _rName ) DriverCollection::iterator aSearch = m_aDriversRT.find(_rName); if (aSearch == m_aDriversRT.end()) - throwNoSuchElementException(); + throw NoSuchElementException(); m_aDriversRT.erase(aSearch); // we already have the iterator so we could use it @@ -607,8 +591,8 @@ Reference< XDriver > OSDBCDriverManager::implGetDriverForURL(const OUString& _rU { const OUString sDriverFactoryName = m_aDriverConfig.getDriverFactoryName(_rURL); - EqualDriverAccessToName aEqual(sDriverFactoryName); - DriverAccessArray::const_iterator aFind = std::find_if(m_aDriversBS.begin(),m_aDriversBS.end(),aEqual); + DriverAccessArray::const_iterator aFind = std::find_if(m_aDriversBS.begin(), m_aDriversBS.end(), + EqualDriverAccessToName(sDriverFactoryName)); if ( aFind == m_aDriversBS.end() ) { // search all bootstrapped drivers @@ -617,9 +601,16 @@ Reference< XDriver > OSDBCDriverManager::implGetDriverForURL(const OUString& _rU m_aDriversBS.end(), // end of search range [&_rURL, this] (const DriverAccessArray::value_type& driverAccess) { // extract the driver from the access, then ask the resulting driver for acceptance +#if defined __GNUC__ && !defined __clang__ && __GNUC__ >= 13 && __GNUC__ <= 14 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdangling-reference" +#endif const DriverAccess& ensuredAccess = EnsureDriver(m_xContext)(driverAccess); +#if defined __GNUC__ && !defined __clang__ && __GNUC__ >= 13 && __GNUC__ <= 14 +#pragma GCC diagnostic pop +#endif const Reference<XDriver> driver = ExtractDriverFromAccess()(ensuredAccess); - return AcceptsURL(_rURL)(driver); + return AcceptsURL(_rURL, driver); }); } // if ( m_aDriversBS.find(sDriverFactoryName ) == m_aDriversBS.end() ) else @@ -642,7 +633,7 @@ Reference< XDriver > OSDBCDriverManager::implGetDriverForURL(const OUString& _rU [&_rURL] (const DriverCollection::value_type& element) { // extract the driver from the collection element, then ask the resulting driver for acceptance const Reference<XDriver> driver = ExtractDriverFromCollectionElement()(element); - return AcceptsURL(_rURL)(driver); + return AcceptsURL(_rURL, driver); }); if ( m_aDriversRT.end() != aPos ) @@ -658,8 +649,7 @@ extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface* connectivity_OSDBCDriverManager_get_implementation( css::uno::XComponentContext* context , css::uno::Sequence<css::uno::Any> const&) { - return cppu::acquire( - static_cast<cppu::OWeakObject*>(new drivermanager::OSDBCDriverManager(context))); + return cppu::acquire(new drivermanager::OSDBCDriverManager(context)); } diff --git a/connectivity/source/manager/mdrivermanager.hxx b/connectivity/source/manager/mdrivermanager.hxx index ec72df370dd4..239116f1ccc7 100644 --- a/connectivity/source/manager/mdrivermanager.hxx +++ b/connectivity/source/manager/mdrivermanager.hxx @@ -17,8 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#ifndef INCLUDED_CONNECTIVITY_SOURCE_MANAGER_MDRIVERMANAGER_HXX -#define INCLUDED_CONNECTIVITY_SOURCE_MANAGER_MDRIVERMANAGER_HXX +#pragma once #include <sal/config.h> @@ -118,7 +117,5 @@ namespace drivermanager } // namespace drivermanager -#endif // INCLUDED_CONNECTIVITY_SOURCE_MANAGER_MDRIVERMANAGER_HXX - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/connectivity/source/parse/PColumn.cxx b/connectivity/source/parse/PColumn.cxx index cf9b17ee51df..5ada4136cc93 100644 --- a/connectivity/source/parse/PColumn.cxx +++ b/connectivity/source/parse/PColumn.cxx @@ -109,7 +109,7 @@ OParseColumn::OParseColumn( const OUString& Name, StringMap aColumnMap; for ( sal_Int32 i = 1; i <= nColumnCount; ++i ) { - OParseColumn* pColumn = createColumnForResultSet( _rxResMetaData, _rxDBMetaData, i,aColumnMap ); + rtl::Reference<OParseColumn> pColumn = createColumnForResultSet( _rxResMetaData, _rxDBMetaData, i,aColumnMap ); aReturn->push_back( pColumn ); if ( i_xQueryColumns.is() && i_xQueryColumns->hasByName(pColumn->getRealName()) ) { @@ -125,7 +125,7 @@ OParseColumn::OParseColumn( const OUString& Name, } -OParseColumn* OParseColumn::createColumnForResultSet( const Reference< XResultSetMetaData >& _rxResMetaData, +rtl::Reference<OParseColumn> OParseColumn::createColumnForResultSet( const Reference< XResultSetMetaData >& _rxResMetaData, const Reference< XDatabaseMetaData >& _rxDBMetaData, sal_Int32 _nColumnPos, StringMap& _rColumns ) { OUString sLabel = _rxResMetaData->getColumnLabel( _nColumnPos ); @@ -142,7 +142,7 @@ OParseColumn* OParseColumn::createColumnForResultSet( const Reference< XResultSe sLabel = sAlias; } _rColumns.emplace(sLabel,0); - OParseColumn* pColumn = new OParseColumn( + rtl::Reference<OParseColumn> pColumn = new OParseColumn( sLabel, _rxResMetaData->getColumnTypeName( _nColumnPos ), OUString(), diff --git a/connectivity/source/parse/sqlbison.y b/connectivity/source/parse/sqlbison.y index d14f36e7794f..23de1cb772ab 100644 --- a/connectivity/source/parse/sqlbison.y +++ b/connectivity/source/parse/sqlbison.y @@ -44,7 +44,6 @@ #include <osl/diagnose.h> #include "connectivity/dbconversion.hxx" #include <rtl/ustrbuf.hxx> -#include <sal/macros.h> #include <sal/log.hxx> #if defined _MSC_VER @@ -74,9 +73,15 @@ inline connectivity::OSQLInternalNode* newNode(const OUString& _newValue, // yyi is the internal number of the rule that is currently being reduced // This can be mapped to external rule number via the yyrmap. +#if defined YYBISON && YYBISON >= 30800 +#define SQL_NEW_RULE newNode("", SQLNodeType::Rule, yyr1[yyrule]) +#define SQL_NEW_LISTRULE newNode("", SQLNodeType::ListRule, yyr1[yyrule]) +#define SQL_NEW_COMMALISTRULE newNode("", SQLNodeType::CommaListRule, yyr1[yyrule]) +#else #define SQL_NEW_RULE newNode("", SQLNodeType::Rule, yyr1[yyn]) #define SQL_NEW_LISTRULE newNode("", SQLNodeType::ListRule, yyr1[yyn]) #define SQL_NEW_COMMALISTRULE newNode("", SQLNodeType::CommaListRule, yyr1[yyn]) +#endif extern connectivity::OSQLParser* xxx_pGLOBAL_SQLPARSER; @@ -151,6 +156,7 @@ using namespace connectivity; %token <pParseNode> SQL_TOKEN_DAYNAME SQL_TOKEN_DAYOFMONTH SQL_TOKEN_DAYOFWEEK SQL_TOKEN_DAYOFYEAR SQL_TOKEN_EXTRACT %token <pParseNode> SQL_TOKEN_HOUR SQL_TOKEN_MILLISECOND SQL_TOKEN_MINUTE SQL_TOKEN_MONTH SQL_TOKEN_MONTHNAME SQL_TOKEN_NOW SQL_TOKEN_QUARTER SQL_TOKEN_DATEDIFF %token <pParseNode> SQL_TOKEN_SECOND SQL_TOKEN_TIMESTAMPADD SQL_TOKEN_TIMESTAMPDIFF SQL_TOKEN_TIMEVALUE SQL_TOKEN_WEEK SQL_TOKEN_WEEKDAY SQL_TOKEN_YEAR SQL_TOKEN_YEARDAY +%token <pParseNode> SQL_TOKEN_DATEADD /* numeric functions */ %token <pParseNode> SQL_TOKEN_ABS SQL_TOKEN_ACOS SQL_TOKEN_ASIN SQL_TOKEN_ATAN SQL_TOKEN_ATAN2 SQL_TOKEN_CEILING @@ -213,7 +219,7 @@ using namespace connectivity; %type <pParseNode> like_predicate opt_escape test_for_null null_predicate_part_2 in_predicate in_predicate_part_2 character_like_predicate_part_2 other_like_predicate_part_2 %type <pParseNode> all_or_any_predicate any_all_some existence_test subquery quantified_comparison_predicate_part_2 %type <pParseNode> scalar_exp_commalist parameter_ref literal parenthesized_boolean_value_expression -%type <pParseNode> column_ref data_type column cursor parameter range_variable user /*like_check*/ +%type <pParseNode> column_ref data_type column cursor parameter range_variable user /*like_check*/ datetime_unit /* new rules at OJ */ %type <pParseNode> derived_column as_clause table_name num_primary term num_value_exp %type <pParseNode> value_exp_primary num_value_fct unsigned_value_spec cast_spec set_fct_spec scalar_subquery @@ -227,12 +233,12 @@ using namespace connectivity; %type <pParseNode> datetime_primary datetime_value_fct time_zone time_zone_specifier /*interval_term*/ interval_qualifier %type <pParseNode> start_field non_second_datetime_field end_field single_datetime_field extract_field datetime_field time_zone_field %type <pParseNode> char_length_exp octet_length_exp bit_length_exp select_sublist string_value_exp -%type <pParseNode> char_value_exp concatenation char_factor char_primary string_value_fct char_substring_fct fold +%type <pParseNode> char_value_exp concatenation char_factor char_primary string_value_fct char_substring_fct %type <pParseNode> form_conversion char_translation trim_fct trim_operands trim_spec bit_value_fct bit_substring_fct op_column_commalist %type <pParseNode> /*bit_concatenation*/ bit_value_exp bit_factor bit_primary collate_clause char_value_fct unique_spec value_exp_commalist in_predicate_value unique_test update_source %type <pParseNode> function_arg_commalist3 string_function_3Argument function_arg_commalist4 string_function_4Argument function_arg_commalist2 string_function_1Argument string_function_2Argument %type <pParseNode> date_function_0Argument date_function_1Argument function_name12 function_name23 function_name1 function_name2 function_name3 function_name0 numeric_function_0Argument numeric_function_1Argument numeric_function_2Argument -%type <pParseNode> all query_primary sql_not for_length upper_lower comparison column_val cross_union /*opt_schema_element_list*/ +%type <pParseNode> all query_primary sql_not for_length comparison column_val cross_union /*opt_schema_element_list*/ %type <pParseNode> /*op_authorization op_schema*/ nil_fkt schema_element base_table_def base_table_element base_table_element_commalist %type <pParseNode> column_def odbc_fct_spec odbc_call_spec odbc_fct_type op_parameter union_statement %type <pParseNode> op_odbc_call_parameter odbc_parameter_commalist odbc_parameter function_args_commalist function_arg @@ -318,7 +324,7 @@ schema: opt_schema_element_list: {$$ = SQL_NEW_RULE;} - | schema_glement_list + | schema_element_list ; schema_element_list: @@ -1923,10 +1929,12 @@ string_function_1Argument: SQL_TOKEN_LENGTH | SQL_TOKEN_ASCII | SQL_TOKEN_LCASE + | SQL_TOKEN_LOWER | SQL_TOKEN_LTRIM | SQL_TOKEN_RTRIM | SQL_TOKEN_SPACE | SQL_TOKEN_UCASE + | SQL_TOKEN_UPPER ; string_function_2Argument: @@ -1973,6 +1981,7 @@ date_function_1Argument: date_function: SQL_TOKEN_TIMESTAMPADD | SQL_TOKEN_TIMESTAMPDIFF + | SQL_TOKEN_DATEADD ; numeric_function_0Argument: SQL_TOKEN_PI @@ -2952,11 +2961,27 @@ interval_value_exp: */ non_second_datetime_field: SQL_TOKEN_YEAR + | SQL_TOKEN_YEARDAY + | SQL_TOKEN_MONTH + | SQL_TOKEN_WEEK + | SQL_TOKEN_WEEKDAY + | SQL_TOKEN_DAY + | SQL_TOKEN_HOUR + | SQL_TOKEN_MINUTE + | SQL_TOKEN_MILLISECOND + ; + +datetime_unit: + SQL_TOKEN_YEAR | SQL_TOKEN_MONTH + | SQL_TOKEN_WEEK | SQL_TOKEN_DAY | SQL_TOKEN_HOUR | SQL_TOKEN_MINUTE + | SQL_TOKEN_SECOND + | SQL_TOKEN_MILLISECOND ; + start_field: non_second_datetime_field opt_paren_precision { @@ -3088,6 +3113,13 @@ function_args_commalist: else YYERROR; } + | datetime_unit ',' function_arg ',' function_arg + { + $$ = SQL_NEW_COMMALISTRULE; + $$->append($1); + $$->append($3); + $$->append($5); + } ; value_exp: @@ -3219,7 +3251,6 @@ bit_primary: ; char_value_fct: char_substring_fct - | fold | form_conversion { $$ = SQL_NEW_RULE; @@ -3266,20 +3297,6 @@ char_substring_fct: $$->append(newNode(")", SQLNodeType::Punctuation)); } ; -upper_lower: - SQL_TOKEN_UPPER - | SQL_TOKEN_LOWER - ; -fold: - upper_lower '(' value_exp ')' - { - $$ = SQL_NEW_RULE; - $$->append($1); - $$->append(newNode("(", SQLNodeType::Punctuation)); - $$->append($3); - $$->append(newNode(")", SQLNodeType::Punctuation)); - } - ; form_conversion: SQL_TOKEN_CONVERT '(' string_value_exp SQL_TOKEN_USING table_node ')' { @@ -4376,7 +4393,7 @@ OString OParseContext::getIntlKeywordAscii(InternationalKeyCode _eKey) const IParseContext::InternationalKeyCode OParseContext::getIntlKeyCode(const OString& rToken) const { - static IParseContext::InternationalKeyCode Intl_TokenID[] = + static IParseContext::InternationalKeyCode const Intl_TokenID[] = { InternationalKeyCode::Like, InternationalKeyCode::Not, InternationalKeyCode::Null, InternationalKeyCode::True, InternationalKeyCode::False, InternationalKeyCode::Is, InternationalKeyCode::Between, InternationalKeyCode::Or, @@ -4386,15 +4403,14 @@ IParseContext::InternationalKeyCode OParseContext::getIntlKeyCode(const OString& InternationalKeyCode::VarPop,InternationalKeyCode::Collect,InternationalKeyCode::Fusion,InternationalKeyCode::Intersection }; - sal_uInt32 nCount = SAL_N_ELEMENTS( Intl_TokenID ); - for (sal_uInt32 i = 0; i < nCount; i++) - { - OString aKey = getIntlKeywordAscii(Intl_TokenID[i]); - if (rToken.equalsIgnoreAsciiCase(aKey)) - return Intl_TokenID[i]; - } + auto const token = std::find_if(std::cbegin(Intl_TokenID), std::cend(Intl_TokenID) + , [&rToken, this](IParseContext::InternationalKeyCode const & tokenID) + { return rToken.equalsIgnoreAsciiCase(getIntlKeywordAscii(tokenID)); }); + + if (std::cend(Intl_TokenID) != token) + return *token; - return InternationalKeyCode::None; + return InternationalKeyCode::None; } @@ -4489,7 +4505,7 @@ sal_Int32 OSQLParser::s_nRefCount = 0; // ::osl::Mutex OSQLParser::s_aMutex; OSQLScanner* OSQLParser::s_pScanner = nullptr; OSQLParseNodesGarbageCollector* OSQLParser::s_pGarbageCollector = nullptr; -css::uno::Reference< css::i18n::XLocaleData4> OSQLParser::s_xLocaleData = nullptr; +vcl::DeleteOnDeinit<css::uno::Reference< css::i18n::XLocaleData4>> OSQLParser::s_xLocaleData(vcl::DeleteOnDeinitFlag::Empty); void setParser(OSQLParser* _pParser) { @@ -4498,7 +4514,6 @@ void setParser(OSQLParser* _pParser) void OSQLParser::setParseTree(OSQLParseNode* pNewParseTree) { - ::osl::MutexGuard aGuard(getMutex()); m_pParseTree.reset(pNewParseTree); } @@ -4570,7 +4585,7 @@ std::unique_ptr<OSQLParseNode> OSQLParser::parseTree(OUString& rErrorMessage, // Guard the parsing - ::osl::MutexGuard aGuard(getMutex()); + std::unique_lock aGuard(getMutex()); // must be reset setParser(this); @@ -4599,7 +4614,8 @@ std::unique_ptr<OSQLParseNode> OSQLParser::parseTree(OUString& rErrorMessage, // clear the garbage collector (*s_pGarbageCollector)->clearAndDelete(); - m_pParseTree.release(); // because the garbage collector deleted it + // coverity[leaked_storage : FALSE] - because the garbage collector deleted it + m_pParseTree.release(); return nullptr; } else @@ -4645,6 +4661,7 @@ OString OSQLParser::TokenIDToStr(sal_uInt32 nTokenID, const IParseContext* pCont if (aStr.isEmpty()) { + // coverity[unsigned_compare : SUPPRESS] - YYTRANSLATE is out of our control aStr = yytname[YYTRANSLATE(nTokenID)]; if(aStr.startsWith("SQL_TOKEN_")) aStr = aStr.copy(10); @@ -4663,7 +4680,7 @@ OString OSQLParser::TokenIDToStr(sal_uInt32 nTokenID, const IParseContext* pCont #if OSL_DEBUG_LEVEL > 0 OUString OSQLParser::RuleIDToStr(sal_uInt32 nRuleID) { - OSL_ENSURE(nRuleID < SAL_N_ELEMENTS(yytname), "OSQLParser::RuleIDToStr: Invalid nRuleId!"); + OSL_ENSURE(nRuleID < std::size(yytname), "OSQLParser::RuleIDToStr: Invalid nRuleId!"); return OUString::createFromAscii(yytname[nRuleID]); } #endif @@ -4673,8 +4690,8 @@ sal_uInt32 OSQLParser::StrToRuleID(const OString & rValue) { // Search for the given name in yytname and return the index // (or UNKNOWN_RULE, if not found) - static sal_uInt32 nLen = SAL_N_ELEMENTS(yytname); - for (sal_uInt32 i = YYTRANSLATE(SQL_TOKEN_INVALIDSYMBOL); i < (nLen-1); i++) + static sal_uInt32 const nLen = std::size(yytname)-1; + for (sal_uInt32 i = YYTRANSLATE(SQL_TOKEN_INVALIDSYMBOL); i < nLen; ++i) { if (rValue == yytname[i]) return i; @@ -4743,8 +4760,7 @@ sal_Int16 OSQLParser::buildStringNodes(OSQLParseNode*& pLiteral) OSQLParseNode* pParent = pLiteral->getParent(); OSQLParseNode* pNewNode = new OSQLInternalNode(pLiteral->getTokenValue(), SQLNodeType::String); - pParent->replace(pLiteral, pNewNode); - delete pLiteral; + pParent->replaceAndDelete(pLiteral, pNewNode); pLiteral = nullptr; return 1; } @@ -4802,12 +4818,11 @@ void OSQLParser::error(const char *fmt) sal_Int32 nPos2 = sStr.indexOf(sSQL_TOKEN,nPos1+1); if(nPos2 != -1) { - OUString sSecond = sStr.copy(nPos1+sSQL_TOKEN.getLength(),nPos2-nPos1-sSQL_TOKEN.getLength()); - sFirst += sSecond; - sFirst += sStr.copy(nPos2+sSQL_TOKEN.getLength()); + sFirst += sStr.subView(nPos1+sSQL_TOKEN.getLength(),nPos2-nPos1-sSQL_TOKEN.getLength()); + sFirst += sStr.subView(nPos2+sSQL_TOKEN.getLength()); } else - sFirst += sStr.copy(nPos1+sSQL_TOKEN.getLength()); + sFirst += sStr.subView(nPos1+sSQL_TOKEN.getLength()); m_sErrorMessage = sFirst; } diff --git a/connectivity/source/parse/sqlflex.l b/connectivity/source/parse/sqlflex.l index 34a4067ea21c..44daeb236bf7 100644 --- a/connectivity/source/parse/sqlflex.l +++ b/connectivity/source/parse/sqlflex.l @@ -186,6 +186,7 @@ CURSOR {SQL_NEW_KEYWORD(SQL_TOKEN_CURSOR); } D {SQL_NEW_KEYWORD(SQL_TOKEN_D); } DATE {SQL_NEW_KEYWORD(SQL_TOKEN_DATE); } +DATEADD {SQL_NEW_KEYWORD(SQL_TOKEN_DATEADD); } DATEDIFF {SQL_NEW_KEYWORD(SQL_TOKEN_DATEDIFF); } DATEVALUE {SQL_NEW_KEYWORD(SQL_TOKEN_DATEVALUE); } DAY {SQL_NEW_KEYWORD(SQL_TOKEN_DAY); } diff --git a/connectivity/source/parse/sqliterator.cxx b/connectivity/source/parse/sqliterator.cxx index 766dcf3b8198..8ca4d6271fc4 100644 --- a/connectivity/source/parse/sqliterator.cxx +++ b/connectivity/source/parse/sqliterator.cxx @@ -32,15 +32,17 @@ #include <iostream> #endif #include <connectivity/PColumn.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <TConnection.hxx> #include <comphelper/types.hxx> #include <connectivity/dbmetadata.hxx> #include <com/sun/star/sdb/SQLFilterOperator.hpp> +#include <o3tl/safeint.hxx> #include <sal/log.hxx> #include <iterator> #include <memory> +#include <utility> using namespace ::comphelper; using namespace ::connectivity; @@ -119,9 +121,9 @@ namespace connectivity OUString m_sForbiddenQueryName; public: - ForbidQueryName( OSQLParseTreeIteratorImpl& _rIteratorImpl, const OUString& _rForbiddenQueryName ) + ForbidQueryName( OSQLParseTreeIteratorImpl& _rIteratorImpl, OUString _aForbiddenQueryName ) :m_rpAllForbiddenNames( _rIteratorImpl.m_pForbiddenQueryNames ) - ,m_sForbiddenQueryName( _rForbiddenQueryName ) + ,m_sForbiddenQueryName(std::move( _aForbiddenQueryName )) { if ( !m_rpAllForbiddenNames ) m_rpAllForbiddenNames = std::make_shared<QueryNameSet>(); @@ -264,20 +266,17 @@ namespace { OUString sComposedName; - static constexpr OUStringLiteral s_sWildcard = u"%" ; + static constexpr OUString s_sWildcard = u"%"_ustr ; // we want all catalogues, all schemas, all tables - Sequence< OUString > sTableTypes(3); - sTableTypes[0] = "VIEW"; - sTableTypes[1] = "TABLE"; - sTableTypes[2] = s_sWildcard; // just to be sure to include anything else... + Sequence< OUString > sTableTypes { "VIEW", "TABLE", s_sWildcard }; // this last one just to be sure to include anything else... if ( _rxDBMeta.is() ) { sComposedName.clear(); Reference< XResultSet> xRes = _rxDBMeta->getTables( - !_rCatalog.isEmpty() ? makeAny( _rCatalog ) : Any(), !_rSchema.isEmpty() ? _rSchema : s_sWildcard, _rTableName, sTableTypes ); + !_rCatalog.isEmpty() ? Any( _rCatalog ) : Any(), !_rSchema.isEmpty() ? _rSchema : s_sWildcard, _rTableName, sTableTypes ); Reference< XRow > xCurrentRow( xRes, UNO_QUERY ); if ( xCurrentRow.is() && xRes->next() ) @@ -526,7 +525,7 @@ void OSQLParseTreeIterator::getQualified_join( OSQLTables& _rTables, const OSQLP { const OSQLParseNode * pCol = pColumnCommalist->getChild(i); // add twice because the column must exists in both tables - m_pImpl->m_aJoinConditions.push_back( TNodePair(pCol,pCol) ); + m_pImpl->m_aJoinConditions.emplace_back(pCol,pCol); } } } @@ -820,14 +819,13 @@ void OSQLParseTreeIterator::traverseCreateColumns(const OSQLParseNode* pSelectNo if (!aTypeName.isEmpty()) { //TODO:Create a new class for create statement to handle field length - OParseColumn* pColumn = new OParseColumn(aColumnName,aTypeName,OUString(),OUString(), + rtl::Reference<OParseColumn> pColumn = new OParseColumn(aColumnName,aTypeName,OUString(),OUString(), ColumnValue::NULLABLE_UNKNOWN,0,0,nType,false,false,isCaseSensitive(), OUString(),OUString(),OUString()); pColumn->setFunction(false); pColumn->setRealName(aColumnName); - Reference< XPropertySet> xCol = pColumn; - m_aCreateColumns->push_back(xCol); + m_aCreateColumns->push_back(pColumn); } } @@ -855,7 +853,7 @@ bool OSQLParseTreeIterator::traverseSelectColumnNames(const OSQLParseNode* pSele if (pSelectNode->getChild(2)->isRule() && SQL_ISPUNCTUATION(pSelectNode->getChild(2)->getChild(0),"*")) { // SELECT * ... - setSelectColumnName(m_aSelectColumns, "*", "", ""); + setSelectColumnName("*", "", ""); } else if (SQL_ISRULE(pSelectNode->getChild(2),scalar_exp_commalist)) { @@ -875,7 +873,7 @@ bool OSQLParseTreeIterator::traverseSelectColumnNames(const OSQLParseNode* pSele // All the table's columns OUString aTableRange; pColumnRef->getChild(0)->parseNodeToStr( aTableRange, m_pImpl->m_xConnection, nullptr, false, false ); - setSelectColumnName(m_aSelectColumns, "*", "", aTableRange); + setSelectColumnName("*", "", aTableRange); continue; } else if (SQL_ISRULE(pColumnRef,derived_column)) @@ -927,7 +925,7 @@ bool OSQLParseTreeIterator::traverseSelectColumnNames(const OSQLParseNode* pSele */ if(aColumnAlias.isEmpty()) aColumnAlias = sColumnName; - setSelectColumnName(m_aSelectColumns,sColumnName,aColumnAlias,aTableRange,bFkt,nType,SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec)); + setSelectColumnName(sColumnName,aColumnAlias,aTableRange,bFkt,nType,SQL_ISRULE(pColumnRef,general_set_fct) || SQL_ISRULE(pColumnRef,set_fct_spec)); } } } @@ -1218,10 +1216,10 @@ void OSQLParseTreeIterator::traverseSearchCondition(OSQLParseNode const * pSearc OSL_ENSURE(pSearchCondition->count() == 2,"OSQLParseTreeIterator: error in parse tree!"); const OSQLParseNode* pPart2 = pSearchCondition->getChild(1); - sal_Int32 nCurentPos = pPart2->count()-2; + sal_Int32 nCurrentPos = pPart2->count()-2; - OSQLParseNode * pNum_value_exp = pPart2->getChild(nCurentPos); - OSQLParseNode * pOptEscape = pPart2->getChild(nCurentPos+1); + OSQLParseNode * pNum_value_exp = pPart2->getChild(nCurrentPos); + OSQLParseNode * pOptEscape = pPart2->getChild(nCurrentPos+1); OSL_ENSURE(pNum_value_exp != nullptr,"OSQLParseTreeIterator: error in parse tree!"); OSL_ENSURE(pOptEscape != nullptr,"OSQLParseTreeIterator: error in parse tree!"); @@ -1344,7 +1342,7 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode } sal_Int32 nType = ::connectivity::OSQLParser::getFunctionParameterType( _pParentNode->getChild(0)->getTokenID(), i-1); - OParseColumn* pColumn = new OParseColumn( sParameterName, + rtl::Reference<OParseColumn> pColumn = new OParseColumn( sParameterName, OUString(), OUString(), OUString(), @@ -1373,7 +1371,7 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode ); if(aIter != m_aSelectColumns->end()) { - OParseColumn* pNewColumn = new OParseColumn(*aIter,isCaseSensitive()); + rtl::Reference<OParseColumn> pNewColumn = new OParseColumn(*aIter,isCaseSensitive()); pNewColumn->setName(sParameterName); pNewColumn->setRealName(_aColumnName); m_aParameters->push_back(pNewColumn); @@ -1386,7 +1384,7 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode if ( xColumn.is() ) { - OParseColumn* pNewColumn = new OParseColumn(xColumn,isCaseSensitive()); + rtl::Reference<OParseColumn> pNewColumn = new OParseColumn(xColumn,isCaseSensitive()); pNewColumn->setName(sParameterName); pNewColumn->setRealName(_aColumnName); m_aParameters->push_back(pNewColumn); @@ -1409,9 +1407,9 @@ void OSQLParseTreeIterator::traverseParameter(const OSQLParseNode* _pParseNode nType = ::connectivity::OSQLParser::getFunctionParameterType( pParent->getChild(0)->getTokenID(), i+1); } - OUString aNewColName( getUniqueColumnName( sParameterName ) ); + OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), sParameterName)); - OParseColumn* pColumn = new OParseColumn(aNewColName, + rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName, OUString(), OUString(), OUString(), @@ -1526,7 +1524,7 @@ OSQLTable OSQLParseTreeIterator::impl_createTableObject( const OUString& rTableN return aReturnTable; } -void OSQLParseTreeIterator::appendColumns(::rtl::Reference<OSQLColumns> const & _rColumns,const OUString& _rTableAlias,const OSQLTable& _rTable) +void OSQLParseTreeIterator::appendColumns(const OUString& _rTableAlias, const OSQLTable& _rTable) { if (!_rTable.is()) return; @@ -1539,14 +1537,16 @@ void OSQLParseTreeIterator::appendColumns(::rtl::Reference<OSQLColumns> const & const OUString* pBegin = aColNames.getConstArray(); const OUString* pEnd = pBegin + aColNames.getLength(); + ::comphelper::UStringMixLess aCompare(isCaseSensitive()); + std::vector<OUString> aSelectColumnNames = getSelectColumnNames(); + for(;pBegin != pEnd;++pBegin) { - - OUString aName(getUniqueColumnName(*pBegin)); + OUString aName(getUniqueColumnName(aSelectColumnNames, *pBegin)); Reference< XPropertySet > xColumn; if(xColumns->hasByName(*pBegin) && (xColumns->getByName(*pBegin) >>= xColumn) && xColumn.is()) { - OParseColumn* pColumn = new OParseColumn(aName + rtl::Reference<OParseColumn> pColumn = new OParseColumn(aName , getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPENAME))) , getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DEFAULTVALUE))) , getString(xColumn->getPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_DESCRIPTION))) @@ -1563,29 +1563,28 @@ void OSQLParseTreeIterator::appendColumns(::rtl::Reference<OSQLColumns> const & pColumn->setTableName(_rTableAlias); pColumn->setRealName(*pBegin); - Reference< XPropertySet> xCol = pColumn; - _rColumns->push_back(xCol); + m_aSelectColumns->push_back(pColumn); + // update aSelectColumnNames with newly insert aName + aSelectColumnNames.insert(std::upper_bound(aSelectColumnNames.begin(), aSelectColumnNames.end(), aName, aCompare), aName); } else impl_appendError( IParseContext::ErrorCode::InvalidColumn, pBegin, &_rTableAlias ); } } -void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> const & _rColumns,const OUString & rColumnName,const OUString & rColumnAlias, const OUString & rTableRange, bool bFkt, sal_Int32 _nType, bool bAggFkt) +void OSQLParseTreeIterator::setSelectColumnName(const OUString & rColumnName,const OUString & rColumnAlias, const OUString & rTableRange, bool bFkt, sal_Int32 _nType, bool bAggFkt) { if(rColumnName.toChar() == '*' && rTableRange.isEmpty()) { // SELECT * ... - OSL_ENSURE(_rColumns == m_aSelectColumns,"Invalid columns used here!"); for (auto const& table : *m_pImpl->m_pTables) - appendColumns(_rColumns,table.first,table.second); + appendColumns(table.first, table.second); } else if( rColumnName.toChar() == '*' && !rTableRange.isEmpty() ) { // SELECT <table>.* - OSL_ENSURE(_rColumns == m_aSelectColumns,"Invalid columns used here!"); OSQLTables::const_iterator aFind = m_pImpl->m_pTables->find(rTableRange); if(aFind != m_pImpl->m_pTables->end()) - appendColumns(_rColumns,rTableRange,aFind->second); + appendColumns(rTableRange, aFind->second); } else if ( rTableRange.isEmpty() ) { // SELECT <something> ... @@ -1606,9 +1605,9 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co ) continue; - OUString aNewColName(getUniqueColumnName(rColumnAlias)); + OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias)); - OParseColumn* pColumn = new OParseColumn(xColumn,isCaseSensitive()); + rtl::Reference<OParseColumn> pColumn = new OParseColumn(xColumn,isCaseSensitive()); xNewColumn = pColumn; pColumn->setTableName(table.first); pColumn->setName(aNewColName); @@ -1621,9 +1620,9 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co { // no function (due to the above !bFkt), no existing column // => assume an expression - OUString aNewColName( getUniqueColumnName( rColumnAlias ) ); + OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias)); // did not find a column with this name in any of the tables - OParseColumn* pColumn = new OParseColumn( + rtl::Reference<OParseColumn> pColumn = new OParseColumn( aNewColName, "VARCHAR", // TODO: does this match with _nType? @@ -1646,21 +1645,20 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co pColumn->setRealName( rColumnName ); } - _rColumns->push_back( xNewColumn ); + m_aSelectColumns->push_back( xNewColumn ); } else { - OUString aNewColName(getUniqueColumnName(rColumnAlias)); + OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias)); - OParseColumn* pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(), + rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(), ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,false,false,isCaseSensitive(), OUString(),OUString(),OUString()); pColumn->setFunction(true); pColumn->setAggregateFunction(bAggFkt); pColumn->setRealName(rColumnName); - Reference< XPropertySet> xCol = pColumn; - _rColumns->push_back(xCol); + m_aSelectColumns->push_back(pColumn); } } else // ColumnName and TableName exist @@ -1672,9 +1670,9 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co { if (bFkt) { - OUString aNewColName(getUniqueColumnName(rColumnAlias)); + OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias)); - OParseColumn* pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(), + rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(), ColumnValue::NULLABLE_UNKNOWN,0,0,_nType,false,false,isCaseSensitive(), OUString(),OUString(),OUString()); pColumn->setFunction(true); @@ -1684,23 +1682,21 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co assert(false); pColumn->setTableName(aFind->first); - Reference< XPropertySet> xCol = pColumn; - _rColumns->push_back(xCol); + m_aSelectColumns->push_back(pColumn); } else { Reference< XPropertySet > xColumn; if (aFind->second->getColumns()->hasByName(rColumnName) && (aFind->second->getColumns()->getByName(rColumnName) >>= xColumn)) { - OUString aNewColName(getUniqueColumnName(rColumnAlias)); + OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias)); - OParseColumn* pColumn = new OParseColumn(xColumn,isCaseSensitive()); + rtl::Reference<OParseColumn> pColumn = new OParseColumn(xColumn,isCaseSensitive()); pColumn->setName(aNewColName); pColumn->setRealName(rColumnName); pColumn->setTableName(aFind->first); - Reference< XPropertySet> xCol = pColumn; - _rColumns->push_back(xCol); + m_aSelectColumns->push_back(pColumn); } else bError = true; @@ -1712,41 +1708,45 @@ void OSQLParseTreeIterator::setSelectColumnName(::rtl::Reference<OSQLColumns> co // Table does not exist or lacking field if (bError) { - OUString aNewColName(getUniqueColumnName(rColumnAlias)); + OUString aNewColName(getUniqueColumnName(getSelectColumnNames(), rColumnAlias)); - OParseColumn* pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(), + rtl::Reference<OParseColumn> pColumn = new OParseColumn(aNewColName,OUString(),OUString(),OUString(), ColumnValue::NULLABLE_UNKNOWN,0,0,DataType::VARCHAR,false,false,isCaseSensitive(), OUString(),OUString(),OUString()); pColumn->setFunction(true); pColumn->setAggregateFunction(bAggFkt); - Reference< XPropertySet> xCol = pColumn; - _rColumns->push_back(xCol); + m_aSelectColumns->push_back(pColumn); } } } -OUString OSQLParseTreeIterator::getUniqueColumnName(const OUString & rColumnName) const +std::vector<OUString> OSQLParseTreeIterator::getSelectColumnNames() const { - OUString aAlias(rColumnName); + ::comphelper::UStringMixLess aCompare(isCaseSensitive()); - OSQLColumns::const_iterator aIter = find( - m_aSelectColumns->begin(), - m_aSelectColumns->end(), - aAlias, - ::comphelper::UStringMixEqual( isCaseSensitive() ) - ); + std::vector<OUString> aColumnNames; + OUString sPropertyName = OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_NAME); + for (const auto& col : *m_aSelectColumns) + aColumnNames.push_back(getString(col->getPropertyValue(sPropertyName))); + std::sort(aColumnNames.begin(), aColumnNames.end(), aCompare); + + return aColumnNames; +} + +OUString OSQLParseTreeIterator::getUniqueColumnName(const std::vector<OUString>& rColumnNames, const OUString& rColumnName) const +{ + ::comphelper::UStringMixLess aCompare(isCaseSensitive()); + if (!std::binary_search(rColumnNames.begin(), rColumnNames.end(), rColumnName, aCompare)) + return rColumnName; + + OUString aAlias; sal_Int32 i=1; - while(aIter != m_aSelectColumns->end()) + do { aAlias = rColumnName + OUString::number(i++); - aIter = find( - m_aSelectColumns->begin(), - m_aSelectColumns->end(), - aAlias, - ::comphelper::UStringMixEqual( isCaseSensitive() ) - ); } + while (std::binary_search(rColumnNames.begin(), rColumnNames.end(), aAlias, aCompare)); return aAlias; } @@ -1760,7 +1760,7 @@ void OSQLParseTreeIterator::setOrderByColumnName(const OUString & rColumnName, O else { sal_Int32 nId = rColumnName.toInt32(); - if ( nId > 0 && nId < static_cast<sal_Int32>(m_aSelectColumns->size()) ) + if ( nId > 0 && o3tl::make_unsigned(nId) < m_aSelectColumns->size() ) m_aOrderColumns->push_back( new OOrderColumn( (*m_aSelectColumns)[nId-1], isCaseSensitive(), bAscending ) ); } @@ -1781,7 +1781,7 @@ void OSQLParseTreeIterator::setGroupByColumnName(const OUString & rColumnName, O else { sal_Int32 nId = rColumnName.toInt32(); - if ( nId > 0 && nId < static_cast<sal_Int32>(m_aSelectColumns->size()) ) + if ( nId > 0 && o3tl::make_unsigned(nId) < m_aSelectColumns->size() ) m_aGroupColumns->push_back(new OParseColumn((*m_aSelectColumns)[nId-1],isCaseSensitive())); } @@ -1831,12 +1831,29 @@ const OSQLParseNode* OSQLParseTreeIterator::getOrderTree() const // Analyse parse tree (depending on statement type) // and set pointer to ORDER clause: + + assert(SQL_ISRULE(m_pParseTree, select_statement) || SQL_ISRULE(m_pParseTree, union_statement)); + + auto pParseTree = m_pParseTree; + if(SQL_ISRULE(m_pParseTree, union_statement)) + { + assert(m_pParseTree->count() == 4); + pParseTree = pParseTree->getChild(3); + // since UNION is left-associative (at least in our grammar), + // possibly the left-hand (m_pParseTree->getChild(0)) is a union_statement, + // but the right hand cannot. + assert(SQL_ISRULE(pParseTree, select_statement)); + } + OSQLParseNode * pOrderClause = nullptr; - OSL_ENSURE(m_pParseTree->count() >= 4,"ParseTreeIterator: error in parse tree!"); - OSQLParseNode * pTableExp = m_pParseTree->getChild(3); - OSL_ENSURE(pTableExp != nullptr,"OSQLParseTreeIterator: error in parse tree!"); - OSL_ENSURE(SQL_ISRULE(pTableExp,table_exp),"OSQLParseTreeIterator: error in parse tree!"); - OSL_ENSURE(pTableExp->count() == TABLE_EXPRESSION_CHILD_COUNT,"OSQLParseTreeIterator: error in parse tree!"); + OSL_ENSURE(pParseTree->count() == 4, "OSQLParseTreeIterator::getOrderTree: expected a SELECT, and a SELECT must have exactly four children"); + OSQLParseNode * pTableExp = pParseTree->getChild(3); + OSL_ENSURE(pTableExp != nullptr, "OSQLParseTreeIterator::getOrderTree: got NULL table_exp"); + OSL_ENSURE(SQL_ISRULE(pTableExp, table_exp), "OSQLParseTreeIterator::getOrderTree: expected table_exp but got something else"); + OSL_ENSURE(pTableExp->count() == TABLE_EXPRESSION_CHILD_COUNT,"OSQLParseTreeIterator::getOrderTree: table_exp doesn't have the expected number of children"); + // tdf#141115 upgrade the above to an assert; + // this cannot go well if there are too few children + assert(pTableExp->count() == TABLE_EXPRESSION_CHILD_COUNT); pOrderClause = pTableExp->getChild(ORDER_BY_CHILD_POS); // If it is an order_by, it must not be empty @@ -2092,7 +2109,11 @@ sal_Int32 OSQLParseTreeIterator::getFunctionReturnType(const OSQLParseNode* _pNo nType = DataType::DOUBLE; } else + { nType = ::connectivity::OSQLParser::getFunctionReturnType( sFunctionName, &m_rParser.getContext() ); + if (nType == DataType::SQLNULL) + nType = ::connectivity::OSQLParser::getFunctionReturnType( sFunctionName, m_rParser.getNeutral() ); + } } return nType; diff --git a/connectivity/source/parse/sqlnode.cxx b/connectivity/source/parse/sqlnode.cxx index 77c1306d699d..ad8f6c9edeff 100644 --- a/connectivity/source/parse/sqlnode.cxx +++ b/connectivity/source/parse/sqlnode.cxx @@ -50,7 +50,7 @@ #include <comphelper/numbers.hxx> #include <connectivity/dbtools.hxx> #include <connectivity/dbmetadata.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> #include <string.h> #include <algorithm> #include <functional> @@ -59,6 +59,7 @@ #include <rtl/ustrbuf.hxx> #include <sal/log.hxx> +#include <utility> using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::util; @@ -91,39 +92,26 @@ namespace void replaceAndReset(connectivity::OSQLParseNode*& _pResetNode,connectivity::OSQLParseNode* _pNewNode) { - _pResetNode->getParent()->replace(_pResetNode, _pNewNode); - delete _pResetNode; + _pResetNode->getParent()->replaceAndDelete(_pResetNode, _pNewNode); _pResetNode = _pNewNode; } /** quotes a string and search for quotes inside the string and replace them with the new quote @param rValue The value to be quoted. - @param rQuot + @param rQuote The quote - @param rQuotToReplace + @param rQuoteToReplace The quote to replace with @return The quoted string. */ - OUString SetQuotation(std::u16string_view rValue, const OUString& rQuot, const OUString& rQuotToReplace) + OUString SetQuotation(const OUString& rValue, std::u16string_view rQuote, std::u16string_view rQuoteToReplace) { - OUString rNewValue = rQuot + rValue; - sal_Int32 nIndex = sal_Int32(-1); // Replace quotes with double quotes or the parser gets into problems - - if (!rQuot.isEmpty()) - { - do - { - nIndex += 2; - nIndex = rNewValue.indexOf(rQuot,nIndex); - if(nIndex != -1) - rNewValue = rNewValue.replaceAt(nIndex,rQuot.getLength(),rQuotToReplace); - } while (nIndex != -1); - } - - rNewValue += rQuot; - return rNewValue; + // Replace quotes with double quotes or the parser gets into problems + if (!rQuote.empty()) + return rQuote + rValue.replaceAll(rQuote, rQuoteToReplace) + rQuote; + return rValue; } bool columnMatchP(const connectivity::OSQLParseNode* pSubTree, const connectivity::SQLParseNodeParameter& rParam) @@ -147,41 +135,41 @@ namespace { } - if(pSubTree->count()) + if(!pSubTree->count()) + return false; + + const OSQLParseNode* pCol = pSubTree->getChild(pSubTree->count()-1); + if (SQL_ISRULE(pCol,column_val)) { - const OSQLParseNode* pCol = pSubTree->getChild(pSubTree->count()-1); - if (SQL_ISRULE(pCol,column_val)) - { - assert(pCol->count() == 1); - pCol = pCol->getChild(0); - } - const OSQLParseNode* pTable(nullptr); - switch (pSubTree->count()) - { - case 1: - break; - case 3: - pTable = pSubTree->getChild(0); - break; - case 5: - case 7: - SAL_WARN("connectivity.parse", "SQL: catalog and/or schema in column_ref in predicate"); - break; - default: - SAL_WARN("connectivity.parse", "columnMatchP: SQL grammar changed; column_ref has " << pSubTree->count() << " children"); - assert(false); - break; - } - // TODO: not all DBMS match column names case-insensitively... - // see XDatabaseMetaData::supportsMixedCaseIdentifiers() - // and XDatabaseMetaData::supportsMixedCaseQuotedIdentifiers() - if ( // table name matches (or no table name)? - ( !pTable || pTable->getTokenValue().equalsIgnoreAsciiCase(rParam.sPredicateTableAlias) ) - && // column name matches? - pCol->getTokenValue().equalsIgnoreAsciiCase(aFieldName) - ) - return true; + assert(pCol->count() == 1); + pCol = pCol->getChild(0); } + const OSQLParseNode* pTable(nullptr); + switch (pSubTree->count()) + { + case 1: + break; + case 3: + pTable = pSubTree->getChild(0); + break; + case 5: + case 7: + SAL_WARN("connectivity.parse", "SQL: catalog and/or schema in column_ref in predicate"); + break; + default: + SAL_WARN("connectivity.parse", "columnMatchP: SQL grammar changed; column_ref has " << pSubTree->count() << " children"); + assert(false); + break; + } + // TODO: not all DBMS match column names case-insensitively... + // see XDatabaseMetaData::supportsMixedCaseIdentifiers() + // and XDatabaseMetaData::supportsMixedCaseQuotedIdentifiers() + if ( // table name matches (or no table name)? + ( !pTable || pTable->getTokenValue().equalsIgnoreAsciiCase(rParam.sPredicateTableAlias) ) + && // column name matches? + pCol->getTokenValue().equalsIgnoreAsciiCase(aFieldName) + ) + return true; return false; } } @@ -191,7 +179,7 @@ namespace connectivity SQLParseNodeParameter::SQLParseNodeParameter( const Reference< XConnection >& _rxConnection, const Reference< XNumberFormatter >& _xFormatter, const Reference< XPropertySet >& _xField, - const OUString &_sPredicateTableAlias, + OUString _sPredicateTableAlias, const Locale& _rLocale, const IParseContext* _pContext, bool _bIntl, bool _bQuote, OUString _sDecSep, bool _bPredicate, bool _bParseToSDBC ) :rLocale(_rLocale) @@ -200,9 +188,9 @@ SQLParseNodeParameter::SQLParseNodeParameter( const Reference< XConnection >& _r ,pSubQueryHistory( std::make_shared<QueryNameSet>() ) ,xFormatter(_xFormatter) ,xField(_xField) - ,sPredicateTableAlias(_sPredicateTableAlias) + ,sPredicateTableAlias(std::move(_sPredicateTableAlias)) ,m_rContext( _pContext ? *_pContext : OSQLParser::s_aDefaultContext ) - ,sDecSep(_sDecSep) + ,sDecSep(std::move(_sDecSep)) ,bQuote(_bQuote) ,bInternational(_bIntl) ,bPredicate(_bPredicate) @@ -210,14 +198,14 @@ SQLParseNodeParameter::SQLParseNodeParameter( const Reference< XConnection >& _r { } -OUString OSQLParseNode::convertDateString(const SQLParseNodeParameter& rParam, const OUString& rString) +OUString OSQLParseNode::convertDateString(const SQLParseNodeParameter& rParam, std::u16string_view rString) { Date aDate = DBTypeConversion::toDate(rString); Reference< XNumberFormatsSupplier > xSupplier(rParam.xFormatter->getNumberFormatsSupplier()); Reference< XNumberFormatTypes > xTypes(xSupplier->getNumberFormats(), UNO_QUERY); double fDate = DBTypeConversion::toDouble(aDate,DBTypeConversion::getNULLDate(xSupplier)); - sal_Int32 nKey = xTypes->getStandardIndex(rParam.rLocale) + 36; // XXX hack + sal_Int32 nKey = xTypes->getFormatIndex(NumberFormatIndex::DATE_SYS_DDMMYYYY, rParam.rLocale); return rParam.xFormatter->convertNumberToString(nKey, fDate); } @@ -229,12 +217,12 @@ OUString OSQLParseNode::convertDateTimeString(const SQLParseNodeParameter& rPara Reference< XNumberFormatTypes > xTypes(xSupplier->getNumberFormats(), UNO_QUERY); double fDateTime = DBTypeConversion::toDouble(aDate,DBTypeConversion::getNULLDate(xSupplier)); - sal_Int32 nKey = xTypes->getStandardIndex(rParam.rLocale) + 51; // XXX hack + sal_Int32 nKey = xTypes->getFormatIndex(NumberFormatIndex::DATETIME_SYS_DDMMYYYY_HHMMSS, rParam.rLocale); return rParam.xFormatter->convertNumberToString(nKey, fDateTime); } -OUString OSQLParseNode::convertTimeString(const SQLParseNodeParameter& rParam, const OUString& rString) +OUString OSQLParseNode::convertTimeString(const SQLParseNodeParameter& rParam, std::u16string_view rString) { css::util::Time aTime = DBTypeConversion::toTime(rString); Reference< XNumberFormatsSupplier > xSupplier(rParam.xFormatter->getNumberFormatsSupplier()); @@ -242,7 +230,7 @@ OUString OSQLParseNode::convertTimeString(const SQLParseNodeParameter& rParam, c Reference< XNumberFormatTypes > xTypes(xSupplier->getNumberFormats(), UNO_QUERY); double fTime = DBTypeConversion::toDouble(aTime); - sal_Int32 nKey = xTypes->getStandardIndex(rParam.rLocale) + 41; // XXX hack + sal_Int32 nKey = xTypes->getFormatIndex(NumberFormatIndex::TIME_HHMMSS, rParam.rLocale); return rParam.xFormatter->convertNumberToString(nKey, fTime); } @@ -256,7 +244,7 @@ void OSQLParseNode::parseNodeToStr(OUString& rString, parseNodeToStr( rString, _rxConnection, nullptr, nullptr, OUString(), pContext ? pContext->getPreferredLocale() : OParseContext::getDefaultLocale(), - pContext, _bIntl, _bQuote, OUString("."), false ); + pContext, _bIntl, _bQuote, ".", false ); } @@ -264,13 +252,13 @@ void OSQLParseNode::parseNodeToPredicateStr(OUString& rString, const Reference< XConnection >& _rxConnection, const Reference< XNumberFormatter > & xFormatter, const css::lang::Locale& rIntl, - OUString _sDec, + const OUString& rDec, const IParseContext* pContext ) const { OSL_ENSURE(xFormatter.is(), "OSQLParseNode::parseNodeToPredicateStr:: no formatter!"); if (xFormatter.is()) - parseNodeToStr(rString, _rxConnection, xFormatter, nullptr, OUString(), rIntl, pContext, true, true, _sDec, true); + parseNodeToStr(rString, _rxConnection, xFormatter, nullptr, OUString(), rIntl, pContext, true, true, rDec, true); } @@ -280,13 +268,13 @@ void OSQLParseNode::parseNodeToPredicateStr(OUString& rString, const Reference< XPropertySet > & _xField, const OUString &_sPredicateTableAlias, const css::lang::Locale& rIntl, - OUString _sDec, + const OUString& rDec, const IParseContext* pContext ) const { OSL_ENSURE(xFormatter.is(), "OSQLParseNode::parseNodeToPredicateStr:: no formatter!"); if (xFormatter.is()) - parseNodeToStr( rString, _rxConnection, xFormatter, _xField, _sPredicateTableAlias, rIntl, pContext, true, true, _sDec, true ); + parseNodeToStr( rString, _rxConnection, xFormatter, _xField, _sPredicateTableAlias, rIntl, pContext, true, true, rDec, true ); } @@ -299,7 +287,7 @@ void OSQLParseNode::parseNodeToStr(OUString& rString, const IParseContext* pContext, bool _bIntl, bool _bQuote, - OUString _sDecSep, + const OUString& _rDecSep, bool _bPredicate) const { OSL_ENSURE( _rxConnection.is(), "OSQLParseNode::parseNodeToStr: invalid connection!" ); @@ -307,13 +295,13 @@ void OSQLParseNode::parseNodeToStr(OUString& rString, if ( !_rxConnection.is() ) return; - OUStringBuffer sBuffer = rString; + OUStringBuffer sBuffer(rString); try { OSQLParseNode::impl_parseNodeToString_throw( sBuffer, SQLParseNodeParameter( _rxConnection, xFormatter, _xField, _sPredicateTableAlias, rIntl, pContext, - _bIntl, _bQuote, _sDecSep, _bPredicate, false + _bIntl, _bQuote, _rDecSep, _bPredicate, false ) ); } catch( const SQLException& ) @@ -353,7 +341,7 @@ bool OSQLParseNode::parseNodeToExecutableStatement( OUString& _out_rString, cons || xMeta->getURL().startsWithIgnoreAsciiCase("sdbc:firebird:"))) { sLimitValue = pTableExp->getChild(6)->getChild(1)->getTokenValue(); - pTableExp->removeAt(6); + delete pTableExp->removeAt(6); } _out_rString.clear(); @@ -374,7 +362,7 @@ bool OSQLParseNode::parseNodeToExecutableStatement( OUString& _out_rString, cons { constexpr char SELECT_KEYWORD[] = "SELECT"; sBuffer.insert(sBuffer.indexOf(SELECT_KEYWORD) + strlen(SELECT_KEYWORD), - " FIRST " + sLimitValue); + Concat2View(" FIRST " + sLimitValue)); } _out_rString = sBuffer.makeStringAndClear(); @@ -505,7 +493,7 @@ void OSQLParseNode::impl_parseNodeToString_throw(OUStringBuffer& rString, const else i++; } - rString.append(aStringPara.makeStringAndClear()); + rString.append(aStringPara); } bHandled = true; break; @@ -757,7 +745,7 @@ void OSQLParseNode::impl_parseLikeNodeToString_throw( OUStringBuffer& rString, c { OUString aStr = ConvertLikeToken(pParaNode, pEscNode, rParam.bInternational); rString.append(" "); - rString.append(SetQuotation(aStr,"\'","\'\'")); + rString.append(SetQuotation(aStr, u"\'", u"\'\'")); } else pParaNode->impl_parseNodeToString_throw( rString, aNewParam, false ); @@ -815,7 +803,7 @@ void OSQLParser::killThousandSeparator(OSQLParseNode* pLiteral) { if ( pLiteral ) { - if ( s_xLocaleData->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' ) + if ( s_xLocaleData.get()->get()->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' ) { pLiteral->m_aNodeValue = pLiteral->m_aNodeValue.replace('.', sal_Unicode()); // and replace decimal @@ -823,7 +811,7 @@ void OSQLParser::killThousandSeparator(OSQLParseNode* pLiteral) } else pLiteral->m_aNodeValue = pLiteral->m_aNodeValue.replace(',', sal_Unicode()); - } + } } OSQLParseNode* OSQLParser::convertNode(sal_Int32 nType, OSQLParseNode* pLiteral) @@ -1130,7 +1118,7 @@ OUString OSQLParser::stringToDouble(const OUString& _rValue,sal_Int16 _nScale) OUString aValue; if(!m_xCharClass.is()) m_xCharClass = CharacterClassification::create( m_xContext ); - if( s_xLocaleData.is() ) + if( s_xLocaleData.get() ) { try { @@ -1140,8 +1128,9 @@ OUString OSQLParser::stringToDouble(const OUString& _rValue,sal_Int16 _nScale) aValue = OUString::number(aResult.Value); sal_Int32 nPos = aValue.lastIndexOf('.'); if((nPos+_nScale) < aValue.getLength()) - aValue = aValue.replaceAt(nPos+_nScale,aValue.getLength()-nPos-_nScale,OUString()); - aValue = aValue.replaceAt(aValue.lastIndexOf('.'),1,s_xLocaleData->getLocaleItem(m_pData->aLocale).decimalSeparator); + aValue = aValue.replaceAt(nPos+_nScale,aValue.getLength()-nPos-_nScale, u""); + OUString sDecimalSeparator = s_xLocaleData.get()->get()->getLocaleItem(m_pData->aLocale).decimalSeparator; + aValue = aValue.replaceAt(aValue.lastIndexOf('.'), 1, sDecimalSeparator); return aValue; } } @@ -1153,9 +1142,9 @@ OUString OSQLParser::stringToDouble(const OUString& _rValue,sal_Int16 _nScale) } -::osl::Mutex& OSQLParser::getMutex() +std::mutex& OSQLParser::getMutex() { - static ::osl::Mutex aMutex; + static std::mutex aMutex; return aMutex; } @@ -1166,7 +1155,7 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage bool bUseRealName) { // Guard the parsing - ::osl::MutexGuard aGuard(getMutex()); + std::unique_lock aGuard(getMutex()); // must be reset setParser(this); @@ -1259,7 +1248,7 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage s_pScanner->SetRule(OSQLScanner::GetSTRINGRule()); break; default: - if ( s_xLocaleData->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' ) + if ( s_xLocaleData.get()->get()->getLocaleItem( m_pData->aLocale ).decimalSeparator.toChar() == ',' ) s_pScanner->SetRule(OSQLScanner::GetGERRule()); else s_pScanner->SetRule(OSQLScanner::GetENGRule()); @@ -1294,7 +1283,8 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage // clear the garbage collector (*s_pGarbageCollector)->clearAndDelete(); - m_pParseTree.release(); // because the garbage collector deleted it + // coverity[leaked_storage : FALSE] - because the garbage collector deleted it + m_pParseTree.release(); return nullptr; } else @@ -1316,12 +1306,15 @@ std::unique_ptr<OSQLParseNode> OSQLParser::predicateTree(OUString& rErrorMessage } -OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >& rxContext, const IParseContext* _pContext) +OSQLParser::OSQLParser(css::uno::Reference< css::uno::XComponentContext > xContext, + const IParseContext* _pContext, + const IParseContext* _pNeutral) :m_pContext(_pContext) + ,m_pNeutral(_pNeutral) ,m_pData( new OSQLParser_Data ) ,m_nFormatKey(0) ,m_nDateFormatKey(0) - ,m_xContext(rxContext) + ,m_xContext(std::move(xContext)) { @@ -1333,7 +1326,7 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >& #endif #endif - ::osl::MutexGuard aGuard(getMutex()); + std::unique_lock aGuard(getMutex()); // Do we have to initialize the data? if (s_nRefCount == 0) { @@ -1341,8 +1334,8 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >& s_pScanner->setScanner(); s_pGarbageCollector = new OSQLParseNodesGarbageCollector(); - if(!s_xLocaleData.is()) - s_xLocaleData = LocaleData::create(m_xContext); + if(!s_xLocaleData.get()) + s_xLocaleData.set(LocaleData::create(m_xContext)); // reset to UNKNOWN_RULE static_assert(OSQLParseNode::UNKNOWN_RULE==0, "UNKNOWN_RULE must be 0 for memset to 0 to work"); @@ -1354,109 +1347,109 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >& OString sRuleName; // the name of the rule ("select_statement") } aRuleDescriptions[] = { - { OSQLParseNode::select_statement, "select_statement" }, - { OSQLParseNode::table_exp, "table_exp" }, - { OSQLParseNode::table_ref_commalist, "table_ref_commalist" }, - { OSQLParseNode::table_ref, "table_ref" }, - { OSQLParseNode::catalog_name, "catalog_name" }, - { OSQLParseNode::schema_name, "schema_name" }, - { OSQLParseNode::table_name, "table_name" }, - { OSQLParseNode::opt_column_commalist, "opt_column_commalist" }, - { OSQLParseNode::column_commalist, "column_commalist" }, - { OSQLParseNode::column_ref_commalist, "column_ref_commalist" }, - { OSQLParseNode::column_ref, "column_ref" }, - { OSQLParseNode::opt_order_by_clause, "opt_order_by_clause" }, - { OSQLParseNode::ordering_spec_commalist, "ordering_spec_commalist" }, - { OSQLParseNode::ordering_spec, "ordering_spec" }, - { OSQLParseNode::opt_asc_desc, "opt_asc_desc" }, - { OSQLParseNode::where_clause, "where_clause" }, - { OSQLParseNode::opt_where_clause, "opt_where_clause" }, - { OSQLParseNode::search_condition, "search_condition" }, - { OSQLParseNode::comparison, "comparison" }, - { OSQLParseNode::comparison_predicate, "comparison_predicate" }, - { OSQLParseNode::between_predicate, "between_predicate" }, - { OSQLParseNode::like_predicate, "like_predicate" }, - { OSQLParseNode::opt_escape, "opt_escape" }, - { OSQLParseNode::test_for_null, "test_for_null" }, - { OSQLParseNode::scalar_exp_commalist, "scalar_exp_commalist" }, - { OSQLParseNode::scalar_exp, "scalar_exp" }, - { OSQLParseNode::parameter_ref, "parameter_ref" }, - { OSQLParseNode::parameter, "parameter" }, - { OSQLParseNode::general_set_fct, "general_set_fct" }, - { OSQLParseNode::range_variable, "range_variable" }, - { OSQLParseNode::column, "column" }, - { OSQLParseNode::delete_statement_positioned, "delete_statement_positioned" }, - { OSQLParseNode::delete_statement_searched, "delete_statement_searched" }, - { OSQLParseNode::update_statement_positioned, "update_statement_positioned" }, - { OSQLParseNode::update_statement_searched, "update_statement_searched" }, - { OSQLParseNode::assignment_commalist, "assignment_commalist" }, - { OSQLParseNode::assignment, "assignment" }, - { OSQLParseNode::values_or_query_spec, "values_or_query_spec" }, - { OSQLParseNode::insert_statement, "insert_statement" }, - { OSQLParseNode::insert_atom_commalist, "insert_atom_commalist" }, - { OSQLParseNode::insert_atom, "insert_atom" }, - { OSQLParseNode::from_clause, "from_clause" }, - { OSQLParseNode::qualified_join, "qualified_join" }, - { OSQLParseNode::cross_union, "cross_union" }, - { OSQLParseNode::select_sublist, "select_sublist" }, - { OSQLParseNode::derived_column, "derived_column" }, - { OSQLParseNode::column_val, "column_val" }, - { OSQLParseNode::set_fct_spec, "set_fct_spec" }, - { OSQLParseNode::boolean_term, "boolean_term" }, - { OSQLParseNode::boolean_primary, "boolean_primary" }, - { OSQLParseNode::num_value_exp, "num_value_exp" }, - { OSQLParseNode::join_type, "join_type" }, - { OSQLParseNode::position_exp, "position_exp" }, - { OSQLParseNode::extract_exp, "extract_exp" }, - { OSQLParseNode::length_exp, "length_exp" }, - { OSQLParseNode::char_value_fct, "char_value_fct" }, - { OSQLParseNode::odbc_call_spec, "odbc_call_spec" }, - { OSQLParseNode::in_predicate, "in_predicate" }, - { OSQLParseNode::existence_test, "existence_test" }, - { OSQLParseNode::unique_test, "unique_test" }, - { OSQLParseNode::all_or_any_predicate, "all_or_any_predicate" }, - { OSQLParseNode::named_columns_join, "named_columns_join" }, - { OSQLParseNode::join_condition, "join_condition" }, - { OSQLParseNode::joined_table, "joined_table" }, - { OSQLParseNode::boolean_factor, "boolean_factor" }, - { OSQLParseNode::sql_not, "sql_not" }, - { OSQLParseNode::manipulative_statement, "manipulative_statement" }, - { OSQLParseNode::subquery, "subquery" }, - { OSQLParseNode::value_exp_commalist, "value_exp_commalist" }, - { OSQLParseNode::odbc_fct_spec, "odbc_fct_spec" }, - { OSQLParseNode::union_statement, "union_statement" }, - { OSQLParseNode::outer_join_type, "outer_join_type" }, - { OSQLParseNode::char_value_exp, "char_value_exp" }, - { OSQLParseNode::term, "term" }, - { OSQLParseNode::value_exp_primary, "value_exp_primary" }, - { OSQLParseNode::value_exp, "value_exp" }, - { OSQLParseNode::selection, "selection" }, - { OSQLParseNode::fold, "fold" }, - { OSQLParseNode::char_substring_fct, "char_substring_fct" }, - { OSQLParseNode::factor, "factor" }, - { OSQLParseNode::base_table_def, "base_table_def" }, - { OSQLParseNode::base_table_element_commalist, "base_table_element_commalist" }, - { OSQLParseNode::data_type, "data_type" }, - { OSQLParseNode::column_def, "column_def" }, - { OSQLParseNode::table_node, "table_node" }, - { OSQLParseNode::as_clause, "as_clause" }, - { OSQLParseNode::opt_as, "opt_as" }, - { OSQLParseNode::op_column_commalist, "op_column_commalist" }, - { OSQLParseNode::table_primary_as_range_column, "table_primary_as_range_column" }, - { OSQLParseNode::datetime_primary, "datetime_primary" }, - { OSQLParseNode::concatenation, "concatenation" }, - { OSQLParseNode::char_factor, "char_factor" }, - { OSQLParseNode::bit_value_fct, "bit_value_fct" }, - { OSQLParseNode::comparison_predicate_part_2, "comparison_predicate_part_2" }, - { OSQLParseNode::parenthesized_boolean_value_expression, "parenthesized_boolean_value_expression" }, - { OSQLParseNode::character_string_type, "character_string_type" }, - { OSQLParseNode::other_like_predicate_part_2, "other_like_predicate_part_2" }, - { OSQLParseNode::between_predicate_part_2, "between_predicate_part_2" }, - { OSQLParseNode::null_predicate_part_2, "null_predicate_part_2" }, - { OSQLParseNode::cast_spec, "cast_spec" }, - { OSQLParseNode::window_function, "window_function" } + { OSQLParseNode::select_statement, "select_statement"_ostr }, + { OSQLParseNode::table_exp, "table_exp"_ostr }, + { OSQLParseNode::table_ref_commalist, "table_ref_commalist"_ostr }, + { OSQLParseNode::table_ref, "table_ref"_ostr }, + { OSQLParseNode::catalog_name, "catalog_name"_ostr }, + { OSQLParseNode::schema_name, "schema_name"_ostr }, + { OSQLParseNode::table_name, "table_name"_ostr }, + { OSQLParseNode::opt_column_commalist, "opt_column_commalist"_ostr }, + { OSQLParseNode::column_commalist, "column_commalist"_ostr }, + { OSQLParseNode::column_ref_commalist, "column_ref_commalist"_ostr }, + { OSQLParseNode::column_ref, "column_ref"_ostr }, + { OSQLParseNode::opt_order_by_clause, "opt_order_by_clause"_ostr }, + { OSQLParseNode::ordering_spec_commalist, "ordering_spec_commalist"_ostr }, + { OSQLParseNode::ordering_spec, "ordering_spec"_ostr }, + { OSQLParseNode::opt_asc_desc, "opt_asc_desc"_ostr }, + { OSQLParseNode::where_clause, "where_clause"_ostr }, + { OSQLParseNode::opt_where_clause, "opt_where_clause"_ostr }, + { OSQLParseNode::search_condition, "search_condition"_ostr }, + { OSQLParseNode::comparison, "comparison"_ostr }, + { OSQLParseNode::comparison_predicate, "comparison_predicate"_ostr }, + { OSQLParseNode::between_predicate, "between_predicate"_ostr }, + { OSQLParseNode::like_predicate, "like_predicate"_ostr }, + { OSQLParseNode::opt_escape, "opt_escape"_ostr }, + { OSQLParseNode::test_for_null, "test_for_null"_ostr }, + { OSQLParseNode::scalar_exp_commalist, "scalar_exp_commalist"_ostr }, + { OSQLParseNode::scalar_exp, "scalar_exp"_ostr }, + { OSQLParseNode::parameter_ref, "parameter_ref"_ostr }, + { OSQLParseNode::parameter, "parameter"_ostr }, + { OSQLParseNode::general_set_fct, "general_set_fct"_ostr }, + { OSQLParseNode::range_variable, "range_variable"_ostr }, + { OSQLParseNode::column, "column"_ostr }, + { OSQLParseNode::delete_statement_positioned, "delete_statement_positioned"_ostr }, + { OSQLParseNode::delete_statement_searched, "delete_statement_searched"_ostr }, + { OSQLParseNode::update_statement_positioned, "update_statement_positioned"_ostr }, + { OSQLParseNode::update_statement_searched, "update_statement_searched"_ostr }, + { OSQLParseNode::assignment_commalist, "assignment_commalist"_ostr }, + { OSQLParseNode::assignment, "assignment"_ostr }, + { OSQLParseNode::values_or_query_spec, "values_or_query_spec"_ostr }, + { OSQLParseNode::insert_statement, "insert_statement"_ostr }, + { OSQLParseNode::insert_atom_commalist, "insert_atom_commalist"_ostr }, + { OSQLParseNode::insert_atom, "insert_atom"_ostr }, + { OSQLParseNode::from_clause, "from_clause"_ostr }, + { OSQLParseNode::qualified_join, "qualified_join"_ostr }, + { OSQLParseNode::cross_union, "cross_union"_ostr }, + { OSQLParseNode::select_sublist, "select_sublist"_ostr }, + { OSQLParseNode::derived_column, "derived_column"_ostr }, + { OSQLParseNode::column_val, "column_val"_ostr }, + { OSQLParseNode::set_fct_spec, "set_fct_spec"_ostr }, + { OSQLParseNode::boolean_term, "boolean_term"_ostr }, + { OSQLParseNode::boolean_primary, "boolean_primary"_ostr }, + { OSQLParseNode::num_value_exp, "num_value_exp"_ostr }, + { OSQLParseNode::join_type, "join_type"_ostr }, + { OSQLParseNode::position_exp, "position_exp"_ostr }, + { OSQLParseNode::extract_exp, "extract_exp"_ostr }, + { OSQLParseNode::length_exp, "length_exp"_ostr }, + { OSQLParseNode::char_value_fct, "char_value_fct"_ostr }, + { OSQLParseNode::odbc_call_spec, "odbc_call_spec"_ostr }, + { OSQLParseNode::in_predicate, "in_predicate"_ostr }, + { OSQLParseNode::existence_test, "existence_test"_ostr }, + { OSQLParseNode::unique_test, "unique_test"_ostr }, + { OSQLParseNode::all_or_any_predicate, "all_or_any_predicate"_ostr }, + { OSQLParseNode::named_columns_join, "named_columns_join"_ostr }, + { OSQLParseNode::join_condition, "join_condition"_ostr }, + { OSQLParseNode::joined_table, "joined_table"_ostr }, + { OSQLParseNode::boolean_factor, "boolean_factor"_ostr }, + { OSQLParseNode::sql_not, "sql_not"_ostr }, + { OSQLParseNode::manipulative_statement, "manipulative_statement"_ostr }, + { OSQLParseNode::subquery, "subquery"_ostr }, + { OSQLParseNode::value_exp_commalist, "value_exp_commalist"_ostr }, + { OSQLParseNode::odbc_fct_spec, "odbc_fct_spec"_ostr }, + { OSQLParseNode::union_statement, "union_statement"_ostr }, + { OSQLParseNode::outer_join_type, "outer_join_type"_ostr }, + { OSQLParseNode::char_value_exp, "char_value_exp"_ostr }, + { OSQLParseNode::term, "term"_ostr }, + { OSQLParseNode::value_exp_primary, "value_exp_primary"_ostr }, + { OSQLParseNode::value_exp, "value_exp"_ostr }, + { OSQLParseNode::selection, "selection"_ostr }, + { OSQLParseNode::fold, "fold"_ostr }, + { OSQLParseNode::char_substring_fct, "char_substring_fct"_ostr }, + { OSQLParseNode::factor, "factor"_ostr }, + { OSQLParseNode::base_table_def, "base_table_def"_ostr }, + { OSQLParseNode::base_table_element_commalist, "base_table_element_commalist"_ostr }, + { OSQLParseNode::data_type, "data_type"_ostr }, + { OSQLParseNode::column_def, "column_def"_ostr }, + { OSQLParseNode::table_node, "table_node"_ostr }, + { OSQLParseNode::as_clause, "as_clause"_ostr }, + { OSQLParseNode::opt_as, "opt_as"_ostr }, + { OSQLParseNode::op_column_commalist, "op_column_commalist"_ostr }, + { OSQLParseNode::table_primary_as_range_column, "table_primary_as_range_column"_ostr }, + { OSQLParseNode::datetime_primary, "datetime_primary"_ostr }, + { OSQLParseNode::concatenation, "concatenation"_ostr }, + { OSQLParseNode::char_factor, "char_factor"_ostr }, + { OSQLParseNode::bit_value_fct, "bit_value_fct"_ostr }, + { OSQLParseNode::comparison_predicate_part_2, "comparison_predicate_part_2"_ostr }, + { OSQLParseNode::parenthesized_boolean_value_expression, "parenthesized_boolean_value_expression"_ostr }, + { OSQLParseNode::character_string_type, "character_string_type"_ostr }, + { OSQLParseNode::other_like_predicate_part_2, "other_like_predicate_part_2"_ostr }, + { OSQLParseNode::between_predicate_part_2, "between_predicate_part_2"_ostr }, + { OSQLParseNode::null_predicate_part_2, "null_predicate_part_2"_ostr }, + { OSQLParseNode::cast_spec, "cast_spec"_ostr }, + { OSQLParseNode::window_function, "window_function"_ostr } }; - const size_t nRuleMapCount = SAL_N_ELEMENTS( aRuleDescriptions ); + const size_t nRuleMapCount = std::size( aRuleDescriptions ); // added a new rule? Adjust this map! // +1 for UNKNOWN_RULE static_assert(nRuleMapCount + 1 == static_cast<size_t>(OSQLParseNode::rule_count), "must be equal"); @@ -1483,7 +1476,7 @@ OSQLParser::OSQLParser(const css::uno::Reference< css::uno::XComponentContext >& OSQLParser::~OSQLParser() { - ::osl::MutexGuard aGuard(getMutex()); + std::unique_lock aGuard(getMutex()); OSL_ENSURE(s_nRefCount > 0, "OSQLParser::~OSQLParser() : suspicious call : has a refcount of 0 !"); if (!--s_nRefCount) { @@ -1493,11 +1486,8 @@ OSQLParser::~OSQLParser() delete s_pGarbageCollector; s_pGarbageCollector = nullptr; - // Is only set the first time, so we should delete it only when there are no more instances - s_xLocaleData = nullptr; - RuleIDMap aEmpty; - s_aReverseRuleIDLookup.swap( aEmpty ); + RuleIDMap().swap(s_aReverseRuleIDLookup); } m_pParseTree = nullptr; } @@ -1511,7 +1501,7 @@ void OSQLParseNode::substituteParameterNames(OSQLParseNode const * _pNode) if(SQL_ISRULE(pChildNode,parameter) && pChildNode->count() > 1) { OSQLParseNode* pNewNode = new OSQLParseNode("?" ,SQLNodeType::Punctuation,0); - delete pChildNode->replace(pChildNode->getChild(0),pNewNode); + pChildNode->replaceAndDelete(pChildNode->getChild(0), pNewNode); sal_Int32 nChildCount = pChildNode->count(); for(sal_Int32 j=1;j < nChildCount;++j) delete pChildNode->removeAt(1); @@ -1612,11 +1602,11 @@ OSQLParseNode::OSQLParseNode(std::string_view _rNewValue, OSL_ENSURE(m_eNodeType >= SQLNodeType::Rule && m_eNodeType <= SQLNodeType::Concat,"OSQLParseNode: created with invalid NodeType"); } -OSQLParseNode::OSQLParseNode(const OUString &_rNewValue, +OSQLParseNode::OSQLParseNode(OUString _aNewValue, SQLNodeType eNewNodeType, sal_uInt32 nNewNodeID) :m_pParent(nullptr) - ,m_aNodeValue(_rNewValue) + ,m_aNodeValue(std::move(_aNewValue)) ,m_eNodeType(eNewNodeType) ,m_nNodeID(nNewNodeID) { @@ -1704,54 +1694,53 @@ void OSQLParseNode::append(OSQLParseNode* pNewNode) bool OSQLParseNode::addDateValue(OUStringBuffer& rString, const SQLParseNodeParameter& rParam) const { // special display for date/time values - if (SQL_ISRULE(this,set_fct_spec) && SQL_ISPUNCTUATION(m_aChildren[0],"{")) - { - const OSQLParseNode* pODBCNode = m_aChildren[1].get(); - const OSQLParseNode* pODBCNodeChild = pODBCNode->m_aChildren[0].get(); + if (!SQL_ISRULE(this,set_fct_spec) || !SQL_ISPUNCTUATION(m_aChildren[0],"{")) + return false; - if (pODBCNodeChild->getNodeType() == SQLNodeType::Keyword && ( - SQL_ISTOKEN(pODBCNodeChild, D) || - SQL_ISTOKEN(pODBCNodeChild, T) || - SQL_ISTOKEN(pODBCNodeChild, TS) )) - { - OUString suQuote("'"); - if (rParam.bPredicate) - { - if (rParam.aMetaData.shouldEscapeDateTime()) - { - suQuote = "#"; - } - } - else - { - if (rParam.aMetaData.shouldEscapeDateTime()) - { - // suQuote = "'"; - return false; - } - } + const OSQLParseNode* pODBCNode = m_aChildren[1].get(); + const OSQLParseNode* pODBCNodeChild = pODBCNode->m_aChildren[0].get(); - if (!rString.isEmpty()) - rString.append(" "); - rString.append(suQuote); - const OUString sTokenValue = pODBCNode->m_aChildren[1]->getTokenValue(); - if (SQL_ISTOKEN(pODBCNodeChild, D)) - { - rString.append(rParam.bPredicate ? convertDateString(rParam, sTokenValue) : sTokenValue); - } - else if (SQL_ISTOKEN(pODBCNodeChild, T)) - { - rString.append(rParam.bPredicate ? convertTimeString(rParam, sTokenValue) : sTokenValue); - } - else - { - rString.append(rParam.bPredicate ? convertDateTimeString(rParam, sTokenValue) : sTokenValue); - } - rString.append(suQuote); - return true; - } + if (pODBCNodeChild->getNodeType() != SQLNodeType::Keyword || !( + SQL_ISTOKEN(pODBCNodeChild, D) || + SQL_ISTOKEN(pODBCNodeChild, T) || + SQL_ISTOKEN(pODBCNodeChild, TS) )) + return false; + + OUString suQuote("'"); + if (rParam.bPredicate) + { + if (rParam.aMetaData.shouldEscapeDateTime()) + { + suQuote = "#"; + } } - return false; + else + { + if (rParam.aMetaData.shouldEscapeDateTime()) + { + // suQuote = "'"; + return false; + } + } + + if (!rString.isEmpty()) + rString.append(" "); + rString.append(suQuote); + const OUString sTokenValue = pODBCNode->m_aChildren[1]->getTokenValue(); + if (SQL_ISTOKEN(pODBCNodeChild, D)) + { + rString.append(rParam.bPredicate ? convertDateString(rParam, sTokenValue) : sTokenValue); + } + else if (SQL_ISTOKEN(pODBCNodeChild, T)) + { + rString.append(rParam.bPredicate ? convertTimeString(rParam, sTokenValue) : sTokenValue); + } + else + { + rString.append(rParam.bPredicate ? convertDateTimeString(rParam, sTokenValue) : sTokenValue); + } + rString.append(suQuote); + return true; } void OSQLParseNode::replaceNodeValue(const OUString& rTableAlias, const OUString& rColumnName) @@ -1845,10 +1834,11 @@ void OSQLParseNode::disjunctiveNormalForm(OSQLParseNode*& pSearchCondition) OSQLParseNode* pNewRight = nullptr; // cut right from parent - pSearchCondition->removeAt(2); + OSQLParseNode* pOldRight = pSearchCondition->removeAt(2); + assert(pOldRight == pRight); - pNewRight = MakeANDNode(pOr->removeAt(2) ,pRight); - pNewLeft = MakeANDNode(pOr->removeAt(sal_uInt32(0)) ,new OSQLParseNode(*pRight)); + pNewRight = MakeANDNode(pOr->removeAt(2), pOldRight); + pNewLeft = MakeANDNode(pOr->removeAt(sal_uInt32(0)), new OSQLParseNode(*pOldRight)); pNewNode = MakeORNode(pNewLeft,pNewRight); // and append new Node replaceAndReset(pSearchCondition,pNewNode); @@ -1864,10 +1854,11 @@ void OSQLParseNode::disjunctiveNormalForm(OSQLParseNode*& pSearchCondition) OSQLParseNode* pNewRight = nullptr; // cut left from parent - pSearchCondition->removeAt(sal_uInt32(0)); + OSQLParseNode* pOldLeft = pSearchCondition->removeAt(sal_uInt32(0)); + assert(pOldLeft == pLeft); - pNewRight = MakeANDNode(pLeft,pOr->removeAt(2)); - pNewLeft = MakeANDNode(new OSQLParseNode(*pLeft),pOr->removeAt(sal_uInt32(0))); + pNewRight = MakeANDNode(pOldLeft, pOr->removeAt(2)); + pNewLeft = MakeANDNode(new OSQLParseNode(*pOldLeft), pOr->removeAt(sal_uInt32(0))); pNewNode = MakeORNode(pNewLeft,pNewRight); // and append new Node @@ -1875,9 +1866,9 @@ void OSQLParseNode::disjunctiveNormalForm(OSQLParseNode*& pSearchCondition) disjunctiveNormalForm(pSearchCondition); } else if(SQL_ISRULE(pLeft,boolean_primary) && (!SQL_ISRULE(pLeft->getChild(1),search_condition) || !SQL_ISRULE(pLeft->getChild(1),boolean_term))) - pSearchCondition->replace(pLeft, pLeft->removeAt(1)); + pSearchCondition->replaceAndDelete(pLeft, pLeft->removeAt(1)); else if(SQL_ISRULE(pRight,boolean_primary) && (!SQL_ISRULE(pRight->getChild(1),search_condition) || !SQL_ISRULE(pRight->getChild(1),boolean_term))) - pSearchCondition->replace(pRight, pRight->removeAt(1)); + pSearchCondition->replaceAndDelete(pRight, pRight->removeAt(1)); } } @@ -1964,8 +1955,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool assert(SQL_ISTOKEN(pNot,NOT)); pNotNot = new OSQLParseNode(OUString(),SQLNodeType::Rule,OSQLParser::RuleID(OSQLParseNode::sql_not)); } - pComparison->replace(pNot, pNotNot); - delete pNot; + pComparison->replaceAndDelete(pNot, pNotNot); } else { @@ -1994,8 +1984,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool pNewComparison = new OSQLParseNode("=",SQLNodeType::Equal,SQL_EQUAL); break; } - pSearchCondition->replace(pComparison, pNewComparison); - delete pComparison; + pSearchCondition->replaceAndDelete(pComparison, pNewComparison); } } @@ -2017,8 +2006,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool assert(SQL_ISTOKEN(pNot,NOT)); pNotNot = new OSQLParseNode(OUString(),SQLNodeType::Rule,OSQLParser::RuleID(OSQLParseNode::sql_not)); } - pPart2->replace(pNot, pNotNot); - delete pNot; + pPart2->replaceAndDelete(pNot, pNotNot); } else if(bNegate && SQL_ISRULE(pSearchCondition,like_predicate)) { @@ -2028,8 +2016,7 @@ void OSQLParseNode::negateSearchCondition(OSQLParseNode*& pSearchCondition, bool pNotNot = new OSQLParseNode("NOT",SQLNodeType::Keyword,SQL_TOKEN_NOT); else pNotNot = new OSQLParseNode(OUString(),SQLNodeType::Rule,OSQLParser::RuleID(OSQLParseNode::sql_not)); - pSearchCondition->getChild( 1 )->replace(pNot, pNotNot); - delete pNot; + pSearchCondition->getChild( 1 )->replaceAndDelete(pNot, pNotNot); } } @@ -2365,7 +2352,7 @@ void OSQLParseNode::showParseTree( OUStringBuffer& _inout_rBuffer, sal_uInt32 nL void OSQLParseNode::insert(sal_uInt32 nPos, OSQLParseNode* pNewSubTree) { - OSL_ENSURE(pNewSubTree != nullptr, "OSQLParseNode: invalid NewSubTree"); + assert(pNewSubTree != nullptr && "OSQLParseNode: invalid NewSubTree"); OSL_ENSURE(pNewSubTree->getParent() == nullptr, "OSQLParseNode: Node is not an orphan"); // Create connection to getParent @@ -2377,7 +2364,7 @@ void OSQLParseNode::insert(sal_uInt32 nPos, OSQLParseNode* pNewSubTree) OSQLParseNode* OSQLParseNode::removeAt(sal_uInt32 nPos) { - OSL_ENSURE(nPos < m_aChildren.size(),"Illegal position for removeAt"); + assert(nPos < m_aChildren.size() && "Illegal position for removeAt"); auto aPos(m_aChildren.begin() + nPos); auto pNode = std::move(*aPos); @@ -2390,27 +2377,24 @@ OSQLParseNode* OSQLParseNode::removeAt(sal_uInt32 nPos) // Replace methods -OSQLParseNode* OSQLParseNode::replace(OSQLParseNode* pOldSubNode, OSQLParseNode* pNewSubNode ) +void OSQLParseNode::replaceAndDelete(OSQLParseNode* pOldSubNode, OSQLParseNode* pNewSubNode ) { - OSL_ENSURE(pOldSubNode != nullptr && pNewSubNode != nullptr, "OSQLParseNode: invalid nodes"); - OSL_ENSURE(pNewSubNode->getParent() == nullptr, "OSQLParseNode: node already has getParent"); - OSL_ENSURE(std::any_of(m_aChildren.begin(), m_aChildren.end(), - [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pOldSubNode; }), - "OSQLParseNode::Replace() Node not element of parent"); - OSL_ENSURE(std::none_of(m_aChildren.begin(), m_aChildren.end(), - [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pNewSubNode; }), - "OSQLParseNode::Replace() Node already element of parent"); + assert(pOldSubNode != nullptr && pNewSubNode != nullptr && "OSQLParseNode: invalid nodes"); + assert(pOldSubNode != pNewSubNode && "OSQLParseNode: same node"); + assert(pNewSubNode->getParent() == nullptr && "OSQLParseNode: node already has getParent"); + assert(std::any_of(m_aChildren.begin(), m_aChildren.end(), + [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pOldSubNode; }) + && "OSQLParseNode::Replace() Node not element of parent"); + assert(std::none_of(m_aChildren.begin(), m_aChildren.end(), + [&] (std::unique_ptr<OSQLParseNode> const & r) { return r.get() == pNewSubNode; }) + && "OSQLParseNode::Replace() Node already element of parent"); pOldSubNode->setParent( nullptr ); pNewSubNode->setParent( this ); auto it = std::find_if(m_aChildren.begin(), m_aChildren.end(), [&pOldSubNode](const std::unique_ptr<OSQLParseNode>& rxChild) { return rxChild.get() == pOldSubNode; }); - if (it != m_aChildren.end()) - { - it->release(); - it->reset(pNewSubNode); - } - return pOldSubNode; + assert(it != m_aChildren.end()); + it->reset(pNewSubNode); } void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParameter& rParam) const @@ -2430,7 +2414,7 @@ void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParamet case SQLNodeType::String: if (!rString.isEmpty()) rString.append(" "); - rString.append(SetQuotation(m_aNodeValue,"\'","\'\'")); + rString.append(SetQuotation(m_aNodeValue, u"\'", u"\'\'")); break; case SQLNodeType::Name: if (!rString.isEmpty()) @@ -2474,7 +2458,7 @@ void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParamet case SQLNodeType::ApproxNum: { OUString aTmp = m_aNodeValue; - static OUString strPoint("."); + static constexpr OUString strPoint(u"."_ustr); if (rParam.bInternational && rParam.bPredicate && rParam.sDecSep != strPoint) aTmp = aTmp.replaceAll(strPoint, rParam.sDecSep); @@ -2512,7 +2496,7 @@ void OSQLParseNode::parseLeaf(OUStringBuffer& rString, const SQLParseNodeParamet sal_Int32 OSQLParser::getFunctionReturnType(std::u16string_view _sFunctionName, const IParseContext* pContext) { - sal_Int32 nType = DataType::VARCHAR; + sal_Int32 nType = DataType::SQLNULL; OString sFunctionName(OUStringToOString(_sFunctionName,RTL_TEXTENCODING_UTF8)); if(sFunctionName.equalsIgnoreAsciiCase(TokenIDToStr(SQL_TOKEN_ASCII,pContext))) nType = DataType::INTEGER; @@ -2749,13 +2733,13 @@ OSQLParseNodesContainer::~OSQLParseNodesContainer() void OSQLParseNodesContainer::push_back(OSQLParseNode* _pNode) { - ::osl::MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); m_aNodes.push_back(_pNode); } void OSQLParseNodesContainer::erase(OSQLParseNode* _pNode) { - ::osl::MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); if ( !m_aNodes.empty() ) { std::vector< OSQLParseNode* >::iterator aFind = std::find(m_aNodes.begin(), m_aNodes.end(),_pNode); @@ -2766,13 +2750,13 @@ void OSQLParseNodesContainer::erase(OSQLParseNode* _pNode) void OSQLParseNodesContainer::clear() { - ::osl::MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); m_aNodes.clear(); } void OSQLParseNodesContainer::clearAndDelete() { - ::osl::MutexGuard aGuard(m_aMutex); + std::unique_lock aGuard(m_aMutex); // clear the garbage collector while ( !m_aNodes.empty() ) { @@ -2781,7 +2765,9 @@ void OSQLParseNodesContainer::clearAndDelete() { pNode = pNode->getParent(); } + aGuard.unlock(); // can call back into this object during destruction delete pNode; + aGuard.lock(); } } } // namespace connectivity diff --git a/connectivity/source/resource/sharedresources.cxx b/connectivity/source/resource/sharedresources.cxx index 3f7062f6be52..cc6f65e64541 100644 --- a/connectivity/source/resource/sharedresources.cxx +++ b/connectivity/source/resource/sharedresources.cxx @@ -44,7 +44,7 @@ namespace connectivity static SharedResources_Impl& getInstance(); - OUString getResourceString(const char* pId); + OUString getResourceString(TranslateId pId) const; private: SharedResources_Impl(); @@ -66,7 +66,7 @@ namespace connectivity { } - OUString SharedResources_Impl::getResourceString(const char* pId) + OUString SharedResources_Impl::getResourceString(TranslateId pId) const { return Translate::get(pId, m_aLocale); } @@ -100,20 +100,13 @@ namespace connectivity namespace { - size_t lcl_substitute( OUString& _inout_rString, - const char* _pAsciiPattern, const OUString& _rReplace ) + bool lcl_substitute( OUString& _inout_rString, + const char* _pAsciiPattern, std::u16string_view _rReplace ) { - size_t nOccurrences = 0; - + OUString oldString = _inout_rString; OUString sPattern( OUString::createFromAscii( _pAsciiPattern ) ); - sal_Int32 nIndex = 0; - while ( ( nIndex = _inout_rString.indexOf( sPattern ) ) > -1 ) - { - ++nOccurrences; - _inout_rString = _inout_rString.replaceAt( nIndex, sPattern.getLength(), _rReplace ); - } - - return nOccurrences; + _inout_rString = _inout_rString.replaceAll(sPattern, _rReplace); + return oldString != _inout_rString; } } @@ -129,13 +122,13 @@ namespace connectivity } - OUString SharedResources::getResourceString(const char* pResId) const + OUString SharedResources::getResourceString(TranslateId pResId) const { return SharedResources_Impl::getInstance().getResourceString(pResId); } - OUString SharedResources::getResourceStringWithSubstitution(const char* pResId, + OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId, const char* _pAsciiPatternToReplace, const OUString& _rStringToSubstitute ) const { OUString sString( SharedResources_Impl::getInstance().getResourceString(pResId) ); @@ -145,7 +138,7 @@ namespace connectivity } - OUString SharedResources::getResourceStringWithSubstitution(const char* pResId, + OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId, const char* _pAsciiPatternToReplace1, const OUString& _rStringToSubstitute1, const char* _pAsciiPatternToReplace2, const OUString& _rStringToSubstitute2 ) const { @@ -158,7 +151,7 @@ namespace connectivity } - OUString SharedResources::getResourceStringWithSubstitution(const char* pResId, + OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId, const char* _pAsciiPatternToReplace1, const OUString& _rStringToSubstitute1, const char* _pAsciiPatternToReplace2, const OUString& _rStringToSubstitute2, const char* _pAsciiPatternToReplace3, const OUString& _rStringToSubstitute3 ) const @@ -173,7 +166,7 @@ namespace connectivity return sString; } - OUString SharedResources::getResourceStringWithSubstitution(const char* pResId, + OUString SharedResources::getResourceStringWithSubstitution(TranslateId pResId, const std::vector< std::pair<const char* , OUString > >& _rStringToSubstitutes) const { OUString sString( SharedResources_Impl::getInstance().getResourceString(pResId) ); diff --git a/connectivity/source/sdbcx/VCollection.cxx b/connectivity/source/sdbcx/VCollection.cxx index 860ead949074..0fa6cace50e0 100644 --- a/connectivity/source/sdbcx/VCollection.cxx +++ b/connectivity/source/sdbcx/VCollection.cxx @@ -302,7 +302,7 @@ Any SAL_CALL OCollection::getByIndex( sal_Int32 Index ) if (Index < 0 || Index >= m_pElements->size() ) throw IndexOutOfBoundsException(OUString::number(Index),static_cast<XTypeProvider*>(this)); - return makeAny(getObject(Index)); + return Any(getObject(Index)); } Any SAL_CALL OCollection::getByName( const OUString& aName ) @@ -319,7 +319,7 @@ Any SAL_CALL OCollection::getByName( const OUString& aName ) throw NoSuchElementException( sError, static_cast< XTypeProvider* >( this ) ); } - return makeAny(getObject(m_pElements->findColumn(aName))); + return Any(getObject(m_pElements->findColumn(aName))); } Sequence< OUString > SAL_CALL OCollection::getElementNames( ) @@ -374,7 +374,7 @@ void SAL_CALL OCollection::appendByDescriptor( const Reference< XPropertySet >& if ( !xNewlyCreated.is() ) throw RuntimeException(); - ODescriptor* pDescriptor = comphelper::getUnoTunnelImplementation<ODescriptor>( xNewlyCreated ); + ODescriptor* pDescriptor = dynamic_cast<ODescriptor*>( xNewlyCreated.get() ); if ( pDescriptor ) pDescriptor->setNew( false ); @@ -383,7 +383,7 @@ void SAL_CALL OCollection::appendByDescriptor( const Reference< XPropertySet >& m_pElements->insert( sName, xNewlyCreated ); // notify our container listeners - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(sName), makeAny(xNewlyCreated), Any()); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(sName), Any(xNewlyCreated), Any()); aGuard.clear(); m_aContainerListeners.notifyEach( &XContainerListener::elementInserted, aEvent ); } @@ -423,11 +423,11 @@ void OCollection::dropImpl(sal_Int32 _nIndex, bool _bReallyDrop) void OCollection::notifyElementRemoved(const OUString& _sName) { - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_sName), Any(), Any()); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_sName), Any(), Any()); // note that xExistent may be empty, in case somebody removed the data source while it is not alive at this moment - OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners); + OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) - static_cast<XContainerListener*>(aListenerLoop.next())->elementRemoved(aEvent); + aListenerLoop.next()->elementRemoved(aEvent); } sal_Int32 SAL_CALL OCollection::findColumn( const OUString& columnName ) @@ -458,12 +458,12 @@ void SAL_CALL OCollection::removeContainerListener( const Reference< XContainerL m_aContainerListeners.removeInterface(_rxListener); } -void SAL_CALL OCollection::acquire() throw() +void SAL_CALL OCollection::acquire() noexcept { m_rParent.acquire(); } -void SAL_CALL OCollection::release() throw() +void SAL_CALL OCollection::release() noexcept { m_rParent.release(); } @@ -517,11 +517,11 @@ void OCollection::renameObject(const OUString& _sOldName, const OUString& _sNewN if ( m_pElements->rename(_sOldName,_sNewName) ) { - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_sNewName), makeAny(m_pElements->getObject(_sNewName)),makeAny(_sOldName)); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_sNewName), Any(m_pElements->getObject(_sNewName)),Any(_sOldName)); // note that xExistent may be empty, in case somebody removed the data source while it is not alive at this moment - OInterfaceIteratorHelper2 aListenerLoop(m_aContainerListeners); + OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) - static_cast<XContainerListener*>(aListenerLoop.next())->elementReplaced(aEvent); + aListenerLoop.next()->elementReplaced(aEvent); } } diff --git a/connectivity/source/sdbcx/VColumn.cxx b/connectivity/source/sdbcx/VColumn.cxx index 23993453101a..ad9a52ed12ed 100644 --- a/connectivity/source/sdbcx/VColumn.cxx +++ b/connectivity/source/sdbcx/VColumn.cxx @@ -23,6 +23,7 @@ #include <cppuhelper/supportsservice.hxx> #include <TConnection.hxx> #include <com/sun/star/sdbc/ColumnValue.hpp> +#include <utility> using namespace connectivity; using namespace connectivity::sdbcx; @@ -65,9 +66,9 @@ OColumn::OColumn(bool _bCase) } OColumn::OColumn( const OUString& Name, - const OUString& TypeName, - const OUString& DefaultValue, - const OUString& Description, + OUString TypeName, + OUString DefaultValue, + OUString Description, sal_Int32 IsNullable, sal_Int32 Precision, sal_Int32 Scale, @@ -76,14 +77,14 @@ OColumn::OColumn( const OUString& Name, bool IsRowVersion, bool IsCurrency, bool _bCase, - const OUString& CatalogName, - const OUString& SchemaName, - const OUString& TableName) + OUString CatalogName, + OUString SchemaName, + OUString TableName) :OColumnDescriptor_BASE(m_aMutex) ,ODescriptor(OColumnDescriptor_BASE::rBHelper,_bCase) - ,m_TypeName(TypeName) - ,m_Description(Description) - ,m_DefaultValue(DefaultValue) + ,m_TypeName(std::move(TypeName)) + ,m_Description(std::move(Description)) + ,m_DefaultValue(std::move(DefaultValue)) ,m_IsNullable(IsNullable) ,m_Precision(Precision) ,m_Scale(Scale) @@ -91,9 +92,9 @@ OColumn::OColumn( const OUString& Name, ,m_IsAutoIncrement(IsAutoIncrement) ,m_IsRowVersion(IsRowVersion) ,m_IsCurrency(IsCurrency) - ,m_CatalogName(CatalogName) - ,m_SchemaName(SchemaName) - ,m_TableName(TableName) + ,m_CatalogName(std::move(CatalogName)) + ,m_SchemaName(std::move(SchemaName)) + ,m_TableName(std::move(TableName)) { m_Name = Name; @@ -114,12 +115,12 @@ OColumn::~OColumn() return *OColumn_PROP::getArrayHelper(isNew() ? 1 : 0); } -void SAL_CALL OColumn::acquire() throw() +void SAL_CALL OColumn::acquire() noexcept { OColumnDescriptor_BASE::acquire(); } -void SAL_CALL OColumn::release() throw() +void SAL_CALL OColumn::release() noexcept { OColumnDescriptor_BASE::release(); } @@ -169,10 +170,6 @@ void OColumn::construct() void OColumn::disposing() { OPropertySetHelper::disposing(); - - ::osl::MutexGuard aGuard(m_aMutex); - checkDisposed(OColumnDescriptor_BASE::rBHelper.bDisposed); - } Reference< XPropertySet > SAL_CALL OColumn::createDataDescriptor( ) @@ -180,8 +177,7 @@ Reference< XPropertySet > SAL_CALL OColumn::createDataDescriptor( ) ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OColumnDescriptor_BASE::rBHelper.bDisposed); - - OColumn* pNewColumn = new OColumn( m_Name, + rtl::Reference<OColumn> pNewColumn = new OColumn( m_Name, m_TypeName, m_DefaultValue, m_Description, diff --git a/connectivity/source/sdbcx/VDescriptor.cxx b/connectivity/source/sdbcx/VDescriptor.cxx index 8a32a1b58b39..d6ceabc96837 100644 --- a/connectivity/source/sdbcx/VDescriptor.cxx +++ b/connectivity/source/sdbcx/VDescriptor.cxx @@ -28,7 +28,6 @@ namespace connectivity::sdbcx { using namespace ::com::sun::star::uno; - using namespace ::com::sun::star::lang; using namespace ::com::sun::star::beans; @@ -44,14 +43,6 @@ namespace connectivity::sdbcx // css::lang::XUnoTunnel - sal_Int64 SAL_CALL ODescriptor::getSomething( const Sequence< sal_Int8 >& rId ) - { - return (isUnoTunnelId<ODescriptor>(rId)) - ? reinterpret_cast< sal_Int64 >( this ) - : 0; - } - - namespace { struct ResetROAttribute @@ -76,10 +67,11 @@ namespace connectivity::sdbcx Sequence< Property > aProperties; describeProperties( aProperties ); + auto [begin, end] = asNonConstRange(aProperties); if ( isNew() ) - std::for_each( aProperties.begin(), aProperties.end(), ResetROAttribute() ); + std::for_each( begin, end, ResetROAttribute() ); else - std::for_each( aProperties.begin(), aProperties.end(), SetROAttribute() ); + std::for_each( begin, end, SetROAttribute() ); return new ::cppu::OPropertyArrayHelper( aProperties ); } @@ -87,26 +79,11 @@ namespace connectivity::sdbcx bool ODescriptor::isNew( const Reference< XInterface >& _rxDescriptor ) { - ODescriptor* pImplementation = comphelper::getUnoTunnelImplementation<ODescriptor>( _rxDescriptor ); + ODescriptor* pImplementation = dynamic_cast<ODescriptor*>( _rxDescriptor.get() ); return pImplementation && pImplementation->isNew(); } - Sequence< sal_Int8 > ODescriptor::getUnoTunnelId() - { - static ::cppu::OImplementationId implId; - - return implId.getImplementationId(); - } - - - Any SAL_CALL ODescriptor::queryInterface( const Type & rType ) - { - Any aRet = ::cppu::queryInterface(rType,static_cast< XUnoTunnel*> (this)); - return aRet.hasValue() ? aRet : ODescriptor_PBASE::queryInterface(rType); - } - - void ODescriptor::setNew(bool _bNew) { m_bNew = _bNew; @@ -117,8 +94,7 @@ namespace connectivity::sdbcx { ::cppu::OTypeCollection aTypes( cppu::UnoType<XMultiPropertySet>::get(), cppu::UnoType<XFastPropertySet>::get(), - cppu::UnoType<XPropertySet>::get(), - cppu::UnoType<XUnoTunnel>::get()); + cppu::UnoType<XPropertySet>::get()); return aTypes.getTypes(); } diff --git a/connectivity/source/sdbcx/VGroup.cxx b/connectivity/source/sdbcx/VGroup.cxx index ed11a617526f..7a37ea3e523d 100644 --- a/connectivity/source/sdbcx/VGroup.cxx +++ b/connectivity/source/sdbcx/VGroup.cxx @@ -26,7 +26,6 @@ using namespace ::connectivity::sdbcx; using namespace ::connectivity; using namespace ::dbtools; -using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -152,12 +151,12 @@ void SAL_CALL OGroup::setName( const OUString& /*aName*/ ) } // XInterface -void SAL_CALL OGroup::acquire() throw() +void SAL_CALL OGroup::acquire() noexcept { OGroup_BASE::acquire(); } -void SAL_CALL OGroup::release() throw() +void SAL_CALL OGroup::release() noexcept { OGroup_BASE::release(); } diff --git a/connectivity/source/sdbcx/VIndex.cxx b/connectivity/source/sdbcx/VIndex.cxx index 1649ff83ad97..48e26ae1140e 100644 --- a/connectivity/source/sdbcx/VIndex.cxx +++ b/connectivity/source/sdbcx/VIndex.cxx @@ -24,7 +24,8 @@ #include <connectivity/sdbcx/VCollection.hxx> #include <cppuhelper/supportsservice.hxx> #include <TConnection.hxx> -#include <tools/diagnose_ex.h> +#include <utility> +#include <comphelper/diagnose_ex.hxx> using namespace ::connectivity; using namespace ::dbtools; @@ -32,7 +33,6 @@ using namespace ::connectivity::sdbcx; using namespace ::cppu; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -64,13 +64,13 @@ OIndex::OIndex(bool _bCase) : ODescriptor_BASE(m_aMutex) } OIndex::OIndex( const OUString& Name, - const OUString& Catalog, + OUString Catalog, bool _isUnique, bool _isPrimaryKeyIndex, bool _isClustered, bool _bCase) : ODescriptor_BASE(m_aMutex) ,ODescriptor(ODescriptor_BASE::rBHelper, _bCase) - ,m_Catalog(Catalog) + ,m_Catalog(std::move(Catalog)) ,m_IsUnique(_isUnique) ,m_IsPrimaryKeyIndex(_isPrimaryKeyIndex) ,m_IsClustered(_isClustered) @@ -181,12 +181,12 @@ void SAL_CALL OIndex::setName( const OUString& /*aName*/ ) } // XInterface -void SAL_CALL OIndex::acquire() throw() +void SAL_CALL OIndex::acquire() noexcept { ODescriptor_BASE::acquire(); } -void SAL_CALL OIndex::release() throw() +void SAL_CALL OIndex::release() noexcept { ODescriptor_BASE::release(); } diff --git a/connectivity/source/sdbcx/VKey.cxx b/connectivity/source/sdbcx/VKey.cxx index 33e9340b51c7..140bd6160709 100644 --- a/connectivity/source/sdbcx/VKey.cxx +++ b/connectivity/source/sdbcx/VKey.cxx @@ -24,12 +24,12 @@ #include <cppuhelper/supportsservice.hxx> #include <connectivity/sdbcx/VCollection.hxx> #include <TConnection.hxx> +#include <utility> using namespace connectivity; using namespace connectivity::sdbcx; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -58,10 +58,10 @@ OKey::OKey(bool _bCase) : ODescriptor_BASE(m_aMutex) { } -OKey::OKey(const OUString& Name,const std::shared_ptr<KeyProperties>& _rProps, bool _bCase) +OKey::OKey(const OUString& Name,std::shared_ptr<KeyProperties> _xProps, bool _bCase) : ODescriptor_BASE(m_aMutex) ,ODescriptor(ODescriptor_BASE::rBHelper, _bCase) - ,m_aProps(_rProps) + ,m_aProps(std::move(_xProps)) { m_Name = Name; } @@ -188,12 +188,12 @@ void SAL_CALL OKey::setName( const OUString& /*aName*/ ) } // XInterface -void SAL_CALL OKey::acquire() throw() +void SAL_CALL OKey::acquire() noexcept { ODescriptor_BASE::acquire(); } -void SAL_CALL OKey::release() throw() +void SAL_CALL OKey::release() noexcept { ODescriptor_BASE::release(); } diff --git a/connectivity/source/sdbcx/VKeyColumn.cxx b/connectivity/source/sdbcx/VKeyColumn.cxx index b6f69e65c9de..e22620fb599d 100644 --- a/connectivity/source/sdbcx/VKeyColumn.cxx +++ b/connectivity/source/sdbcx/VKeyColumn.cxx @@ -21,6 +21,7 @@ #include <com/sun/star/beans/PropertyAttribute.hpp> #include <cppuhelper/supportsservice.hxx> #include <TConnection.hxx> +#include <utility> using namespace connectivity; using namespace connectivity::sdbcx; @@ -50,7 +51,7 @@ OKeyColumn::OKeyColumn(bool _bCase) : OColumn(_bCase) construct(); } -OKeyColumn::OKeyColumn( const OUString& ReferencedColumn, +OKeyColumn::OKeyColumn( OUString ReferencedColumn, const OUString& Name, const OUString& TypeName, const OUString& DefaultValue, @@ -77,7 +78,7 @@ OKeyColumn::OKeyColumn( const OUString& ReferencedColumn, CatalogName, SchemaName, TableName) - , m_ReferencedColumn(ReferencedColumn) + , m_ReferencedColumn(std::move(ReferencedColumn)) { construct(); } diff --git a/connectivity/source/sdbcx/VTable.cxx b/connectivity/source/sdbcx/VTable.cxx index 90c7427823c0..f569d01baef3 100644 --- a/connectivity/source/sdbcx/VTable.cxx +++ b/connectivity/source/sdbcx/VTable.cxx @@ -25,6 +25,7 @@ #include <connectivity/dbtools.hxx> #include <connectivity/dbexception.hxx> #include <cppuhelper/supportsservice.hxx> +#include <utility> using namespace ::connectivity; using namespace ::connectivity::sdbcx; @@ -65,14 +66,14 @@ OTable::OTable(OCollection* _pTables, OTable::OTable( OCollection* _pTables, bool _bCase, - const OUString& Name, const OUString& Type, - const OUString& Description,const OUString& SchemaName, - const OUString& CatalogName) : OTableDescriptor_BASE(m_aMutex) + const OUString& Name, OUString Type, + OUString Description, OUString SchemaName, + OUString CatalogName) : OTableDescriptor_BASE(m_aMutex) ,ODescriptor(OTableDescriptor_BASE::rBHelper,_bCase) - ,m_CatalogName(CatalogName) - ,m_SchemaName(SchemaName) - ,m_Description(Description) - ,m_Type(Type) + ,m_CatalogName(std::move(CatalogName)) + ,m_SchemaName(std::move(SchemaName)) + ,m_Description(std::move(Description)) + ,m_Type(std::move(Type)) ,m_pTables(_pTables) { m_Name = Name; @@ -94,12 +95,12 @@ void OTable::construct() registerProperty(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE), PROPERTY_ID_TYPE, nAttrib,&m_Type, ::cppu::UnoType<OUString>::get()); } -void SAL_CALL OTable::acquire() throw() +void SAL_CALL OTable::acquire() noexcept { OTableDescriptor_BASE::acquire(); } -void SAL_CALL OTable::release() throw() +void SAL_CALL OTable::release() noexcept { OTableDescriptor_BASE::release(); } @@ -210,7 +211,7 @@ Reference< XPropertySet > SAL_CALL OTable::createDataDescriptor( ) ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OTableDescriptor_BASE::rBHelper.bDisposed); - OTable* pTable = new OTable(m_pTables,isCaseSensitive(),m_Name,m_Type,m_Description,m_SchemaName,m_CatalogName); + rtl::Reference<OTable> pTable = new OTable(m_pTables,isCaseSensitive(),m_Name,m_Type,m_Description,m_SchemaName,m_CatalogName); pTable->setNew(true); return pTable; } diff --git a/connectivity/source/sdbcx/VUser.cxx b/connectivity/source/sdbcx/VUser.cxx index 9cecd7dfdd46..85d09523c864 100644 --- a/connectivity/source/sdbcx/VUser.cxx +++ b/connectivity/source/sdbcx/VUser.cxx @@ -22,11 +22,11 @@ #include <connectivity/sdbcx/VCollection.hxx> #include <connectivity/dbexception.hxx> #include <comphelper/sequence.hxx> +#include <o3tl/unreachable.hxx> using namespace connectivity; using namespace connectivity::sdbcx; -using namespace ::com::sun::star::sdbc; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; using namespace ::com::sun::star::container; @@ -113,15 +113,12 @@ Reference< XNameAccess > SAL_CALL OUser::getGroups( ) return m_pGroups.get(); } - -SAL_WNOUNREACHABLE_CODE_PUSH - sal_Int32 SAL_CALL OUser::getPrivileges( const OUString& /*objName*/, sal_Int32 /*objType*/ ) { ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE::rBHelper.bDisposed); ::dbtools::throwFeatureNotImplementedSQLException( "XAuthorizable::changePassword", *this ); - return 0; + O3TL_UNREACHABLE; } sal_Int32 SAL_CALL OUser::getGrantablePrivileges( const OUString& /*objName*/, sal_Int32 /*objType*/ ) @@ -129,12 +126,9 @@ sal_Int32 SAL_CALL OUser::getGrantablePrivileges( const OUString& /*objName*/, s ::osl::MutexGuard aGuard(m_aMutex); checkDisposed(OUser_BASE::rBHelper.bDisposed); ::dbtools::throwFeatureNotImplementedSQLException( "XAuthorizable::getGrantablePrivileges", *this ); - return 0; + O3TL_UNREACHABLE; } -SAL_WNOUNREACHABLE_CODE_POP - - void SAL_CALL OUser::grantPrivileges( const OUString& /*objName*/, sal_Int32 /*objType*/, sal_Int32 /*objPrivileges*/ ) { ::osl::MutexGuard aGuard(m_aMutex); @@ -166,12 +160,12 @@ void SAL_CALL OUser::setName( const OUString& /*aName*/ ) } // XInterface -void SAL_CALL OUser::acquire() throw() +void SAL_CALL OUser::acquire() noexcept { OUser_BASE::acquire(); } -void SAL_CALL OUser::release() throw() +void SAL_CALL OUser::release() noexcept { OUser_BASE::release(); } diff --git a/connectivity/source/sdbcx/VView.cxx b/connectivity/source/sdbcx/VView.cxx index 317e985b5199..41828b5758cb 100644 --- a/connectivity/source/sdbcx/VView.cxx +++ b/connectivity/source/sdbcx/VView.cxx @@ -22,13 +22,13 @@ #include <comphelper/sequence.hxx> #include <connectivity/dbtools.hxx> #include <TConnection.hxx> +#include <utility> using namespace connectivity; using namespace connectivity::sdbcx; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::uno; -using namespace ::com::sun::star::sdbcx; using namespace ::com::sun::star::container; using namespace ::com::sun::star::lang; @@ -36,24 +36,24 @@ IMPLEMENT_SERVICE_INFO(OView,"com.sun.star.sdbcx.VView","com.sun.star.sdbcx.View OView::OView(bool _bCase, const OUString& Name, - const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _xMetaData, - const OUString& Command, - const OUString& SchemaName, - const OUString& CatalogName) : ODescriptor(::comphelper::OMutexAndBroadcastHelper::m_aBHelper,_bCase) - ,m_CatalogName(CatalogName) - ,m_SchemaName(SchemaName) - ,m_Command(Command) + css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData, + OUString Command, + OUString SchemaName, + OUString CatalogName) : ODescriptor(::comphelper::OMutexAndBroadcastHelper::m_aBHelper,_bCase) + ,m_CatalogName(std::move(CatalogName)) + ,m_SchemaName(std::move(SchemaName)) + ,m_Command(std::move(Command)) ,m_CheckOption(0) - ,m_xMetaData(_xMetaData) + ,m_xMetaData(std::move(_xMetaData)) { m_Name = Name; construct(); } -OView::OView(bool _bCase, const css::uno::Reference< css::sdbc::XDatabaseMetaData >& _xMetaData) +OView::OView(bool _bCase, css::uno::Reference< css::sdbc::XDatabaseMetaData > _xMetaData) : ODescriptor(::comphelper::OMutexAndBroadcastHelper::m_aBHelper, _bCase, true) - ,m_xMetaData(_xMetaData) + ,m_xMetaData(std::move(_xMetaData)) { construct(); } @@ -118,12 +118,12 @@ void SAL_CALL OView::setName( const OUString& ) { } -void SAL_CALL OView::acquire() throw() +void SAL_CALL OView::acquire() noexcept { OView_BASE::acquire(); } -void SAL_CALL OView::release() throw() +void SAL_CALL OView::release() noexcept { OView_BASE::release(); } |