From ce7948d6e72f2399caeeb279e1702225c89cdad3 Mon Sep 17 00:00:00 2001 From: rewerma Date: Tue, 28 May 2019 00:03:55 +0800 Subject: [PATCH] =?UTF-8?q?fix=20Message=E8=BD=ACDml=E5=AF=B9null=E5=80=BC?= =?UTF-8?q?=E7=9A=84bug=20(#1808)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Message转Dml对null值的判断 * Message转Dml对null值的判断 * Message转Dml对null值的判断 --- .../client/adapter/support/MessageUtil.java | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/MessageUtil.java b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/MessageUtil.java index 1e24d9ad..618f81d6 100644 --- a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/MessageUtil.java +++ b/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/MessageUtil.java @@ -76,11 +76,16 @@ public class MessageUtil { dml.getPkNames().add(column.getName()); } } - row.put(column.getName(), - JdbcTypeUtil.typeConvert(dml.getTable(),column.getName(), - column.getValue(), - column.getSqlType(), - column.getMysqlType())); + if (column.getIsNull()) { + row.put(column.getName(), null); + } else { + row.put(column.getName(), + JdbcTypeUtil.typeConvert(dml.getTable(), + column.getName(), + column.getValue(), + column.getSqlType(), + column.getMysqlType())); + } // 获取update为true的字段 if (column.getUpdated()) { updateSet.add(column.getName()); @@ -94,11 +99,16 @@ public class MessageUtil { Map rowOld = new LinkedHashMap<>(); for (CanalEntry.Column column : rowData.getBeforeColumnsList()) { if (updateSet.contains(column.getName())) { - rowOld.put(column.getName(), - JdbcTypeUtil.typeConvert(dml.getTable(),column.getName(), - column.getValue(), - column.getSqlType(), - column.getMysqlType())); + if (column.getIsNull()) { + rowOld.put(column.getName(), null); + } else { + rowOld.put(column.getName(), + JdbcTypeUtil.typeConvert(dml.getTable(), + column.getName(), + column.getValue(), + column.getSqlType(), + column.getMysqlType())); + } } } // update操作将记录修改前的值 @@ -162,8 +172,8 @@ public class MessageUtil { return dml; } - private static List> changeRows(String table, List> rows, Map sqlTypes, - Map mysqlTypes) { + private static List> changeRows(String table, List> rows, + Map sqlTypes, Map mysqlTypes) { List> result = new ArrayList<>(); for (Map row : rows) { Map resultRow = new LinkedHashMap<>(); -- GitLab