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 594d3405b2e Refactor SQLFederationEngine and SystemSchemaUtils for improved schema handling (#35275) 594d3405b2e is described below commit 594d3405b2e5976c30c2eb271f418cb0b6a4576d Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Apr 27 23:47:45 2025 +0800 Refactor SQLFederationEngine and SystemSchemaUtils for improved schema handling (#35275) --- .../database/schema/util/SystemSchemaUtils.java | 37 ++++++++++------------ .../sqlfederation/engine/SQLFederationEngine.java | 3 +- 2 files changed, 18 insertions(+), 22 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java index af8370b80c0..ff8baee5c69 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SystemSchemaUtils.java @@ -19,7 +19,7 @@ package org.apache.shardingsphere.infra.metadata.database.schema.util; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DialectSchemaOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectSystemTableOption; import org.apache.shardingsphere.infra.database.core.metadata.database.system.SystemDatabase; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; @@ -37,16 +37,16 @@ import java.util.Collection; public final class SystemSchemaUtils { /** - * Judge whether SQL statement contains system schema or not. + * Judge whether SQL statement contains system schema. * * @param databaseType database type * @param schemaNames schema names * @param database database - * @return whether SQL statement contains system schema or not + * @return contains system schema or not */ public static boolean containsSystemSchema(final DatabaseType databaseType, final Collection<String> schemaNames, final ShardingSphereDatabase database) { - DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData(); - if (database.isComplete() && !dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) { + DialectSchemaOption schemaOption = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSchemaOption(); + if (database.isComplete() && !schemaOption.getDefaultSchema().isPresent()) { return false; } SystemDatabase systemDatabase = new SystemDatabase(databaseType); @@ -55,7 +55,18 @@ public final class SystemSchemaUtils { return true; } } - return !dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent() && systemDatabase.getSystemSchemas().contains(database.getName()); + return !schemaOption.getDefaultSchema().isPresent() && systemDatabase.getSystemSchemas().contains(database.getName()); + } + + /** + * Judge whether schema is system schema. + * + * @param database database + * @return is system schema or not + */ + public static boolean isSystemSchema(final ShardingSphereDatabase database) { + DialectSchemaOption schemaOption = new DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData().getSchemaOption(); + return (!database.isComplete() || schemaOption.getDefaultSchema().isPresent()) && new SystemDatabase(database.getProtocolType()).getSystemSchemas().contains(database.getName()); } /** @@ -71,18 +82,4 @@ public final class SystemSchemaUtils { && 1 == projections.size() && projections.iterator().next() instanceof ExpressionProjectionSegment && systemTableOption.isSystemCatalogQueryExpressions(((ExpressionProjectionSegment) projections.iterator().next()).getText()); } - - /** - * Judge schema is system schema or not. - * - * @param database database - * @return whether schema is system schema or not - */ - public static boolean isSystemSchema(final ShardingSphereDatabase database) { - DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(database.getProtocolType()).getDialectDatabaseMetaData(); - if (database.isComplete() && !dialectDatabaseMetaData.getSchemaOption().getDefaultSchema().isPresent()) { - return false; - } - return new SystemDatabase(database.getProtocolType()).getSystemSchemas().contains(database.getName()); - } } diff --git a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java index 69e9329572c..4a153528d0a 100644 --- a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java +++ b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/engine/SQLFederationEngine.java @@ -136,8 +136,7 @@ public final class SQLFederationEngine implements AutoCloseable { return true; } SQLStatementContext sqlStatementContext = queryContext.getSqlStatementContext(); - boolean sqlFederationEnabled = sqlFederationRule.getConfiguration().isSqlFederationEnabled(); - if (!sqlFederationEnabled || !(sqlStatementContext instanceof SelectStatementContext)) { + if (!sqlFederationRule.getConfiguration().isSqlFederationEnabled() || !(sqlStatementContext instanceof SelectStatementContext)) { return false; } boolean allQueryUseSQLFederation = sqlFederationRule.getConfiguration().isAllQueryUseSQLFederation();