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