瀏覽代碼

优化代码

AE86 1 年之前
父節點
當前提交
9cdb845a98

+ 2 - 3
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/MappingChecker.java

@@ -181,13 +181,12 @@ public class MappingChecker extends AbstractChecker {
         String banUpdate = StringUtil.isNotBlank(params.get("banUpdate")) ? "true" : "false";
         String banInsert = StringUtil.isNotBlank(params.get("banInsert")) ? "true" : "false";
         String banDelete = StringUtil.isNotBlank(params.get("banDelete")) ? "true" : "false";
-        String banDdl = StringUtil.isNotBlank(params.get("banDdl")) ? "true" : "false";
+        String banDDL = StringUtil.isNotBlank(params.get("banDDL")) ? "true" : "false";
 
         listener.setBanUpdate(BooleanUtil.toBoolean(banUpdate));
         listener.setBanInsert(BooleanUtil.toBoolean(banInsert));
         listener.setBanDelete(BooleanUtil.toBoolean(banDelete));
-        listener.setBanDdl(BooleanUtil.toBoolean(banDdl));
-
+        listener.setBanDDL(BooleanUtil.toBoolean(banDDL));
     }
 
     /**

+ 1 - 24
dbsyncer-common/src/main/java/org/dbsyncer/common/util/DateFormatUtil.java

@@ -89,14 +89,6 @@ public abstract class DateFormatUtil {
             .optionalEnd()
             .toFormatter();
 
-    private static DateTimeFormatter TS_TZ_FORMATOracle = new DateTimeFormatterBuilder()
-            .append(NON_ISO_LOCAL_DATE)
-            .appendLiteral(' ')
-            .append(DateTimeFormatter.ISO_LOCAL_TIME)
-            .appendLiteral(' ')
-            .appendOffset("+HH:mm", "")
-            .toFormatter();
-
     public static String getCurrentTime() {
         return LocalDateTime.now().format(TIME_FORMATTER);
     }
@@ -173,11 +165,7 @@ public abstract class DateFormatUtil {
         try {
             parsedTimestamp = TS_TZ_FORMAT.parse(s);
         } catch (DateTimeParseException e) {
-            try {
-                parsedTimestamp = TS_TZ_WITH_SECONDS_FORMAT.parse(s);
-            }catch (DateTimeParseException e1){
-                parsedTimestamp = TS_TZ_FORMATOracle.parse(s);
-            }
+            parsedTimestamp = TS_TZ_WITH_SECONDS_FORMAT.parse(s);
         }
         return OffsetDateTime.from(parsedTimestamp).withOffsetSameInstant(ZoneOffset.UTC);
     }
@@ -221,15 +209,4 @@ public abstract class DateFormatUtil {
         return s;
     }
 
-    public static void main(String[] args) {
-        DateTimeFormatter TS_TZ_FORMAT1 = new DateTimeFormatterBuilder()
-                .append(NON_ISO_LOCAL_DATE)
-                .appendLiteral(' ')
-                .append(DateTimeFormatter.ISO_LOCAL_TIME)
-                .appendLiteral(' ')
-                .appendOffset("+HH:mm", "")
-                .toFormatter();
-        System.out.println(TS_TZ_FORMAT1.parse("2023-02-14 10:11:12.123 +08:00"));
-    }
-
 }

+ 14 - 15
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/logminer/parser/AbstractParser.java

@@ -10,8 +10,6 @@ import net.sf.jsqlparser.schema.Column;
 import oracle.jdbc.OracleTypes;
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.sdk.model.Field;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import java.sql.Types;
 import java.util.HashMap;
@@ -26,7 +24,6 @@ import java.util.Map;
  */
 public abstract class AbstractParser implements Parser {
 
-    private final Logger logger = LoggerFactory.getLogger(getClass());
     protected Map<String, Expression> columnMap = new HashMap<>();
     protected List<Field> fields;
 
@@ -54,11 +51,15 @@ public abstract class AbstractParser implements Parser {
         List<Object> data = new LinkedList<>();
         //需要进行数据库类型
         for (Field field : fields) {
-            OracleColumnValue oracleColumnValue = new OracleColumnValue(
-                    columnMap.get(field.getName()));
+            OracleColumnValue oracleColumnValue = new OracleColumnValue(columnMap.get(field.getName()));
+            // 无效空值
+            if (oracleColumnValue.isNull()){
+                data.add(null);
+                continue;
+            }
             switch (field.getType()) {
                 case Types.NUMERIC:
-                    data.add(convertNumber(oracleColumnValue,field));
+                    data.add(convertNumber(oracleColumnValue, field));
                     break;
                 case Types.DECIMAL:
                     data.add(oracleColumnValue.asBigDecimal());
@@ -78,25 +79,23 @@ public abstract class AbstractParser implements Parser {
         return data;
     }
 
-    private Object convertNumber(OracleColumnValue oracleColumnValue,Field field) {
-        if (field.getRatio() <=0){
-            int result =field.getColumnSize() - field.getRatio();
-            if ( result <10){
+    private Object convertNumber(OracleColumnValue oracleColumnValue, Field field) {
+        if (field.getRatio() <= 0) {
+            int result = field.getColumnSize() - field.getRatio();
+            if (result < 10) {
                 return oracleColumnValue.asInteger();
             }
-            if (result <19){
+            if (result < 19) {
                 return oracleColumnValue.asBigInteger();
             }
-            if (result <39){
+            if (result < 39) {
                 return oracleColumnValue.asBigDecimal();
             }
             return oracleColumnValue.asString();
-        }else{
-            return oracleColumnValue.asBigDecimal();
         }
+        return oracleColumnValue.asBigDecimal();
     }
 
-
     public void setFields(List<Field> fields) {
         this.fields = fields;
     }

+ 59 - 77
dbsyncer-connector/dbsyncer-connector-oracle/src/main/java/org/dbsyncer/connector/oracle/logminer/parser/OracleColumnValue.java

@@ -1,3 +1,6 @@
+/**
+ * DBSyncer Copyright 2020-2024 All Rights Reserved.
+ */
 package org.dbsyncer.connector.oracle.logminer.parser;
 
 import net.sf.jsqlparser.expression.Expression;
@@ -22,22 +25,38 @@ import java.time.OffsetDateTime;
 import java.util.List;
 import java.util.Objects;
 
+/**
+ * Oracle 字段值解析
+ *
+ * @Author AE86
+ * @Version 1.0.0
+ * @Date 2024-01-09 23:02
+ */
 public class OracleColumnValue extends AbstractColumnValue<Expression> {
 
     private final Logger logger = LoggerFactory.getLogger(getClass());
 
-
     public OracleColumnValue(Expression value) {
         setValue(value);
     }
 
+    @Override
+    public boolean isNull() {
+        if (getValue() instanceof IsNullExpression) {
+            return true;
+        }
+        if (getValue() instanceof NullValue) {
+            return true;
+        }
+        if (getValue() instanceof IsNullExpression) {
+            return true;
+        }
+        return super.isNull();
+    }
 
     @Override
     public String asString() {
-        if (isNull()){
-            return null;
-        }
-        return getValue().toString();
+        return Objects.toString(getValue());
     }
 
     @Override
@@ -52,10 +71,7 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
 
     @Override
     public Integer asInteger() {
-        if (asString() == null){
-            return null;
-        }
-       return Integer.valueOf(asString());
+        return Integer.valueOf(asString());
     }
 
     @Override
@@ -80,9 +96,6 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
 
     @Override
     public BigDecimal asBigDecimal() {
-        if (asString() == null){
-            return null;
-        }
         return new BigDecimal(asString());
     }
 
@@ -93,47 +106,43 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
 
     @Override
     public Timestamp asTimestamp() {
-        if (isNull()){
-            return null;
-        }
-        Function function = (Function) getValue();
-        List<String> multipartName = function.getMultipartName();
-        ExpressionList parameters = function.getParameters();
-        if (CollectionUtils.isEmpty(multipartName) || CollectionUtils.isEmpty(parameters)) {
-            return null;
-        }
-
-        String nameType = Objects.toString(multipartName.get(0));
-        Object value = parameters.get(0);
-        if (nameType == null || value == null) {
-            return null;
-        }
-
-        if (value instanceof StringValue) {
-            StringValue val = (StringValue) value;
-            value = val.getValue();
-        }
-
-        try {
-            switch (nameType) {
+        return handleColumnValue((type, value) -> {
+            switch (type) {
                 case "TO_DATE":
                     return toDate(value);
                 case "TO_TIMESTAMP":
                     return toTimestamp(value);
+                default:
+                    return null;
             }
-        } catch (Exception e) {
-            logger.error(e.getMessage(), e);
-        }
+        });
+    }
+
+    @Override
+    public Time asTime() {
         return null;
     }
 
-    public OffsetDateTime asOffsetDateTime(){
-        if (isNull()){
-            return null;
-        }
-        Function function = (Function) getValue();
-        List<String> multipartName = function.getMultipartName();
-        ExpressionList parameters = function.getParameters();
+    @Override
+    public BigInteger asBigInteger() {
+        return new BigInteger(asString());
+    }
+
+    public OffsetDateTime asOffsetDateTime() {
+        return handleColumnValue((type, value) -> {
+            switch (type) {
+                case "TO_TIMESTAMP_TZ":
+                    return toOffsetDateTime(value);
+                default:
+                    return null;
+            }
+        });
+    }
+
+    private <R> R handleColumnValue(ColumnValueFunction<R> function) {
+        Function fun = (Function) getValue();
+        List<String> multipartName = fun.getMultipartName();
+        ExpressionList parameters = fun.getParameters();
         if (CollectionUtils.isEmpty(multipartName) || CollectionUtils.isEmpty(parameters)) {
             return null;
         }
@@ -150,43 +159,13 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
         }
 
         try {
-            switch (nameType) {
-                case "TO_TIMESTAMP_TZ":
-                    return toOffsetDateTime(value);
-            }
+            return function.apply(nameType, value);
         } catch (Exception e) {
             logger.error(e.getMessage(), e);
         }
         return null;
     }
 
-    @Override
-    public Time asTime() {
-        return null;
-    }
-
-    @Override
-    public BigInteger asBigInteger() {
-        if (isNull()){
-            return null;
-        }
-        return new BigInteger(asString());
-    }
-
-    @Override
-    public boolean isNull() {
-        if (getValue() instanceof IsNullExpression){
-            return true;
-        }
-        if (getValue() instanceof NullValue){
-            return true;
-        }
-        if (getValue() instanceof IsNullExpression){
-            return true;
-        }
-        return false;
-    }
-
     private Timestamp toDate(Object value) {
         return DateFormatUtil.stringToTimestamp(Objects.toString(value));
     }
@@ -195,10 +174,13 @@ public class OracleColumnValue extends AbstractColumnValue<Expression> {
         return DateFormatUtil.stringToTimestamp(StringUtil.replace(Objects.toString(value), StringUtil.POINT, StringUtil.EMPTY));
     }
 
-    private OffsetDateTime toOffsetDateTime(Object value){
+    private OffsetDateTime toOffsetDateTime(Object value) {
         return DateFormatUtil.timestampWithTimeZoneToOffsetDateTime(Objects.toString(value));
     }
 
+    interface ColumnValueFunction<R> {
 
+        R apply(String type, Object value);
 
+    }
 }

+ 8 - 5
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/config/ListenerConfig.java

@@ -55,7 +55,10 @@ public class ListenerConfig {
      */
     private boolean banDelete;
 
-    private boolean banDdl;
+    /**
+     * 禁用ddl事件
+     */
+    private boolean banDDL;
 
     public ListenerConfig() {
     }
@@ -136,11 +139,11 @@ public class ListenerConfig {
         this.banDelete = banDelete;
     }
 
-    public boolean isBanDdl() {
-        return banDdl;
+    public boolean isBanDDL() {
+        return banDDL;
     }
 
-    public void setBanDdl(boolean banDdl) {
-        this.banDdl = banDdl;
+    public void setBanDDL(boolean banDDL) {
+        this.banDDL = banDDL;
     }
 }

+ 1 - 1
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/connector/database/AbstractDatabaseConnector.java

@@ -128,7 +128,7 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
                 String typeName = columnMetadata.getString(6);
                 int columnSize = columnMetadata.getInt(7);
                 int ratio = columnMetadata.getInt(9);
-                fields.add(new Field(columnName, typeName, columnType, primaryKeys.contains(columnName),columnSize,ratio));
+                fields.add(new Field(columnName, typeName, columnType, primaryKeys.contains(columnName), columnSize, ratio));
             }
             return fields;
         });

+ 1 - 1
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/listener/AbstractListener.java

@@ -65,7 +65,7 @@ public abstract class AbstractListener<C extends ConnectorInstance> implements L
                     break;
                 case ConnectorConstant.OPERTION_ALTER:
                     // 表结构变更事件
-                    processEvent(!listenerConfig.isBanDdl(),event);
+                    processEvent(!listenerConfig.isBanDDL(),event);
                     break;
                 default:
                     break;

+ 1 - 1
dbsyncer-web/src/main/resources/public/mapping/editIncrement.html

@@ -70,7 +70,7 @@
             <div class="col-md-3">
                 <label class="col-sm-3 control-label text-right">ddl*</label>
                 <div class="col-sm-9">
-                    <input name="banDdl" class="banEventSwitch" th:checked="${mapping?.listener?.banDdl}" type="checkbox">
+                    <input name="banDDL" class="banEventSwitch" th:checked="${mapping?.listener?.banDDL}" type="checkbox">
                 </div>
             </div>
         </div>