You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2025/11/12 03:15:21 UTC

(shardingsphere) branch master updated: Add DialectSystemDatabase.getSystemSchemas() (#37075)

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 <zh...@apache.org>
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));