Browse Source

修复排序语句 & 替换安全集合

Signed-off-by: AE86 <836391306@qq.com>
AE86 1 year ago
parent
commit
a89293061c

+ 2 - 1
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -34,6 +34,7 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.stream.Collectors;
 
@@ -72,7 +73,7 @@ public class TableGroupChecker extends AbstractChecker {
 
         // 获取连接器信息
         TableGroup tableGroup = new TableGroup();
-        tableGroup.setFieldMapping(new ArrayList<>());
+        tableGroup.setFieldMapping(new CopyOnWriteArrayList<>());
         tableGroup.setMappingId(mappingId);
         tableGroup.setSourceTable(getTable(mapping.getSourceConnectorId(), sourceTable, sourceTablePK));
         tableGroup.setTargetTable(getTable(mapping.getTargetConnectorId(), targetTable, targetTablePK));

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

@@ -9,17 +9,17 @@ import org.dbsyncer.parser.LogType;
 import org.dbsyncer.parser.ProfileComponent;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
-import org.dbsyncer.sdk.model.Field;
 import org.dbsyncer.sdk.constant.ConfigConstant;
+import org.dbsyncer.sdk.model.Field;
 import org.springframework.stereotype.Service;
 import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.stream.Stream;
 
 /**
@@ -159,7 +159,7 @@ public class TableGroupServiceImpl extends BaseServiceImpl implements TableGroup
         if (CollectionUtils.isEmpty(column) || CollectionUtils.isEmpty(target)) {
             return target;
         }
-        List<Field> list = new ArrayList<>();
+        List<Field> list = new CopyOnWriteArrayList<>();
         Set<String> keys = new HashSet<>();
         column.forEach(f -> keys.add(f.getName()));
         target.forEach(f -> {

+ 2 - 2
dbsyncer-parser/src/main/java/org/dbsyncer/parser/impl/OperationTemplate.java

@@ -24,11 +24,11 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * 操作配置模板
@@ -64,7 +64,7 @@ public final class OperationTemplate {
         if (null != group) {
             List<String> index = group.getIndex();
             if (!CollectionUtils.isEmpty(index)) {
-                List<T> list = new ArrayList<>();
+                List<T> list = new CopyOnWriteArrayList<>();
                 Class<? extends ConfigModel> clazz = model.getClass();
                 index.forEach(e -> {
                     Object v = cacheService.get(e);

+ 8 - 7
dbsyncer-sdk/src/main/java/org/dbsyncer/sdk/connector/database/AbstractDatabaseConnector.java

@@ -50,6 +50,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -113,7 +114,7 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
 
     @Override
     public MetaInfo getMetaInfo(DatabaseConnectorInstance connectorInstance, String tableNamePattern) {
-        List<Field> fields = new ArrayList<>();
+        List<Field> fields = new CopyOnWriteArrayList<>();
         final String schema = getSchema(connectorInstance.getConfig());
         connectorInstance.execute(databaseTemplate -> {
             SimpleConnection connection = databaseTemplate.getSimpleConnection();
@@ -316,15 +317,15 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
     }
 
     /**
-     * 满足游标查询条件,追加主键排序
+     * 满足游标查询条件,追加主键排序(单个主键才做排序)
      *
      * @param config
      * @param sql
      */
     protected void appendOrderByPk(PageSql config, StringBuilder sql) {
-        sql.append(" ORDER BY ");
-        final String quotation = buildSqlWithQuotation();
-        if (config.getPrimaryKeys().size() == 1){
+        if (!CollectionUtils.isEmpty(config.getPrimaryKeys()) && config.getPrimaryKeys().size() == 1) {
+            sql.append(" ORDER BY ");
+            final String quotation = buildSqlWithQuotation();
             PrimaryKeyUtil.buildSql(sql, config.getPrimaryKeys(), quotation, ",", "", true);
         }
     }
@@ -348,7 +349,7 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
         if (1 > columnCount) {
             throw new SdkException("查询表字段不能为空.");
         }
-        List<Field> fields = new ArrayList<>(columnCount);
+        List<Field> fields = new CopyOnWriteArrayList<>();
         Map<String, List<String>> tables = new HashMap<>();
         try {
             Connection connection = databaseTemplate.getSimpleConnection();
@@ -469,7 +470,7 @@ public abstract class AbstractDatabaseConnector extends AbstractConnector implem
      */
     private List<Table> getTable(DatabaseConnectorInstance connectorInstance, String catalog, String schema, String tableNamePattern) {
         return connectorInstance.execute(databaseTemplate -> {
-            List<Table> tables = new ArrayList<>();
+            List<Table> tables = new CopyOnWriteArrayList<>();
             SimpleConnection connection = databaseTemplate.getSimpleConnection();
             Connection conn = connection.getConnection();
             String databaseCatalog = null == catalog ? conn.getCatalog() : catalog;