浏览代码

优化主键提示 & 支持double转换同步float

AE86 2 年之前
父节点
当前提交
0e6bee6502

+ 25 - 16
dbsyncer-connector/src/main/java/org/dbsyncer/connector/database/AbstractDatabaseConnector.java

@@ -110,7 +110,9 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
 
         // 1、获取select SQL
         String queryCountSql = command.get(ConnectorConstant.OPERTION_QUERY_COUNT);
-        Assert.hasText(queryCountSql, "查询总数语句不能为空.");
+        if (StringUtil.isBlank(queryCountSql)) {
+            return 0;
+        }
 
         // 2、返回结果集
         return connectorMapper.execute(databaseTemplate -> {
@@ -225,12 +227,14 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
         // 获取查询数据行是否存在
         String tableName = commandConfig.getTable().getName();
         List<String> primaryKeys = PrimaryKeyUtil.findTablePrimaryKeys(commandConfig.getTable());
-        StringBuilder queryCount = new StringBuilder("SELECT COUNT(1) FROM ").append(schema).append(quotation).append(tableName).append(quotation).append(" WHERE ");
-        // id = ? AND uid = ?
-        PrimaryKeyUtil.buildSql(queryCount, primaryKeys, quotation, " AND ", " = ? ", true);
+        if (!CollectionUtils.isEmpty(primaryKeys)) {
+            StringBuilder queryCount = new StringBuilder("SELECT COUNT(1) FROM ").append(schema).append(quotation).append(tableName).append(quotation).append(" WHERE ");
+            // id = ? AND uid = ?
+            PrimaryKeyUtil.buildSql(queryCount, primaryKeys, quotation, " AND ", " = ? ", true);
 
-        String queryCountExist = ConnectorConstant.OPERTION_QUERY_COUNT_EXIST;
-        map.put(queryCountExist, queryCount.toString());
+            String queryCountExist = ConnectorConstant.OPERTION_QUERY_COUNT_EXIST;
+            map.put(queryCountExist, queryCount.toString());
+        }
         return map;
     }
 
@@ -344,14 +348,16 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
         String table = commandConfig.getTable().getName();
         List<String> primaryKeys = PrimaryKeyUtil.findTablePrimaryKeys(commandConfig.getTable());
         StringBuilder sql = new StringBuilder();
-        sql.append("SELECT COUNT(1) FROM (SELECT 1 FROM ").append(schema).append(quotation).append(table).append(quotation);
-        if (StringUtil.isNotBlank(queryFilterSql)) {
-            sql.append(queryFilterSql);
-        }
-        sql.append(" GROUP BY ");
-        // id,uid
-        PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, ",", "", true);
-        sql.append(") DBSYNCER_T");
+        if (!CollectionUtils.isEmpty(primaryKeys)) {
+            sql.append("SELECT COUNT(1) FROM (SELECT 1 FROM ").append(schema).append(quotation).append(table).append(quotation);
+            if (StringUtil.isNotBlank(queryFilterSql)) {
+                sql.append(queryFilterSql);
+            }
+            sql.append(" GROUP BY ");
+            // id,uid
+            PrimaryKeyUtil.buildSql(sql, primaryKeys, quotation, ",", "", true);
+            sql.append(") DBSYNCER_T");
+        }
         return sql.toString();
     }
 
@@ -494,8 +500,11 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
             throw new ConnectorException("Table name can not be empty.");
         }
         List<String> primaryKeys = PrimaryKeyUtil.findTablePrimaryKeys(commandConfig.getTable());
-        SqlBuilderConfig config = new SqlBuilderConfig(this, schema, tableName, primaryKeys, fields, queryFilterSQL, buildSqlWithQuotation());
-        return SqlBuilderEnum.getSqlBuilder(type).buildSql(config);
+        if (!CollectionUtils.isEmpty(primaryKeys)) {
+            SqlBuilderConfig config = new SqlBuilderConfig(this, schema, tableName, primaryKeys, fields, queryFilterSQL, buildSqlWithQuotation());
+            return SqlBuilderEnum.getSqlBuilder(type).buildSql(config);
+        }
+        return "";
     }
 
     /**

+ 4 - 0
dbsyncer-connector/src/main/java/org/dbsyncer/connector/schema/FloatValueMapper.java

@@ -19,6 +19,10 @@ public class FloatValueMapper extends AbstractValueMapper<Float> {
             BigDecimal bigDecimal = (BigDecimal) val;
             return bigDecimal.floatValue();
         }
+        if (val instanceof Double) {
+            Double dbl = (Double) val;
+            return dbl.floatValue();
+        }
         throw new ConnectorException(String.format("%s can not find type [%s], val [%s]", getClass().getSimpleName(), val.getClass(), val));
     }
 }

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

@@ -74,10 +74,13 @@ public abstract class AbstractDQLConnector extends AbstractDatabaseConnector {
         // 获取过滤SQL
         String queryFilterSql = getQueryFilterSql(commandConfig.getFilter());
         Table table = commandConfig.getTable();
+        Map<String, String> map = new HashMap<>();
         List<String> primaryKeys = PrimaryKeyUtil.findTablePrimaryKeys(commandConfig.getTable());
+        if (CollectionUtils.isEmpty(primaryKeys)) {
+            return map;
+        }
 
         // 获取查询SQL
-        Map<String, String> map = new HashMap<>();
         String querySql = table.getSql();
 
         // 存在条件

+ 3 - 2
dbsyncer-connector/src/main/java/org/dbsyncer/connector/util/PrimaryKeyUtil.java

@@ -37,8 +37,9 @@ public abstract class PrimaryKeyUtil {
             });
         }
 
-        if (CollectionUtils.isEmpty(primaryKeys)) {
-            throw new ConnectorException(String.format("The primary key of table '%s' is null.", table.getName()));
+        // 如果存在表字段映射关系,没有配置主键则抛出异常提示
+        if (!CollectionUtils.isEmpty(table.getColumn()) && CollectionUtils.isEmpty(primaryKeys)) {
+            throw new ConnectorException(String.format("目标表 %s 缺少主键.", table.getName()));
         }
         return Collections.unmodifiableList(primaryKeys);
     }