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 6e6a74a6464 Add DialectSystemDatabase.getSystemSchemas() (#37075)
6e6a74a6464 is described below

commit 6e6a74a646496a0f3faf536156e8d1eaa14b5686
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Nov 12 11:15:15 2025 +0800

    Add DialectSystemDatabase.getSystemSchemas() (#37075)
---
 .../core/metadata/database/system/DialectSystemDatabase.java |  8 ++++++++
 .../core/metadata/database/system/SystemDatabase.java        | 10 ++++++++++
 .../metadata/database/system/FirebirdSystemDatabase.java     |  5 +++++
 .../h2/metadata/database/system/H2SystemDatabase.java        |  5 +++++
 .../mysql/metadata/database/system/MySQLSystemDatabase.java  |  5 +++++
 .../metadata/database/system/OpenGaussSystemDatabase.java    |  6 ++++++
 .../metadata/database/system/PostgreSQLSystemDatabase.java   |  6 ++++++
 .../database/schema/builder/SystemSchemaBuilder.java         | 12 ++++--------
 8 files changed, 49 insertions(+), 8 deletions(-)

diff --git 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/DialectSystemDatabase.java
 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/DialectSystemDatabase.java
index 7de3e2c28a6..98ec41ba9d4 100644
--- 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/DialectSystemDatabase.java
+++ 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/DialectSystemDatabase.java
@@ -36,6 +36,14 @@ public interface DialectSystemDatabase extends 
DatabaseTypedSPI {
      */
     Map<String, Collection<String>> getSystemDatabaseSchemaMap();
     
+    /**
+     * Get system database schema map.
+     *
+     * @param databaseName database name
+     * @return system database schema map
+     */
+    Collection<String> getSystemSchemas(String databaseName);
+    
     /**
      * Get system schemas.
      *
diff --git 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/SystemDatabase.java
 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/SystemDatabase.java
index 96432844391..77b07b77e76 100644
--- 
a/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/SystemDatabase.java
+++ 
b/database/connector/core/src/main/java/org/apache/shardingsphere/database/connector/core/metadata/database/system/SystemDatabase.java
@@ -42,6 +42,16 @@ public final class SystemDatabase {
         return DatabaseTypedSPILoader.findService(DialectSystemDatabase.class, 
databaseType).map(DialectSystemDatabase::getSystemDatabaseSchemaMap).orElse(Collections.emptyMap());
     }
     
+    /**
+     * Get system schemas.
+     *
+     * @param databaseName database name
+     * @return system schemas
+     */
+    public Collection<String> getSystemSchemas(final String databaseName) {
+        return DatabaseTypedSPILoader.findService(DialectSystemDatabase.class, 
databaseType).map(optional -> 
optional.getSystemSchemas(databaseName)).orElse(Collections.emptyList());
+    }
+    
     /**
      * Get system schemas.
      *
diff --git 
a/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/database/system/FirebirdSystemDatabase.java
 
b/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/database/system/FirebirdSystemDatabase.java
index bcad4fae1a6..fc8bb3d9548 100644
--- 
a/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/database/system/FirebirdSystemDatabase.java
+++ 
b/database/connector/dialect/firebird/src/main/java/org/apache/shardingsphere/database/connector/firebird/metadata/database/system/FirebirdSystemDatabase.java
@@ -50,6 +50,11 @@ public final class FirebirdSystemDatabase implements 
DialectSystemDatabase {
         return SYSTEM_DATABASE_SCHEMA_MAP;
     }
     
+    @Override
+    public Collection<String> getSystemSchemas(final String databaseName) {
+        return SYSTEM_SCHEMAS;
+    }
+    
     @Override
     public Collection<String> getSystemSchemas() {
         return SYSTEM_SCHEMAS;
diff --git 
a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/metadata/database/system/H2SystemDatabase.java
 
b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/metadata/database/system/H2SystemDatabase.java
index 2de55b95989..904dd8f2df2 100644
--- 
a/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/metadata/database/system/H2SystemDatabase.java
+++ 
b/database/connector/dialect/h2/src/main/java/org/apache/shardingsphere/database/connector/h2/metadata/database/system/H2SystemDatabase.java
@@ -33,6 +33,11 @@ public final class H2SystemDatabase implements 
DialectSystemDatabase {
         return Collections.emptyMap();
     }
     
+    @Override
+    public Collection<String> getSystemSchemas(final String databaseName) {
+        return Collections.emptyList();
+    }
+    
     @Override
     public Collection<String> getSystemSchemas() {
         return Collections.emptyList();
diff --git 
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/system/MySQLSystemDatabase.java
 
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/system/MySQLSystemDatabase.java
index 4dea28d60f9..552dccc37d1 100644
--- 
a/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/system/MySQLSystemDatabase.java
+++ 
b/database/connector/dialect/mysql/src/main/java/org/apache/shardingsphere/database/connector/mysql/metadata/database/system/MySQLSystemDatabase.java
@@ -44,6 +44,11 @@ public final class MySQLSystemDatabase implements 
DialectSystemDatabase {
         return SYSTEM_DATABASE_SCHEMA_MAP;
     }
     
+    @Override
+    public Collection<String> getSystemSchemas(final String databaseName) {
+        return SYSTEM_DATABASE_SCHEMA_MAP.getOrDefault(databaseName, 
Collections.emptyList());
+    }
+    
     @Override
     public Collection<String> getSystemSchemas() {
         return SYSTEM_DATABASE_SCHEMA_MAP.keySet();
diff --git 
a/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/database/system/OpenGaussSystemDatabase.java
 
b/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/database/system/OpenGaussSystemDatabase.java
index 07548b3013d..8358eb13bc3 100644
--- 
a/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/database/system/OpenGaussSystemDatabase.java
+++ 
b/database/connector/dialect/opengauss/src/main/java/org/apache/shardingsphere/database/connector/opengauss/metadata/database/system/OpenGaussSystemDatabase.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.database.connector.core.metadata.database.syste
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -43,6 +44,11 @@ public final class OpenGaussSystemDatabase implements 
DialectSystemDatabase {
         return SYSTEM_DATABASE_SCHEMA_MAP;
     }
     
+    @Override
+    public Collection<String> getSystemSchemas(final String databaseName) {
+        return SYSTEM_DATABASE_SCHEMA_MAP.getOrDefault(databaseName, 
Collections.emptyList());
+    }
+    
     @Override
     public Collection<String> getSystemSchemas() {
         return SYSTEM_SCHEMAS;
diff --git 
a/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/database/system/PostgreSQLSystemDatabase.java
 
b/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/database/system/PostgreSQLSystemDatabase.java
index e90c2d1991e..5cbaa3e8c1c 100644
--- 
a/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/database/system/PostgreSQLSystemDatabase.java
+++ 
b/database/connector/dialect/postgresql/src/main/java/org/apache/shardingsphere/database/connector/postgresql/metadata/database/system/PostgreSQLSystemDatabase.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.database.connector.core.metadata.database.syste
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -42,6 +43,11 @@ public final class PostgreSQLSystemDatabase implements 
DialectSystemDatabase {
         return SYSTEM_DATABASE_SCHEMA_MAP;
     }
     
+    @Override
+    public Collection<String> getSystemSchemas(final String databaseName) {
+        return SYSTEM_DATABASE_SCHEMA_MAP.getOrDefault(databaseName, 
Collections.emptyList());
+    }
+    
     @Override
     public Collection<String> getSystemSchemas() {
         return SYSTEM_SCHEMAS;
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
index 812c334a083..c075043f8fd 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
@@ -64,9 +64,7 @@ public final class SystemSchemaBuilder {
         SystemDatabase systemDatabase = new SystemDatabase(databaseType);
         boolean isSystemSchemaMetaDataEnabled = 
isSystemSchemaMetaDataEnabled(props.getProps());
         return getSystemSchemas(databaseName, databaseType, 
systemDatabase).stream()
-                .collect(Collectors.toMap(
-                        String::toLowerCase, each -> 
createSchema(databaseType, each, 
SystemSchemaManager.getAllInputStreams(databaseType.getType(), each), 
isSystemSchemaMetaDataEnabled),
-                        (oldValue, currentValue) -> currentValue, 
LinkedHashMap::new));
+                .collect(Collectors.toMap(String::toLowerCase, each -> 
createSchema(each, databaseType, isSystemSchemaMetaDataEnabled), (oldValue, 
currentValue) -> currentValue, LinkedHashMap::new));
     }
     
     private static boolean isSystemSchemaMetaDataEnabled(final Properties 
props) {
@@ -76,14 +74,12 @@ public final class SystemSchemaBuilder {
     
     private static Collection<String> getSystemSchemas(final String 
originalDatabaseName, final DatabaseType databaseType, final SystemDatabase 
systemDatabase) {
         DialectDatabaseMetaData dialectDatabaseMetaData = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData();
-        String databaseName = 
dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() ? 
"postgres" : originalDatabaseName;
-        return 
systemDatabase.getSystemDatabaseSchemaMap().getOrDefault(databaseName, 
Collections.emptyList());
+        return 
systemDatabase.getSystemSchemas(dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()
 ? "postgres" : originalDatabaseName);
     }
     
-    private static ShardingSphereSchema createSchema(final DatabaseType 
databaseType, final String schemaName, final Collection<InputStream> 
schemaStreams,
-                                                     final boolean 
isSystemSchemaMetadataEnabled) {
+    private static ShardingSphereSchema createSchema(final String schemaName, 
final DatabaseType databaseType, final boolean isSystemSchemaMetadataEnabled) {
         Collection<ShardingSphereTable> tables = new LinkedList<>();
-        for (InputStream each : schemaStreams) {
+        for (InputStream each : 
SystemSchemaManager.getAllInputStreams(databaseType.getType(), schemaName)) {
             YamlShardingSphereTable metaData = new Yaml().loadAs(each, 
YamlShardingSphereTable.class);
             if (isSystemSchemaMetadataEnabled || 
isSupportedSystemTable(databaseType, schemaName, metaData.getName())) {
                 tables.add(TABLE_SWAPPER.swapToObject(metaData));

Reply via email to