From d54fc6c27864df0ba2dda8436435f246c3806a16 Mon Sep 17 00:00:00 2001 From: CMT Technical User Date: Tue, 9 Jul 2024 06:35:23 +0000 Subject: [PATCH] Synchronize repository - 2024-07-09 --- .../repository/impl/AzureDataRepository.java | 1 + .../MigrationHybrisMSSqlPlatform.java | 37 +++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/impl/AzureDataRepository.java b/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/impl/AzureDataRepository.java index c557526..3fe1583 100644 --- a/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/impl/AzureDataRepository.java +++ b/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/impl/AzureDataRepository.java @@ -47,6 +47,7 @@ protected void addCustomPlatformTypeMapping(Platform platform) { platform.getPlatformInfo().addNativeTypeMapping(Types.NCLOB, "NVARCHAR(MAX)"); platform.getPlatformInfo().addNativeTypeMapping(Types.CLOB, "NVARCHAR(MAX)"); platform.getPlatformInfo().addNativeTypeMapping(Types.LONGVARCHAR, "NVARCHAR(MAX)"); + platform.getPlatformInfo().addNativeTypeMapping(Types.LONGNVARCHAR, "NVARCHAR(MAX)"); platform.getPlatformInfo().addNativeTypeMapping(Types.VARBINARY, "VARBINARY"); platform.getPlatformInfo().addNativeTypeMapping(Types.REAL, "float"); platform.getPlatformInfo().addNativeTypeMapping(Types.LONGVARBINARY, "VARBINARY(MAX)"); diff --git a/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/platform/MigrationHybrisMSSqlPlatform.java b/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/platform/MigrationHybrisMSSqlPlatform.java index 2ff1d9a..3f6a5be 100644 --- a/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/platform/MigrationHybrisMSSqlPlatform.java +++ b/commercedbsync/src/com/sap/cx/boosters/commercedbsync/repository/platform/MigrationHybrisMSSqlPlatform.java @@ -15,6 +15,8 @@ import org.apache.ddlutils.model.Column; import org.apache.ddlutils.model.Database; import org.apache.ddlutils.model.Table; +import org.apache.ddlutils.model.TypeMap; +import org.apache.ddlutils.model.JdbcTypeCategoryEnum; import org.apache.ddlutils.platform.DatabaseMetaDataWrapper; import org.apache.ddlutils.platform.mssql.MSSqlModelReader; import org.apache.ddlutils.platform.mssql.MSSqlPlatform; @@ -36,6 +38,7 @@ private MigrationHybrisMSSqlPlatform() { public static HybrisPlatform build(DatabaseSettings databaseSettings) { MigrationHybrisMSSqlPlatform instance = new MigrationHybrisMSSqlPlatform(); + MigrationHybrisMSSqlPlatform.MSSqlHybrisTypeMap.register(); instance.provideCustomMapping(); instance.setSqlBuilder(new MigrationHybrisMSSqlBuilder(instance, databaseSettings)); MigrationHybrisMSSqlPlatform.HybrisMSSqlModelReader reader = new MigrationHybrisMSSqlPlatform.HybrisMSSqlModelReader( @@ -63,9 +66,10 @@ private void provideCustomMapping() { platformInfo.addNativeTypeMapping(Types.SMALLINT, "INTEGER"); platformInfo.addNativeTypeMapping(Types.TINYINT, "TINYINT", Types.TINYINT); platformInfo.addNativeTypeMapping(Types.DOUBLE, "FLOAT", Types.DOUBLE); - platformInfo.addNativeTypeMapping(Types.FLOAT, "FLOAT", Types.DOUBLE); + platformInfo.addNativeTypeMapping(Types.FLOAT, "FLOAT", Types.FLOAT); platformInfo.addNativeTypeMapping(Types.NVARCHAR, "NVARCHAR", Types.NVARCHAR); platformInfo.addNativeTypeMapping(Types.TIME, "DATETIME2", Types.TIMESTAMP); + platformInfo.addNativeTypeMapping(Types.DATE, "DATETIME2"); platformInfo.addNativeTypeMapping(Types.TIMESTAMP, "DATETIME2"); platformInfo.addNativeTypeMapping(Types.BLOB, "VARBINARY(MAX)"); } @@ -86,17 +90,44 @@ public void alterTables(Connection connection, Database desiredModel, boolean co this.evaluateBatch(connection, sql, continueOnError); } + static class MSSqlHybrisTypeMap extends TypeMap { + + static void register() { + registerJdbcType(Types.NCHAR, "NCHAR", JdbcTypeCategoryEnum.TEXTUAL); + } + } + private static class HybrisMSSqlModelReader extends MSSqlModelReader { private static final String TABLE_NAME_KEY = "TABLE_NAME"; - private final Set tablesToExclude = Set.of("trace_xe_action_map", "trace_xe_event_map"); + private final Set tablesToExclude = Set.of("trace_xe_action_map", "trace_xe_event_map", + "change_streams_partition_scheme", "change_streams_destination_type"); public HybrisMSSqlModelReader(Platform platform) { super(platform); } protected Table readTable(DatabaseMetaDataWrapper metaData, Map values) throws SQLException { - return this.tableShouldBeExcluded(values) ? null : super.readTable(metaData, values); + if (this.tableShouldBeExcluded(values)) { + LOG.debug("Table `{}` is excluded from schema read", values.get("TABLE_NAME")); + + return null; + } + + try { + return super.readTable(metaData, values); + } catch (Exception e) { + LOG.error( + "Error when reading schema details for table `{}` (catalog: {}, schema: {}, type: {}), message: {}", + values.get("TABLE_NAME"), values.get("TABLE_CAT"), values.get("TABLE_SCHEM"), + values.get("TABLE_TYPE"), e.getMessage()); + + if (LOG.isDebugEnabled()) { + LOG.debug("Table schema read error occurred", e); + } + } + + return null; } private boolean tableShouldBeExcluded(Map values) {