瀏覽代碼

Merge pull request #1526 from jiuchengspotorg/master

adapter rdb无法同步ddl更新问题修正
agapple 6 年之前
父節點
當前提交
4017de5102

+ 9 - 7
client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/JdbcTypeUtil.java

@@ -68,7 +68,13 @@ public class JdbcTypeUtil {
     }
 
     public static Object typeConvert(String columnName, String value, int sqlType, String mysqlType) {
-        if (value == null || value.equals("")) {
+        if (value == null
+        		|| (value.equals("")
+        				&& !("longtext".equals(mysqlType)
+        						|| "text".equals(mysqlType)
+        						|| sqlType == Types.CHAR
+        						|| sqlType == Types.VARCHAR
+        						|| sqlType == Types.LONGVARCHAR))) {
             return null;
         }
 
@@ -118,10 +124,8 @@ public class JdbcTypeUtil {
                         value = value.trim().replace(" ", "T");
                         DateTime dt = new DateTime(value);
                         res = new Date(dt.toDate().getTime());
-                    } else {
-                        res = null;
+  						break;
                     }
-                    break;
                 case Types.TIME:
                     value = "T" + value;
                     DateTime dt = new DateTime(value);
@@ -132,10 +136,8 @@ public class JdbcTypeUtil {
                         value = value.trim().replace(" ", "T");
                         dt = new DateTime(value);
                         res = new Timestamp(dt.toDate().getTime());
-                    } else {
-                        res = null;
+                        break;
                     }
-                    break;
                 case Types.CLOB:
                 default:
                     res = value;

+ 1 - 0
client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/MessageUtil.java

@@ -37,6 +37,7 @@ public class MessageUtil {
             CanalEntry.EventType eventType = rowChange.getEventType();
 
             final Dml dml = new Dml();
+            dml.setIsDdl(rowChange.getIsDdl());
             dml.setDestination(destination);
             dml.setGroupId(groupId);
             dml.setDatabase(entry.getHeader().getSchemaName());

+ 2 - 2
client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/support/SyncUtil.java

@@ -200,7 +200,7 @@ public class SyncUtil {
                         DateTime dt = new DateTime(v);
                         pstmt.setDate(i, new Date(dt.toDate().getTime()));
                     } else {
-                        pstmt.setNull(i, type);
+                        pstmt.setObject(i, value);
                     }
                 } else {
                     pstmt.setNull(i, type);
@@ -232,7 +232,7 @@ public class SyncUtil {
                         DateTime dt = new DateTime(v);
                         pstmt.setTimestamp(i, new Timestamp(dt.toDate().getTime()));
                     } else {
-                        pstmt.setNull(i, type);
+                        pstmt.setObject(i, value);
                     }
                 } else {
                     pstmt.setNull(i, type);