From e5d678c30d8cd99a61fe8868e0e8084332c03807 Mon Sep 17 00:00:00 2001 From: Austin Brougher Date: Mon, 22 Jul 2013 21:48:44 +0000 Subject: [PATCH] 0001298: The conflict resolution target table value should only be case sensitive on case sensitive databases. --- .../load/DefaultDataLoaderFactory.java | 7 +- .../data/writer/DatabaseWriterSettings.java | 76 ++++++++++++------- 2 files changed, 53 insertions(+), 30 deletions(-) diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java index 49796a08bc..94ae2dacf1 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/DefaultDataLoaderFactory.java @@ -109,6 +109,8 @@ protected DatabaseWriterSettings buildDatabaseWriterSettings( settings.setTreatDateTimeFieldsAsVarchar(parameterService .is(ParameterConstants.DATA_LOADER_TREAT_DATETIME_AS_VARCHAR)); settings.setSaveCurrentValueOnError(parameterService.is(ParameterConstants.DATA_LOADER_ERROR_RECORD_CUR_VAL, false)); + settings.setMetadataIgnoreCase(parameterService + .is(ParameterConstants.DB_METADATA_IGNORE_CASE)); Map byChannel = new HashMap(); Map byTable = new HashMap(); @@ -116,8 +118,11 @@ protected DatabaseWriterSettings buildDatabaseWriterSettings( if (conflictSettings != null) { for (Conflict conflictSetting : conflictSettings) { String qualifiedTableName = conflictSetting.toQualifiedTableName(); + if (parameterService.is(ParameterConstants.DB_METADATA_IGNORE_CASE)) { + qualifiedTableName = qualifiedTableName.toUpperCase(); + } if (StringUtils.isNotBlank(qualifiedTableName)) { - byTable.put(qualifiedTableName, conflictSetting); // ADB + byTable.put(qualifiedTableName, conflictSetting); } else if (StringUtils.isNotBlank(conflictSetting.getTargetChannelId())) { byChannel.put(conflictSetting.getTargetChannelId(), conflictSetting); } else { diff --git a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java index 8dc92216d7..fc1682e3ca 100644 --- a/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java +++ b/symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DatabaseWriterSettings.java @@ -31,7 +31,7 @@ public class DatabaseWriterSettings { protected long maxRowsBeforeCommit = 10000; - + // Milliseconds to sleep between commits. protected long commitSleepInterval = 5; @@ -40,49 +40,51 @@ public class DatabaseWriterSettings { protected boolean usePrimaryKeysFromSource = true; protected Conflict defaultConflictSetting; - + protected boolean createTableFailOnError = true; - + protected boolean alterTable = true; - + protected boolean createTableDropFirst = false; - + protected boolean createTableAlterCaseToMatchDatabaseDefault = false; - + protected boolean ignoreMissingTables = true; protected boolean saveCurrentValueOnError = false; - + protected Map conflictSettingsByChannel; protected Map conflictSettingsByTable; protected List databaseWriterFilters; - + protected List databaseWriterErrorHandlers; - + protected List resolvedData; - + + protected boolean metadataIgnoreCase; + public boolean isAlterTable() { return alterTable; } - + public void setAlterTable(boolean alterTable) { this.alterTable = alterTable; } - + public boolean isCreateTableDropFirst() { return createTableDropFirst; } - + public void setCreateTableDropFirst(boolean createTableDropFirst) { this.createTableDropFirst = createTableDropFirst; } - + public boolean isCreateTableFailOnError() { return createTableFailOnError; } - + public void setCreateTableFailOnError(boolean createTableFailOnError) { this.createTableFailOnError = createTableFailOnError; } @@ -118,11 +120,11 @@ public Conflict getDefaultConflictSetting() { public void setDefaultConflictSetting(Conflict defaultConflictSetting) { this.defaultConflictSetting = defaultConflictSetting; } - + public boolean isCreateTableAlterCaseToMatchDatabaseDefault() { return createTableAlterCaseToMatchDatabaseDefault; } - + public void setCreateTableAlterCaseToMatchDatabaseDefault( boolean createTableAlterCaseToMatchDatabaseDefault) { this.createTableAlterCaseToMatchDatabaseDefault = createTableAlterCaseToMatchDatabaseDefault; @@ -151,7 +153,7 @@ public List getDatabaseWriterFilters() { public void setDatabaseWriterFilters(List databaseWriterFilters) { this.databaseWriterFilters = databaseWriterFilters; } - + public void setResolvedData(ResolvedData... resolvedData) { this.resolvedData = new ArrayList(); if (resolvedData != null) { @@ -160,24 +162,24 @@ public void setResolvedData(ResolvedData... resolvedData) { } } } - + public void setResolvedData(List resolvedData) { this.resolvedData = resolvedData; } - + public List getResolvedData() { return resolvedData; } - + public void setDatabaseWriterErrorHandlers( List databaseWriterErrorHandlers) { this.databaseWriterErrorHandlers = databaseWriterErrorHandlers; } - + public List getDatabaseWriterErrorHandlers() { return databaseWriterErrorHandlers; } - + public ResolvedData getResolvedData (long rowNumber) { if (resolvedData != null) { for (ResolvedData data : resolvedData) { @@ -188,15 +190,15 @@ public ResolvedData getResolvedData (long rowNumber) { } return null; } - + public void setIgnoreMissingTables(boolean ignoreMissingTables) { this.ignoreMissingTables = ignoreMissingTables; } - + public boolean isIgnoreMissingTables() { return ignoreMissingTables; } - + public void addErrorHandler(IDatabaseWriterErrorHandler handler) { if (this.databaseWriterErrorHandlers == null) { this.databaseWriterErrorHandlers = new ArrayList(); @@ -206,12 +208,20 @@ public void addErrorHandler(IDatabaseWriterErrorHandler handler) { public Conflict pickConflict(Table table, Batch batch) { Conflict settings = null; - String fullyQualifiedName = table.getFullyQualifiedTableName(); if (conflictSettingsByTable != null) { - Conflict found = conflictSettingsByTable.get(fullyQualifiedName); + + String tableName = table.getFullyQualifiedTableName(); + if (metadataIgnoreCase) { + tableName = tableName.toUpperCase(); + } + Conflict found = conflictSettingsByTable.get(tableName); if (found == null) { - found = conflictSettingsByTable.get(table.getName()); + tableName = table.getName(); + if (metadataIgnoreCase) { + tableName = tableName.toUpperCase(); + } + found = conflictSettingsByTable.get(tableName); } if (found != null @@ -253,4 +263,12 @@ public void setSaveCurrentValueOnError(boolean saveCurrentValueOnError) { this.saveCurrentValueOnError = saveCurrentValueOnError; } + public boolean isMetadataIgnoreCase() { + return metadataIgnoreCase; + } + + public void setMetadataIgnoreCase(boolean metadataIgnoreCase) { + this.metadataIgnoreCase = metadataIgnoreCase; + } + }