dbaccess/source/ui/uno/copytablewizard.cxx |   79 ++++++++++++++++-------------
 1 file changed, 44 insertions(+), 35 deletions(-)

New commits:
commit aee746ddad2e79f74abd4c1f3d24ad15db8b6bcc
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Fri Oct 28 11:28:58 2022 +0200
Commit:     Aron Budea <aron.bu...@collabora.com>
CommitDate: Sat Nov 5 10:46:10 2022 +0100

    make ValueTransfer easier to understand
    
    storing references to local variables makes it harder to figure out what
    the control flow is doing.
    
    Change-Id: Ifa7fedd6e4be19a0aa8180aa4f754f1811ca44a2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141965
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>
    (cherry picked from commit ca82061c2cad00aeddb17b766063776fee0ee41a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/142206
    Tested-by: Aron Budea <aron.bu...@collabora.com>
    Reviewed-by: Aron Budea <aron.bu...@collabora.com>
    (cherry picked from commit 509703632ec0dc24d4c30a7a2400c05647c89aba)

diff --git a/dbaccess/source/ui/uno/copytablewizard.cxx 
b/dbaccess/source/ui/uno/copytablewizard.cxx
index 82710895f65a..0a1ff8be29c5 100644
--- a/dbaccess/source/ui/uno/copytablewizard.cxx
+++ b/dbaccess/source/ui/uno/copytablewizard.cxx
@@ -948,40 +948,39 @@ namespace
     class ValueTransfer
     {
     public:
-        ValueTransfer( const sal_Int32& _rSourcePos, const sal_Int32& 
_rDestPos, const std::vector< sal_Int32 >& _rColTypes,
+        ValueTransfer( std::vector< sal_Int32 > _rColTypes,
             const Reference< XRow >& _rxSource, const Reference< XParameters 
>& _rxDest )
-            :m_rSourcePos( _rSourcePos )
-            ,m_rDestPos( _rDestPos )
-            ,m_rColTypes( _rColTypes )
+            :m_ColTypes( std::move(_rColTypes) )
             ,m_xSource( _rxSource )
             ,m_xDest( _rxDest )
         {
         }
 
     template< typename VALUE_TYPE >
-    void transferValue( VALUE_TYPE ( SAL_CALL XRow::*_pGetter )( sal_Int32 ),
+    void transferValue( sal_Int32 _nSourcePos, sal_Int32 _nDestPos,
+        VALUE_TYPE ( SAL_CALL XRow::*_pGetter )( sal_Int32 ),
         void (SAL_CALL XParameters::*_pSetter)( sal_Int32, VALUE_TYPE ) )
     {
-        VALUE_TYPE value( (m_xSource.get()->*_pGetter)( m_rSourcePos ) );
+        VALUE_TYPE value( (m_xSource.get()->*_pGetter)( _nSourcePos ) );
         if ( m_xSource->wasNull() )
-            m_xDest->setNull( m_rDestPos, m_rColTypes[ m_rSourcePos ] );
+            m_xDest->setNull( _nDestPos, m_ColTypes[ _nSourcePos ] );
         else
-            (m_xDest.get()->*_pSetter)( m_rDestPos, value );
+            (m_xDest.get()->*_pSetter)( _nDestPos, value );
     }
- template< typename VALUE_TYPE >
-    void transferComplexValue( VALUE_TYPE ( SAL_CALL XRow::*_pGetter )( 
sal_Int32 ),
+
+    template< typename VALUE_TYPE >
+    void transferComplexValue( sal_Int32 _nSourcePos, sal_Int32 _nDestPos,
+        VALUE_TYPE ( SAL_CALL XRow::*_pGetter )( sal_Int32 ),
         void (SAL_CALL XParameters::*_pSetter)( sal_Int32, const VALUE_TYPE& ) 
)
     {
-        const VALUE_TYPE value( (m_xSource.get()->*_pGetter)( m_rSourcePos ) );
+        const VALUE_TYPE value( (m_xSource.get()->*_pGetter)( _nSourcePos ) );
         if ( m_xSource->wasNull() )
-            m_xDest->setNull( m_rDestPos, m_rColTypes[ m_rSourcePos ] );
+            m_xDest->setNull( _nDestPos, m_ColTypes[ _nSourcePos ] );
         else
-            (m_xDest.get()->*_pSetter)( m_rDestPos, value );
+            (m_xDest.get()->*_pSetter)( _nDestPos, value );
     }
     private:
-        const sal_Int32&                    m_rSourcePos;
-        const sal_Int32&                    m_rDestPos;
-        const std::vector< sal_Int32 >    m_rColTypes;
+        const std::vector< sal_Int32 >      m_ColTypes;
         const Reference< XRow >             m_xSource;
         const Reference< XParameters >      m_xDest;
     };
@@ -1150,13 +1149,12 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
             // notify listeners
             m_aCopyTableListeners.notifyEach( &XCopyTableListener::copyingRow, 
aCopyEvent );
 
-            sal_Int32 nDestColumn( 0 );
-            sal_Int32 nSourceColumn( 1 );
-            ValueTransfer aTransfer( nSourceColumn, nDestColumn, 
aSourceColTypes, xRow, xStatementParams );
+            sal_Int32 nSourceColumn( 0 );
+            ValueTransfer aTransfer( aSourceColTypes, xRow, xStatementParams );
 
             for ( auto const& rColumnPos : aColumnPositions )
             {
-                nDestColumn = rColumnPos.first;
+                sal_Int32 nDestColumn = rColumnPos.first;
                 if ( nDestColumn == COLUMN_POSITION_NOT_FOUND )
                 {
                     ++nSourceColumn;
@@ -1182,7 +1180,7 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
                 {
                     case DataType::DOUBLE:
                     case DataType::REAL:
-                        aTransfer.transferValue( &XRow::getDouble, 
&XParameters::setDouble );
+                        aTransfer.transferValue( nSourceColumn, nDestColumn, 
&XRow::getDouble, &XParameters::setDouble );
                         break;
 
                     case DataType::CHAR:
@@ -1190,64 +1188,64 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
                     case DataType::LONGVARCHAR:
                     case DataType::DECIMAL:
                     case DataType::NUMERIC:
-                        aTransfer.transferComplexValue( &XRow::getString, 
&XParameters::setString );
+                        aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getString, &XParameters::setString );
                         break;
 
                     case DataType::BIGINT:
-                        aTransfer.transferValue( &XRow::getLong, 
&XParameters::setLong );
+                        aTransfer.transferValue( nSourceColumn, nDestColumn, 
&XRow::getLong, &XParameters::setLong );
                         break;
 
                     case DataType::FLOAT:
-                        aTransfer.transferValue( &XRow::getFloat, 
&XParameters::setFloat );
+                        aTransfer.transferValue( nSourceColumn, nDestColumn, 
&XRow::getFloat, &XParameters::setFloat );
                         break;
 
                     case DataType::LONGVARBINARY:
                     case DataType::BINARY:
                     case DataType::VARBINARY:
-                        aTransfer.transferComplexValue( &XRow::getBytes, 
&XParameters::setBytes );
+                        aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getBytes, &XParameters::setBytes );
                         break;
 
                     case DataType::DATE:
-                        aTransfer.transferComplexValue( &XRow::getDate, 
&XParameters::setDate );
+                        aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getDate, &XParameters::setDate );
                         break;
 
                     case DataType::TIME:
-                        aTransfer.transferComplexValue( &XRow::getTime, 
&XParameters::setTime );
+                        aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getTime, &XParameters::setTime );
                         break;
 
                     case DataType::TIMESTAMP:
-                        aTransfer.transferComplexValue( &XRow::getTimestamp, 
&XParameters::setTimestamp );
+                        aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getTimestamp, &XParameters::setTimestamp );
                         break;
 
                     case DataType::BIT:
                         if ( aSourcePrec[nSourceColumn] > 1 )
                         {
-                            aTransfer.transferComplexValue( &XRow::getBytes, 
&XParameters::setBytes );
+                            aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getBytes, &XParameters::setBytes );
                             break;
                         }
                         [[fallthrough]];
                     case DataType::BOOLEAN:
-                        aTransfer.transferValue( &XRow::getBoolean, 
&XParameters::setBoolean );
+                        aTransfer.transferValue( nSourceColumn, nDestColumn, 
&XRow::getBoolean, &XParameters::setBoolean );
                         break;
 
                     case DataType::TINYINT:
-                        aTransfer.transferValue( &XRow::getByte, 
&XParameters::setByte );
+                        aTransfer.transferValue( nSourceColumn, nDestColumn, 
&XRow::getByte, &XParameters::setByte );
                         break;
 
                     case DataType::SMALLINT:
-                        aTransfer.transferValue( &XRow::getShort, 
&XParameters::setShort );
+                        aTransfer.transferValue( nSourceColumn, nDestColumn, 
&XRow::getShort, &XParameters::setShort );
                         break;
 
                     case DataType::INTEGER:
-                        aTransfer.transferValue( &XRow::getInt, 
&XParameters::setInt );
+                        aTransfer.transferValue( nSourceColumn, nDestColumn, 
&XRow::getInt, &XParameters::setInt );
                         break;
 
                     case DataType::BLOB:
-                        aTransfer.transferComplexValue( &XRow::getBlob, 
&XParameters::setBlob );
+                        aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getBlob, &XParameters::setBlob );
                         break;
 
                     case DataType::CLOB:
-                        aTransfer.transferComplexValue( &XRow::getClob, 
&XParameters::setClob );
+                        aTransfer.transferComplexValue( nSourceColumn, 
nDestColumn, &XRow::getClob, &XParameters::setClob );
                         break;
 
                     default:
commit d98e9e47bdfcc527af17b903bd6366c79e75c7fa
Author:     Aron Budea <aron.bu...@collabora.com>
AuthorDate: Sat Nov 5 09:58:10 2022 +0100
Commit:     Aron Budea <aron.bu...@collabora.com>
CommitDate: Sat Nov 5 09:59:48 2022 +0100

    Partially revert "error when copying table and the copy table...
    
     wizard creates the primary key"
    
    Due to a mis-merge. Only revert the unneeded part.
    
    This partially reverts commit
    c87315bd90cad77b20cf4980e83c636082acf11e.
    
    Change-Id: Ibd24a5e8a9cf7be50feb2844a483fc3f9c7fa8bd

diff --git a/dbaccess/source/ui/uno/copytablewizard.cxx 
b/dbaccess/source/ui/uno/copytablewizard.cxx
index 777ba0288c01..82710895f65a 100644
--- a/dbaccess/source/ui/uno/copytablewizard.cxx
+++ b/dbaccess/source/ui/uno/copytablewizard.cxx
@@ -1368,6 +1368,17 @@ void CopyTableWizard::impl_doCopy_nothrow()
 
                 // tdf#119962
                 const Reference< XDatabaseMetaData > xDestMetaData( 
m_xDestConnection->getMetaData(), UNO_SET_THROW );
+                const OUString sComposedTableName = 
::dbtools::composeTableName( xDestMetaData, xTable, 
::dbtools::EComposeRule::InDataManipulation, true );
+
+                OUString aSchema,aTable;
+                xTable->getPropertyValue("SchemaName") >>= aSchema;
+                xTable->getPropertyValue("Name")       >>= aTable;
+                Any aCatalog = xTable->getPropertyValue("CatalogName");
+
+                const Reference< XResultSet > 
xResultPKCL(xDestMetaData->getPrimaryKeys(aCatalog,aSchema,aTable));
+                Reference< XRow > xRowPKCL(xResultPKCL, UNO_QUERY_THROW);
+                OUString sPKCL;
+                if ( xRowPKCL.is() )
                 {
                     if (xResultPKCL->next())
                     {

Reply via email to