瀏覽代碼

改造rowid

AE86 4 年之前
父節點
當前提交
1d026d073d

+ 3 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/ConnectorConfigChecker.java

@@ -3,6 +3,7 @@ package org.dbsyncer.biz.checker;
 import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.parser.model.Connector;
 import org.dbsyncer.parser.model.Mapping;
+import org.dbsyncer.parser.model.TableGroup;
 
 import java.util.List;
 import java.util.Map;
@@ -18,10 +19,11 @@ public interface ConnectorConfigChecker {
      * 设置默认字段
      *
      * @param mapping
+     * @param tableGroup
      * @param column
      * @param isSourceTable
      */
-    default void updateFields(Mapping mapping, List<Field> column, boolean isSourceTable) {}
+    default void updateFields(Mapping mapping, TableGroup tableGroup, List<Field> column, boolean isSourceTable) {}
 
     /**
      * 修改配置

+ 27 - 10
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/OracleConfigChecker.java

@@ -1,8 +1,9 @@
 package org.dbsyncer.biz.checker.impl.connector;
 
-import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.connector.config.Field;
+import org.dbsyncer.parser.model.FieldMapping;
 import org.dbsyncer.parser.model.Mapping;
+import org.dbsyncer.parser.model.TableGroup;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
@@ -16,30 +17,46 @@ import java.util.List;
 @Component
 public class OracleConfigChecker extends AbstractDataBaseConfigChecker {
 
+    /**
+     * 默认ROWID列名称
+     */
+    private static final String ROW_ID_NAME = "DBSYNCER_ROWID";
+
     @Override
-    public void updateFields(Mapping mapping, List<Field> column, boolean isSourceTable) {
-        String rowId = "DBSYNCER_ROWID";
+    public void updateFields(Mapping mapping, TableGroup tableGroup, List<Field> column, boolean isSourceTable) {
+        // TODO mapping.enableRowId
+        boolean enableRowId = false;
+        if(!enableRowId){
+            return;
+        }
 
         // TODO source   Oralce >> Oracle   Oralce >> Mysql   Mysql >> Oracle
-        if(isSourceTable) {
-            String rowIdName = rowId;
+        if (isSourceTable) {
             List<Field> list = new ArrayList<>();
-            list.add(new Field(rowIdName, "VARCHAR2",12, CollectionUtils.isEmpty(column)));
+            list.add(getSourceField());
             list.addAll(column);
             column.clear();
             column.addAll(list);
             return;
         }
 
-        // mapping 配置全局目标源ROWID名称
         // Target
+        // TODO mapping.rowIdName
+        String rowIdName = "RID";
         // Oracle 默认加上ROWID名称,设置为唯一主键
-        String rowIdName = rowId;
-        List<Field> list = new ArrayList<>();
-        list.add(new Field(rowIdName, "VARCHAR2",12, true));
         column.parallelStream().forEach(f -> f.setPk(false));
+        Field targetField = new Field(rowIdName, "VARCHAR2", 12, true);
+        List<Field> list = new ArrayList<>();
+        list.add(targetField);
         list.addAll(column);
         column.clear();
         column.addAll(list);
+
+        // 添加默认ROWID映射关系
+        tableGroup.getFieldMapping().add(new FieldMapping(getSourceField(), targetField));
+    }
+
+    private Field getSourceField() {
+        return new Field(ROW_ID_NAME, "VARCHAR2", 12, false, true);
     }
 }

+ 6 - 5
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -61,11 +61,12 @@ public class TableGroupChecker extends AbstractChecker {
 
         // 获取连接器信息
         TableGroup tableGroup = new TableGroup();
+        tableGroup.setFieldMapping(new ArrayList<>());
         tableGroup.setName(ConfigConstant.TABLE_GROUP);
         tableGroup.setType(ConfigConstant.TABLE_GROUP);
         tableGroup.setMappingId(mappingId);
-        tableGroup.setSourceTable(getTable(mapping, sourceTable, true));
-        tableGroup.setTargetTable(getTable(mapping, targetTable, false));
+        tableGroup.setSourceTable(getTable(mapping, tableGroup, sourceTable, true));
+        tableGroup.setTargetTable(getTable(mapping, tableGroup, targetTable, false));
 
         // 修改基本配置
         this.modifyConfigModel(tableGroup, params);
@@ -117,7 +118,7 @@ public class TableGroupChecker extends AbstractChecker {
         tableGroup.getSourceTable().setCount(count);
     }
 
-    private Table getTable(Mapping mapping, String tableName, boolean isSourceTable) {
+    private Table getTable(Mapping mapping, TableGroup tableGroup, String tableName, boolean isSourceTable) {
         String connectorId = isSourceTable ? mapping.getSourceConnectorId() : mapping.getTargetConnectorId();
         MetaInfo metaInfo = manager.getMetaInfo(connectorId, tableName);
         Assert.notNull(metaInfo, "无法获取连接器表信息.");
@@ -127,7 +128,7 @@ public class TableGroupChecker extends AbstractChecker {
         ConnectorConfigChecker checker = map.get(type);
         Assert.notNull(checker, "Checker can not be null.");
         // TODO 暂时实现
-        //checker.updateFields(mapping, metaInfo.getColumn(), isSourceTable);
+        checker.updateFields(mapping, tableGroup, metaInfo.getColumn(), isSourceTable);
         return new Table().setName(tableName).setColumn(metaInfo.getColumn());
     }
 
@@ -167,7 +168,7 @@ public class TableGroupChecker extends AbstractChecker {
         if (!CollectionUtils.isEmpty(k1)) {
             k1.forEach(k -> fields.add(new FieldMapping(m1.get(k), m2.get(k))));
         }
-        tableGroup.setFieldMapping(fields);
+        tableGroup.getFieldMapping().addAll(fields);
     }
 
     private void shuffleColumn(List<Field> col, List<String> key, Map<String, Field> map) {

+ 8 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/config/Field.java

@@ -54,6 +54,14 @@ public class Field {
         this.pk = pk;
     }
 
+    public Field(String name, String typeName, int type, boolean pk, boolean sourceTable) {
+        this.name = name;
+        this.typeName = typeName;
+        this.type = type;
+        this.pk = pk;
+        this.sourceTable = sourceTable;
+    }
+
     public String getName() {
         return name;
     }