dbaccess/source/ui/uno/copytablewizard.cxx |   14 ++++++++++++++
 1 file changed, 14 insertions(+)

New commits:
commit 0325be6f3de622be6af9b2f686e3c7afae0405b1
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Fri Oct 28 12:26:00 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Fri Oct 28 14:46:24 2022 +0200

    Fix bug in copying table where we need to create a primary key
    
    The problem seems to be that
    
        commit fa177231cd20bf3c3f4bb9b50f6646da139c6766
        Author: Tamas Bunth <tamas.bu...@collabora.co.uk>
        Date:   Fri Aug 30 14:57:31 2019 +0200
        tdf#127093, tdf#127092 Fix pasting autoincremented
    
    was reverted in commit d783017c1ccb4e62e99f26b42250ac4e15780cff.
    
    But the follow-on commit
        commit 376cc3ea0fc2e0f209763a2a27c5852136332c86
        Author: Tamas Bunth <tamas.bu...@collabora.co.uk>
        Date:   Sat Aug 31 18:27:44 2019 +0200
        dbaccess: delete old paste autoincrement logic
    
    was not reverted.
    
    This is not a straight revert of the second commit, because
    autoincrement has since been improved with
    
        commit 2a8e120db1c3175ff937cdbe6d0ade23dc380c01
        Author: Oleksii Makhotin <a...@bitprox.com>
        Date:   Tue Apr 6 16:03:41 2021 +0300
        tdf#119962 Fix autoincrement for copied table
    
    Change-Id: Ia9657d88b3e77ba72399ad9afeece3bda3f57038
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141967
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/dbaccess/source/ui/uno/copytablewizard.cxx 
b/dbaccess/source/ui/uno/copytablewizard.cxx
index 49cbb81d5c9f..995ca99ed022 100644
--- a/dbaccess/source/ui/uno/copytablewizard.cxx
+++ b/dbaccess/source/ui/uno/copytablewizard.cxx
@@ -1065,6 +1065,7 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
 
     const OCopyTableWizard& rWizard             = impl_getDialog_throw();
     ODatabaseExport::TPositions aColumnPositions = 
rWizard.GetColumnPositions();
+    const bool bShouldCreatePrimaryKey = rWizard.shouldCreatePrimaryKey();
 
     Reference< XRow > xRow              ( _rxSourceResultSet, UNO_QUERY_THROW 
);
     Reference< XRowLocate > xRowLocate  ( _rxSourceResultSet, UNO_QUERY_THROW 
);
@@ -1096,6 +1097,7 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
     const Any* pSelectedRow         = m_aSourceSelection.getConstArray();
     const Any* pSelEnd              = pSelectedRow + 
m_aSourceSelection.getLength();
 
+    sal_Int32 nRowCount = 0;
     bool bContinue = false;
 
     CopyTableRowEvent aCopyEvent;
@@ -1130,9 +1132,12 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
             break;
         }
 
+        ++nRowCount;
+
         aCopyEvent.Error.clear();
         try
         {
+            bool bInsertedPrimaryKey = false;
             // notify listeners
             m_aCopyTableListeners.notifyEach( &XCopyTableListener::copyingRow, 
aCopyEvent );
 
@@ -1149,6 +1154,14 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
                     continue;
                 }
 
+                if ( bShouldCreatePrimaryKey && !bInsertedPrimaryKey )
+                {
+                    xStatementParams->setInt( 1, nRowCount );
+                    ++nSourceColumn;
+                    bInsertedPrimaryKey = true;
+                    continue;
+                }
+
                 if ( ( nSourceColumn < 1 ) || ( 
o3tl::make_unsigned(nSourceColumn) >= aSourceColTypes.size() ) )
                 {   // ( we have to check here against 1 because the 
parameters are 1 based)
                     ::dbtools::throwSQLException("Internal error: invalid 
column type index.",
@@ -1250,6 +1263,7 @@ void CopyTableWizard::impl_copyRows_throw( const 
Reference< XResultSet >& _rxSou
         }
         catch( const Exception& )
         {
+            TOOLS_WARN_EXCEPTION("dbaccess", "");
             aCopyEvent.Error = ::cppu::getCaughtException();
         }
 

Reply via email to