diff options
Diffstat (limited to 'connectivity/source/drivers')
286 files changed, 4412 insertions, 3205 deletions
diff --git a/connectivity/source/drivers/ado/AColumn.cxx b/connectivity/source/drivers/ado/AColumn.cxx index 98b4c899595a..8e4dd370a023 100644 --- a/connectivity/source/drivers/ado/AColumn.cxx +++ b/connectivity/source/drivers/ado/AColumn.cxx @@ -40,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) @@ -61,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(); } @@ -78,20 +66,6 @@ OAdoColumn::OAdoColumn(bool _bCase,OConnection* _pConnection) } -Sequence< sal_Int8 > OAdoColumn::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoColumn::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OColumn_ADO>{}); -} - void OAdoColumn::construct() { sal_Int32 nAttrib = isNew() ? 0 : PropertyAttribute::READONLY; @@ -167,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 6297871d5b62..f56a6d8d007a 100644 --- a/connectivity/source/drivers/ado/AColumns.cxx +++ b/connectivity/source/drivers/ado/AColumns.cxx @@ -62,7 +62,7 @@ Reference< XPropertySet > OColumns::createDescriptor() // XAppend sdbcx::ObjectType OColumns::appendObject( const OUString&, const Reference< XPropertySet >& descriptor ) { - rtl::Reference<OAdoColumn> pColumn = getFromUnoTunnel<OAdoColumn>( descriptor ); + rtl::Reference<OAdoColumn> pColumn = dynamic_cast<OAdoColumn*>( descriptor.get() ); Reference< XPropertySet > xColumn; if ( !pColumn.is() ) { @@ -109,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()); } @@ -118,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 19276dfac73c..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> @@ -34,7 +35,9 @@ #include <com/sun/star/lang/DisposedException.hpp> #include <comphelper/servicehelper.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; @@ -51,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), @@ -59,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 ); @@ -98,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(); @@ -124,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(); } @@ -196,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(); } @@ -218,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( ) @@ -238,7 +223,7 @@ void SAL_CALL OConnection::commit( ) checkDisposed(OConnection_BASE::rBHelper.bDisposed); - m_pAdoConnection->CommitTrans(); + m_aAdoConnection.CommitTrans(); } void SAL_CALL OConnection::rollback( ) @@ -247,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( ) @@ -279,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( ) @@ -289,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 ) @@ -297,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( ) @@ -306,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 ) @@ -337,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( ) @@ -348,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; @@ -368,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; } @@ -411,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(); @@ -476,15 +461,14 @@ 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 ) diff --git a/connectivity/source/drivers/ado/ADatabaseMetaData.cxx b/connectivity/source/drivers/ado/ADatabaseMetaData.cxx index b3f319203834..65e0a80f52a8 100644 --- a/connectivity/source/drivers/ado/ADatabaseMetaData.cxx +++ b/connectivity/source/drivers/ado/ADatabaseMetaData.cxx @@ -42,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); @@ -62,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(); @@ -71,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); @@ -85,7 +85,7 @@ OUString ODatabaseMetaData::getStringProperty(const OUString& _aProperty) Reference< XResultSet > ODatabaseMetaData::impl_getTypeInfo_throw( ) { - ADORecordset *pRecordset = m_pADOConnection->getTypeInfo(); + ADORecordset *pRecordset = m_rADOConnection.getTypeInfo(); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setTypeInfoMap(ADOS::isJetEngine(m_pConnection->getEngineType())); @@ -98,8 +98,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getCatalogs( ) vtEmpty.setNoArg(); ADORecordset *pRecordset = nullptr; - m_pADOConnection->OpenSchema(adSchemaCatalogs,vtEmpty,vtEmpty,&pRecordset); - ADOS::ThrowException(*m_pADOConnection,*this); + m_rADOConnection.OpenSchema(adSchemaCatalogs,vtEmpty,vtEmpty,&pRecordset); + ADOS::ThrowException(m_rADOConnection,*this); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCatalogsMap(); @@ -118,8 +118,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getSchemas( ) vtEmpty.setNoArg(); ADORecordset *pRecordset = nullptr; - m_pADOConnection->OpenSchema(adSchemaSchemata,vtEmpty,vtEmpty,&pRecordset); - ADOS::ThrowException(*m_pADOConnection,*this); + m_rADOConnection.OpenSchema(adSchemaSchemata,vtEmpty,vtEmpty,&pRecordset); + ADOS::ThrowException(m_rADOConnection,*this); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setSchemasMap(); @@ -130,8 +130,8 @@ 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); + ADORecordset *pRecordset = m_rADOConnection.getColumnPrivileges(catalog,schema,table,columnNamePattern); + ADOS::ThrowException(m_rADOConnection,*this); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setColumnPrivilegesMap(); @@ -142,8 +142,8 @@ 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); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setColumnsMap(); @@ -155,8 +155,8 @@ 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); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setTablesMap(); @@ -168,8 +168,8 @@ 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); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setProcedureColumnsMap(); @@ -182,8 +182,8 @@ 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); + ADORecordset *pRecordset = m_rADOConnection.getProcedures(catalog,schemaPattern,procedureNamePattern); + ADOS::ThrowException(m_rADOConnection,*this); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setProceduresMap(); @@ -254,8 +254,8 @@ 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); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCrossReferenceMap(); @@ -266,8 +266,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getExportedKeys( 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); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCrossReferenceMap(); @@ -278,8 +278,8 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys( 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); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setPrimaryKeysMap(); @@ -291,8 +291,8 @@ 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); + ADORecordset *pRecordset = m_rADOConnection.getIndexInfo(catalog,schema,table,unique,approximate); + ADOS::ThrowException(m_rADOConnection,*this); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setIndexInfoMap(); @@ -308,8 +308,8 @@ 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); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setTablePrivilegesMap(); @@ -358,8 +358,8 @@ 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); + ADORecordset *pRecordset = m_rADOConnection.getCrossReference(primaryCatalog,primarySchema,primaryTable,foreignCatalog,foreignSchema,foreignTable); + ADOS::ThrowException(m_rADOConnection,*this); rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(pRecordset); pResult->setCrossReferenceMap(); @@ -790,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( ) @@ -836,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; @@ -863,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() + ","; @@ -898,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( ) @@ -909,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 2b94f944656d..bb5bda634cfc 100644 --- a/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx +++ b/connectivity/source/drivers/ado/ADatabaseMetaDataResultSet.cxx @@ -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() 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 3cdfeab26888..6568f7a1ee84 100644 --- a/connectivity/source/drivers/ado/ADriver.cxx +++ b/connectivity/source/drivers/ado/ADriver.cxx @@ -187,7 +187,7 @@ Reference< XTablesSupplier > SAL_CALL ODriver::getDataDefinitionByConnection( co aCatalog.Create(); if(aCatalog.IsValid()) { - aCatalog.putref_ActiveConnection(*pConnection->getConnection()); + aCatalog.putref_ActiveConnection(pConnection->getConnection()); rtl::Reference<OCatalog> pCatalog = new OCatalog(aCatalog,pConnection); xTab = pCatalog; pConnection->setCatalog(xTab); @@ -206,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); @@ -222,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 f4ed2b12adbc..02cd239d7682 100644 --- a/connectivity/source/drivers/ado/AGroup.cxx +++ b/connectivity/source/drivers/ado/AGroup.cxx @@ -36,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(); @@ -81,21 +69,6 @@ void OAdoGroup::refreshUsers() m_pUsers.reset(new OUsers(m_pCatalog, m_aMutex, aVector, aUsers, isCaseSensitive())); } -Sequence< sal_Int8 > OAdoGroup::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoGroup::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OGroup_ADO>{}); -} - - 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 e3fb165b0a34..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 = getFromUnoTunnel<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 6b58900893b8..b183d49c2435 100644 --- a/connectivity/source/drivers/ado/AIndex.cxx +++ b/connectivity/source/drivers/ado/AIndex.cxx @@ -39,7 +39,7 @@ OAdoIndex::OAdoIndex(bool _bCase,OConnection* _pConnection,ADOIndex* _pIndex) ,m_pConnection(_pConnection) { construct(); - m_aIndex = WpADOIndex(_pIndex); + m_aIndex.set(_pIndex); fillPropertyValues(); } @@ -70,20 +70,6 @@ void OAdoIndex::refreshColumns() } -Sequence< sal_Int8 > OAdoIndex::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoIndex::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<sdbcx::OIndex>{}); -} - 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 c2cdb76081d2..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 = getFromUnoTunnel<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 35e121c6bb7a..9c2734ede8f1 100644 --- a/connectivity/source/drivers/ado/AKey.cxx +++ b/connectivity/source/drivers/ado/AKey.cxx @@ -37,7 +37,7 @@ OAdoKey::OAdoKey(bool _bCase,OConnection* _pConnection, ADOKey* _pKey) ,m_pConnection(_pConnection) { construct(); - m_aKey = WpADOKey(_pKey); + m_aKey.set(_pKey); fillPropertyValues(); } @@ -66,20 +66,6 @@ void OAdoKey::refreshColumns() m_pColumns.reset(new OColumns(*this, m_aMutex, aVector, aColumns, isCaseSensitive(), m_pConnection)); } -Sequence< sal_Int8 > OAdoKey::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoKey::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OKey_ADO>{}); -} - void OAdoKey::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) { if(m_aKey.IsValid()) @@ -91,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: @@ -99,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: @@ -107,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: @@ -115,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: @@ -123,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 a18d91709455..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 = getFromUnoTunnel<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 0db461ef12d3..9e17d71b0bed 100644 --- a/connectivity/source/drivers/ado/APreparedStatement.cxx +++ b/connectivity/source/drivers/ado/APreparedStatement.cxx @@ -38,7 +38,7 @@ #define CHECK_RETURN(x) \ if(!x) \ - ADOS::ThrowException(*m_pConnection->getConnection(),*this); + ADOS::ThrowException(m_pConnection->getConnection(),*this); #ifdef max # undef max @@ -151,7 +151,7 @@ sal_Bool SAL_CALL OPreparedStatement::execute( ) 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&) { @@ -171,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(); } @@ -199,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 ) @@ -220,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 ) @@ -412,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)); } @@ -444,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 abae9087823e..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() 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 9670d92292bd..c2a09385dee6 100644 --- a/connectivity/source/drivers/ado/AStatement.cxx +++ b/connectivity/source/drivers/ado/AStatement.cxx @@ -41,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; @@ -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 ::std; OStatement_Base::OStatement_Base(OConnection* _pConnection ) : OStatement_BASE(m_aMutex) ,OPropertySetHelper(OStatement_BASE::rBHelper) @@ -67,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(); @@ -95,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() ) @@ -240,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 ); @@ -470,7 +469,7 @@ Any SAL_CALL OStatement_Base::getWarnings( ) checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return makeAny(m_aLastWarning); + return Any(m_aLastWarning); } @@ -641,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 + } + } + }; } diff --git a/connectivity/source/drivers/ado/ATable.cxx b/connectivity/source/drivers/ado/ATable.cxx index 1ade9a649b77..47e22e125398 100644 --- a/connectivity/source/drivers/ado/ATable.cxx +++ b/connectivity/source/drivers/ado/ATable.cxx @@ -54,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(); @@ -127,20 +127,6 @@ void OAdoTable::refreshIndexes() m_xIndexes.reset(new OIndexes(*this,m_aMutex,aVector,aIndexes,isCaseSensitive(),m_pCatalog->getConnection())); } -Sequence< sal_Int8 > OAdoTable::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{}); -} - // XRename void SAL_CALL OAdoTable::rename( const OUString& newName ) { @@ -148,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); } @@ -165,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::getFromUnoTunnel<OAdoColumn>(descriptor); + OAdoColumn* pColumn = dynamic_cast<OAdoColumn*>(descriptor.get()); if(pColumn != nullptr) { WpADOColumns aColumns = m_aTable.get_Columns(); @@ -173,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 61a057344ff1..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 = getFromUnoTunnel<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,7 +93,7 @@ void OTables::appendNew(const OUString& _rsNewTable) insertElement(_rsNewTable,nullptr); // notify our container listeners - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any()); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any()); OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) aListenerLoop.next()->elementInserted(aEvent); diff --git a/connectivity/source/drivers/ado/AUser.cxx b/connectivity/source/drivers/ado/AUser.cxx index 09585ed81e44..eb7a5803f60c 100644 --- a/connectivity/source/drivers/ado/AUser.cxx +++ b/connectivity/source/drivers/ado/AUser.cxx @@ -40,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(); } @@ -65,21 +65,6 @@ void OAdoUser::refreshGroups() m_pGroups.reset(new OGroups(m_pCatalog, m_aMutex, aVector, aGroups, isCaseSensitive())); } -Sequence< sal_Int8 > OAdoUser::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoUser::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OUser_TYPEDEF>{}); -} - - void OAdoUser::setFastPropertyValue_NoBroadcast(sal_Int32 nHandle,const Any& rValue) { if(m_aUser.IsValid()) @@ -157,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; } @@ -166,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 ) @@ -174,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 @@ -183,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 9d0dab6e8d4c..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 = getFromUnoTunnel<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 15f6a5cc9a6d..10a5524db95b 100644 --- a/connectivity/source/drivers/ado/AView.cxx +++ b/connectivity/source/drivers/ado/AView.cxx @@ -23,6 +23,8 @@ #include <ado/Awrapado.hxx> #include <comphelper/servicehelper.hxx> #include <comphelper/types.hxx> +#include <systools/win32/oleauto.hxx> + #include <TConnection.hxx> @@ -40,21 +42,6 @@ OAdoView::OAdoView(bool _bCase,ADOView* _pView) : OView_ADO(_bCase,nullptr) { } -Sequence< sal_Int8 > OAdoView::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OAdoView::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OView_ADO>{}); -} - - void OAdoView::getFastPropertyValue(Any& rValue,sal_Int32 nHandle) const { if(m_aView.IsValid()) @@ -76,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 22fe40142d25..943422289627 100644 --- a/connectivity/source/drivers/ado/AViews.cxx +++ b/connectivity/source/drivers/ado/AViews.cxx @@ -28,6 +28,8 @@ #include <comphelper/types.hxx> #include <connectivity/dbexception.hxx> #include <rtl/ref.hxx> +#include <systools/win32/oleauto.hxx> + #include <strings.hrc> using namespace ::comphelper; @@ -61,7 +63,7 @@ Reference< XPropertySet > OViews::createDescriptor() // XAppend sdbcx::ObjectType OViews::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - OAdoView* pView = getFromUnoTunnel<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) ); @@ -74,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 ) @@ -88,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 8d4a0c01ebc1..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); { @@ -142,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; } diff --git a/connectivity/source/drivers/calc/CDatabaseMetaData.cxx b/connectivity/source/drivers/calc/CDatabaseMetaData.cxx index 31798f5bafd0..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; } } diff --git a/connectivity/source/drivers/calc/CDriver.cxx b/connectivity/source/drivers/calc/CDriver.cxx index b7b11cc29176..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()); } diff --git a/connectivity/source/drivers/calc/CTable.cxx b/connectivity/source/drivers/calc/CTable.cxx index 8e37cdd99071..879a2902d00c 100644 --- a/connectivity/source/drivers/calc/CTable.cxx +++ b/connectivity/source/drivers/calc/CTable.cxx @@ -49,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; @@ -191,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; } @@ -609,20 +606,6 @@ void SAL_CALL OCalcTable::disposing() } -Sequence< sal_Int8 > OCalcTable::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OCalcTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OCalcTable_BASE>{}); -} - 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 08e5d63e3abd..1f626f7b10d0 100644 --- a/connectivity/source/drivers/calc/CTables.cxx +++ b/connectivity/source/drivers/calc/CTables.cxx @@ -25,15 +25,10 @@ #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) 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 b8bbae3d7499..49d83e36af12 100644 --- a/connectivity/source/drivers/component/CDatabaseMetaData.cxx +++ b/connectivity/source/drivers/component/CDatabaseMetaData.cxx @@ -46,74 +46,69 @@ OComponentDatabaseMetaData::~OComponentDatabaseMetaData() Reference< XResultSet > OComponentDatabaseMetaData::impl_getTypeInfo_throw( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - 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 { - aRows.reserve(6); - ODatabaseMetaDataResultSet::ORow aRow - { - 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); - } + 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; diff --git a/connectivity/source/drivers/component/CPreparedStatement.cxx b/connectivity/source/drivers/component/CPreparedStatement.cxx index 7c5c8e07f891..82935cbd747d 100644 --- a/connectivity/source/drivers/component/CPreparedStatement.cxx +++ b/connectivity/source/drivers/component/CPreparedStatement.cxx @@ -22,7 +22,6 @@ using namespace connectivity::component; using namespace connectivity::file; -using namespace com::sun::star::uno; rtl::Reference<OResultSet> OComponentPreparedStatement::createResultSet() { diff --git a/connectivity/source/drivers/component/CResultSet.cxx b/connectivity/source/drivers/component/CResultSet.cxx index acf5d6a74df8..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((*m_aRow)[0]->getValue().getInt32()); + return Any((*m_aRow)[0]->getValue().getInt32()); } sal_Bool SAL_CALL OComponentResultSet::moveToBookmark( const Any& bookmark ) diff --git a/connectivity/source/drivers/component/CStatement.cxx b/connectivity/source/drivers/component/CStatement.cxx index f3bd03e8b276..ff072ab5f548 100644 --- a/connectivity/source/drivers/component/CStatement.cxx +++ b/connectivity/source/drivers/component/CStatement.cxx @@ -22,7 +22,6 @@ using namespace connectivity::component; using namespace connectivity::file; -using namespace com::sun::star::uno; rtl::Reference<OResultSet> OComponentStatement::createResultSet() { diff --git a/connectivity/source/drivers/component/CTable.cxx b/connectivity/source/drivers/component/CTable.cxx index 83dbf8a68830..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, @@ -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 c9c7a93fa9f2..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) { diff --git a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx index bdff15cafa82..b3791f7d85d1 100644 --- a/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx +++ b/connectivity/source/drivers/dbase/DDatabaseMetaData.cxx @@ -54,98 +54,93 @@ ODbaseDatabaseMetaData::~ODbaseDatabaseMetaData() Reference< XResultSet > ODbaseDatabaseMetaData::impl_getTypeInfo_throw( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - 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 { - aRows.reserve(10); - ODatabaseMetaDataResultSet::ORow aRow - { - 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(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); - } + 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; @@ -291,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::getFromUnoTunnel<ODbaseIndex>(xIndex); + auto pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get()); if(pIndex) { aRow[11] = new ORowSetValueDecorator(static_cast<sal_Int32>(pIndex->getHeader().db_maxkeys)); diff --git a/connectivity/source/drivers/dbase/DDriver.cxx b/connectivity/source/drivers/dbase/DDriver.cxx index 8eae0013c940..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()); } diff --git a/connectivity/source/drivers/dbase/DIndex.cxx b/connectivity/source/drivers/dbase/DIndex.cxx index 245c49b58e2f..a3ee4a2688df 100644 --- a/connectivity/source/drivers/dbase/DIndex.cxx +++ b/connectivity/source/drivers/dbase/DIndex.cxx @@ -41,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"); @@ -99,20 +96,6 @@ void ODbaseIndex::refreshColumns() m_pColumns.reset(new ODbaseIndexColumns(this,m_aMutex,aVector)); } -Sequence< sal_Int8 > ODbaseIndex::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// XUnoTunnel - -sal_Int64 ODbaseIndex::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<ODbaseIndex_BASE>{}); -} - ONDXPagePtr const & ODbaseIndex::getRoot() { openIndexFile(); @@ -401,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); @@ -565,15 +547,13 @@ void ODbaseIndex::CreateImpl() if(xSet->last()) { - Reference< XUnoTunnel> xTunnel(xSet, UNO_QUERY_THROW); - ODbaseResultSet* pDbaseRes = comphelper::getFromUnoTunnel<ODbaseResultSet>(xTunnel); + 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 7f47085c6509..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) { @@ -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 = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel); - 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::getFromUnoTunnel<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 9a2b54409bea..f349701e620b 100644 --- a/connectivity/source/drivers/dbase/DPreparedStatement.cxx +++ b/connectivity/source/drivers/dbase/DPreparedStatement.cxx @@ -22,7 +22,6 @@ using namespace connectivity::dbase; using namespace connectivity::file; -using namespace com::sun::star::uno; rtl::Reference<OResultSet> ODbasePreparedStatement::createResultSet() { diff --git a/connectivity/source/drivers/dbase/DResultSet.cxx b/connectivity/source/drivers/dbase/DResultSet.cxx index 3533477bb0cf..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((*m_aRow)[0]->getValue().getInt32()); + 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::getFromUnoTunnel<dbase::ODbaseIndex>(_xIndex); + auto pIndex = dynamic_cast<dbase::ODbaseIndex*>(_xIndex.get()); if(pIndex) { std::unique_ptr<dbase::OIndexIterator> pIter = pIndex->createIterator(); diff --git a/connectivity/source/drivers/dbase/DStatement.cxx b/connectivity/source/drivers/dbase/DStatement.cxx index d2537232778e..0da788f98e54 100644 --- a/connectivity/source/drivers/dbase/DStatement.cxx +++ b/connectivity/source/drivers/dbase/DStatement.cxx @@ -22,7 +22,6 @@ using namespace connectivity::dbase; using namespace connectivity::file; -using namespace com::sun::star::uno; rtl::Reference<OResultSet> ODbaseStatement::createResultSet() diff --git a/connectivity/source/drivers/dbase/DTable.cxx b/connectivity/source/drivers/dbase/DTable.cxx index c5da1d6b2477..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,8 +39,9 @@ #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 <unotools/configmgr.hxx> +#include <comphelper/configuration.hxx> #include <unotools/tempfile.hxx> #include <unotools/ucbhelper.hxx> #include <comphelper/types.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; @@ -164,8 +166,8 @@ void lcl_CalDate(sal_Int32 _nJulianDate,sal_Int32 _nJulianTime,css::util::DateTi 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) / 30.6001); - _rDateTime.Day = static_cast<sal_uInt16>(kb - kd - static_cast<sal_Int64>( static_cast<double>(ke) * 30.6001 )); + 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 @@ -759,31 +761,17 @@ 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)); + return aRet; } -Sequence< sal_Int8 > ODbaseTable::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 ODbaseTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<ODbaseTable_BASE>{}); -} - bool ODbaseTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData) { if (!m_pBuffer) return false; // Read the data - bool bIsCurRecordDeleted = static_cast<char>(m_pBuffer[0]) == '*'; + bool bIsCurRecordDeleted = m_pBuffer[0] == '*'; // only read the bookmark @@ -855,8 +843,8 @@ 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 ) @@ -940,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; @@ -1004,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(); @@ -1017,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, @@ -1398,7 +1383,7 @@ bool ODbaseTable::CreateFile(const INetURLObject& aFile, bool& bCreateMemo) bool ODbaseTable::HasMemoFields() const { - return m_aHeader.type > dBaseIV && !utl::ConfigManager::IsFuzzing(); + return m_aHeader.type > dBaseIV && !comphelper::IsFuzzing(); } // creates in principle dBase III file format @@ -1415,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); @@ -1457,7 +1441,7 @@ bool ODbaseTable::Drop_Static(const OUString& _sUrl, bool _bHasMemoFields, OColl 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&) { @@ -1599,9 +1583,7 @@ 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 = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel); + 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(), @@ -1650,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, '.', ',' ); } @@ -1705,9 +1687,7 @@ bool ODbaseTable::UpdateBuffer(OValueRefVector& rRow, const OValueRefRow& pOrgRo continue; else { - Reference<XUnoTunnel> xTunnel(xIndex,UNO_QUERY); - OSL_ENSURE(xTunnel.is(),"No TunnelImplementation!"); - ODbaseIndex* pIndex = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel); + ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(xIndex.get()); assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!"); if (pIndex->Find(0,*rRow[nPos])) @@ -1813,9 +1793,7 @@ 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 = comphelper::getFromUnoTunnel<ODbaseIndex>(xTunnel); + ODbaseIndex* pIndex = dynamic_cast<ODbaseIndex*>(aIndexedCols[i].get()); assert(pIndex && "ODbaseTable::UpdateBuffer: No Index returned!"); // Update !! if (pOrgRow.is() && !thisColIsNull) @@ -2195,7 +2173,7 @@ void ODbaseTable::alterColumn(sal_Int32 index, 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!"); @@ -2337,7 +2315,7 @@ namespace 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); } @@ -2367,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(); @@ -2425,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(); @@ -2479,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())); @@ -2685,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; @@ -2719,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 a3bc953d93b4..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,7 +39,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; using namespace ::com::sun::star::container; sdbcx::ObjectType ODbaseTables::createObject(const OUString& _rName) @@ -65,10 +63,10 @@ Reference< XPropertySet > ODbaseTables::createDescriptor() // XAppend sdbcx::ObjectType ODbaseTables::appendObject( const OUString& _rForName, const Reference< XPropertySet >& descriptor ) { - auto pTable = comphelper::getFromUnoTunnel<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()) @@ -90,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); @@ -103,7 +101,7 @@ void ODbaseTables::dropObject(sal_Int32 _nPos, const OUString& _sElementName) if ( xTunnel.is() ) { - ODbaseTable* pTable = comphelper::getFromUnoTunnel<ODbaseTable>(xTunnel); + 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 422fef11ce20..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()) diff --git a/connectivity/source/drivers/evoab2/EApi.cxx b/connectivity/source/drivers/evoab2/EApi.cxx index 6df2c45d4aef..9ec8e0d44e32 100644 --- a/connectivity/source/drivers/evoab2/EApi.cxx +++ b/connectivity/source/drivers/evoab2/EApi.cxx @@ -21,18 +21,10 @@ #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) (); @@ -69,20 +61,6 @@ const ApiMap aCommonApiMap[] = { "e_book_query_field_exists", reinterpret_cast<SymbolFunc *>(&e_book_query_field_exists) } }; -//< 3.6 api -const ApiMap aOldApiMap[] = -{ - { "e_book_get_addressbooks", reinterpret_cast<SymbolFunc *>(&e_book_get_addressbooks) }, - { "e_book_get_uri", reinterpret_cast<SymbolFunc *>(&e_book_get_uri) }, - { "e_book_authenticate_user", reinterpret_cast<SymbolFunc *>(&e_book_authenticate_user) }, - { "e_source_group_peek_base_uri", reinterpret_cast<SymbolFunc *>(&e_source_group_peek_base_uri) }, - { "e_source_peek_name", reinterpret_cast<SymbolFunc *>(&e_source_peek_name) }, - { "e_source_get_property", reinterpret_cast<SymbolFunc *>(&e_source_get_property) }, - { "e_source_list_peek_groups", reinterpret_cast<SymbolFunc *>(&e_source_list_peek_groups) }, - { "e_source_group_peek_sources", reinterpret_cast<SymbolFunc *>(&e_source_group_peek_sources) } -}; - -//>= 3.6 api const ApiMap aNewApiMap[] = { { "e_source_registry_list_sources", reinterpret_cast<SymbolFunc *>(&e_source_registry_list_sources) }, @@ -99,12 +77,6 @@ const ApiMap aNewApiMap[] = { "e_client_util_free_object_slist", reinterpret_cast<SymbolFunc *>(&e_client_util_free_object_slist) } }; -//== indirect read access (3.6 only) -const ApiMap aClientApiMap36[] = -{ - { "e_book_client_new", reinterpret_cast<SymbolFunc *>(&e_book_client_new) } -}; - //>= direct read access API (>= 3.8) const ApiMap aClientApiMap38[] = { @@ -140,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 4d17922aab30..a33bf9721de6 100644 --- a/connectivity/source/drivers/evoab2/EApi.h +++ b/connectivity/source/drivers/evoab2/EApi.h @@ -146,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,4 +157,6 @@ bool isSourceBackend(ESource *pSource, const char *backendname); G_END_DECLS +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 6b409ce66d65..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) diff --git a/connectivity/source/drivers/evoab2/NColumns.cxx b/connectivity/source/drivers/evoab2/NColumns.cxx index 5b2b64d5d58b..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; diff --git a/connectivity/source/drivers/evoab2/NConnection.cxx b/connectivity/source/drivers/evoab2/NConnection.cxx index 02e8d476dd6e..66fc7ecb6511 100644 --- a/connectivity/source/drivers/evoab2/NConnection.cxx +++ b/connectivity/source/drivers/evoab2/NConnection.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; OEvoabConnection::OEvoabConnection(OEvoabDriver const & _rDriver) : m_rDriver(_rDriver) diff --git a/connectivity/source/drivers/evoab2/NConnection.hxx b/connectivity/source/drivers/evoab2/NConnection.hxx index 4d6604f0975c..8dd8714bc2fe 100644 --- a/connectivity/source/drivers/evoab2/NConnection.hxx +++ b/connectivity/source/drivers/evoab2/NConnection.hxx @@ -60,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; } diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx index a671ceb233a8..110d01feb213 100644 --- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx +++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.cxx @@ -34,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 { @@ -253,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); @@ -294,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' ) ) { @@ -304,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( ) @@ -988,8 +993,8 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTableTypes( ) 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 = SAL_N_ELEMENTS(sTableTypes); - ODatabaseMetaDataResultSet::ORows aRows(nNbTypes); + auto nNbTypes = std::size(sTableTypes); + ODatabaseMetaDataResultSet::ORows aRows; for(std::size_t i=0;i < nNbTypes;++i) { // bound row @@ -1010,7 +1015,7 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( ) static ODatabaseMetaDataResultSet::ORows aRows = []() { - ODatabaseMetaDataResultSet::ORows tmp(2); + ODatabaseMetaDataResultSet::ORows tmp; ODatabaseMetaDataResultSet::ORow aRow { ODatabaseMetaDataResultSet::getEmptyValue() , @@ -1046,18 +1051,6 @@ Reference< XResultSet > OEvoabDatabaseMetaData::impl_getTypeInfo_throw( ) return pResultSet; } -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 ); - pResultSet->setRows( getColumnRows( columnNamePattern ) ); - return pResultSet; -} - - bool isSourceBackend(ESource *pSource, const char *backendname) { if (!pSource || !e_source_has_extension (pSource, E_SOURCE_EXTENSION_ADDRESS_BOOK)) @@ -1073,12 +1066,12 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables( { ::osl::MutexGuard aGuard( m_aMutex ); - rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eTableTypes); + 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 const OUStringLiteral aTable(u"TABLE"); + static constexpr OUString aTable(u"TABLE"_ustr); bool bTableFound = true; sal_Int32 nLength = types.getLength(); @@ -1102,105 +1095,50 @@ Reference< XResultSet > SAL_CALL OEvoabDatabaseMetaData::getTables( 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); + 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: - 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; - } - 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); - } - - g_list_foreach (pSources, reinterpret_cast<GFunc>(g_object_unref), nullptr); - g_list_free (pSources); - } - else + for (GList* liter = pSources; liter; liter = liter->next) { - ESourceList *pSourceList; - if( !e_book_get_addressbooks (&pSourceList, nullptr) ) - pSourceList = nullptr; - - GSList *g; - for( g = e_source_list_peek_groups( pSourceList ); g; g = g->next) + ESource *pSource = E_SOURCE (liter->data); + bool can = false; + switch (m_pConnection->getSDBCAddressType()) { - GSList *s; - const char *p = e_source_group_peek_base_uri(E_SOURCE_GROUP(g->data)); - - 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 ); - - aRows.push_back( - { - ORowSetValueDecoratorRef(), - ORowSetValueDecoratorRef(), - ORowSetValueDecoratorRef(), - new ORowSetValueDecorator(aName), - new ORowSetValueDecorator(ORowSetValue(aTable)), - ODatabaseMetaDataResultSet::getEmptyValue() - } - ); - } } + 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); } + g_list_foreach (pSources, object_unref, nullptr); + g_list_free (pSources); + pResult->setRows(std::move(aRows)); return pResult; diff --git a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx index b5f504425d95..a64c234e6a52 100644 --- a/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx +++ b/connectivity/source/drivers/evoab2/NDatabaseMetaData.hxx @@ -65,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 diff --git a/connectivity/source/drivers/evoab2/NDriver.cxx b/connectivity/source/drivers/evoab2/NDriver.cxx index d1b7746f47c5..c72d9b1a189f 100644 --- a/connectivity/source/drivers/evoab2/NDriver.cxx +++ b/connectivity/source/drivers/evoab2/NDriver.cxx @@ -31,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) : diff --git a/connectivity/source/drivers/evoab2/NDriver.hxx b/connectivity/source/drivers/evoab2/NDriver.hxx index 9d3b57fa7988..b505bb9db5fd 100644 --- a/connectivity/source/drivers/evoab2/NDriver.hxx +++ b/connectivity/source/drivers/evoab2/NDriver.hxx @@ -28,7 +28,7 @@ #include <cppuhelper/compbase.hxx> #include <connectivity/CommonTools.hxx> -inline constexpr OUStringLiteral EVOAB_DRIVER_IMPL_NAME = u"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 { diff --git a/connectivity/source/drivers/evoab2/NPreparedStatement.cxx b/connectivity/source/drivers/evoab2/NPreparedStatement.cxx index 7b6172ac6cf9..2ed8b0f166b9 100644 --- a/connectivity/source/drivers/evoab2/NPreparedStatement.cxx +++ b/connectivity/source/drivers/evoab2/NPreparedStatement.cxx @@ -22,14 +22,13 @@ #include <connectivity/dbexception.hxx> #include <connectivity/dbtools.hxx> #include <rtl/ref.hxx> -#include <tools/diagnose_ex.h> +#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; diff --git a/connectivity/source/drivers/evoab2/NResultSet.cxx b/connectivity/source/drivers/evoab2/NResultSet.cxx index c0b31cc100e4..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,12 +498,7 @@ 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>(); registerProperty( OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_FETCHSIZE), @@ -687,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() ) { @@ -1031,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); } diff --git a/connectivity/source/drivers/evoab2/NResultSet.hxx b/connectivity/source/drivers/evoab2/NResultSet.hxx index 74a5e40dda1f..3eeeab244ab3 100644 --- a/connectivity/source/drivers/evoab2/NResultSet.hxx +++ b/connectivity/source/drivers/evoab2/NResultSet.hxx @@ -49,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; diff --git a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx index a980c2067041..a828b127fe68 100644 --- a/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx +++ b/connectivity/source/drivers/evoab2/NResultSetMetaData.cxx @@ -21,14 +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) +OEvoabResultSetMetaData::OEvoabResultSetMetaData(OUString _aTableName) + : m_aTableName(std::move(_aTableName)) { } @@ -101,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 66fffb984e4f..e79d347b1c4d 100644 --- a/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx +++ b/connectivity/source/drivers/evoab2/NResultSetMetaData.hxx @@ -40,7 +40,7 @@ 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 diff --git a/connectivity/source/drivers/evoab2/NStatement.cxx b/connectivity/source/drivers/evoab2/NStatement.cxx index 542ee1de8d45..91ebdda56c70 100644 --- a/connectivity/source/drivers/evoab2/NStatement.cxx +++ b/connectivity/source/drivers/evoab2/NStatement.cxx @@ -38,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 { @@ -49,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 { @@ -268,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 @@ -278,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 ) ); } @@ -506,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 ); } @@ -549,7 +548,7 @@ Any SAL_CALL OCommonStatement::getWarnings( ) checkDisposed(OCommonStatement_IBase::rBHelper.bDisposed); - return makeAny(SQLWarning()); + return Any(SQLWarning()); } @@ -614,7 +613,7 @@ Reference< XResultSet > OCommonStatement::impl_executeQuery_throw( const QueryDa pResult->construct( _rQueryData ); // done - m_xResultSet = pResult; + m_xResultSet = Reference<XWeak>(pResult); return pResult; } diff --git a/connectivity/source/drivers/evoab2/NTable.cxx b/connectivity/source/drivers/evoab2/NTable.cxx index 208c52747768..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, diff --git a/connectivity/source/drivers/evoab2/NTables.cxx b/connectivity/source/drivers/evoab2/NTables.cxx index 69b54ba70759..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) { diff --git a/connectivity/source/drivers/evoab2/NTables.hxx b/connectivity/source/drivers/evoab2/NTables.hxx index 7e200ff6aee2..e5d454729431 100644 --- a/connectivity/source/drivers/evoab2/NTables.hxx +++ b/connectivity/source/drivers/evoab2/NTables.hxx @@ -20,6 +20,7 @@ #include <connectivity/sdbcx/VCollection.hxx> #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +#include <utility> namespace connectivity::evoab { @@ -30,11 +31,11 @@ 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; }; 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 1b90385bf9c0..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) { diff --git a/connectivity/source/drivers/file/FConnection.cxx b/connectivity/source/drivers/file/FConnection.cxx index 283bee8fee45..38ce342cb5e2 100644 --- a/connectivity/source/drivers/file/FConnection.cxx +++ b/connectivity/source/drivers/file/FConnection.cxx @@ -32,7 +32,7 @@ #include <com/sun/star/ucb/XContentIdentifier.hpp> #include <tools/urlobj.hxx> #include <file/FCatalog.hxx> -#include <unotools/configmgr.hxx> +#include <comphelper/configuration.hxx> #include <unotools/pathoptions.hxx> #include <ucbhelper/content.hxx> #include <connectivity/dbcharset.hxx> @@ -132,7 +132,7 @@ void OConnection::construct(const OUString& url,const Sequence< PropertyValue >& OUString aFileName = aDSN; INetURLObject aURL; aURL.SetSmartProtocol(INetProtocol::File); - if (!utl::ConfigManager::IsFuzzing()) + if (!comphelper::IsFuzzing()) { SvtPathOptions aPathOptions; aFileName = aPathOptions.SubstituteVariable(aFileName); @@ -405,7 +405,7 @@ sal_Int64 SAL_CALL OConnection::getSomething( const Sequence< sal_Int8 >& rId ) return comphelper::getSomethingImpl(rId, this); } -Sequence< sal_Int8 > OConnection::getUnoTunnelId() +const Sequence< sal_Int8 > & OConnection::getUnoTunnelId() { static const comphelper::UnoIdInit implId; return implId.getSeq(); @@ -413,17 +413,13 @@ Sequence< sal_Int8 > OConnection::getUnoTunnelId() 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 f6480744e665..6d157bb575da 100644 --- a/connectivity/source/drivers/file/FDatabaseMetaData.cxx +++ b/connectivity/source/drivers/file/FDatabaseMetaData.cxx @@ -30,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; @@ -73,6 +72,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getColumns( namespace { +#if !ENABLE_FUZZERS sal_Int16 isCaseSensitiveParentFolder( const OUString& _rFolderOrDoc, std::u16string_view _rDocName ) { sal_Int16 nIsCS = 1; @@ -151,6 +151,7 @@ namespace return nIsCS; } +#endif } @@ -165,7 +166,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTables( // 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(); @@ -297,7 +298,7 @@ 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); @@ -399,7 +400,7 @@ Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTablePrivileges( xNames->getByName(*pBegin), css::uno::UNO_QUERY); if(xTable.is()) { - auto pTable = comphelper::getFromUnoTunnel<OFileTable>(xTable); + auto pTable = dynamic_cast<OFileTable*>(xTable.get()); if(pTable && !pTable->isReadOnly()) { aRow[6] = ODatabaseMetaDataResultSet::getInsertValue(); @@ -616,14 +617,9 @@ sal_Bool SAL_CALL ODatabaseMetaData::supportsOuterJoins( ) Reference< XResultSet > SAL_CALL ODatabaseMetaData::getTableTypes( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - rtl::Reference<ODatabaseMetaDataResultSet> pResult = new ODatabaseMetaDataResultSet( ODatabaseMetaDataResultSet::eTableTypes ); - static ODatabaseMetaDataResultSet::ORows aRows; - if(aRows.empty()) - { - aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString("TABLE")) } ); - } + ODatabaseMetaDataResultSet::ORows aRows; + aRows.push_back( { ODatabaseMetaDataResultSet::getEmptyValue(), new ORowSetValueDecorator(OUString("TABLE")) } ); pResult->setRows(std::move(aRows)); return pResult; } diff --git a/connectivity/source/drivers/file/FDriver.cxx b/connectivity/source/drivers/file/FDriver.cxx index 4b6d45fe7420..b24c4e67a532 100644 --- a/connectivity/source/drivers/file/FDriver.cxx +++ b/connectivity/source/drivers/file/FDriver.cxx @@ -26,6 +26,7 @@ #include <connectivity/dbexception.hxx> #include <strings.hrc> #include <resource/sharedresources.hxx> +#include <utility> using namespace connectivity::file; @@ -36,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)) { } diff --git a/connectivity/source/drivers/file/FNumericFunctions.cxx b/connectivity/source/drivers/file/FNumericFunctions.cxx index 7de058dee06c..7c7fdc75425f 100644 --- a/connectivity/source/drivers/file/FNumericFunctions.cxx +++ b/connectivity/source/drivers/file/FNumericFunctions.cxx @@ -19,14 +19,13 @@ #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() ) @@ -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 @@ -227,7 +226,7 @@ ORowSetValue OOp_Degrees::operate(const ORowSetValue& lhs) const return lhs; double nLhs = lhs.getDouble(); - return nLhs*180*(1.0/fPi); + return basegfx::rad2deg(nLhs); } ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const @@ -236,7 +235,7 @@ ORowSetValue OOp_Radians::operate(const ORowSetValue& lhs) const return lhs; double nLhs = lhs.getDouble(); - return nLhs*fPi*(1.0/180.0); + return basegfx::deg2rad(nLhs); } diff --git a/connectivity/source/drivers/file/FPreparedStatement.cxx b/connectivity/source/drivers/file/FPreparedStatement.cxx index 79c69b3ee62e..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; + m_xResultSet = uno::Reference<uno::XWeak>(xResultSet); initializeResultSet(xResultSet.get()); initResultSet(xResultSet.get()); return xResultSet; @@ -392,7 +393,7 @@ void SAL_CALL OPreparedStatement::release() noexcept 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 fdf3a4e47d84..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; @@ -921,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; } @@ -1380,19 +1381,6 @@ void OResultSet::OpenImpl() m_nFilePos = 0; } -Sequence< sal_Int8 > OResultSet::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OResultSet::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this); -} - void OResultSet::setBoundedColumns(const OValueRefRow& _rRow, const OValueRefRow& _rSelectRow, const ::rtl::Reference<connectivity::OSQLColumns>& _rxColumns, @@ -1527,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 = comphelper::getFromUnoTunnel<OFileTable>(xTunnel); + m_pTable = dynamic_cast<OFileTable*>(_xTable.get()); assert(m_pTable.is()); } 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 e0ea8bc59aef..4520abfeff1d 100644 --- a/connectivity/source/drivers/file/FStatement.cxx +++ b/connectivity/source/drivers/file/FStatement.cxx @@ -38,6 +38,7 @@ #include <connectivity/dbexception.hxx> #include <strings.hrc> #include <algorithm> +#include <cstddef> namespace connectivity::file { @@ -193,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( ) @@ -407,7 +408,7 @@ void OStatement_Base::construct(const OUString& sql) } // at this moment we support only one table per select statement - m_pTable = comphelper::getFromUnoTunnel<OFileTable>(rTabs.begin()->second); + 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(); @@ -440,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); diff --git a/connectivity/source/drivers/file/FStringFunctions.cxx b/connectivity/source/drivers/file/FStringFunctions.cxx index 619c1a128dbf..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,7 +63,7 @@ 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) @@ -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.getInt32(); - 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(); } @@ -169,14 +167,7 @@ ORowSetValue OOp_Replace::operate(const std::vector<ORowSetValue>& lhs) const OUString sStr = lhs[2].getString(); OUString sFrom = lhs[1].getString(); OUString sTo = lhs[0].getString(); - 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; + 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.getInt32(); + 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.getString()); + sRet.append(s); } return sRet.makeStringAndClear(); } diff --git a/connectivity/source/drivers/file/FTable.cxx b/connectivity/source/drivers/file/FTable.cxx index 50475449ef73..06dc187fa20e 100644 --- a/connectivity/source/drivers/file/FTable.cxx +++ b/connectivity/source/drivers/file/FTable.cxx @@ -118,27 +118,10 @@ void SAL_CALL OFileTable::disposing() FileClose(); } -Sequence< sal_Int8 > OFileTable::getUnoTunnelId() -{ - static const comphelper::UnoIdInit s_Id; - return s_Id.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OFileTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{}); -} - 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 14fb8f41d6f8..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; diff --git a/connectivity/source/drivers/file/fcomp.cxx b/connectivity/source/drivers/file/fcomp.cxx index e725b1870865..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> diff --git a/connectivity/source/drivers/firebird/Blob.cxx b/connectivity/source/drivers/firebird/Blob.cxx index 33ab36b8d33e..26a5deaca0b4 100644 --- a/connectivity/source/drivers/firebird/Blob.cxx +++ b/connectivity/source/drivers/firebird/Blob.cxx @@ -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; diff --git a/connectivity/source/drivers/firebird/Catalog.cxx b/connectivity/source/drivers/firebird/Catalog.cxx index c743b42cc75f..2ef4f514b12a 100644 --- a/connectivity/source/drivers/firebird/Catalog.cxx +++ b/connectivity/source/drivers/firebird/Catalog.cxx @@ -10,6 +10,7 @@ #include "Catalog.hxx" #include "Tables.hxx" #include "Users.hxx" +#include "Views.hxx" #include <com/sun/star/sdbc/XRow.hpp> @@ -53,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 --------------------------------------------------- diff --git a/connectivity/source/drivers/firebird/Catalog.hxx b/connectivity/source/drivers/firebird/Catalog.hxx index 4a562e22a26e..3ffb9238eda7 100644 --- a/connectivity/source/drivers/firebird/Catalog.hxx +++ b/connectivity/source/drivers/firebird/Catalog.hxx @@ -30,6 +30,9 @@ 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 diff --git a/connectivity/source/drivers/firebird/Clob.cxx b/connectivity/source/drivers/firebird/Clob.cxx index 707020b39bbf..dde050edee3a 100644 --- a/connectivity/source/drivers/firebird/Clob.cxx +++ b/connectivity/source/drivers/firebird/Clob.cxx @@ -9,8 +9,6 @@ #include <sal/config.h> -#include <string_view> - #include "Clob.hxx" #include "Blob.hxx" diff --git a/connectivity/source/drivers/firebird/Columns.cxx b/connectivity/source/drivers/firebird/Columns.cxx index 200eec1fb57d..d36e25f9195b 100644 --- a/connectivity/source/drivers/firebird/Columns.cxx +++ b/connectivity/source/drivers/firebird/Columns.cxx @@ -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, diff --git a/connectivity/source/drivers/firebird/Connection.cxx b/connectivity/source/drivers/firebird/Connection.cxx index 7122d80b7a15..5a2be8872485 100644 --- a/connectivity/source/drivers/firebird/Connection.cxx +++ b/connectivity/source/drivers/firebird/Connection.cxx @@ -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" @@ -48,7 +47,6 @@ #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> @@ -74,11 +72,11 @@ 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) @@ -163,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"; @@ -198,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; @@ -219,7 +217,7 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& 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"; @@ -235,8 +233,8 @@ void Connection::construct(const OUString& url, const Sequence< PropertyValue >& if (m_bIsEmbedded || m_bIsFile) { - userName = "sysdba"; - userPassword = "masterkey"; + userName = "sysdba"_ostr; + userPassword = "masterkey"_ostr; } else { @@ -341,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") @@ -360,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; } @@ -373,7 +365,7 @@ Reference< XClob> Connection::createClob(ISC_QUAD const * pBlobId) &m_aTransactionHandle, *pBlobId); - m_aStatements.push_back(WeakReferenceHelper(xReturn)); + m_aStatements.emplace_back(xReturn); return xReturn; } @@ -385,7 +377,7 @@ sal_Int64 SAL_CALL Connection::getSomething(const css::uno::Sequence<sal_Int8>& } // static -css::uno::Sequence<sal_Int8> Connection::getUnoTunnelId() +const css::uno::Sequence<sal_Int8> & Connection::getUnoTunnelId() { static const comphelper::UnoIdInit implId; return implId.getSeq(); @@ -404,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; } @@ -420,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; } @@ -442,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; } @@ -631,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) { @@ -829,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*/) { @@ -945,13 +899,43 @@ void Connection::disposing() evaluateStatusVector(status, u"isc_detach_database", *this); } } - // TODO: write to storage again? + + storeDatabase(); cppu::WeakComponentImplHelperBase::disposing(); m_pDatabaseFileDir.reset(); } +void Connection::storeDatabase() +{ + MutexGuard aGuard(m_aMutex); + if (m_bIsEmbedded && m_xEmbeddedStorage.is()) + { + 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); diff --git a/connectivity/source/drivers/firebird/Connection.hxx b/connectivity/source/drivers/firebird/Connection.hxx index caf091146ae6..16ac0ffa278d 100644 --- a/connectivity/source/drivers/firebird/Connection.hxx +++ b/connectivity/source/drivers/firebird/Connection.hxx @@ -104,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. * @@ -172,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. @@ -203,6 +193,11 @@ 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; @@ -210,7 +205,7 @@ namespace connectivity::firebird DECLARE_SERVICE_INFO(); // XUnoTunnel virtual sal_Int64 SAL_CALL getSomething(const css::uno::Sequence<sal_Int8>& rId) override; - static css::uno::Sequence<sal_Int8> getUnoTunnelId(); + 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; diff --git a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx index f63468f0813f..37c2ffe72c3d 100644 --- a/connectivity/source/drivers/firebird/DatabaseMetaData.cxx +++ b/connectivity/source/drivers/firebird/DatabaseMetaData.cxx @@ -821,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 @@ -842,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); @@ -854,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); @@ -888,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); @@ -904,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 } @@ -928,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 @@ -972,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); @@ -984,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); @@ -996,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); @@ -1008,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); @@ -1020,12 +1020,13 @@ 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; }(); + // [-loplugin:redundantfcast] false positive: pResultSet->setRows(ODatabaseMetaDataResultSet::ORows(aResults)); return pResultSet; } @@ -1339,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 { @@ -1406,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"; } @@ -1473,7 +1477,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getImportedKeys( uno::Reference< XResultSet > ODatabaseMetaData::lcl_getKeys(const bool bIsImport, std::u16string_view table ) { rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new - ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eImportedKeys); + ODatabaseMetaDataResultSet(bIsImport?ODatabaseMetaDataResultSet::eImportedKeys:ODatabaseMetaDataResultSet::eExportedKeys); uno::Reference< XStatement > statement = m_pConnection->createStatement(); @@ -1676,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))); @@ -1698,7 +1702,7 @@ uno::Reference< XResultSet > SAL_CALL ODatabaseMetaData::getIndexInfo( aResults.push_back(aCurrentRow); } rtl::Reference<ODatabaseMetaDataResultSet> pResultSet = new - ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::ePrimaryKeys); + ODatabaseMetaDataResultSet(ODatabaseMetaDataResultSet::eIndexInfo); pResultSet->setRows( std::move(aResults) ); return pResultSet; @@ -1769,7 +1773,7 @@ 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); } diff --git a/connectivity/source/drivers/firebird/Driver.cxx b/connectivity/source/drivers/firebird/Driver.cxx index c9dc6155d0e0..3aa903d48abf 100644 --- a/connectivity/source/drivers/firebird/Driver.cxx +++ b/connectivity/source/drivers/firebird/Driver.cxx @@ -31,7 +31,6 @@ #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; @@ -46,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 }; @@ -67,10 +66,10 @@ FirebirdDriver::FirebirdDriver(const css::uno::Reference< css::uno::XComponentCo 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, @@ -79,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. @@ -87,7 +86,7 @@ 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*/ } @@ -106,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*/ @@ -152,7 +151,7 @@ Reference< XConnection > SAL_CALL FirebirdDriver::connect( rtl::Reference<Connection> pCon = new Connection(); pCon->construct(url, info); - m_xConnections.push_back(WeakReferenceHelper(*pCon)); + m_xConnections.emplace_back(*pCon); return pCon; } diff --git a/connectivity/source/drivers/firebird/Driver.hxx b/connectivity/source/drivers/firebird/Driver.hxx index d8ce92b0ed93..d884b5008d6a 100644 --- a/connectivity/source/drivers/firebird/Driver.hxx +++ b/connectivity/source/drivers/firebird/Driver.hxx @@ -33,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, @@ -43,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 diff --git a/connectivity/source/drivers/firebird/Indexes.cxx b/connectivity/source/drivers/firebird/Indexes.cxx index 10ec90dc5be0..7bf783c79c7b 100644 --- a/connectivity/source/drivers/firebird/Indexes.cxx +++ b/connectivity/source/drivers/firebird/Indexes.cxx @@ -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) { diff --git a/connectivity/source/drivers/firebird/PreparedStatement.cxx b/connectivity/source/drivers/firebird/PreparedStatement.cxx index 8d08a207a67c..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) @@ -209,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()); @@ -262,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", @@ -327,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. } @@ -375,7 +379,7 @@ sal_Int64 toNumericWithoutDecimalPlace(const OUString& sSource) sBuffer.append(sNumber.subView(0, nDotIndex)); } sBuffer.append(sNumber.subView(nDotIndex + 1)); - return sBuffer.makeStringAndClear().toInt64(); + return o3tl::toInt64(sBuffer); } } @@ -563,7 +567,7 @@ void OPreparedStatement::openBlobForWriting(isc_blob_handle& rBlobHandle, ISC_QU if (aErr) { evaluateStatusVector(m_statusVector, - OUStringConcatenation("setBlob failed on " + m_sSqlStatement), + Concat2View("setBlob failed on " + m_sSqlStatement), *this); assert(false); } @@ -605,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( @@ -656,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. @@ -778,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'); } @@ -904,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) @@ -912,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 @@ -919,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 diff --git a/connectivity/source/drivers/firebird/ResultSet.cxx b/connectivity/source/drivers/firebird/ResultSet.cxx index aa13dbd0b96c..ea3ac86ae762 100644 --- a/connectivity/source/drivers/firebird/ResultSet.cxx +++ b/connectivity/source/drivers/firebird/ResultSet.cxx @@ -452,7 +452,7 @@ T OResultSet::retrieveValue(const sal_Int32 nColumnIndex, const ISC_SHORT nType) 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. diff --git a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx index 2ed46bae9b34..31a6796f5399 100644 --- a/connectivity/source/drivers/firebird/ResultSetMetaData.cxx +++ b/connectivity/source/drivers/firebird/ResultSetMetaData.cxx @@ -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; } diff --git a/connectivity/source/drivers/firebird/Statement.cxx b/connectivity/source/drivers/firebird/Statement.cxx index f4faebbf1a55..d135c4e4cda4 100644 --- a/connectivity/source/drivers/firebird/Statement.cxx +++ b/connectivity/source/drivers/firebird/Statement.cxx @@ -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&) @@ -71,7 +70,8 @@ void SAL_CALL OStatement::release() noexcept 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; diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.cxx b/connectivity/source/drivers/firebird/StatementCommonBase.cxx index 61f57f330516..29ef5925657d 100644 --- a/connectivity/source/drivers/firebird/StatementCommonBase.cxx +++ b/connectivity/source/drivers/firebird/StatementCommonBase.cxx @@ -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), @@ -154,7 +152,7 @@ void OStatementCommonBase::prepareAndDescribeStatement(std::u16string_view sql, &m_aStatementHandle, 0, OUStringToOString(sql, RTL_TEXTENCODING_UTF8).getStr(), - FIREBIRD_SQL_DIALECT, + SQL_DIALECT_CURRENT, pOutSqlda); if (aErr) @@ -243,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 + } + } + }; } @@ -415,30 +453,31 @@ 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; diff --git a/connectivity/source/drivers/firebird/Table.cxx b/connectivity/source/drivers/firebird/Table.cxx index f88b371d5705..871febcf5122 100644 --- a/connectivity/source/drivers/firebird/Table.cxx +++ b/connectivity/source/drivers/firebird/Table.cxx @@ -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,23 +224,6 @@ 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 + "\" "); diff --git a/connectivity/source/drivers/firebird/Table.hxx b/connectivity/source/drivers/firebird/Table.hxx index b641981769af..ed638a9c88ac 100644 --- a/connectivity/source/drivers/firebird/Table.hxx +++ b/connectivity/source/drivers/firebird/Table.hxx @@ -74,10 +74,6 @@ 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 diff --git a/connectivity/source/drivers/firebird/Tables.cxx b/connectivity/source/drivers/firebird/Tables.cxx index ebd6f2309cc8..e3440137381a 100644 --- a/connectivity/source/drivers/firebird/Tables.cxx +++ b/connectivity/source/drivers/firebird/Tables.cxx @@ -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; @@ -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(); @@ -202,7 +198,28 @@ void Tables::dropObject(sal_Int32 nPosition, const OUString& sName) const OUString sQuoteString = m_xMetaData->getIdentifierQuoteString(); m_xMetaData->getConnection()->createStatement()->execute( - "DROP " + sType + ::dbtools::quoteName(sQuoteString,sName)); + "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); + } } +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 d7fe019ef2a6..ada1827097a5 100644 --- a/connectivity/source/drivers/firebird/Tables.hxx +++ b/connectivity/source/drivers/firebird/Tables.hxx @@ -13,6 +13,7 @@ #include <com/sun/star/sdbc/XDatabaseMetaData.hpp> #include <connectivity/sdbcx/VCollection.hxx> +#include <utility> namespace connectivity::firebird { @@ -40,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. @@ -51,6 +52,8 @@ namespace connectivity::firebird // XDrop virtual void dropObject(sal_Int32 nPosition, const OUString& rName) override; + void appendNew(const OUString& _rsNewTable); + }; } // namespace connectivity::firebird diff --git a/connectivity/source/drivers/firebird/Users.cxx b/connectivity/source/drivers/firebird/Users.cxx index 50cfef84be8c..10912d6be0ab 100644 --- a/connectivity/source/drivers/firebird/Users.cxx +++ b/connectivity/source/drivers/firebird/Users.cxx @@ -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; diff --git a/connectivity/source/drivers/firebird/Util.cxx b/connectivity/source/drivers/firebird/Util.cxx index 2d694eac94ec..3cee5dab6e0b 100644 --- a/connectivity/source/drivers/firebird/Util.cxx +++ b/connectivity/source/drivers/firebird/Util.cxx @@ -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,12 +23,12 @@ 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, @@ -43,8 +44,8 @@ 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 (...) @@ -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, rtl::OUStringConcatenation(OUStringChar(aEscapeChar) + OUStringChar(aKey)) ); - aIndex += 2; - } - - return sRet; -} - sal_Int64 firebird::pow10Integer(int nDecimalCount) { sal_Int64 nRet = 1; diff --git a/connectivity/source/drivers/firebird/Util.hxx b/connectivity/source/drivers/firebird/Util.hxx index 46fadebb1a20..db407ef98b38 100644 --- a/connectivity/source/drivers/firebird/Util.hxx +++ b/connectivity/source/drivers/firebird/Util.hxx @@ -14,6 +14,7 @@ #include <rtl/ustring.hxx> #include <com/sun/star/uno/XInterface.hpp> +#include <utility> namespace connectivity::firebird { @@ -57,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; } @@ -86,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) { @@ -118,7 +119,6 @@ public: void freeSQLVAR(XSQLDA* pSqlda); - OUString escapeWith( const OUString& sText, const char aKey, const char aEscapeChar); sal_Int64 pow10Integer( int nDecimalCount ); } 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 288a53fa649a..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) diff --git a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx index 7150973069d9..729b55ef9e2d 100644 --- a/connectivity/source/drivers/flat/EDatabaseMetaData.cxx +++ b/connectivity/source/drivers/flat/EDatabaseMetaData.cxx @@ -47,13 +47,11 @@ OFlatDatabaseMetaData::~OFlatDatabaseMetaData() Reference< XResultSet > OFlatDatabaseMetaData::impl_getTypeInfo_throw( ) { - ::osl::MutexGuard aGuard( m_aMutex ); - rtl::Reference<::connectivity::ODatabaseMetaDataResultSet> pResult = new ::connectivity::ODatabaseMetaDataResultSet(::connectivity::ODatabaseMetaDataResultSet::eTypeInfo); static ODatabaseMetaDataResultSet::ORows aRows = []() { - ODatabaseMetaDataResultSet::ORows tmp(10); + ODatabaseMetaDataResultSet::ORows tmp; ODatabaseMetaDataResultSet::ORow aRow { ODatabaseMetaDataResultSet::getEmptyValue() , diff --git a/connectivity/source/drivers/flat/EDriver.cxx b/connectivity/source/drivers/flat/EDriver.cxx index 29492895510e..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 ) @@ -68,7 +68,7 @@ Reference< XConnection > SAL_CALL ODriver::connect( const OUString& url, const S rtl::Reference<OFlatConnection> pCon = new OFlatConnection(this); pCon->construct(url,info); - m_xConnections.push_back(WeakReferenceHelper(*pCon)); + m_xConnections.emplace_back(*pCon); return pCon; } diff --git a/connectivity/source/drivers/flat/EPreparedStatement.cxx b/connectivity/source/drivers/flat/EPreparedStatement.cxx index f4095ac2c087..0ed4299258a2 100644 --- a/connectivity/source/drivers/flat/EPreparedStatement.cxx +++ b/connectivity/source/drivers/flat/EPreparedStatement.cxx @@ -22,7 +22,6 @@ using namespace connectivity::flat; using namespace connectivity::file; -using namespace ::com::sun::star::uno; rtl::Reference<OResultSet> OFlatPreparedStatement::createResultSet() { diff --git a/connectivity/source/drivers/flat/EResultSet.cxx b/connectivity/source/drivers/flat/EResultSet.cxx index 2e8c2a391d97..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((*m_aRow)[0]->getValue().getInt32()); + return Any((*m_aRow)[0]->getValue().getInt32()); } sal_Bool SAL_CALL OFlatResultSet::moveToBookmark( const Any& bookmark ) diff --git a/connectivity/source/drivers/flat/EStatement.cxx b/connectivity/source/drivers/flat/EStatement.cxx index dc801ac48653..df9fca5f58f2 100644 --- a/connectivity/source/drivers/flat/EStatement.cxx +++ b/connectivity/source/drivers/flat/EStatement.cxx @@ -22,7 +22,6 @@ using namespace connectivity::flat; using namespace connectivity::file; -using namespace css::uno; rtl::Reference<OResultSet> OFlatStatement::createResultSet() { diff --git a/connectivity/source/drivers/flat/ETable.cxx b/connectivity/source/drivers/flat/ETable.cxx index f4676c8712c6..9cab6b13da5a 100644 --- a/connectivity/source/drivers/flat/ETable.cxx +++ b/connectivity/source/drivers/flat/ETable.cxx @@ -27,7 +27,6 @@ #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 <comphelper/numbers.hxx> @@ -266,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? @@ -546,24 +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 const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OFlatTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OFlatTable_BASE>{}); -} - bool OFlatTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns & _rCols, bool bRetrieveData) { *(*_rRow)[0] = m_nFilePos; @@ -675,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; diff --git a/connectivity/source/drivers/flat/ETables.cxx b/connectivity/source/drivers/flat/ETables.cxx index 2e4dd377ed83..3b0d039311fc 100644 --- a/connectivity/source/drivers/flat/ETables.cxx +++ b/connectivity/source/drivers/flat/ETables.cxx @@ -22,15 +22,8 @@ #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) { diff --git a/connectivity/source/drivers/hsqldb/HCatalog.cxx b/connectivity/source/drivers/hsqldb/HCatalog.cxx index 1074be53559c..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) 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 506bf5b075f9..28feb95fce9b 100644 --- a/connectivity/source/drivers/hsqldb/HConnection.cxx +++ b/connectivity/source/drivers/hsqldb/HConnection.cxx @@ -36,7 +36,7 @@ #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> @@ -281,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'" ); diff --git a/connectivity/source/drivers/hsqldb/HDriver.cxx b/connectivity/source/drivers/hsqldb/HDriver.cxx index 962e574879cf..234fc969db63 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; @@ -213,14 +213,12 @@ namespace connectivity aProperties.put( "JavaDriverClass", OUString( "org.hsqldb.jdbcDriver" ) ); aProperties.put( "JavaDriverClassPath", - OUString( #ifdef SYSTEM_HSQLDB - HSQLDB_JAR + u"" HSQLDB_JAR #else - "vnd.sun.star.expand:$LO_JAVA_DIR/hsqldb.jar" + u"vnd.sun.star.expand:$LO_JAVA_DIR/hsqldb.jar" #endif - " vnd.sun.star.expand:$LO_JAVA_DIR/sdbc_hsqldb.jar" - ) ); + " vnd.sun.star.expand:$LO_JAVA_DIR/sdbc_hsqldb.jar"_ustr ); // auto increment handling aProperties.put( "IsAutoRetrievingEnabled", true ); @@ -235,14 +233,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 { - static const OUStringLiteral sProperties( u"properties" ); + static constexpr OUString sProperties( u"properties"_ustr ); if ( !bIsNewDatabase && xStorage->isStreamElement(sProperties) ) { Reference<XStream > xStream = xStorage->openStreamElement(sProperties,ElementModes::READ); @@ -251,15 +249,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 +273,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 +288,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&) { @@ -357,8 +386,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)); } } } @@ -833,8 +861,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 09ab485d9fd7..8d15d487372a 100644 --- a/connectivity/source/drivers/hsqldb/HStorageAccess.cxx +++ b/connectivity/source/drivers/hsqldb/HStorageAccess.cxx @@ -22,17 +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> #include <algorithm> -using namespace ::com::sun::star::container; 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) { \ @@ -148,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; } @@ -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 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 9a23b6052468..63fe36a34a34 100644 --- a/connectivity/source/drivers/hsqldb/HTable.cxx +++ b/connectivity/source/drivers/hsqldb/HTable.cxx @@ -29,7 +29,7 @@ #include <hsqldb/HColumns.hxx> #include <TConnection.hxx> -#include <tools/diagnose_ex.h> +#include <comphelper/diagnose_ex.hxx> using namespace ::comphelper; @@ -115,19 +115,6 @@ sdbcx::OCollection* OHSQLTable::createIndexes(const ::std::vector< OUString>& _r return new OIndexesHelper(this,m_aMutex,_rNames); } -Sequence< sal_Int8 > OHSQLTable::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OHSQLTable::getSomething( const Sequence< sal_Int8 > & rId ) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{}); -} // XAlterTable void SAL_CALL OHSQLTable::alterColumnByName( const OUString& colName, const Reference< XPropertySet >& descriptor ) @@ -259,7 +246,7 @@ void OHSQLTable::alterColumnType(sal_Int32 nNewType,const OUString& _rColName, c rtl::Reference<OHSQLColumn> pColumn = new OHSQLColumn; ::comphelper::copyProperties(_xDescriptor,pColumn); - pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE),makeAny(nNewType)); + pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE),Any(nNewType)); sSql += ::dbtools::createStandardColumnPart(pColumn,getConnection()); executeStatement(sSql); diff --git a/connectivity/source/drivers/hsqldb/HTables.cxx b/connectivity/source/drivers/hsqldb/HTables.cxx index de818686b49d..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) @@ -160,7 +159,7 @@ void OTables::appendNew(const OUString& _rsNewTable) insertElement(_rsNewTable,nullptr); // notify our container listeners - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any()); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any()); OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) aListenerLoop.next()->elementInserted(aEvent); 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/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 9fe31e58eb01..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) { } diff --git a/connectivity/source/drivers/hsqldb/HView.cxx b/connectivity/source/drivers/hsqldb/HView.cxx index 29e5a4000a51..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> @@ -146,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 1f4b807484e5..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; 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 4fcbbc5aa6cd..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; /*****************************************************************************/ 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/jdbc/CallableStatement.cxx b/connectivity/source/drivers/jdbc/CallableStatement.cxx index 884de3d4ce10..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; diff --git a/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx b/connectivity/source/drivers/jdbc/DatabaseMetaData.cxx index bd2f8470a2a9..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 ) { 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 5553b1195d29..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()); } @@ -436,7 +437,7 @@ Reference< XStatement > SAL_CALL java_sql_Connection::createStatement( ) SDBThreadAttach t; 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,7 +453,7 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareStatement( 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,7 +469,7 @@ Reference< XPreparedStatement > SAL_CALL java_sql_Connection::prepareCall( const 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; @@ -523,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/JStatement.cxx b/connectivity/source/drivers/jdbc/JStatement.cxx index df9d660f554c..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> @@ -378,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(); @@ -576,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 + } + } + }; } diff --git a/connectivity/source/drivers/jdbc/Object.cxx b/connectivity/source/drivers/jdbc/Object.cxx index b2dd83168e5e..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; diff --git a/connectivity/source/drivers/jdbc/PreparedStatement.cxx b/connectivity/source/drivers/jdbc/PreparedStatement.cxx index 33aadcbca840..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; diff --git a/connectivity/source/drivers/jdbc/ResultSet.cxx b/connectivity/source/drivers/jdbc/ResultSet.cxx index 4c7ec72c54f7..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() 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/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/MacabConnection.hxx b/connectivity/source/drivers/macab/MacabConnection.hxx index b18d4778e2da..dc2bfa34f5fd 100644 --- a/connectivity/source/drivers/macab/MacabConnection.hxx +++ b/connectivity/source/drivers/macab/MacabConnection.hxx @@ -19,10 +19,8 @@ #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> diff --git a/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx b/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx index 5c55fa60d54b..b0b04fc08f21 100644 --- a/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx +++ b/connectivity/source/drivers/macab/MacabDatabaseMetaData.cxx @@ -30,6 +30,7 @@ #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> @@ -922,7 +923,7 @@ Reference< XResultSet > SAL_CALL MacabDatabaseMetaData::getTables( // 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(); @@ -957,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); 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 f75391dedb46..d18f5e9827f4 100644 --- a/connectivity/source/drivers/macab/MacabDriver.hxx +++ b/connectivity/source/drivers/macab/MacabDriver.hxx @@ -21,7 +21,6 @@ #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> 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 a230d237ab72..24b3fc7b0b9c 100644 --- a/connectivity/source/drivers/macab/MacabHeader.hxx +++ b/connectivity/source/drivers/macab/MacabHeader.hxx @@ -50,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; diff --git a/connectivity/source/drivers/macab/MacabRecords.cxx b/connectivity/source/drivers/macab/MacabRecords.cxx index 4c2d4aed8fa1..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 @@ -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 004d10b1b6d2..8d0d5cf6f796 100644 --- a/connectivity/source/drivers/macab/MacabRecords.hxx +++ b/connectivity/source/drivers/macab/MacabRecords.hxx @@ -113,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; diff --git a/connectivity/source/drivers/macab/MacabResultSet.cxx b/connectivity/source/drivers/macab/MacabResultSet.cxx index ecb4ea79e417..4142fcb6cce0 100644 --- a/connectivity/source/drivers/macab/MacabResultSet.cxx +++ b/connectivity/source/drivers/macab/MacabResultSet.cxx @@ -885,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) )); } } } @@ -981,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/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 a7afdf4a094a..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 diff --git a/connectivity/source/drivers/macab/MacabStatement.cxx b/connectivity/source/drivers/macab/MacabStatement.cxx index 6c8a02cd7391..95b922ce6bc7 100644 --- a/connectivity/source/drivers/macab/MacabStatement.cxx +++ b/connectivity/source/drivers/macab/MacabStatement.cxx @@ -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() diff --git a/connectivity/source/drivers/macab/MacabStatement.hxx b/connectivity/source/drivers/macab/MacabStatement.hxx index 6b0c53c234ad..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> diff --git a/connectivity/source/drivers/macab/macabutilities.hxx b/connectivity/source/drivers/macab/macabutilities.hxx index cfe46f37f286..7e0f6b091085 100644 --- a/connectivity/source/drivers/macab/macabutilities.hxx +++ b/connectivity/source/drivers/macab/macabutilities.hxx @@ -19,6 +19,10 @@ #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> @@ -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())); } diff --git a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx index faa2063b27b8..076a05d3b9dc 100644 --- a/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx +++ b/connectivity/source/drivers/mozab/bootstrap/MMozillaBootstrap.cxx @@ -32,8 +32,6 @@ using namespace connectivity::mozab; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; -using ::com::sun::star::lang::XSingleServiceFactory; -using ::com::sun::star::lang::XMultiServiceFactory; MozillaBootstrap::MozillaBootstrap() : OMozillaBootstrap_BASE(m_aMutex) diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx index ae775b6fca01..a146d0c09680 100644 --- a/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx +++ b/connectivity/source/drivers/mozab/bootstrap/MNSINIParser.cxx @@ -22,6 +22,7 @@ #include <osl/file.h> #include <rtl/byteseq.hxx> #include <sal/log.hxx> +#include <o3tl/string_view.hxx> IniParser::IniParser(OUString const & rIniName) { @@ -62,9 +63,9 @@ IniParser::IniParser(OUString const & rIniName) ini_Section *aSection = &mAllSection[sectionName]; struct ini_NameValue nameValue; nameValue.sName = OStringToOUString( - line.copy(0,nIndex).trim(), RTL_TEXTENCODING_ASCII_US ); + o3tl::trim(line.subView(0,nIndex)), RTL_TEXTENCODING_ASCII_US ); nameValue.sValue = OStringToOUString( - line.copy(nIndex+1).trim(), RTL_TEXTENCODING_UTF8 ); + o3tl::trim(line.subView(nIndex+1)), RTL_TEXTENCODING_UTF8 ); aSection->vVector.push_back(nameValue); @@ -76,7 +77,7 @@ IniParser::IniParser(OUString const & rIniName) if ( nIndexEnd > nIndexStart && nIndexStart >=0) { sectionName = OStringToOUString( - line.copy(nIndexStart + 1,nIndexEnd - nIndexStart -1).trim(), RTL_TEXTENCODING_ASCII_US ); + o3tl::trim(line.subView(nIndexStart + 1,nIndexEnd - nIndexStart -1)), RTL_TEXTENCODING_ASCII_US ); if (sectionName.isEmpty()) sectionName = "no name section"; } diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx index 18d95cdbdb81..804c8ccc66d8 100644 --- a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx +++ b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.cxx @@ -18,6 +18,8 @@ */ +#include <utility> + #include "MNSProfileDiscover.hxx" #include "MNSFolders.hxx" #include "MNSINIParser.hxx" @@ -28,10 +30,10 @@ namespace connectivity::mozab { } - ProfileStruct::ProfileStruct(const OUString& aProfileName, - const OUString& aProfilePath) - : profileName(aProfileName) - , profilePath(aProfilePath) + ProfileStruct::ProfileStruct(OUString aProfileName, + OUString aProfilePath) + : profileName(std::move(aProfileName)) + , profilePath(std::move(aProfilePath)) { } diff --git a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx index a5f271183b27..132ac06c003c 100644 --- a/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx +++ b/connectivity/source/drivers/mozab/bootstrap/MNSProfileDiscover.hxx @@ -37,7 +37,7 @@ namespace connectivity::mozab { public: ProfileStruct(); - ProfileStruct(const OUString& aProfileName, const OUString &aProfilePath); + ProfileStruct(OUString aProfileName, OUString aProfilePath); const OUString& getProfileName() const { return profileName;} const OUString& getProfilePath() const; private: diff --git a/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx b/connectivity/source/drivers/mysql_jdbc/YCatalog.cxx index 9c0afb55abd5..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) 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 7ee501d42e81..e4e338ee0b31 100644 --- a/connectivity/source/drivers/mysql_jdbc/YDriver.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YDriver.cxx @@ -49,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")); } } @@ -115,9 +115,9 @@ T_DRIVERTYPE lcl_getDriverType(std::u16string_view _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)) @@ -158,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; @@ -232,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; @@ -244,7 +238,7 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url, OUString sAdd; if (RTL_TEXTENCODING_UTF8 == (*aLookup).getEncoding()) { - static constexpr OUStringLiteral s_sCharSetOp = u"useUnicode=true&"; + static constexpr OUString s_sCharSetOp = u"useUnicode=true&"_ustr; if (!sCuttedUrl.matchIgnoreAsciiCase(s_sCharSetOp)) { sAdd = s_sCharSetOp; @@ -266,9 +260,9 @@ Reference<XConnection> SAL_CALL ODriverDelegator::connect(const OUString& url, 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)); } } } @@ -300,18 +294,17 @@ ODriverDelegator::getPropertyInfo(const OUString& url, const Sequence<PropertyVa 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()); diff --git a/connectivity/source/drivers/mysql_jdbc/YTable.cxx b/connectivity/source/drivers/mysql_jdbc/YTable.cxx index b5b02fefc1bc..b79b3f231bbf 100644 --- a/connectivity/source/drivers/mysql_jdbc/YTable.cxx +++ b/connectivity/source/drivers/mysql_jdbc/YTable.cxx @@ -116,20 +116,6 @@ sdbcx::OCollection* OMySQLTable::createIndexes(const ::std::vector<OUString>& _r return new OIndexesHelper(this, m_aMutex, _rNames); } -Sequence<sal_Int8> OMySQLTable::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -// css::lang::XUnoTunnel - -sal_Int64 OMySQLTable::getSomething(const Sequence<sal_Int8>& rId) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OTable_TYPEDEF>{}); -} - // XAlterTable void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName, const Reference<XPropertySet>& descriptor) @@ -198,7 +184,7 @@ void SAL_CALL OMySQLTable::alterColumnByName(const OUString& colName, { sTypeName += OUString::Concat(" ") + s_sAutoIncrement; descriptor->setPropertyValue(rProp.getNameByIndex(PROPERTY_ID_TYPENAME), - makeAny(sTypeName)); + Any(sTypeName)); } } else @@ -210,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)); } } } @@ -269,7 +255,7 @@ void OMySQLTable::alterColumnType(sal_Int32 nNewType, const OUString& _rColName, rtl::Reference<OColumn> pColumn = new OColumn(true); ::comphelper::copyProperties(_xDescriptor, pColumn); pColumn->setPropertyValue(OMetaConnection::getPropMap().getNameByIndex(PROPERTY_ID_TYPE), - makeAny(nNewType)); + Any(nNewType)); sSql += OTables::adjustSQL(::dbtools::createStandardColumnPart( pColumn, getConnection(), static_cast<OTables*>(m_pTables), getTypeCreatePattern())); diff --git a/connectivity/source/drivers/mysql_jdbc/YTables.cxx b/connectivity/source/drivers/mysql_jdbc/YTables.cxx index f1ab3ee1e7b3..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) @@ -153,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(), - rtl::OUStringConcatenation(sNewUnsigned + s_sUNSIGNED)); + rtl::Concat2View(sNewUnsigned + s_sUNSIGNED)); nIndex = sSQL.indexOf(s_sUNSIGNED, nIndex + strlen(s_sUNSIGNED) + sNewUnsigned.getLength()); } return sSQL; @@ -178,7 +177,7 @@ void OTables::appendNew(const OUString& _rsNewTable) insertElement(_rsNewTable, nullptr); // notify our container listeners - ContainerEvent aEvent(static_cast<XContainer*>(this), makeAny(_rsNewTable), Any(), Any()); + ContainerEvent aEvent(static_cast<XContainer*>(this), Any(_rsNewTable), Any(), Any()); OInterfaceIteratorHelper3 aListenerLoop(m_aContainerListeners); while (aListenerLoop.hasMoreElements()) aListenerLoop.next()->elementInserted(aEvent); 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 ed33cb0e2d7c..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) { } diff --git a/connectivity/source/drivers/mysql_jdbc/YViews.cxx b/connectivity/source/drivers/mysql_jdbc/YViews.cxx index 3dba721c0c86..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; diff --git a/connectivity/source/drivers/mysqlc/DataAccess.xcu b/connectivity/source/drivers/mysqlc/DataAccess.xcu deleted file mode 100644 index 2b652ec87649..000000000000 --- a/connectivity/source/drivers/mysqlc/DataAccess.xcu +++ /dev/null @@ -1,35 +0,0 @@ -<!-- - * 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 . - --> -<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> 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 4cf9e916f3df..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(); @@ -461,7 +462,7 @@ OUString OConnection::transFormPreparedStatement(const OUString& _sSQL) try { Reference<XConnection> xCon = this; - Sequence<Any> aArgs{ Any(NamedValue("ActiveConnection", makeAny(xCon))) }; + Sequence<Any> aArgs{ Any(NamedValue("ActiveConnection", Any(xCon))) }; m_xParameterSubstitution.set( m_xDriver->getFactory()->createInstanceWithArguments( @@ -485,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 c75be4724654..3a0ccf36b4ed 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_connection.hxx @@ -24,20 +24,18 @@ #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> @@ -56,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 @@ -82,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; @@ -92,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 @@ -114,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; @@ -124,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; diff --git a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.cxx index a96d70f3461e..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("%"); @@ -160,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 "#@"; } @@ -564,7 +564,7 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTableTypes() if (m_rConnection.getMysqlVersion() >= requiredVersion[i]) { rRows.push_back( - { { Any(), makeAny(mysqlc_sdbc_driver::convert(table_types[i], encoding)) } }); + { { Any(), Any(mysqlc_sdbc_driver::convert(table_types[i], encoding)) } }); } } lcl_setRows_throw(xResultSet, 5, rRows); @@ -584,17 +584,17 @@ Reference<XResultSet> SAL_CALL ODatabaseMetaData::getTypeInfo() while (mysqlc_types[i].typeName) { rRows.push_back( - { { Any(), makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].typeName, encoding)), - makeAny(mysqlc_types[i].dataType), makeAny(mysqlc_types[i].precision), - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalPrefix, encoding)), - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].literalSuffix, encoding)), - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].createParams, encoding)), - makeAny(mysqlc_types[i].nullable), makeAny(mysqlc_types[i].caseSensitive), - makeAny(mysqlc_types[i].searchable), makeAny(mysqlc_types[i].isUnsigned), - makeAny(mysqlc_types[i].fixedPrecScale), makeAny(mysqlc_types[i].autoIncrement), - makeAny(mysqlc_sdbc_driver::convert(mysqlc_types[i].localTypeName, encoding)), - makeAny(mysqlc_types[i].minScale), makeAny(mysqlc_types[i].maxScale), - makeAny(sal_Int32(0)), makeAny(sal_Int32(0)), makeAny(sal_Int32(10)) } }); + { { 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)) } }); i++; } @@ -618,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(); @@ -635,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); @@ -743,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")) @@ -773,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); @@ -816,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(")"); } @@ -938,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); @@ -1026,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 b56a460e0843..caed92f20e80 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_databasemetadata.hxx @@ -177,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; diff --git a/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx b/connectivity/source/drivers/mysqlc/mysqlc_driver.cxx index 5e5b83625e90..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,7 +85,6 @@ 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 rtl::Reference<OConnection> pCon = new OConnection(*this); @@ -114,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 fec80288b59a..a29040892577 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_driver.hxx @@ -21,24 +21,21 @@ #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); @@ -50,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); @@ -82,6 +75,12 @@ 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 */ diff --git a/connectivity/source/drivers/mysqlc/mysqlc_general.cxx b/connectivity/source/drivers/mysqlc/mysqlc_general.cxx index 35ecfee84750..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> @@ -164,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; @@ -189,50 +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("year")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"smallint") + || o3tl::equalsIgnoreAsciiCase(sType, u"year")) return css::sdbc::DataType::SMALLINT; - if (sType.equalsIgnoreAsciiCase("int") || sType.equalsIgnoreAsciiCase("mediumint")) + 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") - || sType.equalsIgnoreAsciiCase("tinyblob") || sType.equalsIgnoreAsciiCase("mediumblob")) + 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("tinytext")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"tinytext")) return css::sdbc::DataType::VARCHAR; - if (sType.equalsIgnoreAsciiCase("text")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"text")) return css::sdbc::DataType::LONGVARCHAR; - if (sType.equalsIgnoreAsciiCase("mediumtext") || sType.equalsIgnoreAsciiCase("longtext")) + 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")) + if (o3tl::equalsIgnoreAsciiCase(sType, u"bit")) return css::sdbc::DataType::BIT; - if (sType.equalsIgnoreAsciiCase("bool") || sType.equalsIgnoreAsciiCase("boolean")) + 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 2a78c7628879..16236e1530ed 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_general.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_general.hxx @@ -108,7 +108,7 @@ 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); } 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 8360700434fc..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,11 +46,8 @@ 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) @@ -107,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; @@ -171,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)) @@ -189,7 +198,7 @@ void OPreparedResultSet::disposing() MutexGuard aGuard(m_aMutex); - m_aStatement = nullptr; + m_aStatement.clear(); m_xMetaData = nullptr; } @@ -322,8 +331,21 @@ 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) + && !bIsBlobType) return getRowSetValue(column).getString(); const char* sStr = static_cast<const char*>(m_aData[column - 1].buffer); @@ -363,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: @@ -1002,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(); } diff --git a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx index 018595b770ba..40912c5534a7 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx @@ -41,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, @@ -52,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> diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.cxx index a50b14bbb3b4..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; @@ -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, @@ -492,9 +491,10 @@ void SAL_CALL OPreparedStatement::setBytes(sal_Int32 parameter, const Sequence<s 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, @@ -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 d280bd935ae3..e1743d91dbc4 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx @@ -30,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 diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultset.cxx index 7a11020ea8e0..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(); } @@ -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 461e81286cb6..3e43853d364e 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx @@ -40,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 @@ -54,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> diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.cxx index 3d0ac9ce8411..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) @@ -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 c2e5db5f3375..aa84ac05586c 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_resultsetmetadata.hxx @@ -30,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; diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx b/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx index 6e14d9ec60bc..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; @@ -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(); } diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx index 14750309ad87..c710b0b46a6d 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx @@ -36,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, @@ -49,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> diff --git a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx index d0847aedc5d6..edba70a935ab 100644 --- a/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx +++ b/connectivity/source/drivers/mysqlc/mysqlc_subcomponent.hxx @@ -106,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) 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_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 957142027182..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) @@ -1241,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 &) { @@ -1277,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 ae6eeb4fddeb..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(); } @@ -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() diff --git a/connectivity/source/drivers/odbc/ODriver.cxx b/connectivity/source/drivers/odbc/ODriver.cxx index df7b3fd206b8..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) { } diff --git a/connectivity/source/drivers/odbc/OPreparedStatement.cxx b/connectivity/source/drivers/odbc/OPreparedStatement.cxx index 507a52d872a2..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; @@ -909,7 +907,7 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 _parameterIndex) )); SQLException aNext(sError,*this, OUString(),0,Any()); - ::dbtools::throwInvalidIndexException(*this,makeAny(aNext)); + ::dbtools::throwInvalidIndexException(*this,Any(aNext)); } } diff --git a/connectivity/source/drivers/odbc/OResultSet.cxx b/connectivity/source/drivers/odbc/OResultSet.cxx index b38d81b3a4eb..9e68cd1763c2 100644 --- a/connectivity/source/drivers/odbc/OResultSet.cxx +++ b/connectivity/source/drivers/odbc/OResultSet.cxx @@ -891,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 ) @@ -1403,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() @@ -1667,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; 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 d44f86e58469..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 ) @@ -477,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!"); @@ -615,7 +613,7 @@ Any SAL_CALL OStatement_Base::getWarnings( ) checkDisposed(OStatement_BASE::rBHelper.bDisposed); - return makeAny(m_aLastWarning); + return Any(m_aLastWarning); } @@ -859,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 + } + } + }; } diff --git a/connectivity/source/drivers/postgresql/pq_array.hxx b/connectivity/source/drivers/postgresql/pq_array.hxx index b847d646a913..589fe063d234 100644 --- a/connectivity/source/drivers/postgresql/pq_array.hxx +++ b/connectivity/source/drivers/postgresql/pq_array.hxx @@ -39,6 +39,7 @@ #include <com/sun/star/sdbc/XArray.hpp> #include "pq_connection.hxx" +#include <utility> #include <vector> namespace pq_sdbc_driver @@ -53,14 +54,14 @@ class Array : public cppu::WeakImplHelper< css::sdbc::XArray > public: Array( - const rtl::Reference< comphelper::RefCountedMutex > & mutex, + rtl::Reference< comphelper::RefCountedMutex > mutex, std::vector< css::uno::Any > && data, - const css::uno::Reference< css::uno::XInterface > & owner, - const css::uno::Reference< css::script::XTypeConverter > &tc) : + css::uno::Reference< css::uno::XInterface > owner, + css::uno::Reference< css::script::XTypeConverter > tc) : m_data( std::move(data) ), - m_owner( owner ), - m_tc( tc ), - m_xMutex( mutex ) + m_owner(std::move( owner )), + m_tc(std::move( tc )), + m_xMutex(std::move( mutex )) {} public: // XArray diff --git a/connectivity/source/drivers/postgresql/pq_connection.cxx b/connectivity/source/drivers/postgresql/pq_connection.cxx index 6661a97d5669..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> @@ -96,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 )) { } @@ -115,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 ) { } @@ -330,7 +331,15 @@ class cstr_vector std::vector<char*> values; std::vector<bool> acquired; public: +#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 f30483f70938..2bba070a7273 100644 --- a/connectivity/source/drivers/postgresql/pq_connection.hxx +++ b/connectivity/source/drivers/postgresql/pq_connection.hxx @@ -134,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; diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx index c3280e07bf15..1fbcb1aa69f5 100644 --- a/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx +++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.cxx @@ -84,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; @@ -114,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(); @@ -210,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; } @@ -310,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??? @@ -1185,30 +1186,30 @@ css::uno::Reference< XResultSet > DatabaseMetaData::getTables( namespace { // sort no schema first, then "public", then normal schemas, then internal schemas - int compare_schema(const OUString &nsA, std::u16string_view nsB) + int compare_schema(std::u16string_view nsA, std::u16string_view nsB) { - if (nsA.isEmpty()) + if (nsA.empty()) { return nsB.empty() ? 0 : -1; } else if (nsB.empty()) { - assert(!nsA.isEmpty()); + assert(!nsA.empty()); return 1; } - else if(nsA == "public") + else if(nsA == u"public") { return (nsB == u"public") ? 0 : -1; } 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(o3tl::starts_with(nsB, u"pg_")) - return nsA.compareTo(nsB); + return nsA.compare(nsB); else return 1; } @@ -1218,7 +1219,7 @@ namespace } else { - return nsA.compareTo(nsB); + return nsA.compare(nsB); } } @@ -1364,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 ), @@ -1405,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 ++; } } @@ -2086,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; diff --git a/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx b/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx index 134f72cf0186..4e8b717a96b2 100644 --- a/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx +++ b/connectivity/source/drivers/postgresql/pq_databasemetadata.hxx @@ -74,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 ); diff --git a/connectivity/source/drivers/postgresql/pq_driver.cxx b/connectivity/source/drivers/postgresql/pq_driver.cxx index 09fe61ab2824..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; diff --git a/connectivity/source/drivers/postgresql/pq_driver.hxx b/connectivity/source/drivers/postgresql/pq_driver.hxx index 6be6a39484f3..31d407f36965 100644 --- a/connectivity/source/drivers/postgresql/pq_driver.hxx +++ b/connectivity/source/drivers/postgresql/pq_driver.hxx @@ -36,9 +36,9 @@ #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> @@ -54,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, @@ -64,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() ) {} 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 c2907aeb0290..44e7dc9bcf13 100644 --- a/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_fakedupdateableresultset.hxx @@ -61,7 +61,7 @@ public: PGresult *result, const OUString &schema, const OUString &table, - const OUString &aReason ); + OUString aReason ); public: // XInterface virtual void SAL_CALL acquire() noexcept override { ResultSet::acquire(); } 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 4755efbe0368..ed81420cec7d 100644 --- a/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx +++ b/connectivity/source/drivers/postgresql/pq_preparedstatement.hxx @@ -98,7 +98,7 @@ 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 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 340e34b70c3b..cf2888bf5b93 100644 --- a/connectivity/source/drivers/postgresql/pq_resultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_resultset.hxx @@ -72,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 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 67e34d44d257..71c98190ba2b 100644 --- a/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx +++ b/connectivity/source/drivers/postgresql/pq_resultsetmetadata.hxx @@ -89,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 diff --git a/connectivity/source/drivers/postgresql/pq_statement.cxx b/connectivity/source/drivers/postgresql/pq_statement.cxx index 7db4b20536e2..648faa69811b 100644 --- a/connectivity/source/drivers/postgresql/pq_statement.cxx +++ b/connectivity/source/drivers/postgresql/pq_statement.cxx @@ -59,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> @@ -252,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() ); @@ -429,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, @@ -441,7 +442,7 @@ 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( @@ -589,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; @@ -598,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 " ); @@ -606,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; @@ -699,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 fae6568bb505..816d2a55afaa 100644 --- a/connectivity/source/drivers/postgresql/pq_statement.hxx +++ b/connectivity/source/drivers/postgresql/pq_statement.hxx @@ -189,7 +189,7 @@ 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 ); diff --git a/connectivity/source/drivers/postgresql/pq_statics.cxx b/connectivity/source/drivers/postgresql/pq_statics.cxx index 7169f4617821..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; }; @@ -197,7 +197,7 @@ 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"; @@ -211,7 +211,7 @@ 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"; @@ -233,7 +233,7 @@ 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"; @@ -256,7 +256,7 @@ 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"; @@ -272,7 +272,7 @@ 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 @@ -288,7 +288,7 @@ 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 @@ -311,7 +311,7 @@ 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 = @@ -324,7 +324,7 @@ Statics & getStatics() 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"; @@ -338,13 +338,13 @@ 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 = { "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 = { "com.sun.star.sdbcx.User" }; @@ -353,7 +353,7 @@ Statics & getStatics() 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 = @@ -365,7 +365,7 @@ Statics & getStatics() 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"; @@ -380,14 +380,14 @@ 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 = { "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"; @@ -409,7 +409,7 @@ 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 = @@ -422,31 +422,7 @@ Statics & getStatics() 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 = { "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 = { "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 7b776ff84308..4e745e4086ee 100644 --- a/connectivity/source/drivers/postgresql/pq_statics.hxx +++ b/connectivity/source/drivers/postgresql/pq_statics.hxx @@ -37,6 +37,7 @@ #pragma once #include <unordered_map> +#include <utility> #include <vector> #include <com/sun/star/uno/Any.hxx> @@ -50,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 ), @@ -122,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; diff --git a/connectivity/source/drivers/postgresql/pq_tools.cxx b/connectivity/source/drivers/postgresql/pq_tools.cxx index 9b75d69ba46c..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; @@ -943,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 1f9356ed41d3..c5f9174111ca 100644 --- a/connectivity/source/drivers/postgresql/pq_tools.hxx +++ b/connectivity/source/drivers/postgresql/pq_tools.hxx @@ -106,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); @@ -115,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 ); @@ -131,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 ); diff --git a/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx b/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx index 5c1b23e82175..49eb65cd9fbf 100644 --- a/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx +++ b/connectivity/source/drivers/postgresql/pq_updateableresultset.cxx @@ -296,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; @@ -342,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 1beeadc31e98..52cb513a5856 100644 --- a/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx +++ b/connectivity/source/drivers/postgresql/pq_updateableresultset.hxx @@ -44,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 { @@ -78,13 +79,13 @@ private: std::vector< OUString >&& colNames, std::vector< std::vector< css::uno::Any > >&& data, ConnectionSettings **ppSettings, - const OUString &schema, - const OUString &table, + 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_schema(std::move( schema )), + m_table(std::move( table )), m_primaryKey( std::move(primaryKey) ), m_insertRow( false ) { 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 80e553325c93..e4ca16fd5e6a 100644 --- a/connectivity/source/drivers/postgresql/pq_xbase.hxx +++ b/connectivity/source/drivers/postgresql/pq_xbase.hxx @@ -36,7 +36,6 @@ #pragma once #include <cppuhelper/propshlp.hxx> -#include <cppuhelper/component.hxx> #include <cppuhelper/compbase.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> @@ -66,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 !*/ ); diff --git a/connectivity/source/drivers/postgresql/pq_xcolumn.cxx b/connectivity/source/drivers/postgresql/pq_xcolumn.cxx index 33e57a1a5445..b19d95c3c994 100644 --- a/connectivity/source/drivers/postgresql/pq_xcolumn.cxx +++ b/connectivity/source/drivers/postgresql/pq_xcolumn.cxx @@ -38,6 +38,7 @@ #include <rtl/ref.hxx> +#include "pq_statics.hxx" #include "pq_xcolumn.hxx" using com::sun::star::uno::Reference; diff --git a/connectivity/source/drivers/postgresql/pq_xcolumns.cxx b/connectivity/source/drivers/postgresql/pq_xcolumns.cxx index 82d595628db3..2902879c49b0 100644 --- a/connectivity/source/drivers/postgresql/pq_xcolumns.cxx +++ b/connectivity/source/drivers/postgresql/pq_xcolumns.cxx @@ -38,6 +38,7 @@ #include <string_view> +#include <o3tl/safeint.hxx> #include <o3tl/string_view.hxx> #include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> @@ -49,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" @@ -61,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; @@ -75,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 ) @@ -109,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() @@ -185,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 ) ) ); @@ -213,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 @@ -316,7 +317,7 @@ void Columns::refresh() // name ) ); { - m_values.push_back( makeAny( prop ) ); + m_values.emplace_back(prop); map[ name ] = columnIndex; ++columnIndex; } @@ -405,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() ); } @@ -461,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 ); @@ -493,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 " diff --git a/connectivity/source/drivers/postgresql/pq_xcolumns.hxx b/connectivity/source/drivers/postgresql/pq_xcolumns.hxx index aa91a9754218..8ff8fcfbd95c 100644 --- a/connectivity/source/drivers/postgresql/pq_xcolumns.hxx +++ b/connectivity/source/drivers/postgresql/pq_xcolumns.hxx @@ -80,8 +80,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 ~Columns() override; diff --git a/connectivity/source/drivers/postgresql/pq_xcontainer.cxx b/connectivity/source/drivers/postgresql/pq_xcontainer.cxx index d2bcf941a68d..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,7 +158,7 @@ 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 ]; } @@ -189,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 ) @@ -299,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 " @@ -350,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( @@ -391,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 1e17fef28db5..4b6c190b0a59 100644 --- a/connectivity/source/drivers/postgresql/pq_xcontainer.hxx +++ b/connectivity/source/drivers/postgresql/pq_xcontainer.hxx @@ -53,8 +53,6 @@ #include <unordered_map> -#include "pq_statics.hxx" - namespace pq_sdbc_driver { @@ -119,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 diff --git a/connectivity/source/drivers/postgresql/pq_xindex.cxx b/connectivity/source/drivers/postgresql/pq_xindex.cxx index 5a96eeeb119d..4753b5fd4e3c 100644 --- a/connectivity/source/drivers/postgresql/pq_xindex.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindex.cxx @@ -37,6 +37,7 @@ #include <cppuhelper/typeprovider.hxx> #include <cppuhelper/queryinterface.hxx> #include <rtl/ref.hxx> +#include <utility> #include "pq_xindex.hxx" #include "pq_xindexcolumns.hxx" @@ -58,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, @@ -67,8 +68,8 @@ 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( ) diff --git a/connectivity/source/drivers/postgresql/pq_xindex.hxx b/connectivity/source/drivers/postgresql/pq_xindex.hxx index 46275ad3aafa..8ccf45660467 100644 --- a/connectivity/source/drivers/postgresql/pq_xindex.hxx +++ b/connectivity/source/drivers/postgresql/pq_xindex.hxx @@ -61,8 +61,8 @@ 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() noexcept override { ReflectionBase::acquire(); } diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx b/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx index 58cae851f441..fe72059bc15a 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindexcolumn.cxx @@ -38,6 +38,7 @@ #include <rtl/ref.hxx> +#include "pq_statics.hxx" #include "pq_xindexcolumn.hxx" using com::sun::star::uno::Reference; diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx index 1e0039ecc6e1..2bca00e13b77 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindexcolumns.cxx @@ -37,6 +37,7 @@ #include <sal/log.hxx> #include <string_view> +#include <utility> #include <vector> #include <com/sun/star/lang/WrappedTargetRuntimeException.hpp> @@ -56,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; @@ -73,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 ) {} @@ -131,7 +131,7 @@ void IndexColumns::refresh() 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; diff --git a/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx b/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx index eaaa709e671a..a838d5d66908 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx +++ b/connectivity/source/drivers/postgresql/pq_xindexcolumns.hxx @@ -63,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; diff --git a/connectivity/source/drivers/postgresql/pq_xindexes.cxx b/connectivity/source/drivers/postgresql/pq_xindexes.cxx index 332a9a9e5311..bff96216c568 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexes.cxx +++ b/connectivity/source/drivers/postgresql/pq_xindexes.cxx @@ -43,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" @@ -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; @@ -78,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 )) { } @@ -149,7 +150,7 @@ 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()); @@ -160,10 +161,10 @@ void Indexes::refresh() } 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; } @@ -235,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 " diff --git a/connectivity/source/drivers/postgresql/pq_xindexes.hxx b/connectivity/source/drivers/postgresql/pq_xindexes.hxx index c2e81f61751f..536d17b96198 100644 --- a/connectivity/source/drivers/postgresql/pq_xindexes.hxx +++ b/connectivity/source/drivers/postgresql/pq_xindexes.hxx @@ -58,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; diff --git a/connectivity/source/drivers/postgresql/pq_xkey.cxx b/connectivity/source/drivers/postgresql/pq_xkey.cxx index e2777824568f..81d1f7a86eb6 100644 --- a/connectivity/source/drivers/postgresql/pq_xkey.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkey.cxx @@ -37,6 +37,7 @@ #include <cppuhelper/typeprovider.hxx> #include <cppuhelper/queryinterface.hxx> #include <rtl/ref.hxx> +#include <utility> #include "pq_xkey.hxx" #include "pq_xkeycolumns.hxx" @@ -57,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, @@ -66,8 +67,8 @@ 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( ) diff --git a/connectivity/source/drivers/postgresql/pq_xkey.hxx b/connectivity/source/drivers/postgresql/pq_xkey.hxx index d231e1e89945..68f05fd27d4e 100644 --- a/connectivity/source/drivers/postgresql/pq_xkey.hxx +++ b/connectivity/source/drivers/postgresql/pq_xkey.hxx @@ -61,8 +61,8 @@ 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() noexcept override { ReflectionBase::acquire(); } diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx b/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx index 10c3dbb474cd..30eef179716c 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkeycolumn.cxx @@ -38,6 +38,7 @@ #include <rtl/ref.hxx> +#include "pq_statics.hxx" #include "pq_xkeycolumn.hxx" using com::sun::star::uno::Reference; diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx b/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx index 6dcbe07d4117..89f63ceb5a65 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkeycolumns.cxx @@ -40,6 +40,7 @@ #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" @@ -52,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; @@ -69,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 ) {} @@ -126,11 +126,11 @@ void KeyColumns::refresh() 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; } diff --git a/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx b/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx index 0c56fd189e9a..60bbd0c0de36 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx +++ b/connectivity/source/drivers/postgresql/pq_xkeycolumns.hxx @@ -63,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); diff --git a/connectivity/source/drivers/postgresql/pq_xkeys.cxx b/connectivity/source/drivers/postgresql/pq_xkeys.cxx index 84507202fa9a..0758be630e04 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeys.cxx +++ b/connectivity/source/drivers/postgresql/pq_xkeys.cxx @@ -49,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" @@ -60,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; @@ -78,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() @@ -156,16 +158,16 @@ void Keys::refresh() 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 ) ) ) ) ); @@ -174,13 +176,13 @@ void Keys::refresh() { OUString buf = xRow->getString( 6 ) + "." + xRow->getString( 5 ); pKey->setPropertyValue_NoBroadcast_public( - st.REFERENCED_TABLE, makeAny( buf ) ); + 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) diff --git a/connectivity/source/drivers/postgresql/pq_xkeys.hxx b/connectivity/source/drivers/postgresql/pq_xkeys.hxx index fe1afef35a4b..ef6376d4d780 100644 --- a/connectivity/source/drivers/postgresql/pq_xkeys.hxx +++ b/connectivity/source/drivers/postgresql/pq_xkeys.hxx @@ -58,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; diff --git a/connectivity/source/drivers/postgresql/pq_xtable.cxx b/connectivity/source/drivers/postgresql/pq_xtable.cxx index 9ac52f1df0ff..de8196f9fecd 100644 --- a/connectivity/source/drivers/postgresql/pq_xtable.cxx +++ b/connectivity/source/drivers/postgresql/pq_xtable.cxx @@ -60,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; @@ -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() ) { diff --git a/connectivity/source/drivers/postgresql/pq_xtable.hxx b/connectivity/source/drivers/postgresql/pq_xtable.hxx index dc1577612db8..7c8ca73f566b 100644 --- a/connectivity/source/drivers/postgresql/pq_xtable.hxx +++ b/connectivity/source/drivers/postgresql/pq_xtable.hxx @@ -36,19 +36,14 @@ #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 { diff --git a/connectivity/source/drivers/postgresql/pq_xtables.cxx b/connectivity/source/drivers/postgresql/pq_xtables.cxx index 47606669dd40..423ec81f2166 100644 --- a/connectivity/source/drivers/postgresql/pq_xtables.cxx +++ b/connectivity/source/drivers/postgresql/pq_xtables.cxx @@ -43,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" @@ -55,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; @@ -111,16 +111,16 @@ void Tables::refresh() 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 | @@ -131,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; } @@ -311,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) diff --git a/connectivity/source/drivers/postgresql/pq_xuser.hxx b/connectivity/source/drivers/postgresql/pq_xuser.hxx index 8072cae415bb..702787a67496 100644 --- a/connectivity/source/drivers/postgresql/pq_xuser.hxx +++ b/connectivity/source/drivers/postgresql/pq_xuser.hxx @@ -36,11 +36,6 @@ #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" diff --git a/connectivity/source/drivers/postgresql/pq_xusers.cxx b/connectivity/source/drivers/postgresql/pq_xusers.cxx index bc8b62b1d5b4..08cdf2d1c135 100644 --- a/connectivity/source/drivers/postgresql/pq_xusers.cxx +++ b/connectivity/source/drivers/postgresql/pq_xusers.cxx @@ -41,6 +41,7 @@ #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" @@ -51,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; @@ -98,10 +99,10 @@ void Users::refresh() 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; } @@ -151,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 " diff --git a/connectivity/source/drivers/postgresql/pq_xview.cxx b/connectivity/source/drivers/postgresql/pq_xview.cxx index 3652cdee634f..c2e936e9a314 100644 --- a/connectivity/source/drivers/postgresql/pq_xview.cxx +++ b/connectivity/source/drivers/postgresql/pq_xview.cxx @@ -52,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; @@ -121,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; } @@ -142,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 ! diff --git a/connectivity/source/drivers/postgresql/pq_xview.hxx b/connectivity/source/drivers/postgresql/pq_xview.hxx index 055fd921864f..f68b5535a8d7 100644 --- a/connectivity/source/drivers/postgresql/pq_xview.hxx +++ b/connectivity/source/drivers/postgresql/pq_xview.hxx @@ -36,13 +36,7 @@ #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" diff --git a/connectivity/source/drivers/postgresql/pq_xviews.cxx b/connectivity/source/drivers/postgresql/pq_xviews.cxx index d71219fa6420..1f5b6c4fa52c 100644 --- a/connectivity/source/drivers/postgresql/pq_xviews.cxx +++ b/connectivity/source/drivers/postgresql/pq_xviews.cxx @@ -41,6 +41,7 @@ #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" @@ -52,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; @@ -110,12 +111,12 @@ void Views::refresh() 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; } @@ -175,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) diff --git a/connectivity/source/drivers/writer/WConnection.cxx b/connectivity/source/drivers/writer/WConnection.cxx index 385692951518..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); { @@ -214,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; } @@ -227,7 +226,7 @@ uno::Reference<sdbc::XPreparedStatement> 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 e9b230be3fb5..1eed92ddcf07 100644 --- a/connectivity/source/drivers/writer/WDatabaseMetaData.cxx +++ b/connectivity/source/drivers/writer/WDatabaseMetaData.cxx @@ -90,14 +90,15 @@ 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); } } diff --git a/connectivity/source/drivers/writer/WDriver.cxx b/connectivity/source/drivers/writer/WDriver.cxx index fa3a3dcf685a..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> @@ -63,7 +60,7 @@ uno::Reference<sdbc::XConnection> rtl::Reference<OWriterConnection> pCon = new OWriterConnection(this); pCon->construct(url, info); - m_xConnections.push_back(uno::WeakReferenceHelper(*pCon)); + m_xConnections.emplace_back(*pCon); return pCon; } diff --git a/connectivity/source/drivers/writer/WTable.cxx b/connectivity/source/drivers/writer/WTable.cxx index 2f76fc4a09d0..2f0f44855d86 100644 --- a/connectivity/source/drivers/writer/WTable.cxx +++ b/connectivity/source/drivers/writer/WTable.cxx @@ -30,7 +30,6 @@ #include <writer/WConnection.hxx> #include <connectivity/sdbcx/VColumn.hxx> #include <sal/log.hxx> -#include <comphelper/servicehelper.hxx> namespace com::sun::star::text { @@ -171,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) { } @@ -210,18 +206,6 @@ void SAL_CALL OWriterTable::disposing() m_pWriterConnection = nullptr; } -uno::Sequence<sal_Int8> OWriterTable::getUnoTunnelId() -{ - static const comphelper::UnoIdInit implId; - return implId.getSeq(); -} - -sal_Int64 OWriterTable::getSomething(const uno::Sequence<sal_Int8>& rId) -{ - return comphelper::getSomethingImpl(rId, this, - comphelper::FallbackToGetSomethingOf<OWriterTable_BASE>{}); -} - bool OWriterTable::fetchRow(OValueRefRow& _rRow, const OSQLColumns& _rCols, bool bRetrieveData) { // read the bookmark |