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 0a72b6f3b72 Add protocolType parameter to metadata loading methods 
(#39291)
0a72b6f3b72 is described below

commit 0a72b6f3b72f6b08ede1eca6d21801206e40ebe3
Author: Haoran Meng <[email protected]>
AuthorDate: Mon Aug 3 10:59:44 2026 +0800

    Add protocolType parameter to metadata loading methods (#39291)
---
 .../schema/builder/GenericSchemaBuilder.java       |  7 +++---
 .../database/schema/util/SchemaMetaDataUtils.java  | 12 ++++++----
 .../schema/util/SchemaMetaDataUtilsTest.java       | 27 +++++++++++++++++-----
 3 files changed, 33 insertions(+), 13 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 2466ee0f009..842cc9dd239 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
@@ -71,7 +71,7 @@ public final class GenericSchemaBuilder {
      * @throws SQLException SQL exception
      */
     public static Map<String, ShardingSphereSchema> build(final 
Collection<String> tableNames, final DatabaseType protocolType, final 
GenericSchemaBuilderMaterial material) throws SQLException {
-        Map<String, SchemaMetaData> result = loadSchemas(tableNames, material);
+        Map<String, SchemaMetaData> result = loadSchemas(tableNames, 
protocolType, material);
         if (!isSchemaCompatible(protocolType, material.getStorageUnits())) {
             result = translate(result, protocolType, material);
         }
@@ -86,8 +86,9 @@ public final class GenericSchemaBuilder {
         return result;
     }
     
-    private static Map<String, SchemaMetaData> loadSchemas(final 
Collection<String> tableNames, final GenericSchemaBuilderMaterial material) 
throws SQLException {
-        Collection<MetaDataLoaderMaterial> materials = 
SchemaMetaDataUtils.getMetaDataLoaderMaterials(tableNames, material);
+    private static Map<String, SchemaMetaData> loadSchemas(final 
Collection<String> tableNames, final DatabaseType protocolType,
+                                                           final 
GenericSchemaBuilderMaterial material) throws SQLException {
+        Collection<MetaDataLoaderMaterial> materials = 
SchemaMetaDataUtils.getMetaDataLoaderMaterials(tableNames, protocolType, 
material);
         return materials.isEmpty() ? Collections.emptyMap() : 
MetaDataLoader.load(materials);
     }
     
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
index e23ed99629e..dfb1bc4b7e8 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
@@ -56,10 +56,12 @@ public final class SchemaMetaDataUtils {
      * Get meta data loader materials.
      *
      * @param tableNames table name collection
+     * @param protocolType protocol type
      * @param material material
      * @return meta data loader materials
      */
-    public static Collection<MetaDataLoaderMaterial> 
getMetaDataLoaderMaterials(final Collection<String> tableNames, final 
GenericSchemaBuilderMaterial material) {
+    public static Collection<MetaDataLoaderMaterial> 
getMetaDataLoaderMaterials(final Collection<String> tableNames, final 
DatabaseType protocolType,
+                                                                               
 final GenericSchemaBuilderMaterial material) {
         Map<String, Collection<String>> dataSourceTableGroups = new 
LinkedHashMap<>();
         Collection<DatabaseType> 
unsupportedThreeTierStorageStructureDatabaseTypes = 
getUnsupportedThreeTierStorageStructureDatabaseTypes(material.getStorageUnits().values());
         DataNodes dataNodes = new DataNodes(material.getRules());
@@ -77,17 +79,19 @@ public final class SchemaMetaDataUtils {
         for (Entry<String, Collection<String>> entry : 
dataSourceTableGroups.entrySet()) {
             DatabaseType storageType = 
material.getStorageUnits().get(entry.getKey()).getStorageType();
             String defaultSchemaName = new 
DatabaseTypeRegistry(storageType).getDefaultSchemaName(material.getDefaultSchemaName());
-            result.addAll(buildMaterials(material, entry.getKey(), 
entry.getValue(), storageType, defaultSchemaName, loadTableMetadataBatchSize));
+            result.addAll(buildMaterials(material, entry.getKey(), 
entry.getValue(), protocolType, storageType, defaultSchemaName, 
loadTableMetadataBatchSize));
         }
         return result;
     }
     
     private static Collection<MetaDataLoaderMaterial> buildMaterials(final 
GenericSchemaBuilderMaterial material, final String dataSourceName, final 
Collection<String> actualTableNames,
-                                                                     final 
DatabaseType storageType, final String defaultSchemaName, final int 
loadTableMetadataBatchSize) {
+                                                                     final 
DatabaseType protocolType, final DatabaseType storageType, final String 
defaultSchemaName,
+                                                                     final int 
loadTableMetadataBatchSize) {
         Collection<MetaDataLoaderMaterial> result = new LinkedList<>();
         DataSource dataSource = getDataSource(material, dataSourceName);
         for (List<String> each : Lists.partition(new 
ArrayList<>(actualTableNames), loadTableMetadataBatchSize)) {
-            result.add(new MetaDataLoaderMaterial(normalize(each, 
material.getIdentifierContext()), dataSourceName, dataSource, storageType, 
defaultSchemaName));
+            Collection<String> tableNames = protocolType.equals(storageType) ? 
each : normalize(each, material.getIdentifierContext());
+            result.add(new MetaDataLoaderMaterial(tableNames, dataSourceName, 
dataSource, storageType, defaultSchemaName));
         }
         return result;
     }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
index 8f99c4848de..66f4096611f 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
@@ -72,6 +72,8 @@ class SchemaMetaDataUtilsTest {
     
     private static final DatabaseType ORACLE_DATABASE_TYPE = 
TypedSPILoader.getService(DatabaseType.class, "Oracle");
     
+    private static final DatabaseType POSTGRESQL_DATABASE_TYPE = 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
+    
     @AfterEach
     void clearCachedDatabaseTables() {
         
GlobalDataSourceRegistry.getInstance().getCachedDatabaseTables().clear();
@@ -84,7 +86,7 @@ class SchemaMetaDataUtilsTest {
                                           final List<List<String>> 
expectedActualTableNames, final List<String> expectedDefaultSchemaNames) {
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(storageUnits, 
Collections.singleton(mockDataNodeRule(dataNodes)), props, defaultSchemaName,
                 DatabaseIdentifierContextFactory.createDefault());
-        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 material));
+        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 FIXTURE_DATABASE_TYPE, material));
         assertThat(actual.size(), is(expectedStorageUnitNames.size()));
         for (int i = 0; i < actual.size(); i++) {
             assertThat(actual.get(i).getStorageUnitName(), 
is(expectedStorageUnitNames.get(i)));
@@ -102,7 +104,7 @@ class SchemaMetaDataUtilsTest {
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(storageUnits,
                 
Collections.singleton(mockDataNodeRule(Collections.singleton(new 
DataNode("ds.foo_db", "foo_db", "foo_tbl")))),
                 createProperties(Boolean.FALSE, null), "foo_db", 
DatabaseIdentifierContextFactory.createDefault());
-        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 material));
+        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 MYSQL_DATABASE_TYPE, material));
         assertThat(actual.size(), is(1));
         assertThat(actual.get(0).getStorageUnitName(), is("ds.foo_db"));
         assertThat(actual.get(0).getDataSource(), is(dataSource));
@@ -120,7 +122,7 @@ class SchemaMetaDataUtilsTest {
                 
Collections.singleton(mockDataNodeRule(Collections.singleton(new 
DataNode("ds.foo_db", "foo_db", "foo_tbl")))),
                 createProperties(Boolean.FALSE, null), "foo_db", 
DatabaseIdentifierContextFactory.createDefault());
         UnsupportedActualDataNodeStructureException actual = 
assertThrows(UnsupportedActualDataNodeStructureException.class,
-                () -> 
SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 material));
+                () -> 
SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 FIXTURE_DATABASE_TYPE, material));
         assertThat(actual.getMessage(), is("Can not support 3-tier structure 
for actual data node 'ds.foo_db.foo_tbl' with JDBC 'jdbc:mock'."));
     }
     
@@ -131,7 +133,7 @@ class SchemaMetaDataUtilsTest {
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(storageUnits, Collections.singleton(
                 mockDataNodeRule(Arrays.asList(new DataNode("ds_0.foo_tbl_0"), 
new DataNode("ds_0.foo_tbl_1"), new DataNode("ds_0.foo_tbl_2")))),
                 createProperties(Boolean.TRUE, 2), "foo_db", 
DatabaseIdentifierContextFactory.createDefault());
-        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 material));
+        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 FIXTURE_DATABASE_TYPE, material));
         assertThat(actual.size(), is(2));
         assertThat(actual.get(0).getStorageUnitName(), is("ds_0"));
         assertThat(new ArrayList<>(actual.get(0).getActualTableNames()), 
is(Arrays.asList("foo_tbl_0", "foo_tbl_1")));
@@ -147,7 +149,20 @@ class SchemaMetaDataUtilsTest {
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(storageUnits,
                 
Collections.singleton(mockDataNodeRule(Collections.singleton(new 
DataNode("ds_0.t_user")))), props, "foo_db",
                 DatabaseIdentifierContextFactory.create(MYSQL_DATABASE_TYPE, 
new ResourceMetaData(Collections.emptyMap(), storageUnits), props));
-        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 material));
+        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 MYSQL_DATABASE_TYPE, material));
+        assertThat(actual.size(), is(1));
+        assertThat(new ArrayList<>(actual.get(0).getActualTableNames()), 
is(Collections.singletonList("T_USER")));
+    }
+    
+    @Test
+    void 
assertGetMetaDataLoaderMaterialsPreservesActualTableNamesForSameDatabaseType() {
+        Map<String, StorageUnit> storageUnits = 
Collections.singletonMap("ds_0", mockStorageUnit(POSTGRESQL_DATABASE_TYPE, 
mock(DataSource.class)));
+        ConfigurationProperties props = createProperties(Boolean.TRUE, null);
+        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(storageUnits,
+                
Collections.singleton(mockDataNodeRule(Collections.singleton(new 
DataNode("ds_0.T_USER")))), props, "foo_db",
+                
DatabaseIdentifierContextFactory.create(POSTGRESQL_DATABASE_TYPE, new 
ResourceMetaData(Collections.emptyMap(), storageUnits), props));
+        List<MetaDataLoaderMaterial> actual = new ArrayList<>(
+                
SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 POSTGRESQL_DATABASE_TYPE, material));
         assertThat(actual.size(), is(1));
         assertThat(new ArrayList<>(actual.get(0).getActualTableNames()), 
is(Collections.singletonList("T_USER")));
     }
@@ -161,7 +176,7 @@ class SchemaMetaDataUtilsTest {
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(storageUnits, Collections.singleton(
                 mockDataNodeRule(Arrays.asList(new 
DataNode("ds_mysql.t_order"), new DataNode("ds_oracle.t_user")))), props, 
"foo_db",
                 DatabaseIdentifierContextFactory.create(MYSQL_DATABASE_TYPE, 
new ResourceMetaData(Collections.emptyMap(), storageUnits), props));
-        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 material));
+        List<MetaDataLoaderMaterial> actual = new 
ArrayList<>(SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("foo_tbl"),
 MYSQL_DATABASE_TYPE, material));
         assertThat(actual.size(), is(2));
         assertThat(actual.get(0).getStorageUnitName(), is("ds_mysql"));
         assertThat(new ArrayList<>(actual.get(0).getActualTableNames()), 
is(Collections.singletonList("t_order")));

Reply via email to