穿云 4 kuukautta sitten
vanhempi
säilyke
3bbc3934c0

+ 3 - 3
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/DataSyncServiceImpl.java

@@ -113,7 +113,7 @@ public class DataSyncServiceImpl implements DataSyncService {
 
         // 3、反序列
         Map<String, Object> target = new HashMap<>();
-        final Picker picker = new Picker(tableGroup.getFieldMapping());
+        final Picker picker = new Picker(tableGroup);
         final Map<String, Field> fieldMap = picker.getTargetFieldMap();
         BinlogMap message = BinlogMap.parseFrom(bytes);
         message.getRowMap().forEach((k, v) -> {
@@ -122,7 +122,7 @@ public class DataSyncServiceImpl implements DataSyncService {
                     Object val = BinlogMessageUtil.deserializeValue(fieldMap.get(k).getType(), v);
                     // 处理二进制对象显示
                     if (prettyBytes) {
-                        if (null != val && val instanceof byte[]) {
+                        if (val instanceof byte[]) {
                             byte[] b = (byte[]) val;
                             if (b.length > 128) {
                                 target.put(k, String.format("byte[%d]", b.length));
@@ -165,7 +165,7 @@ public class DataSyncServiceImpl implements DataSyncService {
         String sourceTableName = tableGroup.getSourceTable().getName();
 
         // 转换为源字段
-        final Picker picker = new Picker(tableGroup.getFieldMapping());
+        final Picker picker = new Picker(tableGroup);
         List<Object> changedRow = picker.pickSourceData(binlogData);
         RowChangedEvent changedEvent = new RowChangedEvent(sourceTableName, event, changedRow);
 

+ 4 - 4
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -83,7 +83,7 @@ public class MappingServiceImpl extends BaseServiceImpl implements MappingServic
     @Override
     public String add(Map<String, String> params) {
         ConfigModel model = mappingChecker.checkAddConfigModel(params);
-        log(LogType.MappingLog.INSERT, (Mapping) model);
+        log(LogType.MappingLog.INSERT, model);
 
         String id = profileComponent.addConfigModel(model);
 
@@ -156,15 +156,15 @@ public class MappingServiceImpl extends BaseServiceImpl implements MappingServic
             profileComponent.removeConfigModel(metaId);
             log(LogType.MetaLog.DELETE, meta);
 
-            // 删除驱动表映射关系
-            tableGroupContext.clear(metaId);
-
             // 删除tableGroup
             List<TableGroup> groupList = profileComponent.getTableGroupAll(id);
             if (!CollectionUtils.isEmpty(groupList)) {
                 groupList.forEach(t -> profileComponent.removeTableGroup(t.getId()));
             }
 
+            // 删除驱动表映射关系
+            tableGroupContext.clear(metaId);
+
             // 删除驱动
             profileComponent.removeConfigModel(id);
             log(LogType.MappingLog.DELETE, mapping);

+ 2 - 1
dbsyncer-manager/src/main/java/org/dbsyncer/manager/impl/IncrementPuller.java

@@ -117,6 +117,7 @@ public final class IncrementPuller extends AbstractPuller implements Application
         }
         map.remove(metaId);
         publishClosedEvent(metaId);
+        tableGroupContext.clear(metaId);
         logger.info("关闭成功:{}", metaId);
     }
 
@@ -150,7 +151,7 @@ public final class IncrementPuller extends AbstractPuller implements Application
             AbstractQuartzListener quartzListener = (AbstractQuartzListener) listener;
             List<TableGroupQuartzCommand> quartzCommands = list.stream().map(t -> {
                 final TableGroup group = PickerUtil.mergeTableGroupConfig(mapping, t);
-                final Picker picker = new Picker(group.getFieldMapping());
+                final Picker picker = new Picker(group);
                 List<Field> fields = picker.getSourceFields();
                 Assert.notEmpty(fields, "表字段映射关系不能为空:" + group.getSourceTable().getName() + " > " + group.getTargetTable().getName());
                 return new TableGroupQuartzCommand(t.getSourceTable(), fields, t.getCommand());

+ 2 - 1
dbsyncer-parser/src/main/java/org/dbsyncer/parser/TableGroupContext.java

@@ -5,6 +5,7 @@ package org.dbsyncer.parser;
 
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.parser.model.TableGroupPicker;
 
 import java.util.List;
 
@@ -17,7 +18,7 @@ public interface TableGroupContext {
 
     void put(Mapping mapping, List<TableGroup> tableGroups);
 
-    List<TableGroup> getTableGroups(Mapping mapping, String tableName);
+    List<TableGroupPicker> getTableGroupPickers(String metaId, String tableName);
 
     void clear(String metaId);
 }

+ 8 - 5
dbsyncer-parser/src/main/java/org/dbsyncer/parser/flush/impl/GeneralBufferActuator.java

@@ -125,16 +125,16 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
             return;
         }
         final Mapping mapping = profileComponent.getMapping(meta.getMappingId());
-        List<TableGroup> tableGroups = tableGroupContext.getTableGroups(mapping, response.getTableName());
+        List<TableGroupPicker> pickers = tableGroupContext.getTableGroupPickers(meta.getId(), response.getTableName());
 
         // 1、ddl解析
         if (ChangedEventTypeEnum.isDDL(response.getTypeEnum())) {
-            tableGroups.forEach(tableGroup -> parseDDl(response, mapping, tableGroup));
+            pickers.forEach(picker -> parseDDl(response, mapping, picker.getTableGroup()));
             return;
         }
 
         // 2、dml解析
-        tableGroups.forEach(tableGroup -> distributeTableGroup(response, mapping, tableGroup));
+        pickers.forEach(picker -> distributeTableGroup(response, mapping, picker));
     }
 
     @Override
@@ -153,13 +153,16 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
         return generalExecutor;
     }
 
-    private void distributeTableGroup(WriterResponse response, Mapping mapping, TableGroup tableGroup) {
+    private void distributeTableGroup(WriterResponse response, Mapping mapping, TableGroupPicker picker) {
         // 1、映射字段
-        final Picker picker = new Picker(tableGroup.getFieldMapping());
         List<Map> sourceDataList = new ArrayList<>();
         List<Map> targetDataList = picker.pickTargetData(response.getDataList(), sourceDataList);
+        if (CollectionUtils.isEmpty(targetDataList)) {
+            return;
+        }
 
         // 2、参数转换
+        TableGroup tableGroup = picker.getTableGroup();
         ConvertUtil.convert(tableGroup.getConvert(), targetDataList);
 
         // 3、插件转换

+ 1 - 1
dbsyncer-parser/src/main/java/org/dbsyncer/parser/impl/ParserComponentImpl.java

@@ -133,7 +133,7 @@ public class ParserComponentImpl implements ParserComponent {
         String tTableName = group.getTargetTable().getName();
         Assert.notEmpty(fieldMapping, String.format("数据源表[%s]同步到目标源表[%s], 映射关系不能为空.", sTableName, tTableName));
         // 获取同步字段
-        Picker picker = new Picker(fieldMapping);
+        Picker picker = new Picker(group);
         List<String> primaryKeys = PrimaryKeyUtil.findTablePrimaryKeys(sourceTable);
         final FullPluginContext context = new FullPluginContext();
         context.setSourceConnectorInstance(connectorFactory.connect(sConfig));

+ 8 - 7
dbsyncer-parser/src/main/java/org/dbsyncer/parser/impl/TableGroupContextImpl.java

@@ -6,6 +6,7 @@ package org.dbsyncer.parser.impl;
 import org.dbsyncer.parser.TableGroupContext;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.parser.model.TableGroupPicker;
 import org.dbsyncer.parser.util.PickerUtil;
 import org.springframework.stereotype.Component;
 
@@ -27,7 +28,7 @@ public final class TableGroupContextImpl implements TableGroupContext {
      */
     private final Map<String, InnerMapping> tableGroupMap = new ConcurrentHashMap<>();
 
-    private final List<TableGroup> EMPTY_LIST = new ArrayList<>();
+    private final List<TableGroupPicker> EMPTY_LIST = new ArrayList<>();
 
     @Override
     public void put(Mapping mapping, List<TableGroup> tableGroups) {
@@ -42,8 +43,8 @@ public final class TableGroupContextImpl implements TableGroupContext {
     }
 
     @Override
-    public List<TableGroup> getTableGroups(Mapping mapping, String tableName) {
-        InnerMapping innerMapping = tableGroupMap.get(mapping.getMetaId());
+    public List<TableGroupPicker> getTableGroupPickers(String metaId, String tableName) {
+        InnerMapping innerMapping = tableGroupMap.get(metaId);
         if (innerMapping != null) {
             return innerMapping.get(tableName);
         }
@@ -56,14 +57,14 @@ public final class TableGroupContextImpl implements TableGroupContext {
     }
 
     static final class InnerMapping {
-        Map<String, List<TableGroup>> mapping = new ConcurrentHashMap<>();
+        Map<String, List<TableGroupPicker>> pickerMap = new ConcurrentHashMap<>();
 
-        public List<TableGroup> get(String tableName) {
-            return mapping.get(tableName);
+        public List<TableGroupPicker> get(String tableName) {
+            return pickerMap.get(tableName);
         }
 
         public void add(String tableName, TableGroup tableGroup) {
-            mapping.computeIfAbsent(tableName, k -> new ArrayList<>()).add(tableGroup);
+            pickerMap.computeIfAbsent(tableName, k -> new ArrayList<>()).add(new TableGroupPicker(tableGroup));
         }
     }
 }

+ 0 - 166
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/FieldPicker.java

@@ -1,166 +0,0 @@
-/**
- * DBSyncer Copyright 2020-2023 All Rights Reserved.
- */
-package org.dbsyncer.parser.model;
-
-import org.dbsyncer.common.util.CollectionUtils;
-import org.dbsyncer.common.util.DateFormatUtil;
-import org.dbsyncer.common.util.StringUtil;
-import org.dbsyncer.sdk.filter.CompareFilter;
-import org.dbsyncer.sdk.enums.FilterEnum;
-import org.dbsyncer.sdk.enums.OperationEnum;
-import org.dbsyncer.sdk.model.Field;
-import org.dbsyncer.sdk.model.Filter;
-import org.springframework.util.Assert;
-
-import java.sql.Date;
-import java.sql.Timestamp;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-public class FieldPicker {
-
-    private final TableGroup tableGroup;
-    private List<Node> index;
-    private int indexSize;
-    private boolean enabledFilter;
-    private List<Filter> add;
-    private List<Filter> or;
-
-    public FieldPicker(TableGroup tableGroup) {
-        this.tableGroup = tableGroup;
-    }
-
-    public FieldPicker(TableGroup tableGroup, List<Filter> filter, List<Field> column, List<FieldMapping> fieldMapping) {
-        this.tableGroup = tableGroup;
-        init(filter, column, fieldMapping);
-    }
-
-    public Map<String, Object> getColumns(List<Object> list) {
-        if (!CollectionUtils.isEmpty(list)) {
-            Map<String, Object> data = new HashMap<>(indexSize);
-            final int size = list.size() - 1;
-            index.forEach(node -> {
-                if (node.i <= size) {
-                    data.put(node.name, list.get(node.i));
-                }
-            });
-            return data;
-        }
-        return Collections.EMPTY_MAP;
-    }
-
-    /**
-     * 根据过滤条件过滤
-     *
-     * @param row
-     * @return
-     */
-    public boolean filter(Map<String, Object> row) {
-        if (!enabledFilter) {
-            return true;
-        }
-        // where (id > 1 and id < 100) or (id = 100 or id =101)
-        // 或 关系(成立任意条件)
-        Object value = null;
-        for (Filter f : or) {
-            value = row.get(f.getName());
-            if (null == value) {
-                continue;
-            }
-            if (compareValueWithFilter(f, value)) {
-                return true;
-            }
-        }
-
-        boolean pass = false;
-        // 并 关系(成立所有条件)
-        for (Filter f : add) {
-            value = row.get(f.getName());
-            if (null == value) {
-                continue;
-            }
-            if (!compareValueWithFilter(f, value)) {
-                return false;
-            }
-            pass = true;
-        }
-
-        return pass;
-    }
-
-    /**
-     * 比较值是否满足过滤条件
-     *
-     * @param filter        过滤器
-     * @param comparedValue 比较值
-     * @return
-     */
-    private boolean compareValueWithFilter(Filter filter, Object comparedValue) {
-        CompareFilter compareFilter = FilterEnum.getCompareFilter(filter.getFilter());
-        if (null == filter) {
-            return false;
-        }
-
-        // 支持时间比较
-        if (comparedValue instanceof Timestamp) {
-            Timestamp comparedTimestamp = (Timestamp) comparedValue;
-            Timestamp filterTimestamp = DateFormatUtil.stringToTimestamp(filter.getValue());
-            return compareFilter.compare(String.valueOf(comparedTimestamp.getTime()), String.valueOf(filterTimestamp.getTime()));
-        }
-        if (comparedValue instanceof Date) {
-            Date comparedDate = (Date) comparedValue;
-            Date filterDate = DateFormatUtil.stringToDate(filter.getValue());
-            return compareFilter.compare(String.valueOf(comparedDate.getTime()), String.valueOf(filterDate.getTime()));
-        }
-
-        return compareFilter.compare(String.valueOf(comparedValue), filter.getValue());
-    }
-
-    private void init(List<Filter> filter, List<Field> column, List<FieldMapping> fieldMapping) {
-        // column  => [1, 86, 0, 中文, 2020-05-15T12:17:22.000+0800, 备注信息]
-        Assert.notEmpty(column, "读取字段不能为空.");
-        Assert.notEmpty(fieldMapping, "映射关系不能为空.");
-
-        // 解析过滤条件
-        if ((enabledFilter = !CollectionUtils.isEmpty(filter))) {
-            add = filter.stream().filter(f -> StringUtil.equals(f.getOperation(), OperationEnum.AND.getName())).collect(
-                    Collectors.toList());
-            or = filter.stream().filter(f -> StringUtil.equals(f.getOperation(), OperationEnum.OR.getName())).collect(Collectors.toList());
-        }
-
-        // 记录字段索引 [{"ID":0},{"NAME":1}]
-        index = new LinkedList<>();
-        int size = column.size();
-        String k = null;
-        Field field = null;
-        for (int i = 0; i < size; i++) {
-            field = column.get(i);
-            k = field.isUnmodifiabled() ? field.getLabelName() : field.getName();
-            index.add(new Node(k, i));
-        }
-        Assert.notEmpty(index, "同步映射关系不能为空.");
-        this.indexSize = index.size();
-    }
-
-    public TableGroup getTableGroup() {
-        return tableGroup;
-    }
-
-    final class Node {
-        // 属性
-        String name;
-        // 索引
-        int i;
-
-        public Node(String name, int i) {
-            this.name = name;
-            this.i = i;
-        }
-    }
-
-}

+ 108 - 22
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/Picker.java

@@ -1,9 +1,16 @@
 package org.dbsyncer.parser.model;
 
 import org.dbsyncer.common.util.CollectionUtils;
+import org.dbsyncer.common.util.DateFormatUtil;
 import org.dbsyncer.common.util.StringUtil;
+import org.dbsyncer.sdk.enums.FilterEnum;
+import org.dbsyncer.sdk.enums.OperationEnum;
+import org.dbsyncer.sdk.filter.CompareFilter;
 import org.dbsyncer.sdk.model.Field;
+import org.dbsyncer.sdk.model.Filter;
 
+import java.sql.Date;
+import java.sql.Timestamp;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -11,21 +18,35 @@ public class Picker {
 
     private final List<Field> sourceFields = new ArrayList<>();
     private final List<Field> targetFields = new ArrayList<>();
+    private final int sFieldSize;
+    private final int tFieldSize;
+    private final TableGroup tableGroup;
+    private final boolean enabledFilter;
+    private List<Filter> add;
+    private List<Filter> or;
 
-    public Picker(List<FieldMapping> fieldMapping) {
-        if (!CollectionUtils.isEmpty(fieldMapping)) {
-            fieldMapping.forEach(m -> {
+    public Picker(TableGroup tableGroup) {
+        this.tableGroup = tableGroup;
+        if (!CollectionUtils.isEmpty(tableGroup.getFieldMapping())) {
+            tableGroup.getFieldMapping().forEach(m -> {
                 sourceFields.add(m.getSource());
                 targetFields.add(m.getTarget());
             });
         }
+        this.sFieldSize = sourceFields.size();
+        this.tFieldSize = targetFields.size();
+        // 解析过滤条件
+        List<Filter> filter = tableGroup.getFilter();
+        enabledFilter = !CollectionUtils.isEmpty(filter);
+        if (enabledFilter) {
+            add = filter.stream().filter(f -> StringUtil.equals(f.getOperation(), OperationEnum.AND.getName())).collect(Collectors.toList());
+            or = filter.stream().filter(f -> StringUtil.equals(f.getOperation(), OperationEnum.OR.getName())).collect(Collectors.toList());
+        }
     }
 
     public List<Map> pickTargetData(List<Map> source) {
         List<Map> targetMapList = new ArrayList<>();
         if (!CollectionUtils.isEmpty(source)) {
-            final int sFieldSize = sourceFields.size();
-            final int tFieldSize = targetFields.size();
             Map<String, Object> target = null;
             for (Map row : source) {
                 target = new HashMap<>();
@@ -38,21 +59,24 @@ public class Picker {
 
     public List<Map> pickTargetData(List<List<Object>> rows, List<Map> sourceMapList) {
         List<Map> targetMapList = new ArrayList<>();
-        if (!CollectionUtils.isEmpty(rows)) {
-            final int sFieldSize = sourceFields.size();
-            final int tFieldSize = targetFields.size();
-            Map<String, Object> source = null;
-            Map<String, Object> target = null;
-            List<Object> row = null;
-            List<Field> sFields = getFields(sourceFields);
-            for (int i = 0; i < rows.size(); i++) {
-                source = new HashMap<>();
-                target = new HashMap<>();
-                row = rows.get(i);
-                for (int j = 0; j < row.size(); j++) {
-                    source.put(sFields.get(j).getName(), row.get(j));
-                }
-                exchange(sFieldSize, tFieldSize, sourceFields, targetFields, source, target);
+        if (CollectionUtils.isEmpty(rows)) {
+            return targetMapList;
+        }
+        Map<String, Object> source = null;
+        Map<String, Object> target = null;
+        for (List<Object> row : rows) {
+            // 排除下标不一致的数据
+            if (row.size() != getOriginalFields().size()) {
+                continue;
+            }
+            source = new HashMap<>();
+            for (int j = 0; j < getOriginalFields().size(); j++) {
+                source.put(getOriginalFields().get(j).getName(), row.get(j));
+            }
+            target = new HashMap<>();
+            exchange(sFieldSize, tFieldSize, sourceFields, targetFields, source, target);
+            // 根据条件过滤数据
+            if (filter(target)) {
                 sourceMapList.add(source);
                 targetMapList.add(target);
             }
@@ -63,7 +87,7 @@ public class Picker {
     public List<Object> pickSourceData(Map target) {
         Map<String, Object> source = new HashMap<>();
         if (!CollectionUtils.isEmpty(target)) {
-            exchange(targetFields.size(), sourceFields.size(), targetFields, sourceFields, target, source);
+            exchange(tFieldSize, sFieldSize, targetFields, sourceFields, target, source);
         }
 
         return getFields(sourceFields).stream().map(field -> source.get(field.getName())).collect(Collectors.toList());
@@ -81,6 +105,64 @@ public class Picker {
         return targetFields.stream().filter(Objects::nonNull).collect(Collectors.toMap(Field::getName, f -> f, (k1, k2) -> k1));
     }
 
+    private boolean filter(Map<String, Object> row) {
+        if (!enabledFilter) {
+            return true;
+        }
+        // where (id > 1 and id < 100) or (id = 100 or id =101)
+        // 或 关系(成立任意条件)
+        Object value = null;
+        for (Filter f : or) {
+            value = row.get(f.getName());
+            if (null == value) {
+                continue;
+            }
+            if (compareValueWithFilter(f, value)) {
+                return true;
+            }
+        }
+
+        boolean pass = false;
+        // 并 关系(成立所有条件)
+        for (Filter f : add) {
+            value = row.get(f.getName());
+            if (null == value) {
+                continue;
+            }
+            if (!compareValueWithFilter(f, value)) {
+                return false;
+            }
+            pass = true;
+        }
+
+        return pass;
+    }
+
+    /**
+     * 比较值是否满足过滤条件
+     *
+     * @param filter        过滤器
+     * @param comparedValue 比较值
+     * @return
+     */
+    private boolean compareValueWithFilter(Filter filter, Object comparedValue) {
+        CompareFilter compareFilter = FilterEnum.getCompareFilter(filter.getFilter());
+
+        // 支持时间比较
+        if (comparedValue instanceof Timestamp) {
+            Timestamp comparedTimestamp = (Timestamp) comparedValue;
+            Timestamp filterTimestamp = DateFormatUtil.stringToTimestamp(filter.getValue());
+            return compareFilter.compare(String.valueOf(comparedTimestamp.getTime()), String.valueOf(filterTimestamp.getTime()));
+        }
+        if (comparedValue instanceof java.sql.Date) {
+            java.sql.Date comparedDate = (java.sql.Date) comparedValue;
+            Date filterDate = DateFormatUtil.stringToDate(filter.getValue());
+            return compareFilter.compare(String.valueOf(comparedDate.getTime()), String.valueOf(filterDate.getTime()));
+        }
+
+        return compareFilter.compare(String.valueOf(comparedValue), filter.getValue());
+    }
+
     private void exchange(int sFieldSize, int tFieldSize, List<Field> sFields, List<Field> tFields, Map<String, Object> source, Map<String, Object> target) {
         Field sField = null;
         Field tField = null;
@@ -92,7 +174,7 @@ public class Picker {
                 tField = tFields.get(k);
             }
             if (null != sField && null != tField) {
-                v = source.get(sField.isUnmodifiabled() ? sField.getLabelName() : sField.getName());
+                v = source.get(sField.getName());
                 tFieldName = tField.getName();
                 // 映射值
                 if (!target.containsKey(tFieldName)) {
@@ -118,4 +200,8 @@ public class Picker {
         return Collections.unmodifiableList(fields);
     }
 
+    private List<Field> getOriginalFields() {
+        return tableGroup.getSourceTable().getColumn();
+    }
+
 }

+ 41 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/model/TableGroupPicker.java

@@ -0,0 +1,41 @@
+/**
+ * DBSyncer Copyright 2020-2025 All Rights Reserved.
+ */
+package org.dbsyncer.parser.model;
+
+import org.dbsyncer.sdk.model.Field;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author 穿云
+ * @Version 1.0.0
+ * @Date 2025-01-18 22:53
+ */
+public class TableGroupPicker {
+
+    private final TableGroup tableGroup;
+
+    private final Picker picker;
+
+    private final List<Field> targetFields;
+
+    public TableGroupPicker(TableGroup tableGroup) {
+        this.tableGroup = tableGroup;
+        this.picker = new Picker(tableGroup);
+        this.targetFields = picker.getTargetFields();
+    }
+
+    public TableGroup getTableGroup() {
+        return tableGroup;
+    }
+
+    public List<Map> pickTargetData(List<List<Object>> rows, List<Map> sourceMapList) {
+        return picker.pickTargetData(rows, sourceMapList);
+    }
+
+    public List<Field> getTargetFields() {
+        return targetFields;
+    }
+}

+ 3 - 7
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/connector/database/sqlbuilder/SqlBuilderQuery.java

@@ -42,13 +42,9 @@ public class SqlBuilderQuery extends AbstractSqlBuilder {
         Field field = null;
         for (int i = 0; i < size; i++) {
             field = fields.get(i);
-            if (field.isUnmodifiabled()) {
-                sql.append(field.getName());
-            } else {
-                sql.append(quotation);
-                sql.append(database.buildFieldName(field));
-                sql.append(quotation);
-            }
+            sql.append(quotation);
+            sql.append(database.buildFieldName(field));
+            sql.append(quotation);
 
             // "USERNAME" as "myName"
             if (StringUtil.isNotBlank(field.getLabelName())) {

+ 1 - 25
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/model/Field.java

@@ -36,11 +36,6 @@ public class Field {
      */
     private String labelName;
 
-    /**
-     * 是否系统字段
-     */
-    private boolean unmodifiabled;
-
     /**
      * 字段大小
      */
@@ -76,15 +71,6 @@ public class Field {
         this.ratio = ratio;
     }
 
-    public Field(String name, String typeName, int type, boolean pk, String labelName, boolean unmodifiabled) {
-        this.name = name;
-        this.typeName = typeName;
-        this.type = type;
-        this.pk = pk;
-        this.labelName = labelName;
-        this.unmodifiabled = unmodifiabled;
-    }
-
     public String getName() {
         return name;
     }
@@ -121,18 +107,8 @@ public class Field {
         return labelName;
     }
 
-    public Field setLabelName(String labelName) {
+    public void setLabelName(String labelName) {
         this.labelName = labelName;
-        return this;
-    }
-
-    public boolean isUnmodifiabled() {
-        return unmodifiabled;
-    }
-
-    public Field setUnmodifiabled(boolean unmodifiabled) {
-        this.unmodifiabled = unmodifiabled;
-        return this;
     }
 
     public int getColumnSize() {