Jelajahi Sumber

Merge remote-tracking branch 'origin/V_1.0.0_Beta' into yjwang

yjwang 3 tahun lalu
induk
melakukan
c1d935b8ae

+ 3 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/connector/AbstractDataBaseConfigChecker.java

@@ -33,10 +33,13 @@ public abstract class AbstractDataBaseConfigChecker implements ConnectorConfigCh
     protected void modifyDql(DatabaseConfig connectorConfig, Map<String, String> params) {
         String sql = params.get("sql");
         String table = params.get("table");
+        String primaryKey = params.get("primaryKey");
         Assert.hasText(sql, "Sql is empty.");
         Assert.hasText(table, "Table is empty.");
+        Assert.hasText(primaryKey, "PrimaryKey is empty.");
         connectorConfig.setSql(sql);
         connectorConfig.setTable(table);
+        connectorConfig.setPrimaryKey(primaryKey);
     }
 
     protected void modifySchema(DatabaseConfig connectorConfig, Map<String, String> params) {

+ 39 - 10
dbsyncer-connector/src/main/java/org/dbsyncer/connector/config/DatabaseConfig.java

@@ -11,35 +11,56 @@ import java.util.Map;
  */
 public class DatabaseConfig extends ConnectorConfig {
 
-    // 驱动com.mysql.jdbc.Driver
+    /**
+     * 驱动com.mysql.jdbc.Driver
+     */
     private String driverClassName;
 
-    // 连接地址
+    /**
+     * 连接地址
+     */
     private String url;
 
-    // 帐号
+    /**
+     * 帐号
+     */
     private String username;
 
-    // 密码
+    /**
+     * 密码
+     */
     private String password;
 
-    // 通过SQL获取表
+    /**
+     * 通过SQL获取表
+     */
     private String table;
 
-    // 通过SQL获取表信息
+    /**
+     * 主键
+     */
+    private String primaryKey;
+
+    /**
+     * 通过SQL获取表信息
+     */
     private String sql;
 
-    // 构架名
+    /**
+     * 构架名
+     */
     private String schema;
 
-    // 参数配置
+    /**
+     * 参数配置
+     */
     private Map<String, String> properties = new LinkedHashMap<>();
 
-    public String getProperty(String key){
+    public String getProperty(String key) {
         return properties.get(key);
     }
 
-    public String getProperty(String key, String defaultValue){
+    public String getProperty(String key, String defaultValue) {
         return properties.containsKey(key) ? properties.get(key) : defaultValue;
     }
 
@@ -83,6 +104,14 @@ public class DatabaseConfig extends ConnectorConfig {
         this.table = table;
     }
 
+    public String getPrimaryKey() {
+        return primaryKey;
+    }
+
+    public void setPrimaryKey(String primaryKey) {
+        this.primaryKey = primaryKey;
+    }
+
     public String getSql() {
         return sql;
     }

+ 2 - 1
dbsyncer-connector/src/main/java/org/dbsyncer/connector/sql/AbstractDQLConnector.java

@@ -69,7 +69,8 @@ public abstract class AbstractDQLConnector extends AbstractDatabaseConnector {
             querySql += queryFilterSql;
         }
         String quotation = buildSqlWithQuotation();
-        String pk = findTablePrimaryKey(commandConfig.getOriginalTable(), quotation);
+        DatabaseConfig cfg = (DatabaseConfig) commandConfig.getConnectorConfig();
+        String pk = new StringBuilder(quotation).append(cfg.getPrimaryKey()).append(quotation).toString();
         map.put(SqlBuilderEnum.QUERY.getName(), getPageSql(new PageSql(querySql, pk)));
 
         // 获取查询总数SQL

+ 17 - 5
dbsyncer-web/src/main/resources/public/connector/addDqlMysql.html

@@ -10,22 +10,34 @@
         </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" th:value="${connector?.config?.password}"/>
+            <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="8192" dbsyncer-valid="require" rows="10" th:text="${connector?.config?.sql}?:'SELECT T1.* FROM USER T1'"></textarea>
+            <textarea id="sql" name="sql" class="form-control" maxlength="8192" dbsyncer-valid="require" rows="10"
+                      th:text="${connector?.config?.sql}?:'SELECT T1.* FROM USER T1'"></textarea>
+        </div>
+    </div>
+    <div class="form-group">
+        <div class="col-sm-6"></div>
+        <div class="col-sm-6 text-right">
+            <a href="javascript:beautifySql();"><span class="fa fa-magic fa-1x fa-flip-horizontal dbsyncer_pointer"
+                                                      title="美化SQL"></span>美化SQL</a>
         </div>
     </div>
     <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="table" type="text" maxlength="32" dbsyncer-valid="require" placeholder="USER" th:value="${connector?.config?.table}"/>
+            <input class="form-control" name="table" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="USER" th:value="${connector?.config?.table}"/>
         </div>
-        <div class="col-sm-6 text-right">
-            <a href="javascript:beautifySql();"><span class="fa fa-magic fa-1x fa-flip-horizontal dbsyncer_pointer" title="美化SQL"></span>美化SQL</a>
+        <label class="col-sm-2 control-label">主键 <strong class="driverVerifcateRequired">*</strong></label>
+        <div class="col-sm-4">
+            <input class="form-control" name="primaryKey" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="ID" th:value="${connector?.config?.primaryKey}"/>
         </div>
     </div>
     <div class="form-group">

+ 18 - 5
dbsyncer-web/src/main/resources/public/connector/addDqlOracle.html

@@ -10,22 +10,35 @@
         </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" th:value="${connector?.config?.password}"/>
+            <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 dbsyncer_textarea_resize_none" maxlength="8192" dbsyncer-valid="require" rows="10" th:text="${connector?.config?.sql}?:'SELECT T1.*,ROWIDTOCHAR(ROWID) as RID FROM &quot;USER&quot; T1'"></textarea>
+            <textarea id="sql" name="sql" class="form-control dbsyncer_textarea_resize_none" maxlength="8192"
+                      dbsyncer-valid="require" rows="10"
+                      th:text="${connector?.config?.sql}?:'SELECT T1.*,ROWIDTOCHAR(ROWID) as RID FROM &quot;USER&quot; T1'"></textarea>
+        </div>
+    </div>
+    <div class="form-group">
+        <div class="col-sm-6"></div>
+        <div class="col-sm-6 text-right">
+            <a href="javascript:beautifySql();"><span class="fa fa-magic fa-1x fa-flip-horizontal dbsyncer_pointer"
+                                                      title="美化SQL"></span>美化SQL</a>
         </div>
     </div>
     <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="table" type="text" maxlength="32" dbsyncer-valid="require" placeholder="USER" th:value="${connector?.config?.table}"/>
+            <input class="form-control" name="table" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="USER" th:value="${connector?.config?.table}"/>
         </div>
-        <div class="col-sm-6 text-right">
-            <a href="javascript:beautifySql();"><span class="fa fa-magic fa-1x fa-flip-horizontal dbsyncer_pointer" title="美化SQL"></span>美化SQL</a>
+        <label class="col-sm-2 control-label">主键 <strong class="driverVerifcateRequired">*</strong></label>
+        <div class="col-sm-4">
+            <input class="form-control" name="primaryKey" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="ID" th:value="${connector?.config?.primaryKey}"/>
         </div>
     </div>
     <div class="form-group">

+ 16 - 6
dbsyncer-web/src/main/resources/public/connector/addDqlPostgreSQL.html

@@ -18,20 +18,30 @@
     <div class="form-group">
         <label class="col-sm-2 control-label">SQL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">
-            <textarea class="form-control dbsyncer_textarea_resize_none" maxlength="8192" dbsyncer-valid="require" id="sql" name="sql" rows="10" th:text="${connector?.config?.sql}?:'SELECT T1.* FROM &quot;USER&quot; T1'"></textarea>
+            <textarea class="form-control dbsyncer_textarea_resize_none" maxlength="8192" dbsyncer-valid="require"
+                      id="sql" name="sql" rows="10"
+                      th:text="${connector?.config?.sql}?:'SELECT T1.* FROM &quot;USER&quot; T1'"></textarea>
         </div>
     </div>
     <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" dbsyncer-valid="require" maxlength="32" name="table" placeholder="USER"
-                   th:value="${connector?.config?.table}" type="text"/>
-        </div>
+        <div class="col-sm-6"></div>
         <div class="col-sm-6 text-right">
             <a href="javascript:beautifySql();"><span class="fa fa-magic fa-1x fa-flip-horizontal dbsyncer_pointer"
                                                       title="美化SQL"></span>美化SQL</a>
         </div>
     </div>
+    <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="table" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="USER" th:value="${connector?.config?.table}"/>
+        </div>
+        <label class="col-sm-2 control-label">主键 <strong class="driverVerifcateRequired">*</strong></label>
+        <div class="col-sm-4">
+            <input class="form-control" name="primaryKey" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="ID" th:value="${connector?.config?.primaryKey}"/>
+        </div>
+    </div>
     <div class="form-group">
         <label class="col-sm-2 control-label">URL <strong class="driverVerifcateRequired">*</strong></label>
         <div class="col-sm-10">

+ 18 - 5
dbsyncer-web/src/main/resources/public/connector/addDqlSqlServer.html

@@ -10,22 +10,35 @@
         </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" th:value="${connector?.config?.password}"/>
+            <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 dbsyncer_textarea_resize_none" maxlength="1024" dbsyncer-valid="require" rows="10" th:text="${connector?.config?.sql}?:'SELECT T1.* FROM USER T1'"></textarea>
+            <textarea id="sql" name="sql" class="form-control dbsyncer_textarea_resize_none" maxlength="1024"
+                      dbsyncer-valid="require" rows="10"
+                      th:text="${connector?.config?.sql}?:'SELECT T1.* FROM USER T1'"></textarea>
+        </div>
+    </div>
+    <div class="form-group">
+        <div class="col-sm-6"></div>
+        <div class="col-sm-6 text-right">
+            <a href="javascript:beautifySql();"><span class="fa fa-magic fa-1x fa-flip-horizontal dbsyncer_pointer"
+                                                      title="美化SQL"></span>美化SQL</a>
         </div>
     </div>
     <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="table" type="text" maxlength="32" dbsyncer-valid="require" placeholder="USER" th:value="${connector?.config?.table}"/>
+            <input class="form-control" name="table" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="USER" th:value="${connector?.config?.table}"/>
         </div>
-        <div class="col-sm-6 text-right">
-            <a href="javascript:beautifySql();"><span class="fa fa-magic fa-1x fa-flip-horizontal dbsyncer_pointer" title="美化SQL"></span>美化SQL</a>
+        <label class="col-sm-2 control-label">主键 <strong class="driverVerifcateRequired">*</strong></label>
+        <div class="col-sm-4">
+            <input class="form-control" name="primaryKey" type="text" maxlength="32" dbsyncer-valid="require"
+                   placeholder="ID" th:value="${connector?.config?.primaryKey}"/>
         </div>
     </div>
     <div class="form-group">

+ 2 - 1
dbsyncer-web/src/main/resources/public/mapping/editTableGroup.html

@@ -23,7 +23,8 @@
                                     </div>
                                     <div class="col-md-8">
                                         <p class="driver_break_word">[[${mapping?.sourceConnector?.name}]]</p>
-                                        <p>数据源表:[[${tableGroup?.sourceTable?.name}]]</p>
+                                        <p class="driver_hidden_word" th:title="${tableGroup?.sourceTable?.name}">
+                                            数据源表:[[${tableGroup?.sourceTable?.name}]]</p>
                                     </div>
                                 </div>
                             </div>

+ 15 - 2
dbsyncer-web/src/main/resources/static/css/common.css

@@ -16,8 +16,21 @@
 /**
  * 强制单词换行
  */
-.driver_break_word { word-break: break-all;word-wrap:break-word;white-space:normal}
-.fa_gray {color: gray}
+.driver_break_word {
+    word-break: break-all;
+    word-wrap: break-word;
+    white-space: normal
+}
+
+.driver_hidden_word {
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis
+}
+
+.fa_gray {
+    color: gray
+}
 .fa_blueviolet {color: blueviolet}
 .dbsyncer_btn-info { background-color: #E7EDF8;}
 .dbsyncer_btn-info.active, .dbsyncer_btn-info.focus, .dbsyncer_btn-info:active, .dbsyncer_btn-info:focus, .dbsyncer_btn-info:hover, .open>.dropdown-toggle.dbsyncer_btn-info {background-color: #D4DDED;}