[Libreoffice-commits] core.git: dbaccess/source
Oleksii Makhotin (via logerrit)
logerrit at kemper.freedesktop.org
Sat Apr 17 12:27:06 UTC 2021
dbaccess/source/ui/uno/copytablewizard.cxx | 41 +++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
New commits:
commit 2a8e120db1c3175ff937cdbe6d0ade23dc380c01
Author: Oleksii Makhotin <alex at bitprox.com>
AuthorDate: Tue Apr 6 16:03:41 2021 +0300
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Sat Apr 17 14:26:23 2021 +0200
tdf#119962 Fix autoincrement for copied table
Change-Id: Ic916288c4177734c93c423ac3823993ca95a941d
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113668
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/dbaccess/source/ui/uno/copytablewizard.cxx b/dbaccess/source/ui/uno/copytablewizard.cxx
index d128edacb371..50fa22f6dad4 100644
--- a/dbaccess/source/ui/uno/copytablewizard.cxx
+++ b/dbaccess/source/ui/uno/copytablewizard.cxx
@@ -1354,6 +1354,47 @@ void CopyTableWizard::impl_doCopy_nothrow()
if ( xSourceResultSet.is() )
impl_copyRows_throw( xSourceResultSet, xTable );
+
+ // 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())
+ {
+ sPKCL = xRowPKCL->getString(4);
+ }
+ }
+
+ if (!sPKCL.isEmpty())
+ {
+ OUString strSql = "SELECT MAX(\"" + sPKCL + "\") FROM " + sComposedTableName;
+
+ Reference< XResultSet > xResultMAXNUM(m_xDestConnection->createStatement()->executeQuery(strSql));
+ Reference< XRow > xRow(xResultMAXNUM, UNO_QUERY_THROW);
+
+ sal_Int64 maxVal = -1L;
+ if (xResultMAXNUM->next())
+ {
+ maxVal = xRow->getLong(1);
+ }
+
+ if (maxVal > 0L)
+ {
+ strSql = "ALTER TABLE " + sComposedTableName + " ALTER \"" + sPKCL + "\" RESTART WITH " + OUString::number(maxVal + 1);
+
+ m_xDestConnection->createStatement()->execute(strSql);
+ }
+ }
}
break;
More information about the Libreoffice-commits
mailing list