Skip to content

Commit

Permalink
0005113: fix pk columns in different sequence
Browse files Browse the repository at this point in the history
  • Loading branch information
erilong committed Nov 15, 2021
1 parent e5edc5d commit eb07b2f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 27 deletions.
Expand Up @@ -230,25 +230,6 @@ public Map<String, String> toColumnNameValuePairs(String[] keyNames, String key)
}
}

public Map<String, String> toColumnNameValuePairsWithExactMatch(String[] primaryKeyNames, String[] secondaryKeyNames, String key) {
String[] values = getParsedData(key);
if (values != null && primaryKeyNames != null && values.length == primaryKeyNames.length) {
Map<String, String> map = new LinkedCaseInsensitiveMap<String>(primaryKeyNames.length);
for (int i = 0; i < primaryKeyNames.length; i++) {
map.put(primaryKeyNames[i], values[i]);
}
return map;
} else if (values != null && secondaryKeyNames != null && values.length == secondaryKeyNames.length) {
Map<String, String> map = new LinkedCaseInsensitiveMap<String>(secondaryKeyNames.length);
for (int i = 0; i < secondaryKeyNames.length; i++) {
map.put(secondaryKeyNames[i], values[i]);
}
return map;
} else {
return new HashMap<String, String>(0);
}
}

public boolean requiresTable() {
return dataEventType != null && dataEventType != DataEventType.CREATE
&& dataEventType != DataEventType.BSH;
Expand Down
Expand Up @@ -344,8 +344,7 @@ protected boolean checkForUniqueKeyViolation(AbstractDatabaseWriter writer, CsvD
int count = 0;
if (e != null && sqlTemplate.isUniqueKeyViolation(e)) {
Table targetTable = writer.getTargetTable();
Map<String, String> values = data.toColumnNameValuePairsWithExactMatch(targetTable.getColumnNames(),
writer.getSourceTable().getColumnNames(), CsvData.ROW_DATA);
Map<String, String> values = data.toColumnNameValuePairs(writer.getSourceTable().getColumnNames(), CsvData.ROW_DATA);
List<Column> whereColumns = targetTable.getPrimaryKeyColumnsAsList();
List<String> whereValues = new ArrayList<String>();
for (Column column : whereColumns) {
Expand All @@ -362,13 +361,14 @@ protected boolean checkForUniqueKeyViolation(AbstractDatabaseWriter writer, CsvD
boolean isPrimaryKeyBlocking = false;
if ((!isFallback && data.getDataEventType() == DataEventType.UPDATE) ||
(isFallback && data.getDataEventType() == DataEventType.INSERT)) {
Map<String, String> pkValues = data.toColumnNameValuePairs(targetTable.getPrimaryKeyColumnNames(), CsvData.PK_DATA);
Map<String, String> pkValues = data.toColumnNameValuePairs(writer.getSourceTable().getPrimaryKeyColumnNames(), CsvData.PK_DATA);
boolean isPkChanged = false;
for (Map.Entry<String, String> entry : pkValues.entrySet()) {
String newValue = values.get(entry.getKey());
if (!StringUtils.equals(newValue, entry.getValue())) {
isPkChanged = true;
break;
if (pkValues.size() > 0) {
for (String name : targetTable.getPrimaryKeyColumnNames()) {
if (!StringUtils.equals(values.get(name), pkValues.get(name))) {
isPkChanged = true;
break;
}
}
}
if (isPkChanged && pkCount > 0) {
Expand Down

0 comments on commit eb07b2f

Please sign in to comment.