浏览代码

update meta

AE86 5 年之前
父节点
当前提交
4eaa621d78

+ 36 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/DqlMysqlConfigChecker.java

@@ -0,0 +1,36 @@
+package org.dbsyncer.biz.checker.impl.connector;
+
+import org.dbsyncer.biz.checker.ConnectorConfigChecker;
+import org.dbsyncer.connector.config.DatabaseConfig;
+import org.dbsyncer.parser.model.Connector;
+import org.springframework.stereotype.Component;
+import org.springframework.util.Assert;
+
+import java.util.Map;
+
+/**
+ * @author AE86
+ * @version 1.0.0
+ * @date 2020/1/8 15:17
+ */
+@Component
+public class DqlMysqlConfigChecker implements ConnectorConfigChecker {
+
+    @Override
+    public void modify(Connector connector, Map<String, String> params) {
+        String username = params.get("username");
+        String password = params.get("password");
+        String url = params.get("url");
+        String sql = params.get("sql");
+        Assert.hasText(username, "DqlMysqlConfigChecker modify username is empty.");
+        Assert.hasText(password, "DqlMysqlConfigChecker modify password is empty.");
+        Assert.hasText(url, "DqlMysqlConfigChecker modify url is empty.");
+        Assert.hasText(sql, "DqlMysqlConfigChecker modify sql is empty.");
+
+        DatabaseConfig config = (DatabaseConfig) connector.getConfig();
+        config.setUsername(username);
+        config.setPassword(password);
+        config.setUrl(url);
+        config.setSql(sql);
+    }
+}

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

@@ -81,6 +81,13 @@ public class TableGroupServiceImpl implements TableGroupService {
         Assert.notNull(tableGroup, "tableGroup can not be null.");
 
         manager.removeTableGroup(id);
+        Mapping mapping = manager.getMapping(tableGroup.getMappingId());
+        Assert.notNull(mapping, "mapping not exist.");
+
+        // 合并驱动公共字段
+        Table sTable = tableGroup.getSourceTable();
+        Table tTable = tableGroup.getTargetTable();
+        mergeMappingColumn(mapping, sTable.getColumn(), tTable.getColumn());
 
         return true;
     }
@@ -99,7 +106,7 @@ public class TableGroupServiceImpl implements TableGroupService {
 
     private Table getTable(String connectorId, String tableName) {
         MetaInfo metaInfo = manager.getMetaInfo(connectorId, tableName);
-        Assert.notNull(metaInfo, "metaInfo can not be null.");
+        Assert.notNull(metaInfo, "无法获取连接信息.");
         return new Table().setName(tableName).setColumn(metaInfo.getColumn());
     }
 
@@ -120,6 +127,8 @@ public class TableGroupServiceImpl implements TableGroupService {
     private void mergeMappingColumn(Mapping mapping, List<Field> sColumn, List<Field> tColumn) {
         mapping.setSourceColumn(pickCommonFields(mapping.getSourceColumn(), sColumn));
         mapping.setTargetColumn(pickCommonFields(mapping.getTargetColumn(), tColumn));
+        String json = JsonUtil.objToJson(mapping);
+        manager.editMapping(json);
     }
 
     private List<Field> pickCommonFields(List<Field> column, List<Field> target) {
@@ -130,8 +139,7 @@ public class TableGroupServiceImpl implements TableGroupService {
         Map<String, Boolean> map = new HashMap<>(column.size());
         column.forEach(f -> map.putIfAbsent(f.getName(), true));
         target.forEach(f -> {
-            Boolean exist = map.get(f.getName());
-            if(exist){
+            if(map.get(f.getName())){
                 list.add(f);
             }
         });

+ 35 - 1
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -16,6 +16,7 @@ import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
@@ -75,7 +76,7 @@ public abstract class AbstractDatabaseConnector implements Database {
             String metaSql = getMetaSql(cfg, tableName);
             metaInfo = DatabaseUtil.getMetaInfo(jdbcTemplate, metaSql);
         } catch (Exception e) {
-            logger.error("getMetaInfo failed", e.getMessage());
+            logger.error("getMetaInfo failed", e);
         } finally {
             // 释放连接
             this.close(jdbcTemplate);
@@ -219,6 +220,39 @@ public abstract class AbstractDatabaseConnector implements Database {
         }
     }
 
+    /**
+     * 获取DQL表信息
+     *
+     * @param config
+     * @return
+     */
+    protected List<String> getDqlTable(ConnectorConfig config) {
+        DatabaseConfig cfg = (DatabaseConfig) config;
+        return Arrays.asList(cfg.getSql());
+    }
+
+    /**
+     * 获取DQl元信息
+     *
+     * @param config
+     * @return
+     */
+    protected MetaInfo getDqlMetaInfo(ConnectorConfig config) {
+        DatabaseConfig cfg = (DatabaseConfig) config;
+        JdbcTemplate jdbcTemplate = null;
+        MetaInfo metaInfo = null;
+        try {
+            jdbcTemplate = getJdbcTemplate(cfg);
+            metaInfo = DatabaseUtil.getMetaInfo(jdbcTemplate, cfg.getSql());
+        } catch (Exception e) {
+            logger.error("getMetaInfo failed", e);
+        } finally {
+            // 释放连接
+            this.close(jdbcTemplate);
+        }
+        return metaInfo;
+    }
+
     /**
      * 根据过滤条件获取查询SQL
      *

+ 14 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/DQLMysqlConnector.java

@@ -1,9 +1,14 @@
 package org.dbsyncer.connector.sql;
 
+import org.dbsyncer.connector.config.ConnectorConfig;
 import org.dbsyncer.connector.config.DatabaseConfig;
+import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 
+import java.util.Arrays;
+import java.util.List;
+
 public final class DQLMysqlConnector extends AbstractDatabaseConnector {
 
     @Override
@@ -17,4 +22,13 @@ public final class DQLMysqlConnector extends AbstractDatabaseConnector {
         return querySQL + DatabaseConstant.MYSQL_PAGE_SQL;
     }
 
+    @Override
+    public List<String> getTable(ConnectorConfig config) {
+        return super.getDqlTable(config);
+    }
+
+    @Override
+    public MetaInfo getMetaInfo(ConnectorConfig config, String tableName) {
+        return super.getDqlMetaInfo(config);
+    }
 }

+ 14 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/DQLOracleConnector.java

@@ -1,9 +1,14 @@
 package org.dbsyncer.connector.sql;
 
+import org.dbsyncer.connector.config.ConnectorConfig;
 import org.dbsyncer.connector.config.DatabaseConfig;
+import org.dbsyncer.connector.config.MetaInfo;
 import org.dbsyncer.connector.constant.DatabaseConstant;
 import org.dbsyncer.connector.database.AbstractDatabaseConnector;
 
+import java.util.Arrays;
+import java.util.List;
+
 public final class DQLOracleConnector extends AbstractDatabaseConnector {
 
     @Override
@@ -17,4 +22,13 @@ public final class DQLOracleConnector extends AbstractDatabaseConnector {
         return DatabaseConstant.ORACLE_PAGE_SQL_START + querySQL + DatabaseConstant.ORACLE_PAGE_SQL_END;
     }
 
+    @Override
+    public List<String> getTable(ConnectorConfig config) {
+        return super.getDqlTable(config);
+    }
+
+    @Override
+    public MetaInfo getMetaInfo(ConnectorConfig config, String tableName) {
+        return super.getDqlMetaInfo(config);
+    }
 }

+ 1 - 1
dbsyncer-connector/src/main/java/org/dbsyncer/connector/util/DatabaseUtil.java

@@ -59,7 +59,7 @@ public abstract class DatabaseUtil {
         String[] columnNames = handler.getColumnNames();
         int[] columnTypes = handler.getColumnTypes();
         if(null == columnNames || null == columnTypes || columnNames.length != columnTypes.length){
-            throw new ConnectorException("Get metaInfo column error");
+            throw new ConnectorException("无法查询表字段信息.");
         }
         int len = columnNames.length;
         List<Field> fields = new ArrayList<>(len);

+ 4 - 5
dbsyncer-web/src/main/resources/templates/connector/addDqlMysql.html

@@ -6,18 +6,17 @@
     <div class="form-group">
         <label class="col-sm-2 control-label">帐号 <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-4">
-            <input class="form-control" name="username" type="text" maxlength="32" dbsyncer-valid="require"
-                   placeholder="root" />
+            <input class="form-control" name="username" type="text" maxlength="32" dbsyncer-valid="require" placeholder="root" th:value="${connector?.config?.username}"/>
         </div>
         <label class="col-sm-2 control-label">密码 <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-4 ">
-            <input class="form-control" name="password" type="password" maxlength="32" dbsyncer-valid="require" />
+            <input class="form-control" name="password" type="password" maxlength="32" dbsyncer-valid="require" th:value="${connector?.config?.password}"/>
         </div>
     </div>
     <div class="form-group">
         <label class="col-sm-2 control-label">SQL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
-            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10">SELECT T1.* FROM USER T1 </textarea>
+            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10">[[${connector?.config?.sql}]]</textarea>
         </div>
     </div>
     <div class="form-group">
@@ -28,7 +27,7 @@
     <div class="form-group">
         <label class="col-sm-2 control-label">URL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
-            <textarea name="url" class="form-control" maxlength="128" dbsyncer-valid="require" rows="5">jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF8&amp;useSSL=true</textarea>
+            <textarea name="url" class="form-control" maxlength="128" dbsyncer-valid="require" rows="5">[[${connector?.config?.url}]]</textarea>
         </div>
     </div>
     <div class="form-group">

+ 4 - 5
dbsyncer-web/src/main/resources/templates/connector/addDqlOracle.html

@@ -6,18 +6,17 @@
     <div class="form-group">
         <label class="col-sm-2 control-label">帐号 <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-4">
-            <input class="form-control" name="username" type="text" maxlength="32" dbsyncer-valid="require"
-                   placeholder="root" />
+            <input class="form-control" name="username" type="text" maxlength="32" dbsyncer-valid="require" placeholder="admin" th:value="${connector?.config?.username}"/>
         </div>
         <label class="col-sm-2 control-label">密码 <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-4 ">
-            <input class="form-control" name="password" type="password" maxlength="32" dbsyncer-valid="require" />
+            <input class="form-control" name="password" type="password" maxlength="32" dbsyncer-valid="require" th:value="${connector?.config?.password}"/>
         </div>
     </div>
     <div class="form-group">
         <label class="col-sm-2 control-label">SQL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
-            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10">SELECT T1.* FROM USER T1 </textarea>
+            <textarea id="sql" name="sql" class="form-control" maxlength="1024" dbsyncer-valid="require" rows="10">[[${connector?.config?.sql}]]</textarea>
         </div>
     </div>
     <div class="form-group">
@@ -28,7 +27,7 @@
     <div class="form-group">
         <label class="col-sm-2 control-label">URL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
-            <textarea name="url" class="form-control" maxlength="512" dbsyncer-valid="require" rows="5">jdbc:oracle:thin:@127.0.0.1:1521:ORCL</textarea>
+            <textarea name="url" class="form-control" maxlength="512" dbsyncer-valid="require" rows="5">[[${connector?.config?.url}]]</textarea>
         </div>
     </div>
     <div class="form-group">