This is an automated email from the ASF dual-hosted git repository.

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 0ddb4d37c16 Refactor DatabaseTypeFactory.getAllBranchDatabaseTypes() 
(#27564)
0ddb4d37c16 is described below

commit 0ddb4d37c16527e7c0e7b235d4b575ab862eac82
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 30 00:22:36 2023 +0800

    Refactor DatabaseTypeFactory.getAllBranchDatabaseTypes() (#27564)
---
 .../infra/database/DatabaseTypeEngine.java           | 20 +-------------------
 .../infra/database/DatabaseTypeEngineTest.java       |  7 -------
 .../database/core/type/DatabaseTypeFactory.java      | 11 +++++++++++
 .../database/core/type/DatabaseTypeFactoryTest.java  | 10 ++++++++++
 .../CRC32MatchDataConsistencyCalculateAlgorithm.java | 12 ++++++++----
 5 files changed, 30 insertions(+), 30 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
index 04a9cc0544f..ec35ffea1be 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
@@ -24,11 +24,10 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
 import org.apache.shardingsphere.infra.datasource.state.DataSourceStateManager;
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.wrapper.SQLWrapperException;
-import org.apache.shardingsphere.infra.util.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 
 import javax.sql.DataSource;
@@ -36,7 +35,6 @@ import java.sql.Connection;
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.LinkedHashMap;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
@@ -145,20 +143,4 @@ public final class DatabaseTypeEngine {
         DialectDatabaseMetaData dialectDatabaseMetaData = 
DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class, protocolType);
         return dialectDatabaseMetaData.getDefaultSchema().orElseGet(() -> null 
== databaseName ? null : databaseName.toLowerCase());
     }
-    
-    /**
-     * Get trunk and branch database types.
-     *
-     * @param trunkDatabaseTypes trunk database types
-     * @return database types
-     */
-    public static Collection<DatabaseType> 
getTrunkAndBranchDatabaseTypes(final Collection<String> trunkDatabaseTypes) {
-        Collection<DatabaseType> result = new LinkedList<>();
-        for (DatabaseType each : 
ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)) {
-            if (trunkDatabaseTypes.contains(each.getType()) || 
each.getTrunkDatabaseType().map(optional -> 
trunkDatabaseTypes.contains(optional.getType())).orElse(false)) {
-                result.add(each);
-            }
-        }
-        return result;
-    }
 }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
index c6fcf713e5d..3f41fa4caab 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngineTest.java
@@ -127,11 +127,4 @@ class DatabaseTypeEngineTest {
         DatabaseType schemaNoSupportDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
         
assertThat(DatabaseTypeEngine.getDefaultSchemaName(schemaNoSupportDatabaseType, 
"MySQL"), is("mysql"));
     }
-    
-    @Test
-    void assertGetBranchDatabaseTypes() {
-        Collection<DatabaseType> actual = 
DatabaseTypeEngine.getTrunkAndBranchDatabaseTypes(Collections.singleton("MySQL"));
-        
assertTrue(actual.contains(TypedSPILoader.getService(DatabaseType.class, 
"MySQL")), "MySQL not present");
-        
assertTrue(actual.contains(TypedSPILoader.getService(DatabaseType.class, 
"MariaDB")), "MariaDB not present");
-    }
 }
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
index 62adce18366..a28f234d4a2 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactory.java
@@ -51,4 +51,15 @@ public final class DatabaseTypeFactory {
     private static boolean matchURLs(final String url, final DatabaseType 
databaseType) {
         return 
databaseType.getJdbcUrlPrefixes().stream().anyMatch(url::startsWith);
     }
+    
+    /**
+     * Get all branch database types.
+     * 
+     * @param databaseType database type
+     * @return all branch database types
+     */
+    public static Collection<DatabaseType> getAllBranchDatabaseTypes(final 
DatabaseType databaseType) {
+        return 
ShardingSphereServiceLoader.getServiceInstances(DatabaseType.class)
+                .stream().filter(each -> 
each.getTrunkDatabaseType().map(optional -> optional == 
databaseType).orElse(false)).collect(Collectors.toList());
+    }
 }
diff --git 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
index 6c8a02e3e99..8a511273a37 100644
--- 
a/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
+++ 
b/infra/database/core/src/test/java/org/apache/shardingsphere/infra/database/core/type/DatabaseTypeFactoryTest.java
@@ -17,8 +17,12 @@
 
 package org.apache.shardingsphere.infra.database.core.type;
 
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.junit.jupiter.api.Test;
 
+import java.util.Collection;
+import java.util.Collections;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -39,4 +43,10 @@ class DatabaseTypeFactoryTest {
     void assertGetDatabaseTypeWithUnrecognizedURL() {
         assertThrows(UnsupportedStorageTypeException.class, () -> 
DatabaseTypeFactory.get("jdbc:not-existed:test"));
     }
+    
+    @Test
+    void assertGetAllBranchDatabaseTypes() {
+        Collection<DatabaseType> actual = 
DatabaseTypeFactory.getAllBranchDatabaseTypes(TypedSPILoader.getService(DatabaseType.class,
 "TRUNK"));
+        assertThat(actual, 
is(Collections.singletonList(TypedSPILoader.getService(DatabaseType.class, 
"BRANCH"))));
+    }
 }
diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
index b6201b4f2f4..96813fd7197 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/CRC32MatchDataConsistencyCalculateAlgorithm.java
@@ -26,9 +26,10 @@ import 
org.apache.shardingsphere.data.pipeline.core.consistencycheck.result.Data
 import 
org.apache.shardingsphere.data.pipeline.core.exception.data.PipelineTableDataConsistencyCheckLoadingFailedException;
 import 
org.apache.shardingsphere.data.pipeline.core.exception.data.UnsupportedCRC32DataConsistencyCalculateAlgorithmException;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeFactory;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.infra.util.spi.annotation.SPIDescription;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
@@ -36,6 +37,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -47,8 +49,6 @@ import java.util.stream.Collectors;
 @Slf4j
 public final class CRC32MatchDataConsistencyCalculateAlgorithm extends 
AbstractDataConsistencyCalculateAlgorithm {
     
-    private static final Collection<DatabaseType> SUPPORTED_DATABASE_TYPES = 
DatabaseTypeEngine.getTrunkAndBranchDatabaseTypes(Collections.singleton("MySQL"));
-    
     @Override
     public Iterable<DataConsistencyCalculatedResult> calculate(final 
DataConsistencyCalculateParameter param) {
         PipelineDataConsistencyCalculateSQLBuilder pipelineSQLBuilder = new 
PipelineDataConsistencyCalculateSQLBuilder(param.getDatabaseType());
@@ -80,7 +80,11 @@ public final class 
CRC32MatchDataConsistencyCalculateAlgorithm extends AbstractD
     
     @Override
     public Collection<DatabaseType> getSupportedDatabaseTypes() {
-        return SUPPORTED_DATABASE_TYPES;
+        Collection<DatabaseType> result = new LinkedList<>();
+        DatabaseType supportedDatabaseType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
+        result.add(supportedDatabaseType);
+        
result.addAll(DatabaseTypeFactory.getAllBranchDatabaseTypes(supportedDatabaseType));
+        return result;
     }
     
     @RequiredArgsConstructor

Reply via email to