diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/IncomingError.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/IncomingError.java
index 544baf012d..33c3387fa4 100644
--- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/IncomingError.java
+++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/model/IncomingError.java
@@ -48,6 +48,8 @@ public class IncomingError implements Serializable {
private String columnNames;
+ private String primaryKeyColumnNames;
+
private CsvData csvData = new CsvData();
private boolean resolveIgnore = false;
@@ -212,4 +214,12 @@ public void setColumnNames(String columnNames) {
this.columnNames = columnNames;
}
+ public String getPrimaryKeyColumnNames() {
+ return primaryKeyColumnNames;
+ }
+
+ public void setPrimaryKeyColumnNames(String primaryKeyColumnNames) {
+ this.primaryKeyColumnNames = primaryKeyColumnNames;
+ }
+
}
diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java
index a64afd0422..d0cd8da803 100644
--- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java
+++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderService.java
@@ -517,7 +517,8 @@ public void insertIncomingError(IncomingError incomingError) {
incomingError.getNodeId(), incomingError.getFailedRowNumber(),
incomingError.getFailedLineNumber(), incomingError.getTargetCatalogName(),
incomingError.getTargetSchemaName(), incomingError.getTargetTableName(),
- incomingError.getEventType().getCode(), incomingError.getColumnNames(), incomingError.getRowData(),
+ incomingError.getEventType().getCode(), incomingError.getColumnNames(),
+ incomingError.getPrimaryKeyColumnNames(), incomingError.getRowData(),
incomingError.getOldData(), incomingError.getResolveData(),
incomingError.getResolveData(), incomingError.getCreateTime(),
incomingError.getLastUpdateBy(), incomingError.getLastUpdateTime());
@@ -573,6 +574,7 @@ public IncomingError mapRow(Row rs) {
incomingError.setTargetTableName(rs.getString("target_table_name"));
incomingError.setEventType(DataEventType.getEventType(rs.getString("event_type")));
incomingError.setColumnNames(rs.getString("column_names"));
+ incomingError.setPrimaryKeyColumnNames(rs.getString("pk_column_names"));
incomingError.setRowData(rs.getString("row_data"));
incomingError.setOldData(rs.getString("old_data"));
incomingError.setResolveData(rs.getString("resolve_data"));
@@ -736,6 +738,7 @@ public void batchInError(DataContext context, Exception ex) {
error.setBatchId(this.currentBatch.getBatchId());
error.setNodeId(this.currentBatch.getNodeId());
error.setColumnNames(Table.getCommaDeliminatedColumns(context.getTable().getColumns()));
+ error.setPrimaryKeyColumnNames(Table.getCommaDeliminatedColumns(context.getTable().getPrimaryKeyColumns()));
error.setCsvData(context.getData());
error.setEventType(context.getData().getDataEventType());
error.setFailedLineNumber(this.currentBatch.getFailedLineNumber());
diff --git a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderServiceSqlMap.java b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderServiceSqlMap.java
index 6993ca2a48..feb72572f1 100644
--- a/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderServiceSqlMap.java
+++ b/symmetric/symmetric-core/src/main/java/org/jumpmind/symmetric/service/impl/DataLoaderServiceSqlMap.java
@@ -40,12 +40,12 @@ public class DataLoaderServiceSqlMap extends AbstractSqlMap {
putSql("selectIncomingErrorSql",
"select batch_id, node_id, failed_row_number, failed_line_number, target_catalog_name, target_schema_name, " +
- "target_table_name, event_type, column_names, row_data, old_data, resolve_data, resolve_ignore, " +
+ "target_table_name, event_type, column_names, pk_column_names, row_data, old_data, resolve_data, resolve_ignore, " +
"create_time, last_update_by, last_update_time from $(incoming_error) where batch_id = ? and node_id = ?");
putSql("selectCurrentIncomingErrorSql",
"select e.batch_id, e.node_id, e.failed_row_number, e.failed_line_number, e.target_catalog_name, e.target_schema_name, " +
- "e.target_table_name, e.event_type, e.column_names, e.row_data, e.old_data, e.resolve_data, e.resolve_ignore, " +
+ "e.target_table_name, e.event_type, e.column_names, e.pk_column_names, e.row_data, e.old_data, e.resolve_data, e.resolve_ignore, " +
"e.create_time, e.last_update_by, e.last_update_time " +
"from $(incoming_error) e inner join $(incoming_batch) b on b.batch_id = e.batch_id " +
"and b.node_id = e.node_id and b.failed_row_number = e.failed_row_number " +
@@ -54,8 +54,8 @@ public class DataLoaderServiceSqlMap extends AbstractSqlMap {
putSql("insertIncomingErrorSql",
"insert into $(incoming_error) " +
"(batch_id, node_id, failed_row_number, failed_line_number, target_catalog_name, target_schema_name, " +
- "target_table_name, event_type, column_names, row_data, old_data, resolve_data, resolve_ignore, " +
- "create_time, last_update_by, last_update_time) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
+ "target_table_name, event_type, column_names, pk_column_names, row_data, old_data, resolve_data, resolve_ignore, " +
+ "create_time, last_update_by, last_update_time) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
putSql("updateIncomingErrorSql",
"update $(incoming_error) set resolve_data = ?, resolve_ignore = ? " +
diff --git a/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml b/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml
index ee01e8d9c6..534f23af74 100644
--- a/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml
+++ b/symmetric/symmetric-core/src/main/resources/symmetric-schema.xml
@@ -457,6 +457,7 @@
+