diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java index 7cf5174a53..3324be7055 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/common/ParameterConstants.java @@ -122,6 +122,7 @@ private ParameterConstants() { public final static String AUTO_RESOLVE_FOREIGN_KEY_VIOLATION_REVERSE = "auto.resolve.foreign.key.violation.reverse"; public final static String AUTO_RESOLVE_FOREIGN_KEY_VIOLATION_REVERSE_PEERS = "auto.resolve.foreign.key.violation.reverse.peers"; public final static String AUTO_RESOLVE_FOREIGN_KEY_VIOLATION_REVERSE_RELOAD = "auto.resolve.foreign.key.violation.reverse.reload"; + public final static String AUTO_RESOLVE_UNIQUE_INDEX_IGNORE_NULL_VALUES = "auto.resolve.unique.index.ignore.null.values"; public final static String AUTO_INSERT_REG_SVR_IF_NOT_FOUND = "auto.insert.registration.svr.if.not.found"; public final static String AUTO_SYNC_CONFIGURATION = "auto.sync.configuration"; public final static String AUTO_SYNC_CONFIGURATION_ON_INCOMING = "auto.sync.configuration.on.incoming"; diff --git a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/AbstractDataLoaderFactory.java b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/AbstractDataLoaderFactory.java index 024c36807c..3f0dde78ff 100644 --- a/symmetric-core/src/main/java/org/jumpmind/symmetric/load/AbstractDataLoaderFactory.java +++ b/symmetric-core/src/main/java/org/jumpmind/symmetric/load/AbstractDataLoaderFactory.java @@ -54,6 +54,8 @@ public DatabaseWriterSettings buildParameterDatabaseWriterSettings(List values = data.toColumnNameValuePairs(databaseWriter.getSourceTable().getColumnNames(), CsvData.ROW_DATA); List whereColumns = new ArrayList(); List whereValues = new ArrayList(); + boolean hasNotNullValue = false; for (IndexColumn indexColumn : uniqueIndex.getColumns()) { whereColumns.add(targetTable.getColumnWithName(indexColumn.getName())); - whereValues.add(values.get(indexColumn.getName())); + String value = values.get(indexColumn.getName()); + whereValues.add(value); + hasNotNullValue = hasNotNullValue || (value != null); + } + if (!hasNotNullValue && databaseWriter.getWriterSettings().isAutoResolveUniqueIndexIgnoreNullValues()) { + log.debug("Did not issue correction for possible violation of unique index {} on table {} during {} with batch {} because null values are ignored", + uniqueIndex.getName(), targetTable.getName(), data.getDataEventType().toString(), databaseWriter.getContext().getBatch().getNodeBatchId()); + return 0; } return deleteRow(platform, sqlTemplate, databaseWriter, targetTable, whereColumns, whereValues, true); }