Browse Source

Merge remote-tracking branch 'remotes/origin/master' into v_1.2.5_dev

AE86 1 year ago
parent
commit
9a70e8554e

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

@@ -34,7 +34,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> origionFiledMapping) {
+            List<FieldMapping> originFiledMapping) {
         //如果是增加列
         for (AlterExpression.ColumnDataType columnDataType : expression.getColDataTypeList()) {
             boolean findColumn = false;
@@ -44,7 +44,7 @@ public class AddStrategy implements AlterStrategy {
                 if (findColumn) {
                     //对before(after)字段进行映射
                     String finalSpe = spe;
-                    FieldMapping fieldMapping = origionFiledMapping.stream()
+                    FieldMapping fieldMapping = originFiledMapping.stream()
                             .filter(x -> StringUtil.equals(x.getSource().getName(), finalSpe))
                             .findFirst().get();
                     columnSpecs.add(fieldMapping.getTarget().getName());
@@ -72,15 +72,15 @@ public class AddStrategy implements AlterStrategy {
      * 新增索引 exampleSql: ALTER TABLE test_table add index name (tmp);
      *
      * @param expression
-     * @param fieldMappingList
+     * @param originFiledMapping
      */
     private void parseAddIndex(AlterExpression expression,
-            List<FieldMapping> fieldMappingList) {
+            List<FieldMapping> originFiledMapping) {
         Index index = expression.getIndex();
         List<ColumnParams> columnNames = index.getColumns();
         List<ColumnParams> targetNames = new LinkedList<>();
         for (ColumnParams columnParams : columnNames) {
-            FieldMapping fieldMapping = fieldMappingList.stream()
+            FieldMapping fieldMapping = originFiledMapping.stream()
                     .filter(x -> StringUtil.equals(x.getSource().getName(),
                             columnParams.getColumnName())).findFirst().get();
             ColumnParams target = new ColumnParams(fieldMapping.getTarget().getName(),

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

@@ -1,6 +1,9 @@
 package org.dbsyncer.parser.ddl.alter;
 
+import java.util.LinkedList;
 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.enums.DDLOperationEnum;
@@ -12,7 +15,7 @@ import java.util.List;
 
 /**
  * 解析drop
- * example: ALTER TABLE test_table DROP dis;
+
  *
  * @author life
  */
@@ -20,13 +23,49 @@ public class DropStrategy implements AlterStrategy {
 
     @Override
     public void parse(AlterExpression expression, DDLConfig ddlConfig, List<FieldMapping> originalFieldMappings) {
+        if (expression.getColumnName() !=null){
+           dropColumn(expression,ddlConfig,originalFieldMappings);
+        }
+        if (expression.getIndex() !=null){
+            dropIndex(expression,originalFieldMappings);
+        }
+        ddlConfig.setDdlOperationEnum(DDLOperationEnum.ALTER_DROP);
+    }
+
+    /**
+     *  example: ALTER TABLE test_table DROP dis;
+     * @param expression
+     * @param ddlConfig
+     * @param originalFieldMappings
+     */
+    private void dropColumn(AlterExpression expression, DDLConfig ddlConfig, List<FieldMapping> originalFieldMappings){
         String columnName = StringUtil.replace(expression.getColumnName(), "`", "");
         Field field = new Field(columnName, null, 0);
         //需要把列替换成目标的列名
-        originalFieldMappings.stream().filter(x -> StringUtil.equals(x.getSource().getName(), columnName)).findFirst().ifPresent(
-                fieldMapping -> expression.setColumnName(fieldMapping.getTarget().getName()));
+        originalFieldMappings.stream()
+                .filter(x -> StringUtil.equals(x.getSource().getName(), columnName)).findFirst()
+                .ifPresent(fieldMapping -> expression.setColumnName(fieldMapping.getTarget().getName()));
         //加入还是原名
         ddlConfig.getRemoveFields().add(field);
-        ddlConfig.setDdlOperationEnum(DDLOperationEnum.ALTER_DROP);
+    }
+
+    /**
+     * 貌似不需要做什么,我们目前没有字段分索引,再考虑
+     *  * example: ALTER TABLE test_table drop index name;
+     * @param expression
+     * @param originalFieldMappings
+     */
+    private void dropIndex(AlterExpression expression, List<FieldMapping> originalFieldMappings){
+//        Index index = expression.getIndex();
+//        String names= index.getName();
+//        String[] nameList = StringUtil.split(names,".");
+//        List<String> targetNameList = new LinkedList<>();
+//        for (String name:nameList) {
+//            FieldMapping fieldMapping = originalFieldMappings.stream()
+//                    .filter(x -> StringUtil.equals(x.getSource().getName(),
+//                            name)).findFirst().get();
+//            targetNameList.add(fieldMapping.getTarget().getName());
+//        }
+//        index.setName(targetNameList);
     }
 }