Procházet zdrojové kódy

!360 fix bug
Merge pull request !360 from AE86/v_2.0

AE86 před 1 měsícem
rodič
revize
4a7c2e5224

+ 4 - 1
dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/binlog/BinaryLogRemoteClient.java

@@ -434,7 +434,10 @@ public class BinaryLogRemoteClient implements BinaryLogClient {
             throw new IOException("Failed to getVersion, command SELECT VERSION()");
         }
         ResultSetRowPacket resultSetRow = resultSet[0];
-        String version = resultSetRow.getValue(0).replace(StringUtil.POINT, StringUtil.EMPTY).replace(StringUtil.HORIZONTAL, StringUtil.EMPTY);
+        String version = resultSetRow.getValue(0).replace(StringUtil.POINT, StringUtil.EMPTY);
+        if (version.contains(StringUtil.HORIZONTAL)) {
+            version = version.split(StringUtil.HORIZONTAL)[0];
+        }
         return Long.parseLong(String.format("%-10s", version).replace(StringUtil.SPACE, "0"));
     }
 

+ 1 - 1
dbsyncer-connector/dbsyncer-connector-mysql/src/main/java/org/dbsyncer/connector/mysql/schema/support/MySQLByteType.java

@@ -59,7 +59,7 @@ public final class MySQLByteType extends ByteType {
         if (val instanceof Byte) {
             return val;
         }
-        return throwUnsupportedException(val, field);
+        return super.convert(val, field);
     }
 
 }

+ 1 - 0
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/schema/OracleClobValueMapper.java

@@ -12,6 +12,7 @@ import java.nio.charset.StandardCharsets;
  * @version 1.0.0
  * @date 2022/8/25 0:07
  */
+@Deprecated
 public final class OracleClobValueMapper extends AbstractValueMapper<CustomType> {
 
     @Override

+ 17 - 0
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/schema/support/OracleBytesType.java

@@ -3,10 +3,13 @@
  */
 package org.dbsyncer.connector.oracle.schema.support;
 
+import oracle.sql.BLOB;
 import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.connector.oracle.OracleException;
 import org.dbsyncer.sdk.model.Field;
 import org.dbsyncer.sdk.schema.support.BytesType;
 
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -40,8 +43,21 @@ public final class OracleBytesType extends BytesType {
         return Arrays.stream(TypeEnum.values()).map(TypeEnum::getValue).collect(Collectors.toSet());
     }
 
+    @Override
+    protected byte[] getDefaultMergedVal() {
+        return new byte[0];
+    }
+
     @Override
     protected byte[] merge(Object val, Field field) {
+        if (val instanceof BLOB) {
+            try {
+                BLOB blob = (BLOB) val;
+                return blob.getBytes(1, (int) blob.length());
+            } catch (SQLException e) {
+                throw new OracleException(e);
+            }
+        }
         return throwUnsupportedException(val, field);
     }
 
@@ -55,6 +71,7 @@ public final class OracleBytesType extends BytesType {
             if ("EMPTY_BLOB()".equals(s)) {
                 return null;
             }
+            return s.getBytes();
         }
         return super.convert(val, field);
     }

+ 27 - 0
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/schema/support/OracleStringType.java

@@ -3,9 +3,16 @@
  */
 package org.dbsyncer.connector.oracle.schema.support;
 
+import oracle.sql.CLOB;
+import org.dbsyncer.connector.oracle.OracleException;
 import org.dbsyncer.sdk.model.Field;
 import org.dbsyncer.sdk.schema.support.StringType;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+import java.sql.SQLException;
 import java.util.Arrays;
 import java.util.Set;
 import java.util.stream.Collectors;
@@ -46,7 +53,27 @@ public final class OracleStringType extends StringType {
 
     @Override
     protected String merge(Object val, Field field) {
+        if (val instanceof byte[]) {
+            return new String((byte[]) val, StandardCharsets.UTF_8);
+        }
+        if (val instanceof CLOB) {
+            return clobToString((CLOB) val);
+        }
         return throwUnsupportedException(val, field);
     }
 
+    public String clobToString(CLOB clob) {
+        try (Reader is = clob.getCharacterStream(); BufferedReader br = new BufferedReader(is)) {
+            String s = br.readLine();
+            StringBuilder sb = new StringBuilder();
+            while (s != null) {
+                sb.append(s);
+                s = br.readLine();
+            }
+            return sb.toString();
+        } catch (SQLException | IOException e) {
+            throw new OracleException(e);
+        }
+    }
+
 }

+ 1 - 0
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/connector/schema/BlobValueMapper.java

@@ -10,6 +10,7 @@ import org.dbsyncer.sdk.connector.ConnectorInstance;
  * @version 1.0.0
  * @date 2022/8/25 0:07
  */
+@Deprecated
 public class BlobValueMapper extends AbstractValueMapper<byte[]> {
 
     @Override

+ 1 - 0
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/connector/schema/ClobValueMapper.java

@@ -11,6 +11,7 @@ import java.sql.Clob;
  * @version 1.0.0
  * @date 2022/8/25 0:07
  */
+@Deprecated
 public class ClobValueMapper extends AbstractValueMapper<Clob> {
 
     @Override