fix Message转Dml对null值的bug (#1808)

* Message转Dml对null值的判断

* Message转Dml对null值的判断

* Message转Dml对null值的判断
This commit is contained in:
rewerma
2019-05-28 00:03:55 +08:00
committed by agapple
parent 8df6d6fed8
commit ce7948d6e7

View File

@@ -76,11 +76,16 @@ public class MessageUtil {
dml.getPkNames().add(column.getName()); dml.getPkNames().add(column.getName());
} }
} }
if (column.getIsNull()) {
row.put(column.getName(), null);
} else {
row.put(column.getName(), row.put(column.getName(),
JdbcTypeUtil.typeConvert(dml.getTable(),column.getName(), JdbcTypeUtil.typeConvert(dml.getTable(),
column.getName(),
column.getValue(), column.getValue(),
column.getSqlType(), column.getSqlType(),
column.getMysqlType())); column.getMysqlType()));
}
// 获取update为true的字段 // 获取update为true的字段
if (column.getUpdated()) { if (column.getUpdated()) {
updateSet.add(column.getName()); updateSet.add(column.getName());
@@ -94,13 +99,18 @@ public class MessageUtil {
Map<String, Object> rowOld = new LinkedHashMap<>(); Map<String, Object> rowOld = new LinkedHashMap<>();
for (CanalEntry.Column column : rowData.getBeforeColumnsList()) { for (CanalEntry.Column column : rowData.getBeforeColumnsList()) {
if (updateSet.contains(column.getName())) { if (updateSet.contains(column.getName())) {
if (column.getIsNull()) {
rowOld.put(column.getName(), null);
} else {
rowOld.put(column.getName(), rowOld.put(column.getName(),
JdbcTypeUtil.typeConvert(dml.getTable(),column.getName(), JdbcTypeUtil.typeConvert(dml.getTable(),
column.getName(),
column.getValue(), column.getValue(),
column.getSqlType(), column.getSqlType(),
column.getMysqlType())); column.getMysqlType()));
} }
} }
}
// update操作将记录修改前的值 // update操作将记录修改前的值
if (!rowOld.isEmpty()) { if (!rowOld.isEmpty()) {
old.add(rowOld); old.add(rowOld);
@@ -162,8 +172,8 @@ public class MessageUtil {
return dml; return dml;
} }
private static List<Map<String, Object>> changeRows(String table, List<Map<String, String>> rows, Map<String, Integer> sqlTypes, private static List<Map<String, Object>> changeRows(String table, List<Map<String, String>> rows,
Map<String, String> mysqlTypes) { Map<String, Integer> sqlTypes, Map<String, String> mysqlTypes) {
List<Map<String, Object>> result = new ArrayList<>(); List<Map<String, Object>> result = new ArrayList<>();
for (Map<String, String> row : rows) { for (Map<String, String> row : rows) {
Map<String, Object> resultRow = new LinkedHashMap<>(); Map<String, Object> resultRow = new LinkedHashMap<>();