This is an automated email from the ASF dual-hosted git repository.
menghaoranss 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 ff75773edc6 Use protocol schema resolver in database factory (#39691)
ff75773edc6 is described below
commit ff75773edc64cfec63547e45242959d5df9c92bc
Author: Haoran Meng <[email protected]>
AuthorDate: Wed Sep 2 17:12:55 2026 +0800
Use protocol schema resolver in database factory (#39691)
---
.../metadata/database/ShardingSphereDatabaseFactory.java | 6 +++---
.../database/ShardingSphereDatabaseFactoryTest.java | 13 +++++++------
2 files changed, 10 insertions(+), 9 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
index 436dc94433e..0e0a7a9d2b1 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactory.java
@@ -19,8 +19,8 @@ package org.apache.shardingsphere.infra.metadata.database;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import
org.apache.shardingsphere.database.connector.core.metadata.identifier.DefaultSchemaNameResolver;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
@@ -63,7 +63,7 @@ public final class ShardingSphereDatabaseFactory {
DatabaseConfiguration databaseConfig = new
DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new
LinkedList<>());
ResourceMetaData resourceMetaData = new
ResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
Map<String, ShardingSphereSchema> systemSchemas =
SystemSchemaBuilder.build(name, protocolType, props);
- String defaultSchemaName = new
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name);
+ String defaultSchemaName =
DefaultSchemaNameResolver.resolveProtocol(protocolType, name);
if (!systemSchemas.containsKey(defaultSchemaName)) {
systemSchemas.put(defaultSchemaName, new
ShardingSphereSchema(defaultSchemaName, protocolType));
}
@@ -138,7 +138,7 @@ public final class ShardingSphereDatabaseFactory {
DatabaseIdentifierContext identifierContext =
DatabaseIdentifierContextFactory.create(protocolType, resourceMetaData, props);
Collection<ShardingSphereRule> databaseRules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
Map<String, ShardingSphereSchema> schemas = new
ConcurrentHashMap<>(GenericSchemaBuilder.build(protocolType,
- new
GenericSchemaBuilderMaterial(resourceMetaData.getStorageUnits(), databaseRules,
props, new DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name),
+ new
GenericSchemaBuilderMaterial(resourceMetaData.getStorageUnits(), databaseRules,
props, DefaultSchemaNameResolver.resolveProtocol(protocolType, name),
identifierContext, revisionCandidateSchemas)));
SystemSchemaBuilder.build(name, protocolType,
props).forEach(schemas::putIfAbsent);
return new ShardingSphereDatabase(name, protocolType,
resourceMetaData, new RuleMetaData(databaseRules), schemas.values(), props);
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactoryTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactoryTest.java
index 7cf1cd5a401..553c8482118 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactoryTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseFactoryTest.java
@@ -17,8 +17,8 @@
package org.apache.shardingsphere.infra.metadata.database;
+import
org.apache.shardingsphere.database.connector.core.metadata.identifier.DefaultSchemaNameResolver;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
@@ -36,7 +36,6 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
-import org.mockito.MockedConstruction;
import org.mockito.MockedStatic;
import java.sql.SQLException;
@@ -53,9 +52,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.mockConstruction;
import static org.mockito.Mockito.mockStatic;
-import static org.mockito.Mockito.when;
class ShardingSphereDatabaseFactoryTest {
@@ -85,17 +82,19 @@ class ShardingSphereDatabaseFactoryTest {
systemSchemas.put("system_schema", new
ShardingSphereSchema("system_schema", protocolType));
systemSchemas.put("metadata_schema", new
ShardingSphereSchema("metadata_schema", protocolType));
try (
- MockedConstruction<DatabaseTypeRegistry> ignored =
mockConstruction(DatabaseTypeRegistry.class, (mock, context) ->
when(mock.getDefaultSchemaName("foo_db")).thenReturn("foo_schema"));
+ MockedStatic<DefaultSchemaNameResolver>
mockedDefaultSchemaNameResolver = mockStatic(DefaultSchemaNameResolver.class);
MockedStatic<DatabaseRulesBuilder> mockedRulesBuilder =
mockStatic(DatabaseRulesBuilder.class);
MockedStatic<GenericSchemaBuilder> mockedGenericSchemaBuilder
= mockStatic(GenericSchemaBuilder.class);
MockedStatic<SystemSchemaBuilder> mockedSystemSchemaBuilder =
mockStatic(SystemSchemaBuilder.class)) {
ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+ mockedDefaultSchemaNameResolver.when(() ->
DefaultSchemaNameResolver.resolveProtocol(protocolType,
"foo_db")).thenReturn("foo_schema");
mockedRulesBuilder.when(() ->
DatabaseRulesBuilder.build(eq("foo_db"), eq(protocolType), eq(databaseConfig),
eq(computeNodeInstanceContext), any(ResourceMetaData.class)))
.thenReturn(Collections.singleton(mock(ShardingSphereRule.class)));
mockedGenericSchemaBuilder.when(() ->
GenericSchemaBuilder.build(eq(protocolType),
any(GenericSchemaBuilderMaterial.class)))
.thenReturn(Collections.singletonMap("foo_schema", new
ShardingSphereSchema("foo_schema", protocolType)));
mockedSystemSchemaBuilder.when(() ->
SystemSchemaBuilder.build("foo_db", protocolType,
props)).thenReturn(systemSchemas);
ShardingSphereDatabase actual =
ShardingSphereDatabaseFactory.create("foo_db", protocolType, databaseConfig,
props, computeNodeInstanceContext);
+ mockedDefaultSchemaNameResolver.verify(() ->
DefaultSchemaNameResolver.resolveProtocol(protocolType, "foo_db"));
assertThat(actual.getName(), is("foo_db"));
assertThat(actual.getProtocolType(), is(protocolType));
assertThat(actual.getAllSchemas().size(), is(3));
@@ -111,11 +110,12 @@ class ShardingSphereDatabaseFactoryTest {
DatabaseType protocolType = mock(DatabaseType.class);
ShardingSphereSchema candidateSchema = new
ShardingSphereSchema("candidate_schema", protocolType);
try (
- MockedConstruction<DatabaseTypeRegistry> ignored =
mockConstruction(DatabaseTypeRegistry.class, (mock, context) ->
when(mock.getDefaultSchemaName("foo_db")).thenReturn("foo_schema"));
+ MockedStatic<DefaultSchemaNameResolver>
mockedDefaultSchemaNameResolver = mockStatic(DefaultSchemaNameResolver.class);
MockedStatic<DatabaseRulesBuilder> mockedRulesBuilder =
mockStatic(DatabaseRulesBuilder.class);
MockedStatic<GenericSchemaBuilder> mockedGenericSchemaBuilder
= mockStatic(GenericSchemaBuilder.class);
MockedStatic<SystemSchemaBuilder> mockedSystemSchemaBuilder =
mockStatic(SystemSchemaBuilder.class)) {
ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+ mockedDefaultSchemaNameResolver.when(() ->
DefaultSchemaNameResolver.resolveProtocol(protocolType,
"foo_db")).thenReturn("foo_schema");
mockedRulesBuilder.when(() ->
DatabaseRulesBuilder.build(eq("foo_db"), eq(protocolType), eq(databaseConfig),
eq(computeNodeInstanceContext), any(ResourceMetaData.class)))
.thenReturn(Collections.singleton(mock(ShardingSphereRule.class)));
mockedGenericSchemaBuilder.when(() ->
GenericSchemaBuilder.build(eq(protocolType),
@@ -124,6 +124,7 @@ class ShardingSphereDatabaseFactoryTest {
mockedSystemSchemaBuilder.when(() ->
SystemSchemaBuilder.build("foo_db", protocolType,
props)).thenReturn(Collections.emptyMap());
ShardingSphereDatabase actual =
ShardingSphereDatabaseFactory.createWithRevisionCandidateSchemas(
"foo_db", protocolType, databaseConfig, props,
computeNodeInstanceContext, Collections.singleton(candidateSchema));
+ mockedDefaultSchemaNameResolver.verify(() ->
DefaultSchemaNameResolver.resolveProtocol(protocolType, "foo_db"));
assertTrue(actual.containsSchema("foo_schema"));
}
}