浏览代码

优化ddl解析

穿云 2 月之前
父节点
当前提交
5cce7e9acd

+ 1 - 1
dbsyncer-common/src/main/java/org/dbsyncer/common/model/Result.java

@@ -18,7 +18,7 @@ public class Result<T> {
     /**
      * 错误日志
      */
-    private StringBuffer error = new StringBuffer();
+    private final StringBuffer error = new StringBuffer();
 
     /**
      * 驱动表映射关系ID

+ 4 - 23
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/DDLParser.java

@@ -3,32 +3,13 @@
  */
 package org.dbsyncer.parser.ddl;
 
-import org.dbsyncer.parser.model.FieldMapping;
+import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.sdk.config.DDLConfig;
-import org.dbsyncer.sdk.model.MetaInfo;
-
-import java.util.List;
+import org.dbsyncer.sdk.spi.ConnectorService;
 
 public interface DDLParser {
 
-    /**
-     * 解析DDL配置
-     *
-     * @param sql                   源表ALTER语句
-     * @param targetConnectorType   目标连接器类型
-     * @param targetTableName       目标表
-     * @param originalFieldMappings 字段映射关系
-     * @return
-     */
-    DDLConfig parseDDlConfig(String sql, String targetConnectorType, String targetTableName, List<FieldMapping> originalFieldMappings);
+    DDLConfig parseDDlConfig(ConnectorService connectorService, TableGroup tableGroup, String sql);
 
-    /**
-     * 刷新字段映射关系(根据原来的映射关系和更改的字段进行新关系的映射组合)
-     *
-     * @param originalFieldMappings
-     * @param originMetaInfo
-     * @param targetMetaInfo
-     * @param targetDDLConfig
-     */
-    List<FieldMapping> refreshFiledMappings(List<FieldMapping> originalFieldMappings, MetaInfo originMetaInfo, MetaInfo targetMetaInfo, DDLConfig targetDDLConfig);
+    void refreshFiledMappings(TableGroup tableGroup, DDLConfig targetDDLConfig);
 }

+ 8 - 20
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/alter/AddStrategy.java

@@ -8,7 +8,6 @@ import org.dbsyncer.parser.ddl.AlterStrategy;
 import org.dbsyncer.parser.model.FieldMapping;
 import org.dbsyncer.sdk.config.DDLConfig;
 import org.dbsyncer.sdk.enums.DDLOperationEnum;
-import org.dbsyncer.sdk.model.Field;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -21,8 +20,7 @@ import java.util.List;
 public class AddStrategy implements AlterStrategy {
 
     @Override
-    public void parse(AlterExpression expression, DDLConfig ddlConfig,
-            List<FieldMapping> originFiledMapping) {
+    public void parse(AlterExpression expression, DDLConfig ddlConfig, List<FieldMapping> originFiledMapping) {
         if (expression.getColDataTypeList() != null) {
             parseAddColumn(expression, ddlConfig, originFiledMapping);
         }
@@ -34,8 +32,7 @@ public class AddStrategy implements AlterStrategy {
 
     //解析增加列
     //exampleSql: ALTER TABLE cost ADD duan INT after(before) `tmp`;
-    private void parseAddColumn(AlterExpression expression, DDLConfig ddlConfig,
-            List<FieldMapping> originFiledMapping) {
+    private void parseAddColumn(AlterExpression expression, DDLConfig ddlConfig, List<FieldMapping> originFiledMapping) {
         //如果是增加列
         for (AlterExpression.ColumnDataType columnDataType : expression.getColDataTypeList()) {
             boolean findColumn = false;
@@ -46,16 +43,13 @@ public class AddStrategy implements AlterStrategy {
                 if (findColumn) {
                     //对before(after)字段进行映射
                     String finalSpe = spe;
-                    FieldMapping fieldMapping = originFiledMapping.stream()
-                            .filter(x -> StringUtil.equals(x.getSource().getName(), finalSpe))
-                            .findFirst().get();
+                    FieldMapping fieldMapping = originFiledMapping.stream().filter(x -> StringUtil.equals(x.getSource().getName(), finalSpe)).findFirst().get();
                     columnSpecs.add(fieldMapping.getTarget().getName());
                     findColumn = false;
                     continue;
                 }
 
-                if (StringUtil.equalsIgnoreCase(spe, "before") || StringUtil.equalsIgnoreCase(spe,
-                        "after")) {
+                if (StringUtil.equalsIgnoreCase(spe, "before") || StringUtil.equalsIgnoreCase(spe, "after")) {
                     findColumn = true;
                 }
                 columnSpecs.add(spe);
@@ -64,9 +58,7 @@ public class AddStrategy implements AlterStrategy {
             String columName = columnDataType.getColumnName();
             columName = StringUtil.replace(columName, StringUtil.BACK_QUOTE, StringUtil.EMPTY);
             columName = StringUtil.replace(columName, StringUtil.DOUBLE_QUOTATION, StringUtil.EMPTY);
-            Field field = new Field(columName, columnDataType.getColDataType().getDataType(),
-                    0);//感觉不需要都行,只需要名称,后续可以自己刷新
-            ddlConfig.getAddFields().add(field);
+            ddlConfig.getAddFieldNames().add(columName);
         }
 
     }
@@ -77,17 +69,13 @@ public class AddStrategy implements AlterStrategy {
      * @param expression
      * @param originFiledMapping
      */
-    private void parseAddIndex(AlterExpression expression,
-            List<FieldMapping> originFiledMapping) {
+    private void parseAddIndex(AlterExpression expression, List<FieldMapping> originFiledMapping) {
         Index index = expression.getIndex();
         List<ColumnParams> columnNames = index.getColumns();
         List<ColumnParams> targetNames = new LinkedList<>();
         for (ColumnParams columnParams : columnNames) {
-            FieldMapping fieldMapping = originFiledMapping.stream()
-                    .filter(x -> StringUtil.equals(x.getSource().getName(),
-                            columnParams.getColumnName())).findFirst().get();
-            ColumnParams target = new ColumnParams(fieldMapping.getTarget().getName(),
-                    columnParams.getParams());
+            FieldMapping fieldMapping = originFiledMapping.stream().filter(x -> StringUtil.equals(x.getSource().getName(), columnParams.getColumnName())).findFirst().get();
+            ColumnParams target = new ColumnParams(fieldMapping.getTarget().getName(), columnParams.getParams());
             targetNames.add(target);
         }
         index.setColumns(targetNames);

+ 4 - 13
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/alter/DropStrategy.java

@@ -6,7 +6,6 @@ import org.dbsyncer.parser.ddl.AlterStrategy;
 import org.dbsyncer.parser.model.FieldMapping;
 import org.dbsyncer.sdk.config.DDLConfig;
 import org.dbsyncer.sdk.enums.DDLOperationEnum;
-import org.dbsyncer.sdk.model.Field;
 
 import java.util.List;
 
@@ -20,7 +19,7 @@ public class DropStrategy implements AlterStrategy {
     @Override
     public void parse(AlterExpression expression, DDLConfig ddlConfig, List<FieldMapping> originalFieldMappings) {
         if (expression.getColumnName() != null) {
-            dropColumn(expression, ddlConfig, originalFieldMappings);
+            dropColumn(expression, ddlConfig);
         }
         if (expression.getIndex() != null) {
             dropIndex(expression, originalFieldMappings);
@@ -33,19 +32,11 @@ public class DropStrategy implements AlterStrategy {
      *
      * @param expression
      * @param ddlConfig
-     * @param originalFieldMappings
      */
-    private void dropColumn(AlterExpression expression, DDLConfig ddlConfig, List<FieldMapping> originalFieldMappings) {
+    private void dropColumn(AlterExpression expression, DDLConfig ddlConfig) {
         String columnName = StringUtil.replace(expression.getColumnName(), StringUtil.BACK_QUOTE, StringUtil.EMPTY);
-        columnName = StringUtil.replace(columnName,StringUtil.DOUBLE_QUOTATION,StringUtil.EMPTY);
-        Field field = new Field(columnName, null, 0);
-        //需要把列替换成目标的列名
-        String finalColumnName = columnName;
-        originalFieldMappings.stream()
-                .filter(x -> StringUtil.equals(x.getSource().getName(), finalColumnName)).findFirst()
-                .ifPresent(fieldMapping -> expression.setColumnName(fieldMapping.getTarget().getName()));
-        //加入还是原名
-        ddlConfig.getRemoveFields().add(field);
+        columnName = StringUtil.replace(columnName, StringUtil.DOUBLE_QUOTATION, StringUtil.EMPTY);
+        ddlConfig.getRemoveFieldNames().add(columnName);
     }
 
     /**

+ 1 - 1
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/alter/ModifyStrategy.java

@@ -23,7 +23,7 @@ public class ModifyStrategy implements AlterStrategy {
         //先查找到当前的表和目标的表对应的字段
         for (AlterExpression.ColumnDataType columnDataType : expression.getColDataTypeList()) {
             String columnName = StringUtil.replace(columnDataType.getColumnName(), StringUtil.BACK_QUOTE, StringUtil.EMPTY);
-            columnName =StringUtil.replace(columnName,StringUtil.DOUBLE_QUOTATION,StringUtil.EMPTY);
+            columnName = StringUtil.replace(columnName, StringUtil.DOUBLE_QUOTATION, StringUtil.EMPTY);
             for (FieldMapping fieldMapping : originalFieldMappings) {
                 if (StringUtil.equals(fieldMapping.getSource().getName(), columnName)) {
                     //TODO life 找到目标的表名,先是alter进行属性替换,然后config记录新的

+ 77 - 49
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/impl/DDLParserImpl.java

@@ -9,10 +9,9 @@ import net.sf.jsqlparser.statement.Statement;
 import net.sf.jsqlparser.statement.alter.Alter;
 import net.sf.jsqlparser.statement.alter.AlterExpression;
 import net.sf.jsqlparser.statement.alter.AlterOperation;
+import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.connector.base.ConnectorFactory;
-import org.dbsyncer.sdk.config.DDLConfig;
-import org.dbsyncer.sdk.connector.database.Database;
 import org.dbsyncer.parser.ddl.AlterStrategy;
 import org.dbsyncer.parser.ddl.DDLParser;
 import org.dbsyncer.parser.ddl.alter.AddStrategy;
@@ -20,9 +19,10 @@ import org.dbsyncer.parser.ddl.alter.ChangeStrategy;
 import org.dbsyncer.parser.ddl.alter.DropStrategy;
 import org.dbsyncer.parser.ddl.alter.ModifyStrategy;
 import org.dbsyncer.parser.model.FieldMapping;
-import org.dbsyncer.sdk.enums.DDLOperationEnum;
+import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.sdk.config.DDLConfig;
+import org.dbsyncer.sdk.connector.database.Database;
 import org.dbsyncer.sdk.model.Field;
-import org.dbsyncer.sdk.model.MetaInfo;
 import org.dbsyncer.sdk.spi.ConnectorService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,10 +30,11 @@ import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.Resource;
-import java.util.LinkedList;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
 
 /**
  * alter情况
@@ -65,25 +66,24 @@ public class DDLParserImpl implements DDLParser {
     }
 
     @Override
-    public DDLConfig parseDDlConfig(String sql, String targetConnectorType, String targetTableName, List<FieldMapping> originalFieldMappings) {
-        ConnectorService connectorService = connectorFactory.getConnectorService(targetConnectorType);
+    public DDLConfig parseDDlConfig(ConnectorService connectorService, TableGroup tableGroup, String sql) {
         // 替换为目标库执行SQL
         DDLConfig ddlConfig = new DDLConfig();
         try {
             Statement statement = CCJSqlParserUtil.parse(sql);
-            if (statement instanceof Alter) {
+            if (statement instanceof Alter && connectorService instanceof Database) {
                 Alter alter = (Alter) statement;
                 Database database = (Database) connectorService;
                 String quotation = database.buildSqlWithQuotation();
                 // 替换成目标表名
-                alter.getTable().setName(new StringBuilder(quotation).append(targetTableName).append(quotation).toString());
+                alter.getTable().setName(quotation + tableGroup.getTargetTable().getName() + quotation);
                 ddlConfig.setSql(alter.toString());
                 for (AlterExpression expression : alter.getAlterExpressions()) {
-                    if (STRATEGIES.containsKey(expression.getOperation())) {
-                        STRATEGIES.get(expression.getOperation()).parse(expression, ddlConfig, originalFieldMappings);
-                    }
+                    STRATEGIES.computeIfPresent(expression.getOperation(), (k, strategy) -> {
+                        strategy.parse(expression, ddlConfig, tableGroup.getFieldMapping());
+                        return strategy;
+                    });
                 }
-                ddlConfig.setSql(alter.toString());
             }
         } catch (JSQLParserException e) {
             logger.error(e.getMessage(), e);
@@ -92,50 +92,78 @@ public class DDLParserImpl implements DDLParser {
     }
 
     @Override
-    public List<FieldMapping> refreshFiledMappings(List<FieldMapping> originalFieldMappings, MetaInfo originMetaInfo, MetaInfo targetMetaInfo, DDLConfig targetDDLConfig) {
-        List<FieldMapping> newTargetMappingList = new LinkedList<>();
-        //处理映射关系
-        for (FieldMapping fieldMapping : originalFieldMappings) {
-            String fieldSourceName = fieldMapping.getSource().getName();
-            String filedTargetName = fieldMapping.getTarget().getName();
-            //找到更改的源表的名称,也就是找到了对应的映射关系,这样就可以从源表找到更改后的名称进行对应,
-            if (fieldSourceName.equals(targetDDLConfig.getSourceColumnName())) {
-                // 说明字段名没有改变,只是改变了属性
-                if (targetDDLConfig.getDdlOperationEnum() == DDLOperationEnum.ALTER_MODIFY) {
-                    Field source = originMetaInfo.getColumn().stream().filter(x -> StringUtil.equals(x.getName(), fieldSourceName)).findFirst().get();
-                    Field target = targetMetaInfo.getColumn().stream().filter(x -> StringUtil.equals(x.getName(), filedTargetName)).findFirst().get();
-                    //替换
-                    newTargetMappingList.add(new FieldMapping(source, target));
-                    continue;
-                } else if (targetDDLConfig.getDdlOperationEnum() == DDLOperationEnum.ALTER_CHANGE) {
-                    Field source = originMetaInfo.getColumn().stream().filter(x -> StringUtil.equals(x.getName(), targetDDLConfig.getChangedColumnName())).findFirst().get();
-                    Field target = targetMetaInfo.getColumn().stream().filter(x -> StringUtil.equals(x.getName(), targetDDLConfig.getChangedColumnName())).findFirst().get();
-                    //替换
-                    newTargetMappingList.add(new FieldMapping(source, target));
-                    continue;
-                }
+    public void refreshFiledMappings(TableGroup tableGroup, DDLConfig targetDDLConfig) {
+        switch (targetDDLConfig.getDdlOperationEnum()) {
+            case ALTER_ADD:
+                appendFieldMappings(tableGroup, targetDDLConfig.getAddFieldNames());
+                break;
+            case ALTER_DROP:
+                removeFieldMappings(tableGroup, targetDDLConfig.getRemoveFieldNames());
+                break;
+            case ALTER_CHANGE:
+                renameFieldMapping(tableGroup, targetDDLConfig.getSourceColumnName(), targetDDLConfig.getChangedColumnName());
+                break;
+            case ALTER_MODIFY:
+                // 可以忽略,仅修改字段属性,名称未变
+                break;
+            default:
+                break;
+        }
+    }
+
+    private void renameFieldMapping(TableGroup tableGroup, String oldFieldName, String newFieldName) {
+        Map<String, Field> sourceFiledMap = tableGroup.getSourceTable().getColumn().stream().collect(Collectors.toMap(Field::getName, filed -> filed));
+        for (FieldMapping fieldMapping : tableGroup.getFieldMapping()) {
+            Field source = fieldMapping.getSource();
+            if (source != null && StringUtil.equals(oldFieldName, source.getName())) {
+                source.setName(newFieldName);
+                sourceFiledMap.computeIfPresent(newFieldName, (k, field) -> {
+                    fieldMapping.setSource(field);
+                    return field;
+                });
             }
-            newTargetMappingList.add(fieldMapping);
         }
+    }
 
-        if (DDLOperationEnum.ALTER_ADD == targetDDLConfig.getDdlOperationEnum()) {
-            //处理新增的映射关系
-            List<Field> addFields = targetDDLConfig.getAddFields();
-            for (Field field : addFields) {
-                Field source = originMetaInfo.getColumn().stream().filter(x -> StringUtil.equals(x.getName(), field.getName())).findFirst().get();
-                Field target = targetMetaInfo.getColumn().stream().filter(x -> StringUtil.equals(x.getName(), field.getName())).findFirst().get();
-                newTargetMappingList.add(new FieldMapping(source, target));
+    private void removeFieldMappings(TableGroup tableGroup, List<String> removeFieldNames) {
+        Iterator<FieldMapping> iterator = tableGroup.getFieldMapping().iterator();
+        while (iterator.hasNext()) {
+            FieldMapping fieldMapping = iterator.next();
+            Field source = fieldMapping.getSource();
+            if (source != null && removeFieldNames.contains(source.getName())) {
+                iterator.remove();
             }
         }
+    }
 
-        if (DDLOperationEnum.ALTER_DROP == targetDDLConfig.getDdlOperationEnum()) {
-            //处理删除字段的映射关系
-            List<Field> removeFields = targetDDLConfig.getRemoveFields();
-            for (Field field : removeFields) {
-                newTargetMappingList.removeIf(x -> StringUtil.equals(x.getSource().getName(), field.getName()));
+    private void appendFieldMappings(TableGroup tableGroup, List<String> addFieldNames) {
+        List<FieldMapping> fieldMappings = tableGroup.getFieldMapping();
+        Iterator<String> iterator = addFieldNames.iterator();
+        while (iterator.hasNext()) {
+            String name = iterator.next();
+            for (FieldMapping fieldMapping : fieldMappings) {
+                Field source = fieldMapping.getSource();
+                Field target = fieldMapping.getTarget();
+                // 检查重复字段
+                if (source != null && target != null && StringUtil.equals(source.getName(), name) && StringUtil.equals(target.getName(), name)) {
+                    iterator.remove();
+                }
             }
         }
-        return newTargetMappingList;
+        if (CollectionUtils.isEmpty(addFieldNames)) {
+            return;
+        }
+
+        Map<String, Field> sourceFiledMap = tableGroup.getSourceTable().getColumn().stream().collect(Collectors.toMap(Field::getName, filed -> filed));
+        Map<String, Field> targetFiledMap = tableGroup.getTargetTable().getColumn().stream().collect(Collectors.toMap(Field::getName, filed -> filed));
+        if (CollectionUtils.isEmpty(sourceFiledMap) || CollectionUtils.isEmpty(targetFiledMap)) {
+            return;
+        }
+        addFieldNames.forEach(newFieldName -> {
+            if (sourceFiledMap.containsKey(newFieldName) && targetFiledMap.containsKey(newFieldName)) {
+                fieldMappings.add(new FieldMapping(sourceFiledMap.get(newFieldName), targetFiledMap.get(newFieldName)));
+            }
+        });
     }
 
 }

+ 29 - 31
dbsyncer-parser/src/main/java/org/dbsyncer/parser/flush/impl/GeneralBufferActuator.java

@@ -229,42 +229,40 @@ public class GeneralBufferActuator extends AbstractBufferActuator<WriterRequest,
             String sConnType = sConnConfig.getConnectorType();
             String tConnType = tConnConfig.getConnectorType();
             // 0.生成目标表执行SQL(暂支持同源)
-            if (StringUtil.equals(sConnType, tConnType)) {
-                // 1.转换为目标SQL,执行到目标库
-                String targetTableName = tableGroup.getTargetTable().getName();
-                List<FieldMapping> originalFieldMappings = tableGroup.getFieldMapping();
-                DDLConfig targetDDLConfig = ddlParser.parseDDlConfig(response.getSql(), tConnType, targetTableName, originalFieldMappings);
-                ConnectorInstance tConnectorInstance = connectorFactory.connect(tConnConfig);
-                Result result = connectorFactory.writerDDL(tConnectorInstance, targetDDLConfig);
-                result.setTableGroupId(tableGroup.getId());
-                result.setTargetTableGroupName(targetTableName);
-
-                // 2.获取目标表最新的属性字段
-                MetaInfo targetMetaInfo = parserComponent.getMetaInfo(mapping.getTargetConnectorId(), targetTableName);
-                MetaInfo originMetaInfo = parserComponent.getMetaInfo(mapping.getSourceConnectorId(), tableGroup.getSourceTable().getName());
-
-                // 3.更新表字段映射(根据保留的更改的属性,进行更改)
-                tableGroup.getSourceTable().setColumn(originMetaInfo.getColumn());
-                tableGroup.getTargetTable().setColumn(targetMetaInfo.getColumn());
-                tableGroup.setFieldMapping(ddlParser.refreshFiledMappings(originalFieldMappings, originMetaInfo, targetMetaInfo, targetDDLConfig));
-
-                // 4.更新执行命令
-                Map<String, String> commands = parserComponent.getCommand(mapping, tableGroup);
-                tableGroup.setCommand(commands);
-
-                // 5.持久化存储 & 更新缓存配置
-                profileComponent.editTableGroup(tableGroup);
-
-                // 6.发布更新事件,持久化增量数据
-                applicationContext.publishEvent(new RefreshOffsetEvent(applicationContext, response.getChangedOffset()));
-                flushStrategy.flushIncrementData(mapping.getMetaId(), result, response.getEvent());
+            if (!StringUtil.equals(sConnType, tConnType)) {
+                logger.warn("暂只支持数据库同源并且是关系性解析DDL");
                 return;
             }
+            // 1.转换为目标SQL,执行到目标库
+            String targetTableName = tableGroup.getTargetTable().getName();
+            ConnectorService connectorService = connectorFactory.getConnectorService(tConnType);
+            DDLConfig targetDDLConfig = ddlParser.parseDDlConfig(connectorService, tableGroup, response.getSql());
+            ConnectorInstance tConnectorInstance = connectorFactory.connect(tConnConfig);
+            Result result = connectorFactory.writerDDL(tConnectorInstance, targetDDLConfig);
+            result.setTableGroupId(tableGroup.getId());
+            result.setTargetTableGroupName(targetTableName);
+
+            // 2.获取目标表最新的属性字段
+            MetaInfo sourceMetaInfo = parserComponent.getMetaInfo(mapping.getSourceConnectorId(), tableGroup.getSourceTable().getName());
+            MetaInfo targetMetaInfo = parserComponent.getMetaInfo(mapping.getTargetConnectorId(), targetTableName);
+
+            // 3.更新表字段映射(根据保留的更改的属性,进行更改)
+            tableGroup.getSourceTable().setColumn(sourceMetaInfo.getColumn());
+            tableGroup.getTargetTable().setColumn(targetMetaInfo.getColumn());
+            ddlParser.refreshFiledMappings(tableGroup, targetDDLConfig);
+
+            // 4.更新执行命令
+            tableGroup.setCommand(parserComponent.getCommand(mapping, tableGroup));
+
+            // 5.持久化存储 & 更新缓存配置
+            profileComponent.editTableGroup(tableGroup);
+
+            // 6.发布更新事件,持久化增量数据
+            applicationContext.publishEvent(new RefreshOffsetEvent(applicationContext, response.getChangedOffset()));
+            flushStrategy.flushIncrementData(mapping.getMetaId(), result, response.getEvent());
         } catch (Exception e) {
             logger.error(e.getMessage(), e);
-            return;
         }
-        logger.warn("暂只支持数据库同源并且是关系性解析DDL");
     }
 
     /**

+ 10 - 11
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/config/DDLConfig.java

@@ -1,7 +1,6 @@
 package org.dbsyncer.sdk.config;
 
 import org.dbsyncer.sdk.enums.DDLOperationEnum;
-import org.dbsyncer.sdk.model.Field;
 
 import java.util.LinkedList;
 import java.util.List;
@@ -14,9 +13,9 @@ public class DDLConfig {
 
     private DDLOperationEnum ddlOperationEnum;
 
-    private List<Field> addFields = new LinkedList<>();
+    private List<String> addFieldNames = new LinkedList<>();
 
-    private List<Field> removeFields = new LinkedList<>();
+    private List<String> removeFieldNames = new LinkedList<>();
 
     //记录源表的源字段名称
     private String sourceColumnName;
@@ -32,20 +31,20 @@ public class DDLConfig {
         this.sql = sql;
     }
 
-    public List<Field> getAddFields() {
-        return addFields;
+    public List<String> getAddFieldNames() {
+        return addFieldNames;
     }
 
-    public void setAddFields(List<Field> addFields) {
-        this.addFields = addFields;
+    public void setAddFieldNames(List<String> addFieldNames) {
+        this.addFieldNames = addFieldNames;
     }
 
-    public List<Field> getRemoveFields() {
-        return removeFields;
+    public List<String> getRemoveFieldNames() {
+        return removeFieldNames;
     }
 
-    public void setRemoveFields(List<Field> removeFields) {
-        this.removeFields = removeFields;
+    public void setRemoveFieldNames(List<String> removeFieldNames) {
+        this.removeFieldNames = removeFieldNames;
     }
 
     public String getSourceColumnName() {