Browse Source

fix(dbsync): json column of zero length has no value, value parsing should be skipped

lvtianyu 7 years ago
parent
commit
7b38542183

+ 11 - 11
dbsync/src/main/java/com/taobao/tddl/dbsync/binlog/event/RowsLogBuffer.java

@@ -969,17 +969,17 @@ public final class RowsLogBuffer {
                     default:
                         throw new IllegalArgumentException("!! Unknown JSON packlen = " + meta);
                 }
-                // len = buffer.getUint16();
-                // buffer.forward(meta - 4);
-                int position = buffer.position();
-                Json_Value jsonValue = JsonConversion.parse_value(buffer.getUint8(), buffer, len - 1, charsetName);
-                StringBuilder builder = new StringBuilder();
-                jsonValue.toJsonString(builder, charsetName);
-                value = builder.toString();
-                buffer.position(position + len);
-                // byte[] binary = new byte[len];
-                // buffer.fillBytes(binary, 0, len);
-                // value = binary;
+                if (0 == len) {
+                    // fixed issue #1 by lava, json column of zero length has no value, value parsing should be skipped
+                    value = "";
+                } else {
+                    int position = buffer.position();
+                    Json_Value jsonValue = JsonConversion.parse_value(buffer.getUint8(), buffer, len - 1, charsetName);
+                    StringBuilder builder = new StringBuilder();
+                    jsonValue.toJsonString(builder, charsetName);
+                    value = builder.toString();
+                    buffer.position(position + len);
+                }
                 javaType = Types.VARCHAR;
                 length = len;
                 break;