connectivity/source/cpool/ZPooledConnection.cxx                  |    2 
 connectivity/source/cpool/ZPooledConnection.hxx                  |    5 -
 connectivity/source/drivers/evoab2/NPreparedStatement.hxx        |    2 
 connectivity/source/drivers/file/FPreparedStatement.cxx          |    7 +
 connectivity/source/drivers/firebird/PreparedStatement.hxx       |    4 
 connectivity/source/drivers/firebird/ResultSet.hxx               |    3 
 connectivity/source/drivers/firebird/StatementCommonBase.cxx     |    6 -
 connectivity/source/drivers/firebird/StatementCommonBase.hxx     |    3 
 connectivity/source/drivers/jdbc/ResultSet.cxx                   |    4 
 connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx |    2 
 connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx  |    4 
 connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx          |    3 
 connectivity/source/drivers/mysqlc/mysqlc_statement.cxx          |    3 
 connectivity/source/drivers/mysqlc/mysqlc_statement.hxx          |    3 
 connectivity/source/drivers/odbc/OPreparedStatement.cxx          |    7 +
 connectivity/source/drivers/postgresql/pq_connection.cxx         |    1 
 connectivity/source/drivers/postgresql/pq_connection.hxx         |    4 
 connectivity/source/drivers/postgresql/pq_xkey.hxx               |    3 
 connectivity/source/drivers/postgresql/pq_xtable.hxx             |    2 
 connectivity/source/inc/FDatabaseMetaDataResultSet.hxx           |    4 
 connectivity/source/inc/TDatabaseMetaDataBase.hxx                |    5 -
 connectivity/source/inc/file/FPreparedStatement.hxx              |    5 -
 connectivity/source/inc/file/FResultSet.hxx                      |    7 +
 connectivity/source/inc/java/sql/ResultSet.hxx                   |    2 
 connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx      |    4 
 connectivity/source/inc/odbc/OPreparedStatement.hxx              |    5 -
 connectivity/source/inc/odbc/OResultSet.hxx                      |    6 -
 svx/source/inc/cell.hxx                                          |    4 
 svx/source/table/accessibletableshape.cxx                        |   46 
++++------
 29 files changed, 90 insertions(+), 66 deletions(-)

New commits:
commit d0d84eba568aaa9aef6ad812f19410946a274640
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu Sep 12 10:18:26 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Sep 12 14:11:00 2024 +0200

    use more concrete UNO classes in connectivity
    
    Change-Id: I5c70278add0aa0b0c4a7680c6615b75b688f2180
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173247
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    Tested-by: Jenkins

diff --git a/connectivity/source/cpool/ZPooledConnection.cxx 
b/connectivity/source/cpool/ZPooledConnection.cxx
index 42e8d6c02db7..6cabc1ce2e29 100644
--- a/connectivity/source/cpool/ZPooledConnection.cxx
+++ b/connectivity/source/cpool/ZPooledConnection.cxx
@@ -65,7 +65,7 @@ Reference< XConnection > OPooledConnection::getConnection()
         if (m_xComponent.is())
             m_xComponent->addEventListener(this);
     }
-    return Reference< XConnection >(m_xComponent,UNO_QUERY);
+    return m_xComponent;
 }
 
 
diff --git a/connectivity/source/cpool/ZPooledConnection.hxx 
b/connectivity/source/cpool/ZPooledConnection.hxx
index 79450ea081d3..0f5506f4f3b1 100644
--- a/connectivity/source/cpool/ZPooledConnection.hxx
+++ b/connectivity/source/cpool/ZPooledConnection.hxx
@@ -22,10 +22,11 @@
 #include <com/sun/star/sdbc/XPooledConnection.hpp>
 #include <com/sun/star/lang/XEventListener.hpp>
 #include <com/sun/star/reflection/XProxyFactory.hpp>
-
+#include <rtl/ref.hxx>
 
 namespace connectivity
 {
+    class OConnectionWeakWrapper;
 
     // OPooledConnection -
     // allows to pool a real connection
@@ -37,7 +38,7 @@ namespace connectivity
                              ,public OPooledConnection_Base
     {
         css::uno::Reference< css::sdbc::XConnection >             
m_xRealConnection;  // the connection from driver
-        css::uno::Reference< css::lang::XComponent >              
m_xComponent;       // the connection which wraps the real connection
+        rtl::Reference< OConnectionWeakWrapper >                  
m_xComponent;       // the connection which wraps the real connection
         css::uno::Reference< css::reflection::XProxyFactory >     
m_xProxyFactory;
     public:
         // OComponentHelper
diff --git a/connectivity/source/drivers/evoab2/NPreparedStatement.hxx 
b/connectivity/source/drivers/evoab2/NPreparedStatement.hxx
index cd42d42d505b..076216e0cf42 100644
--- a/connectivity/source/drivers/evoab2/NPreparedStatement.hxx
+++ b/connectivity/source/drivers/evoab2/NPreparedStatement.hxx
@@ -47,7 +47,7 @@ namespace connectivity::evoab
             // the EBookQuery we're working with
             QueryData                                             m_aQueryData;
             // our meta data
-            css::uno::Reference< css::sdbc::XResultSetMetaData >  m_xMetaData;
+            rtl::Reference<OEvoabResultSetMetaData>               m_xMetaData;
 
             virtual ~OEvoabPreparedStatement() override;
 
diff --git a/connectivity/source/drivers/file/FPreparedStatement.cxx 
b/connectivity/source/drivers/file/FPreparedStatement.cxx
index 33ca5a3b47d7..5139eba871cd 100644
--- a/connectivity/source/drivers/file/FPreparedStatement.cxx
+++ b/connectivity/source/drivers/file/FPreparedStatement.cxx
@@ -127,6 +127,11 @@ css::uno::Sequence< css::uno::Type > SAL_CALL 
OPreparedStatement::getTypes(  )
 
 
 Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData(  )
+{
+    return getMetaDataImpl();
+}
+
+const rtl::Reference< OResultSetMetaData > & 
OPreparedStatement::getMetaDataImpl(  )
 {
     ::osl::MutexGuard aGuard( m_aMutex );
     checkDisposed(OStatement_BASE::rBHelper.bDisposed);
@@ -377,7 +382,7 @@ void OPreparedStatement::initResultSet(OResultSet 
*pResultSet)
          m_pConnection->throwGenericSQLException(STR_INVALID_PARA_COUNT,*this);
 
     pResultSet->OpenImpl();
-    pResultSet->setMetaData(getMetaData());
+    pResultSet->setMetaData(getMetaDataImpl());
 }
 
 void SAL_CALL OPreparedStatement::acquire() noexcept
diff --git a/connectivity/source/drivers/firebird/PreparedStatement.hxx 
b/connectivity/source/drivers/firebird/PreparedStatement.hxx
index 42e540664dda..96f687c38123 100644
--- a/connectivity/source/drivers/firebird/PreparedStatement.hxx
+++ b/connectivity/source/drivers/firebird/PreparedStatement.hxx
@@ -33,7 +33,7 @@
 
 namespace connectivity::firebird
     {
-
+        class OResultSetMetaData;
         class OBoundParam;
         typedef ::cppu::ImplHelper5<    css::sdbc::XPreparedStatement,
                                         css::sdbc::XParameters,
@@ -46,7 +46,7 @@ namespace connectivity::firebird
         {
         protected:
             OUString                                              
m_sSqlStatement;
-            css::uno::Reference< css::sdbc::XResultSetMetaData >  m_xMetaData;
+            rtl::Reference<OResultSetMetaData>                    m_xMetaData;
 
             XSQLDA*         m_pOutSqlda;
             XSQLDA*         m_pInSqlda;
diff --git a/connectivity/source/drivers/firebird/ResultSet.hxx 
b/connectivity/source/drivers/firebird/ResultSet.hxx
index c80f5b8453d4..046be37c567a 100644
--- a/connectivity/source/drivers/firebird/ResultSet.hxx
+++ b/connectivity/source/drivers/firebird/ResultSet.hxx
@@ -39,6 +39,7 @@
 
 namespace connectivity::firebird
     {
+        class OResultSetMetaData;
         /*
         **  OResultSet
         */
@@ -73,7 +74,7 @@ namespace connectivity::firebird
             ::osl::Mutex& m_rMutex;
             const css::uno::Reference< css::uno::XInterface >& m_xStatement;
 
-            css::uno::Reference< css::sdbc::XResultSetMetaData>        
m_xMetaData;
+            rtl::Reference<OResultSetMetaData>          m_xMetaData;
 
             XSQLDA*                                     m_pSqlda;
             isc_stmt_handle                             m_statementHandle;
diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.cxx 
b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
index 096c0ce436bd..12ce9a8fd7ba 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.cxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.cxx
@@ -19,6 +19,7 @@
 
 #include "StatementCommonBase.hxx"
 #include "Util.hxx"
+#include "ResultSet.hxx"
 
 #include <sal/log.hxx>
 #include <comphelper/sequence.hxx>
@@ -62,9 +63,8 @@ OStatementCommonBase::~OStatementCommonBase()
 
 void OStatementCommonBase::disposeResultSet()
 {
-    uno::Reference< XComponent > xComp(m_xResultSet, UNO_QUERY);
-    if (xComp.is())
-        xComp->dispose();
+    if (m_xResultSet.is())
+        m_xResultSet->dispose();
     m_xResultSet.clear();
 }
 
diff --git a/connectivity/source/drivers/firebird/StatementCommonBase.hxx 
b/connectivity/source/drivers/firebird/StatementCommonBase.hxx
index fa9cd790272e..92eac1ec521d 100644
--- a/connectivity/source/drivers/firebird/StatementCommonBase.hxx
+++ b/connectivity/source/drivers/firebird/StatementCommonBase.hxx
@@ -38,6 +38,7 @@
 
 namespace connectivity::firebird
     {
+        class OResultSet;
 
         typedef ::cppu::WeakComponentImplHelper<   
css::sdbc::XWarningsSupplier,
                                                    css::util::XCancellable,
@@ -52,7 +53,7 @@ namespace connectivity::firebird
         protected:
             ::osl::Mutex        m_aMutex;
 
-            css::uno::Reference< css::sdbc::XResultSet> m_xResultSet;   // The 
last ResultSet created
+            rtl::Reference<OResultSet> m_xResultSet;   // The last ResultSet 
created
             //  for this Statement
 
             ::rtl::Reference<Connection>                m_pConnection;
diff --git a/connectivity/source/drivers/jdbc/ResultSet.cxx 
b/connectivity/source/drivers/jdbc/ResultSet.cxx
index 0473ed598d2e..e88fb9600138 100644
--- a/connectivity/source/drivers/jdbc/ResultSet.cxx
+++ b/connectivity/source/drivers/jdbc/ResultSet.cxx
@@ -74,7 +74,7 @@ java_sql_ResultSet::java_sql_ResultSet( JNIEnv * pEnv, 
jobject myObj, const java
     SDBThreadAttach::addRef();
     osl_atomic_increment(&m_refCount);
     if ( pStmt )
-        m_xStatement = *pStmt;
+        m_xStatement = pStmt;
 
     osl_atomic_decrement(&m_refCount);
 }
@@ -452,7 +452,7 @@ sal_Bool SAL_CALL java_sql_ResultSet::previous(  )
 
 Reference< XInterface > SAL_CALL java_sql_ResultSet::getStatement(  )
 {
-    return m_xStatement;
+    return cppu::getXWeak(m_xStatement.get());
 }
 
 
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx 
b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx
index 40912c5534a7..4374fc7ad091 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_prepared_resultset.hxx
@@ -57,7 +57,7 @@ class OPreparedResultSet final : public cppu::BaseMutex,
 {
     OConnection& m_rConnection;
     css::uno::WeakReferenceHelper m_aStatement;
-    css::uno::Reference<css::sdbc::XResultSetMetaData> m_xMetaData;
+    rtl::Reference<OResultSetMetaData> m_xMetaData;
 
     // non-owning pointers
     MYSQL_RES* m_pResult;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx 
b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx
index e1743d91dbc4..d61f616372b0 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_preparedstatement.hxx
@@ -41,6 +41,8 @@ using my_bool = bool;
 using my_bool = char;
 #endif
 
+class OResultSetMetaData;
+
 struct BindMetaData
 {
     my_bool is_null = false;
@@ -55,7 +57,7 @@ typedef ::cppu::ImplHelper4<css::sdbc::XPreparedStatement, 
css::sdbc::XParameter
 class OPreparedStatement final : public OCommonStatement, public 
OPreparedStatement_BASE
 {
     unsigned int m_paramCount = 0; // number of placeholders
-    Reference<XResultSetMetaData> m_xMetaData;
+    rtl::Reference<OResultSetMetaData> m_xMetaData;
     MYSQL_STMT* m_pStmt;
     std::vector<MYSQL_BIND> m_binds;
     std::vector<BindMetaData> m_bindMetas;
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx 
b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
index 3e43853d364e..bb2dc18fc9e2 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_resultset.hxx
@@ -41,6 +41,7 @@
 namespace connectivity::mysqlc
 {
 using ::com::sun::star::uno::Any;
+class OResultSetMetaData;
 
 /*
         **  OResultSet
@@ -62,7 +63,7 @@ class OResultSet final : public cppu::BaseMutex,
     std::vector<OUString> m_aFields;
     MYSQL* m_pMysql = nullptr;
     css::uno::WeakReferenceHelper m_aStatement;
-    css::uno::Reference<css::sdbc::XResultSetMetaData> m_xMetaData;
+    rtl::Reference<OResultSetMetaData> m_xMetaData;
     MYSQL_RES* m_pResult;
     rtl_TextEncoding m_encoding;
     bool m_bWasNull = false; // did the last getXXX result null?
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx 
b/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx
index 49a16cd5c6c5..2d8deaebdec1 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.cxx
@@ -51,8 +51,7 @@ void OCommonStatement::closeResultSet()
 {
     if (m_xResultSet.is())
     {
-        css::uno::Reference<css::sdbc::XCloseable> xClose(m_xResultSet, 
UNO_QUERY_THROW);
-        xClose->close();
+        m_xResultSet->close();
         m_xResultSet.clear();
     }
 }
diff --git a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx 
b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
index c710b0b46a6d..7e260fe8b144 100644
--- a/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
+++ b/connectivity/source/drivers/mysqlc/mysqlc_statement.hxx
@@ -39,6 +39,7 @@ namespace connectivity::mysqlc
 using ::com::sun::star::sdbc::SQLWarning;
 using ::com::sun::star::uno::Any;
 using ::com::sun::star::uno::Type;
+class OResultSet;
 
 typedef ::cppu::WeakComponentImplHelper3<css::sdbc::XWarningsSupplier, 
css::util::XCancellable,
                                          css::sdbc::XCloseable>
@@ -59,7 +60,7 @@ private:
 protected:
     rtl::Reference<OConnection> m_xConnection; // The owning Connection object
 
-    css::uno::Reference<css::sdbc::XResultSet> m_xResultSet;
+    rtl::Reference<OResultSet> m_xResultSet;
 
     // number of rows affected by an UPDATE, DELETE or INSERT statement.
     sal_Int32 m_nAffectedRows = 0;
diff --git a/connectivity/source/drivers/odbc/OPreparedStatement.cxx 
b/connectivity/source/drivers/odbc/OPreparedStatement.cxx
index 8e20c4d83e03..b382b34e9eb5 100644
--- a/connectivity/source/drivers/odbc/OPreparedStatement.cxx
+++ b/connectivity/source/drivers/odbc/OPreparedStatement.cxx
@@ -82,6 +82,11 @@ css::uno::Sequence< css::uno::Type > SAL_CALL 
OPreparedStatement::getTypes(  )
 
 
 Reference< XResultSetMetaData > SAL_CALL OPreparedStatement::getMetaData(  )
+{
+    return getMetaDataImpl();
+}
+
+const rtl::Reference< OResultSetMetaData > & 
OPreparedStatement::getMetaDataImpl()
 {
     ::osl::MutexGuard aGuard( m_aMutex );
     checkDisposed(OStatement_BASE::rBHelper.bDisposed);
@@ -907,7 +912,7 @@ void OPreparedStatement::checkParameterIndex(sal_Int32 
_parameterIndex)
 rtl::Reference<OResultSet> OPreparedStatement::createResultSet()
 {
     rtl::Reference<OResultSet> pReturn = new 
OResultSet(m_aStatementHandle,this);
-    pReturn->setMetaData(getMetaData());
+    pReturn->setMetaData(getMetaDataImpl());
     return pReturn;
 }
 
diff --git a/connectivity/source/drivers/postgresql/pq_connection.cxx 
b/connectivity/source/drivers/postgresql/pq_connection.cxx
index 50c1b54fd698..17f4128c8297 100644
--- a/connectivity/source/drivers/postgresql/pq_connection.cxx
+++ b/connectivity/source/drivers/postgresql/pq_connection.cxx
@@ -148,7 +148,6 @@ void Connection::close()
 
         vectorDispose.push_back( Reference< XComponent > ( m_settings.users, 
UNO_QUERY ) );
         vectorDispose.push_back( Reference< XComponent > ( m_settings.tables , 
UNO_QUERY ) );
-        vectorDispose.push_back( Reference< XComponent > ( m_meta, UNO_QUERY ) 
);
         m_meta.clear();
         m_settings.tables.clear();
         m_settings.users.clear();
diff --git a/connectivity/source/drivers/postgresql/pq_connection.hxx 
b/connectivity/source/drivers/postgresql/pq_connection.hxx
index 2bba070a7273..2b86ce5882fd 100644
--- a/connectivity/source/drivers/postgresql/pq_connection.hxx
+++ b/connectivity/source/drivers/postgresql/pq_connection.hxx
@@ -66,6 +66,8 @@
 namespace pq_sdbc_driver
 {
 struct ConnectionSettings;
+class DatabaseMetaData;
+
 struct ConnectionSettings
 {
     ConnectionSettings() :
@@ -123,7 +125,7 @@ class Connection : public ConnectionBase
     css::uno::Reference< css::container::XNameAccess > m_typeMap;
     ConnectionSettings m_settings;
     ::rtl::Reference< comphelper::RefCountedMutex > m_xMutex;
-    css::uno::Reference< css::sdbc::XDatabaseMetaData > m_meta;
+    rtl::Reference< DatabaseMetaData > m_meta;
     WeakHashMap m_myStatements;
 
 private:
diff --git a/connectivity/source/drivers/postgresql/pq_xkey.hxx 
b/connectivity/source/drivers/postgresql/pq_xkey.hxx
index 68f05fd27d4e..d162fde24270 100644
--- a/connectivity/source/drivers/postgresql/pq_xkey.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xkey.hxx
@@ -48,6 +48,7 @@
 
 namespace pq_sdbc_driver
 {
+class KeyColumnDescriptors;
 
 class Key : public ReflectionBase,
             public css::sdbcx::XColumnsSupplier
@@ -87,7 +88,7 @@ public: // XDataDescriptorFactory
 
 class KeyDescriptor : public ReflectionBase, public 
css::sdbcx::XColumnsSupplier
 {
-    css::uno::Reference< css::container::XNameAccess > m_keyColumns;
+    rtl::Reference<KeyColumnDescriptors> m_keyColumns;
 
 public:
     KeyDescriptor( const ::rtl::Reference< comphelper::RefCountedMutex > & 
refMutex,
diff --git a/connectivity/source/drivers/postgresql/pq_xtable.hxx 
b/connectivity/source/drivers/postgresql/pq_xtable.hxx
index 7c8ca73f566b..d1239fff696e 100644
--- a/connectivity/source/drivers/postgresql/pq_xtable.hxx
+++ b/connectivity/source/drivers/postgresql/pq_xtable.hxx
@@ -117,7 +117,7 @@ class TableDescriptor
       public css::sdbcx::XIndexesSupplier,
       public css::sdbcx::XKeysSupplier
 {
-    css::uno::Reference< css::container::XNameAccess > m_columns;
+    rtl::Reference<ColumnDescriptors> m_columns;
     css::uno::Reference< css::container::XIndexAccess > m_keys;
     css::uno::Reference< css::container::XNameAccess > m_indexes;
 
diff --git a/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx 
b/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx
index f0a3fef76d00..28c504ee416b 100644
--- a/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx
+++ b/connectivity/source/inc/FDatabaseMetaDataResultSet.hxx
@@ -40,6 +40,8 @@
 
 namespace connectivity
 {
+    class ODatabaseMetaDataResultSetMetaData;
+
     typedef ::comphelper::WeakComponentImplHelper<   css::sdbc::XResultSet,
                                                css::sdbc::XRow,
                                                
css::sdbc::XResultSetMetaDataSupplier,
@@ -106,7 +108,7 @@ namespace connectivity
     private:
         ORowSetValue                    m_aEmptyValue;
         css::uno::WeakReferenceHelper    m_aStatement;
-        css::uno::Reference< css::sdbc::XResultSetMetaData>        m_xMetaData;
+        rtl::Reference< ODatabaseMetaDataResultSetMetaData>        m_xMetaData;
         sal_Int32                       m_nColPos;
 
         sal_Int32                       m_nFetchSize;
diff --git a/connectivity/source/inc/TDatabaseMetaDataBase.hxx 
b/connectivity/source/inc/TDatabaseMetaDataBase.hxx
index 4d8c7715ca2d..de5d25ac3233 100644
--- a/connectivity/source/inc/TDatabaseMetaDataBase.hxx
+++ b/connectivity/source/inc/TDatabaseMetaDataBase.hxx
@@ -27,8 +27,11 @@
 #include <functional>
 #include <connectivity/dbtoolsdllapi.hxx>
 
+namespace comphelper { class OEventListenerHelper; }
+
 namespace connectivity
 {
+
         class OOO_DLLPUBLIC_DBTOOLS ODatabaseMetaDataBase :
                                         public  cppu::BaseMutex,
                                         public ::cppu::WeakImplHelper< 
css::sdbc::XDatabaseMetaData2,
@@ -65,7 +68,7 @@ namespace connectivity
             }
         protected:
             css::uno::Reference< css::sdbc::XConnection >     m_xConnection;
-            css::uno::Reference< css::lang::XEventListener>   
m_xListenerHelper; // forward the calls from the connection to me
+            rtl::Reference< comphelper::OEventListenerHelper> 
m_xListenerHelper; // forward the calls from the connection to me
 
             virtual ~ODatabaseMetaDataBase() override;
 
diff --git a/connectivity/source/inc/file/FPreparedStatement.hxx 
b/connectivity/source/inc/file/FPreparedStatement.hxx
index f83d74a6d065..7adbf40d2b7f 100644
--- a/connectivity/source/inc/file/FPreparedStatement.hxx
+++ b/connectivity/source/inc/file/FPreparedStatement.hxx
@@ -29,6 +29,7 @@
 
 namespace connectivity::file
     {
+        class OResultSetMetaData;
 
         class OOO_DLLPUBLIC_FILE SAL_NO_VTABLE OPreparedStatement : public  
OStatement_BASE2,
                                     public  css::sdbc::XPreparedStatement,
@@ -42,7 +43,7 @@ namespace connectivity::file
             // Data attributes
 
             OValueRefRow                                          
m_aParameterRow;
-            css::uno::Reference< css::sdbc::XResultSetMetaData>   m_xMetaData;
+            rtl::Reference<OResultSetMetaData>                    m_xMetaData;
 
             ::rtl::Reference<connectivity::OSQLColumns>           
m_xParamColumns;    // the parameter columns
 
@@ -113,6 +114,8 @@ namespace connectivity::file
                         virtual void SAL_CALL close(  ) override;
             // XResultSetMetaDataSupplier
             virtual css::uno::Reference< css::sdbc::XResultSetMetaData > 
SAL_CALL getMetaData(  ) override;
+
+            const rtl::Reference<OResultSetMetaData> & getMetaDataImpl();
         };
 
 }
diff --git a/connectivity/source/inc/file/FResultSet.hxx 
b/connectivity/source/inc/file/FResultSet.hxx
index 0870593e6388..b4c1786fd2d5 100644
--- a/connectivity/source/inc/file/FResultSet.hxx
+++ b/connectivity/source/inc/file/FResultSet.hxx
@@ -41,9 +41,12 @@
 #include <TSkipDeletedSet.hxx>
 #include <com/sun/star/lang/XEventListener.hpp>
 #include <o3tl/safeint.hxx>
+#include "FResultSetMetaData.hxx"
 
 namespace connectivity::file
     {
+        class OResultSetMetaData;
+
         typedef ::cppu::WeakComponentImplHelper<  css::sdbc::XResultSet,
                                                   css::sdbc::XRow,
                                                   
css::sdbc::XResultSetMetaDataSupplier,
@@ -96,7 +99,7 @@ namespace connectivity::file
             sal_Int32                               m_nResultSetConcurrency;
 
             css::uno::Reference< css::uno::XInterface>            m_xStatement;
-            css::uno::Reference< css::sdbc::XResultSetMetaData>   m_xMetaData;
+            rtl::Reference< OResultSetMetaData>                   m_xMetaData;
             css::uno::Reference< css::container::XNameAccess>     m_xColNames; 
// table columns
             css::uno::Reference< css::container::XIndexAccess>    m_xColsIdx; 
// table columns
 
@@ -267,7 +270,7 @@ namespace connectivity::file
 
             void setOrderByColumns(std::vector<sal_Int32>&& _aColumnOrderBy)  
{ m_aOrderbyColumnNumber = std::move(_aColumnOrderBy); }
             void setOrderByAscending(std::vector<TAscendingOrder>&& 
_aOrderbyAsc)    { m_aOrderbyAscending = std::move(_aOrderbyAsc); }
-            void setMetaData(const css::uno::Reference< 
css::sdbc::XResultSetMetaData>& _xMetaData) { m_xMetaData = _xMetaData;}
+            void setMetaData(const rtl::Reference< OResultSetMetaData>& 
_xMetaData) { m_xMetaData = _xMetaData;}
 
             static void setBoundedColumns(const OValueRefRow& _rRow,
                                     const OValueRefRow& _rSelectRow,
diff --git a/connectivity/source/inc/java/sql/ResultSet.hxx 
b/connectivity/source/inc/java/sql/ResultSet.hxx
index 183c6fa3a362..2b4190ba956e 100644
--- a/connectivity/source/inc/java/sql/ResultSet.hxx
+++ b/connectivity/source/inc/java/sql/ResultSet.hxx
@@ -59,7 +59,7 @@ namespace connectivity
                                 public  ::cppu::OPropertySetHelper,
                                 public  
::comphelper::OPropertyArrayUsageHelper<java_sql_ResultSet>
     {
-        css::uno::Reference< css::uno::XInterface>            m_xStatement;
+        rtl::Reference<java_sql_Statement_Base>               m_xStatement;
         java::sql::ConnectionLog                              m_aLogger;
         java_sql_Connection*                                  m_pConnection;
 
diff --git a/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx 
b/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx
index b0dc5cec35db..4b151b2517ed 100644
--- a/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx
+++ b/connectivity/source/inc/odbc/ODatabaseMetaDataResultSet.hxx
@@ -42,6 +42,7 @@
 
 namespace connectivity::odbc
     {
+        class OResultSetMetaData;
         /*
         **  java_sql_ResultSet
         */
@@ -68,8 +69,7 @@ namespace connectivity::odbc
 
             SQLHANDLE                                   m_aStatementHandle;   
// ... until freed
             css::uno::WeakReferenceHelper               m_aStatement;
-            css::uno::Reference< css::sdbc::XResultSetMetaData>
-                                                        m_xMetaData;
+            rtl::Reference<OResultSetMetaData>          m_xMetaData;
             std::unique_ptr<SQLUSMALLINT[]>             m_pRowStatusArray;
             rtl::Reference<OConnection>                 m_pConnection;
             rtl_TextEncoding                            m_nTextEncoding;
diff --git a/connectivity/source/inc/odbc/OPreparedStatement.hxx 
b/connectivity/source/inc/odbc/OPreparedStatement.hxx
index aa5e895bfc79..348c355453e6 100644
--- a/connectivity/source/inc/odbc/OPreparedStatement.hxx
+++ b/connectivity/source/inc/odbc/OPreparedStatement.hxx
@@ -30,7 +30,7 @@
 
 namespace connectivity::odbc
     {
-
+        class OResultSetMetaData;
         class OBoundParam;
         typedef ::cppu::ImplHelper5<    css::sdbc::XPreparedStatement,
                                         css::sdbc::XParameters,
@@ -51,7 +51,7 @@ namespace connectivity::odbc
             std::unique_ptr<OBoundParam[]>  boundParams;
                             // Array of bound parameter objects. Each 
parameter marker will have a
                             // corresponding object to hold bind information, 
and resulting data.
-            css::uno::Reference< css::sdbc::XResultSetMetaData >  m_xMetaData;
+            rtl::Reference<OResultSetMetaData>  m_xMetaData;
             bool                                                               
         m_bPrepared;
 
             void FreeParams();
@@ -137,6 +137,7 @@ namespace connectivity::odbc
             virtual void SAL_CALL close(  ) override;
             // XResultSetMetaDataSupplier
             virtual css::uno::Reference< css::sdbc::XResultSetMetaData > 
SAL_CALL getMetaData(  ) override;
+            const rtl::Reference< OResultSetMetaData > & getMetaDataImpl();
 
         public:
             using OStatement_Base::executeQuery;
diff --git a/connectivity/source/inc/odbc/OResultSet.hxx 
b/connectivity/source/inc/odbc/OResultSet.hxx
index 5c8328082904..c7638a18d8b9 100644
--- a/connectivity/source/inc/odbc/OResultSet.hxx
+++ b/connectivity/source/inc/odbc/OResultSet.hxx
@@ -40,9 +40,11 @@
 #include <connectivity/FValue.hxx>
 #include <TSkipDeletedSet.hxx>
 #include <memory>
+#include "OResultSetMetaData.hxx"
 
 namespace connectivity::odbc
     {
+        class OResultSetMetaData;
 
         /*
         **  java_sql_ResultSet
@@ -132,7 +134,7 @@ namespace connectivity::odbc
             OStatement_Base*                            m_pStatement;
             std::unique_ptr<OSkipDeletedSet>            m_pSkipDeletedSet;
             css::uno::Reference< css::uno::XInterface>    m_xStatement;
-            css::uno::Reference< css::sdbc::XResultSetMetaData>        
m_xMetaData;
+            rtl::Reference< OResultSetMetaData>        m_xMetaData;
             std::unique_ptr<SQLUSMALLINT[]>             m_pRowStatusArray;
             rtl_TextEncoding                            m_nTextEncoding;
             sal_Int32                                   m_nRowPos;
@@ -235,7 +237,7 @@ namespace connectivity::odbc
                 return css::uno::Reference< css::uno::XInterface 
>(*static_cast<OResultSet_BASE*>(this));
             }
 
-            void setMetaData(const css::uno::Reference< 
css::sdbc::XResultSetMetaData>& _xMetaData) { m_xMetaData = _xMetaData;}
+            void setMetaData(const rtl::Reference<OResultSetMetaData>& 
_xMetaData) { m_xMetaData = _xMetaData;}
 
             // ::cppu::OComponentHelper
             virtual void SAL_CALL disposing() override;
commit 9714b19590f651cbd48ae763b5a9558dd1e9e972
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu Sep 12 09:44:09 2024 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu Sep 12 14:10:48 2024 +0200

    no need to dynamic_cast so much in AccessibleTableShapeImpl
    
    when we know the underlying object is a sdr::table::TableModel
    
    unfortunately this reveals that the underlying object does not, in fact,
    implement XSelectionSupplier
    
    Change-Id: I29336a7cf945dcec1a8d7aecc78f793e95bae259
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173245
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/svx/source/inc/cell.hxx b/svx/source/inc/cell.hxx
index b70c683ddde1..d59e18b6985e 100644
--- a/svx/source/inc/cell.hxx
+++ b/svx/source/inc/cell.hxx
@@ -112,8 +112,8 @@ public:
     SVX_DLLPRIVATE virtual css::awt::Size SAL_CALL calcAdjustedSize( const 
css::awt::Size& aNewSize ) override;
 
     // XMergeableCell
-    SVX_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getRowSpan() override;
-    SVX_DLLPRIVATE virtual ::sal_Int32 SAL_CALL getColumnSpan() override;
+    virtual ::sal_Int32 SAL_CALL getRowSpan() override;
+    virtual ::sal_Int32 SAL_CALL getColumnSpan() override;
     virtual sal_Bool SAL_CALL isMerged() override;
 
     // XCell
diff --git a/svx/source/table/accessibletableshape.cxx 
b/svx/source/table/accessibletableshape.cxx
index 1c47ddc0758b..f0079da0e5ca 100644
--- a/svx/source/table/accessibletableshape.cxx
+++ b/svx/source/table/accessibletableshape.cxx
@@ -53,14 +53,14 @@ using namespace ::com::sun::star::table;
 namespace accessibility
 {
 
-typedef std::unordered_map< Reference< XCell >, rtl::Reference< AccessibleCell 
> > AccessibleCellMap;
+typedef std::unordered_map< rtl::Reference< Cell >, rtl::Reference< 
AccessibleCell > > AccessibleCellMap;
 
 class AccessibleTableShapeImpl : public cppu::WeakImplHelper< XModifyListener >
 {
 public:
     explicit AccessibleTableShapeImpl( AccessibleShapeTreeInfo& rShapeTreeInfo 
);
 
-    void init( const rtl::Reference< AccessibleTableShape>& xAccessible, const 
Reference< XTable >& xTable );
+    void init( const rtl::Reference< AccessibleTableShape>& xAccessible, const 
rtl::Reference< TableModel >& xTable );
     void dispose();
 
     /// @throws IndexOutOfBoundsException
@@ -76,12 +76,12 @@ public:
     virtual void SAL_CALL disposing( const EventObject& Source ) override;
 
     AccessibleShapeTreeInfo& mrShapeTreeInfo;
-    Reference< XTable > mxTable;
+    rtl::Reference< TableModel > mxTable;
     AccessibleCellMap maChildMap;
     rtl::Reference< AccessibleTableShape> mxAccessible;
     sal_Int32 mRowCount, mColCount;
     //get the cached AccessibleCell from XCell
-    rtl::Reference< AccessibleCell > getAccessibleCell (const Reference< XCell 
>& xCell);
+    rtl::Reference< AccessibleCell > getAccessibleCell (const rtl::Reference< 
Cell >& xCell);
     /// @throws IndexOutOfBoundsException
     /// @throws RuntimeException
     rtl::Reference< AccessibleCell > getAccessibleCell (sal_Int32 nRow, 
sal_Int32 nColumn);
@@ -96,7 +96,7 @@ AccessibleTableShapeImpl::AccessibleTableShapeImpl( 
AccessibleShapeTreeInfo& rSh
 }
 
 
-void AccessibleTableShapeImpl::init( const 
rtl::Reference<AccessibleTableShape>& xAccessible, const Reference< XTable >& 
xTable )
+void AccessibleTableShapeImpl::init( const 
rtl::Reference<AccessibleTableShape>& xAccessible, const rtl::Reference< 
TableModel >& xTable )
 {
     mxAccessible = xAccessible;
     mxTable = xTable;
@@ -105,11 +105,6 @@ void AccessibleTableShapeImpl::init( const 
rtl::Reference<AccessibleTableShape>&
     {
         Reference< XModifyListener > xListener( this );
         mxTable->addModifyListener( xListener );
-        //register the listener with table model
-        Reference< css::view::XSelectionSupplier > xSelSupplier(xTable, 
UNO_QUERY);
-        Reference< css::view::XSelectionChangeListener > xSelListener( 
xAccessible );
-        if (xSelSupplier.is())
-            xSelSupplier->addSelectionChangeListener(xSelListener);
         mRowCount = mxTable->getRowCount();
         mColCount = mxTable->getColumnCount();
     }
@@ -135,7 +130,7 @@ void AccessibleTableShapeImpl::dispose()
 
 
 //get the cached AccessibleCell from XCell
-rtl::Reference< AccessibleCell > AccessibleTableShapeImpl::getAccessibleCell 
(const Reference< XCell >& xCell)
+rtl::Reference< AccessibleCell > AccessibleTableShapeImpl::getAccessibleCell 
(const rtl::Reference< Cell >& xCell)
 {
     AccessibleCellMap::iterator iter( maChildMap.find( xCell ) );
 
@@ -149,15 +144,14 @@ rtl::Reference< AccessibleCell > 
AccessibleTableShapeImpl::getAccessibleCell (co
 
 rtl::Reference< AccessibleCell > AccessibleTableShapeImpl::getAccessibleCell 
(sal_Int32 nRow, sal_Int32 nColumn)
 {
-    Reference< XCell > xCell( mxTable->getCellByPosition( nColumn, nRow ) );
+    rtl::Reference< Cell > xCell( mxTable->getCell( nColumn, nRow ) );
     rtl::Reference< AccessibleCell > xChild = getAccessibleCell( xCell );
 
     if( !xChild.is() && mxTable.is() )
     {
         sal_Int32 nChildIndex = mxTable->getColumnCount() * nRow + nColumn;
-        CellRef xCellRef( dynamic_cast< Cell* >( xCell.get() ) );
 
-        rtl::Reference< AccessibleCell > xAccessibleCell( new AccessibleCell( 
mxAccessible, xCellRef, nChildIndex, mrShapeTreeInfo ) );
+        rtl::Reference< AccessibleCell > xAccessibleCell( new AccessibleCell( 
mxAccessible, xCell, nChildIndex, mrShapeTreeInfo ) );
 
         xAccessibleCell->Init();
         maChildMap[xCell] = xAccessibleCell;
@@ -173,7 +167,7 @@ Reference< XAccessible > 
AccessibleTableShapeImpl::getAccessibleChild(sal_Int64
     sal_Int32 nColumn = 0, nRow = 0;
     getColumnAndRow( nChildIndex, nColumn, nRow );
 
-    Reference< XCell > xCell( mxTable->getCellByPosition( nColumn, nRow ) );
+    rtl::Reference< Cell > xCell( mxTable->getCell( nColumn, nRow ) );
     AccessibleCellMap::iterator iter( maChildMap.find( xCell ) );
 
     if( iter != maChildMap.end() )
@@ -183,9 +177,7 @@ Reference< XAccessible > 
AccessibleTableShapeImpl::getAccessibleChild(sal_Int64
     }
     else
     {
-        CellRef xCellRef( dynamic_cast< Cell* >( xCell.get() ) );
-
-        rtl::Reference< AccessibleCell > xAccessibleCell( new AccessibleCell( 
mxAccessible, xCellRef, nChildIndex, mrShapeTreeInfo ) );
+        rtl::Reference< AccessibleCell > xAccessibleCell( new AccessibleCell( 
mxAccessible, xCell, nChildIndex, mrShapeTreeInfo ) );
 
         xAccessibleCell->Init();
         maChildMap[xCell] = xAccessibleCell;
@@ -243,7 +235,7 @@ void SAL_CALL AccessibleTableShapeImpl::modified( const 
EventObject& /*aEvent*/
         {
             for( sal_Int32 nCol = 0; nCol < nColCount; ++nCol )
             {
-                Reference< XCell > xCell( mxTable->getCellByPosition( nCol, 
nRow ) );
+                rtl::Reference< Cell > xCell( mxTable->getCell( nCol, nRow ) );
                 AccessibleCellMap::iterator iter( aTempChildMap.find( xCell ) 
);
 
                 if( iter != aTempChildMap.end() )
@@ -257,7 +249,7 @@ void SAL_CALL AccessibleTableShapeImpl::modified( const 
EventObject& /*aEvent*/
                         
xAccessibleCell->SetAccessibleName(xAccessibleCell->getAccessibleName(), 
AccessibleContextBase::ManuallySet);
                     }
                     // For merged cell, add invisible & disabled state.
-                    Reference< XMergeableCell > xMergedCell( 
mxTable->getCellByPosition( nCol, nRow ),  UNO_QUERY );
+                    rtl::Reference< Cell > xMergedCell( mxTable->getCell( 
nCol, nRow ) );
                     if (xMergedCell.is() && xMergedCell->isMerged())
                     {
                         
xAccessibleCell->ResetState(AccessibleStateType::VISIBLE);
@@ -281,9 +273,7 @@ void SAL_CALL AccessibleTableShapeImpl::modified( const 
EventObject& /*aEvent*/
                 }
                 else
                 {
-                    CellRef xCellRef( dynamic_cast< Cell* >( xCell.get() ) );
-
-                    rtl::Reference< AccessibleCell > xAccessibleCell( new 
AccessibleCell( mxAccessible, xCellRef, nChildIndex, mrShapeTreeInfo ) );
+                    rtl::Reference< AccessibleCell > xAccessibleCell( new 
AccessibleCell( mxAccessible, xCell, nChildIndex, mrShapeTreeInfo ) );
 
                     xAccessibleCell->Init();
                     maChildMap[xCell] = xAccessibleCell;
@@ -335,7 +325,9 @@ void AccessibleTableShape::Init()
         Reference< XPropertySet > xSet( mxShape, UNO_QUERY_THROW );
         Reference< XTable > xTable( xSet->getPropertyValue(u"Model"_ustr), 
UNO_QUERY_THROW );
 
-        mxImpl->init( this, xTable );
+        TableModel* pModel = dynamic_cast<TableModel*>(xTable.get());
+        assert(pModel);
+        mxImpl->init( this, pModel );
     }
     catch( Exception& )
     {
@@ -469,7 +461,7 @@ sal_Int32 SAL_CALL 
AccessibleTableShape::getAccessibleRowExtentAt( sal_Int32 nRo
     checkCellPosition( nColumn, nRow );
     if( mxImpl->mxTable.is() )
     {
-        Reference< XMergeableCell > xCell( mxImpl->mxTable->getCellByPosition( 
nColumn, nRow ), UNO_QUERY );
+        rtl::Reference< Cell > xCell( mxImpl->mxTable->getCell( nColumn, nRow 
) );
         if( xCell.is() )
             return xCell->getRowSpan();
     }
@@ -483,7 +475,7 @@ sal_Int32 SAL_CALL 
AccessibleTableShape::getAccessibleColumnExtentAt( sal_Int32
     checkCellPosition( nColumn, nRow );
     if( mxImpl->mxTable.is() )
     {
-        Reference< XMergeableCell > xCell( mxImpl->mxTable->getCellByPosition( 
nColumn, nRow ), UNO_QUERY );
+        rtl::Reference< Cell > xCell( mxImpl->mxTable->getCell( nColumn, nRow 
) );
         if( xCell.is() )
             return xCell->getColumnSpan();
     }
@@ -894,7 +886,7 @@ void SAL_CALL
 void  SAL_CALL AccessibleTableShape::selectionChanged (const EventObject& 
rEvent)
 {
     //sdr::table::CellRef xCellRef = static_cast< sdr::table::CellRef > 
(rEvent.Source);
-    Reference< XCell > xCell(rEvent.Source, UNO_QUERY);
+    rtl::Reference< Cell > xCell = dynamic_cast<Cell*>(rEvent.Source.get());
     if (!xCell.is())
         return;
 

Reply via email to