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));