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 cd7164fb2ea Use protocol schema resolver for frontend schema 
translation (#39700)
cd7164fb2ea is described below

commit cd7164fb2eada46ca00995818fe142d9062c651b
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Sep 3 13:44:50 2026 +0800

    Use protocol schema resolver for frontend schema translation (#39700)
    
    * Use protocol schema resolver for frontend schema translation
    
    * Preserve canonical schema names during translation
---
 .../schema/builder/GenericSchemaBuilder.java       |  3 +-
 .../schema/builder/GenericSchemaBuilderTest.java   |  8 ++---
 .../mode/manager/ContextManagerTest.java           | 42 ++++++++++++++++++++++
 3 files changed, 47 insertions(+), 6 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index 92d66c78dca..31a1541a0a5 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -26,7 +26,6 @@ import 
org.apache.shardingsphere.database.connector.core.metadata.data.model.Tab
 import 
org.apache.shardingsphere.database.connector.core.metadata.database.metadata.DialectDatabaseMetaData;
 import 
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import 
org.apache.shardingsphere.database.connector.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.reviser.MetaDataReviseEngine;
@@ -111,7 +110,7 @@ public final class GenericSchemaBuilder {
         for (String each : 
loaderMaterials.stream().map(MetaDataLoaderMaterial::getDefaultSchemaName).distinct().collect(Collectors.toList()))
 {
             
tableMetaDataList.addAll(Optional.ofNullable(schemaMetaDataMap.get(each)).map(SchemaMetaData::getTables).orElseGet(Collections::emptyList));
         }
-        String frontendSchemaName = new 
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(material.getDefaultSchemaName());
+        String frontendSchemaName = material.getDefaultSchemaName();
         return Collections.singletonMap(frontendSchemaName, new 
SchemaMetaData(frontendSchemaName, tableMetaDataList));
     }
     
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
index e8c29f7eeae..b931745a7a3 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
@@ -152,9 +152,9 @@ class GenericSchemaBuilderTest {
     void assertBuildTranslatesSchemaWhenProtocolSchemaUnavailable() throws 
SQLException {
         
when(MetaDataLoader.load(any())).thenReturn(Collections.singletonMap("public", 
createSchemaMetaData("public", "foo_tbl")));
         Map<String, ShardingSphereSchema> actual =
-                GenericSchemaBuilder.build(Collections.singleton("foo_tbl"), 
MYSQL_DATABASE_TYPE, createMaterial(POSTGRESQL_DATABASE_TYPE, "foo_db"));
+                GenericSchemaBuilder.build(Collections.singleton("foo_tbl"), 
MYSQL_DATABASE_TYPE, createMaterial(POSTGRESQL_DATABASE_TYPE, "FOO_DB"));
         assertThat(actual.size(), is(1));
-        assertSchemaTable(actual, "foo_db", "foo_tbl");
+        assertSchemaTable(actual, "FOO_DB", "foo_tbl");
     }
     
     @Test
@@ -170,7 +170,7 @@ class GenericSchemaBuilderTest {
     void assertBuildTranslatesSchemaWithStorageDataSourcePolicy() throws 
SQLException {
         mockLoadedSchemaWithMaterialDefault("foo_tbl");
         Map<String, ShardingSphereSchema> actual = 
GenericSchemaBuilder.build(Collections.singleton("foo_tbl"), 
POSTGRESQL_DATABASE_TYPE,
-                createMaterial(MYSQL_DATABASE_TYPE, "Foo_DB", 
mockMySQLDataSource(1)));
+                createMaterial(MYSQL_DATABASE_TYPE, "public", 
mockMySQLDataSource(1)));
         assertThat(actual.size(), is(1));
         assertSchemaTable(actual, "public", "foo_tbl");
     }
@@ -179,7 +179,7 @@ class GenericSchemaBuilderTest {
     void assertBuildTranslatesSchemaWithHiddenStorageSchema() throws 
SQLException {
         mockLoadedSchemaWithMaterialDefault("foo_tbl");
         Map<String, ShardingSphereSchema> actual = GenericSchemaBuilder.build(
-                Collections.singleton("foo_tbl"), POSTGRESQL_DATABASE_TYPE, 
createMaterial(H2_DATABASE_TYPE, "Foo_DB"));
+                Collections.singleton("foo_tbl"), POSTGRESQL_DATABASE_TYPE, 
createMaterial(H2_DATABASE_TYPE, "public"));
         assertThat(actual.size(), is(1));
         assertSchemaTable(actual, "public", "foo_tbl");
     }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index 3cff2f6b4b2..9ba56ead9ee 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -18,6 +18,10 @@
 package org.apache.shardingsphere.mode.manager;
 
 import lombok.SneakyThrows;
+import 
org.apache.shardingsphere.database.connector.core.metadata.data.loader.MetaDataLoader;
+import 
org.apache.shardingsphere.database.connector.core.metadata.data.loader.MetaDataLoaderMaterial;
+import 
org.apache.shardingsphere.database.connector.core.metadata.data.model.SchemaMetaData;
+import 
org.apache.shardingsphere.database.connector.core.metadata.data.model.TableMetaData;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.database.exception.core.exception.syntax.database.NoDatabaseSelectedException;
 import 
org.apache.shardingsphere.database.exception.core.exception.syntax.database.UnknownDatabaseException;
@@ -39,11 +43,13 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericS
 import 
org.apache.shardingsphere.infra.metadata.database.schema.manager.GenericSchemaManager;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import 
org.apache.shardingsphere.infra.metadata.identifier.DatabaseIdentifierContextFactory;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
+import 
org.apache.shardingsphere.infra.rule.attribute.table.TableMapperRuleAttribute;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -69,6 +75,7 @@ import org.mockito.quality.Strictness;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Optional;
 import java.util.Properties;
@@ -84,6 +91,7 @@ import static org.mockito.ArgumentMatchers.anyCollection;
 import static org.mockito.ArgumentMatchers.anyMap;
 import static org.mockito.ArgumentMatchers.anySet;
 import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.argThat;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
@@ -311,6 +319,40 @@ class ContextManagerTest {
         
verify(persistServiceFacade.getModeFacade().getMetaDataManagerService()).dropTables(database,
 "foo_schema", Collections.singleton("foo_tbl"));
     }
     
+    @Test
+    void assertReloadSchemaWithCanonicalSchemaName() throws SQLException {
+        DatabaseType protocolType = 
TypedSPILoader.getService(DatabaseType.class, "MySQL");
+        DatabaseType storageType = 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        when(storageUnit.getStorageType()).thenReturn(storageType);
+        when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(database.getName()).thenReturn("foo_db");
+        when(database.getProtocolType()).thenReturn(protocolType);
+        
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnit));
+        TableMapperRuleAttribute tableMapperRuleAttribute = 
mock(TableMapperRuleAttribute.class);
+        
when(tableMapperRuleAttribute.getLogicTableNames()).thenReturn(Collections.singleton("foo_tbl"));
+        ShardingSphereRule rule = mock(ShardingSphereRule.class);
+        when(rule.getAttributes()).thenReturn(new 
RuleAttributes(tableMapperRuleAttribute));
+        when(database.getRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singleton(rule)));
+        
when(database.getIdentifierContext()).thenReturn(DatabaseIdentifierContextFactory.createDefault());
+        when(database.getAllSchemas()).thenReturn(Collections.singleton(new 
ShardingSphereSchema("FOO_DB", protocolType)));
+        PersistServiceFacade persistServiceFacade = mockPersistServiceFacade();
+        setPersistServiceFacade(persistServiceFacade);
+        TableMetaData tableMetaData = new TableMetaData("foo_tbl", 
Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
+        try (MockedStatic<MetaDataLoader> metaDataLoader = 
mockStatic(MetaDataLoader.class)) {
+            metaDataLoader.when(() -> 
MetaDataLoader.load(any())).thenAnswer(invocation -> {
+                Collection<MetaDataLoaderMaterial> loaderMaterials = 
invocation.getArgument(0);
+                String storageSchemaName = 
loaderMaterials.iterator().next().getDefaultSchemaName();
+                return Collections.singletonMap(storageSchemaName, new 
SchemaMetaData(storageSchemaName, Collections.singleton(tableMetaData)));
+            });
+            contextManager.reloadSchema(database, "FOO_DB", "foo_ds");
+        }
+        verify(database).addSchema(argThat(schema -> 
"FOO_DB".equals(schema.getName()) && 1 == schema.getAllTables().size()));
+        
verify(persistServiceFacade.getMetaDataFacade().getDatabaseMetaDataFacade().getSchema()).alterByRefresh(eq("foo_db"),
+                argThat(schema -> "FOO_DB".equals(schema.getName()) && 1 == 
schema.getAllTables().size()));
+    }
+    
     @Test
     void assertReloadTableWithSQLException() {
         PersistServiceFacade persistServiceFacade = mockPersistServiceFacade();

Reply via email to