life преди 1 година
родител
ревизия
02e9c35081
променени са 1 файла, в които са добавени 36 реда и са изтрити 0 реда
  1. 36 0
      dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/alter/AddStrategy.java

+ 36 - 0
dbsyncer-parser/src/main/java/org/dbsyncer/parser/ddl/alter/AddStrategy.java

@@ -3,6 +3,8 @@ package org.dbsyncer.parser.ddl.alter;
 import java.util.LinkedList;
 import java.util.List;
 import net.sf.jsqlparser.statement.alter.AlterExpression;
+import net.sf.jsqlparser.statement.create.table.Index;
+import net.sf.jsqlparser.statement.create.table.Index.ColumnParams;
 import org.dbsyncer.common.util.StringUtil;
 import org.dbsyncer.connector.config.DDLConfig;
 import org.dbsyncer.connector.model.Field;
@@ -18,6 +20,19 @@ public class AddStrategy implements ExpressionStrategy{
     @Override
     public void parse(AlterExpression expression, DDLConfig ddlConfig,
             List<FieldMapping> fieldMappingList) {
+        if (expression.getColDataTypeList() !=null){
+            parseAddColumn(expression,ddlConfig,fieldMappingList);
+        }
+        if (expression.getIndex() !=null){
+            parseAddIndex(expression,ddlConfig,fieldMappingList);
+        }
+    }
+
+    //解析增加列
+    //exampleSql: ALTER TABLE cost ADD duan INT after(before) `tmp`;
+    private void parseAddColumn(AlterExpression expression, DDLConfig ddlConfig,
+            List<FieldMapping> fieldMappingList){
+        //如果是增加列
         for (AlterExpression.ColumnDataType columnDataType : expression.getColDataTypeList()) {
             boolean findColumn = false;
             List<String> columnSpecs = new LinkedList<>();
@@ -45,4 +60,25 @@ public class AddStrategy implements ExpressionStrategy{
             ddlConfig.getAddFields().add(field);
         }
     }
+
+    /**
+     * 新增索引
+     * exampleSql: ALTER TABLE test_table add index name (tmp);
+     * @param expression
+     * @param ddlConfig
+     * @param fieldMappingList
+     */
+    private void parseAddIndex(AlterExpression expression, DDLConfig ddlConfig,
+            List<FieldMapping> fieldMappingList){
+        Index index = expression.getIndex();
+        List<ColumnParams> columnNames = index.getColumns();
+        List<ColumnParams> targetNames = new LinkedList<>();
+        for (ColumnParams columnParams : columnNames) {
+            FieldMapping fieldMapping = fieldMappingList.stream().filter(x->x.getSource().getName().equals(
+                    columnParams.getColumnName())).findFirst().get();
+            ColumnParams target =new ColumnParams(fieldMapping.getTarget().getName(),columnParams.getParams());
+            targetNames.add(target);
+        }
+        index.setColumns(targetNames);
+    }
 }