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 69adc0107ef Refactor system table option handling to use driver query 
system catalog option (#35284)
69adc0107ef is described below

commit 69adc0107ef6a11c258f1a4429b978ea83d9ef80
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Mon Apr 28 19:29:34 2025 +0800

    Refactor system table option handling to use driver query system catalog 
option (#35284)
---
 .../database/schema/util/SystemSchemaUtils.java    |  9 ++---
 .../database/metadata/DialectDatabaseMetaData.java | 13 +++----
 .../option/table/DefaultSystemTableOption.java     | 39 --------------------
 ... => DialectDriverQuerySystemCatalogOption.java} | 42 +++++++++++++++++-----
 .../database/OpenGaussDatabaseMetaData.java        | 10 +++---
 ...> OpenGaussDriverQuerySystemCatalogOption.java} | 37 ++++++++++++++-----
 .../option/OpenGaussSystemTableOptionTest.java     | 14 ++++----
 .../enumerable/EnumerableScanExecutor.java         |  8 ++---
 .../executor/utils/StatisticsAssembleUtils.java    | 33 ++++++++---------
 9 files changed, 105 insertions(+), 100 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 ff8baee5c69..7286bea6446 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
@@ -20,7 +20,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.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.metadata.option.table.DialectDriverQuerySystemCatalogOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.system.SystemDatabase;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.Expr
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.dml.item.ProjectionSegment;
 
 import java.util.Collection;
+import java.util.Optional;
 
 /**
  * System schema utility.
@@ -77,9 +78,9 @@ public final class SystemSchemaUtils {
      * @return whether query or not
      */
     public static boolean isDriverQuerySystemCatalog(final DatabaseType 
databaseType, final Collection<ProjectionSegment> projections) {
-        DialectSystemTableOption systemTableOption = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSystemTableOption();
-        return systemTableOption.isDriverQuerySystemCatalog()
+        Optional<DialectDriverQuerySystemCatalogOption> 
driverQuerySystemCatalogOption = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getDriverQuerySystemCatalogOption();
+        return driverQuerySystemCatalogOption.isPresent()
                 && 1 == projections.size() && projections.iterator().next() 
instanceof ExpressionProjectionSegment
-                && 
systemTableOption.isSystemCatalogQueryExpressions(((ExpressionProjectionSegment)
 projections.iterator().next()).getText());
+                && 
driverQuerySystemCatalogOption.get().isSystemCatalogQueryExpressions(((ExpressionProjectionSegment)
 projections.iterator().next()).getText());
     }
 }
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
index a8159a4c8f7..95b3d0f09ef 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
@@ -27,13 +27,14 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.join.DialectJoinOrderOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DefaultSchemaOption;
 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.DefaultSystemTableOption;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectSystemTableOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectDriverQuerySystemCatalogOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.TableNamePatternType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption;
 import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 
+import java.util.Optional;
+
 /**
  * Dialect database meta data.
  */
@@ -74,12 +75,12 @@ public interface DialectDatabaseMetaData extends 
DatabaseTypedSPI {
     }
     
     /**
-     * Get system table option.
+     * Get driver query system catalog option.
      *
-     * @return system table option
+     * @return driver query system catalog option
      */
-    default DialectSystemTableOption getSystemTableOption() {
-        return new DefaultSystemTableOption();
+    default Optional<DialectDriverQuerySystemCatalogOption> 
getDriverQuerySystemCatalogOption() {
+        return Optional.empty();
     }
     
     /**
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DefaultSystemTableOption.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DefaultSystemTableOption.java
deleted file mode 100644
index 6f55f31079c..00000000000
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DefaultSystemTableOption.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table;
-
-/**
- * Default system table option.
- */
-public final class DefaultSystemTableOption implements 
DialectSystemTableOption {
-    
-    @Override
-    public boolean isDriverQuerySystemCatalog() {
-        return false;
-    }
-    
-    @Override
-    public boolean isSystemCatalogQueryExpressions(final String 
projectionExpression) {
-        return false;
-    }
-    
-    @Override
-    public boolean isSystemTable(final String tableName) {
-        return false;
-    }
-}
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectSystemTableOption.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectDriverQuerySystemCatalogOption.java
similarity index 64%
rename from 
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectSystemTableOption.java
rename to 
infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectDriverQuerySystemCatalogOption.java
index 205d5b4ce83..c8da7772be8 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectSystemTableOption.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectDriverQuerySystemCatalogOption.java
@@ -18,16 +18,9 @@
 package 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table;
 
 /**
- * Dialect system table option.
+ * Dialect driver query system catalog option.
  */
-public interface DialectSystemTableOption {
-    
-    /**
-     * Whether driver query system catalog.
-     *
-     * @return query or not
-     */
-    boolean isDriverQuerySystemCatalog();
+public interface DialectDriverQuerySystemCatalogOption {
     
     /**
      * Whether system catalog query expressions.
@@ -44,4 +37,35 @@ public interface DialectSystemTableOption {
      * @return is system table or not
      */
     boolean isSystemTable(String tableName);
+    
+    /**
+     * Whether database data table.
+     *
+     * @param tableName table name
+     * @return is database data table or not
+     */
+    boolean isDatabaseDataTable(String tableName);
+    
+    /**
+     * Whether table data table.
+     *
+     * @param tableName table name
+     * @return is table data table or not
+     */
+    boolean isTableDataTable(String tableName);
+    
+    /**
+     * Whether role data table.
+     *
+     * @param tableName table name
+     * @return is role data table or not
+     */
+    boolean isRoleDataTable(String tableName);
+    
+    /**
+     * Get dat compatibility.
+     *
+     * @return dat compatibility
+     */
+    String getDatCompatibility();
 }
diff --git 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
index 82ab7cec3c5..b2923141415 100644
--- 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
+++ 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java
@@ -23,12 +23,14 @@ import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.index.DialectIndexOption;
 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.metadata.option.table.DialectDriverQuerySystemCatalogOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.TableNamePatternType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption;
 import 
org.apache.shardingsphere.infra.database.opengauss.metadata.database.option.OpenGaussDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.opengauss.metadata.database.option.OpenGaussSchemaOption;
-import 
org.apache.shardingsphere.infra.database.opengauss.metadata.database.option.OpenGaussSystemTableOption;
+import 
org.apache.shardingsphere.infra.database.opengauss.metadata.database.option.OpenGaussDriverQuerySystemCatalogOption;
+
+import java.util.Optional;
 
 /**
  * Database meta data of openGauss.
@@ -56,8 +58,8 @@ public final class OpenGaussDatabaseMetaData implements 
DialectDatabaseMetaData
     }
     
     @Override
-    public DialectSystemTableOption getSystemTableOption() {
-        return new OpenGaussSystemTableOption();
+    public Optional<DialectDriverQuerySystemCatalogOption> 
getDriverQuerySystemCatalogOption() {
+        return Optional.of(new OpenGaussDriverQuerySystemCatalogOption());
     }
     
     @Override
diff --git 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussSystemTableOption.java
 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDriverQuerySystemCatalogOption.java
similarity index 61%
rename from 
infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussSystemTableOption.java
rename to 
infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDriverQuerySystemCatalogOption.java
index d88c87c15e0..6245d2aa2f7 100644
--- 
a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussSystemTableOption.java
+++ 
b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDriverQuerySystemCatalogOption.java
@@ -18,25 +18,26 @@
 package 
org.apache.shardingsphere.infra.database.opengauss.metadata.database.option;
 
 import com.cedarsoftware.util.CaseInsensitiveSet;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectSystemTableOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectDriverQuerySystemCatalogOption;
 
 import java.util.Arrays;
 import java.util.Collection;
 
 /**
- * System table option for openGauss.
+ * Driver query system catalog option for openGauss.
  */
-public final class OpenGaussSystemTableOption implements 
DialectSystemTableOption {
+public final class OpenGaussDriverQuerySystemCatalogOption implements 
DialectDriverQuerySystemCatalogOption {
     
     private static final Collection<String> SYSTEM_CATALOG_QUERY_EXPRESSIONS = 
new CaseInsensitiveSet<>(
             Arrays.asList("version()", 
"intervaltonum(gs_password_deadline())", "gs_password_notifytime()"));
     
-    private static final Collection<String> SYSTEM_CATALOG_TABLES = new 
CaseInsensitiveSet<>(Arrays.asList("pg_database", "pg_tables", "pg_roles"));
+    private static final String DATABASE_DATA_TABLE = "pg_database";
     
-    @Override
-    public boolean isDriverQuerySystemCatalog() {
-        return true;
-    }
+    private static final String TABLE_DATA_TABLE = "pg_tables";
+    
+    private static final String ROLE_DATA_TABLE = "pg_roles";
+    
+    private static final Collection<String> SYSTEM_CATALOG_TABLES = new 
CaseInsensitiveSet<>(Arrays.asList(DATABASE_DATA_TABLE, TABLE_DATA_TABLE, 
ROLE_DATA_TABLE));
     
     @Override
     public boolean isSystemCatalogQueryExpressions(final String 
projectionExpression) {
@@ -47,4 +48,24 @@ public final class OpenGaussSystemTableOption implements 
DialectSystemTableOptio
     public boolean isSystemTable(final String tableName) {
         return SYSTEM_CATALOG_TABLES.contains(tableName);
     }
+    
+    @Override
+    public boolean isDatabaseDataTable(final String tableName) {
+        return DATABASE_DATA_TABLE.equalsIgnoreCase(tableName);
+    }
+    
+    @Override
+    public boolean isTableDataTable(final String tableName) {
+        return TABLE_DATA_TABLE.equalsIgnoreCase(tableName);
+    }
+    
+    @Override
+    public boolean isRoleDataTable(final String tableName) {
+        return ROLE_DATA_TABLE.equalsIgnoreCase(tableName);
+    }
+    
+    @Override
+    public String getDatCompatibility() {
+        return "PG";
+    }
 }
diff --git 
a/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussSystemTableOptionTest.java
 
b/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussSystemTableOptionTest.java
index 7d5ec44cb16..32da68400a4 100644
--- 
a/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussSystemTableOptionTest.java
+++ 
b/infra/database/type/opengauss/src/test/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussSystemTableOptionTest.java
@@ -26,12 +26,12 @@ class OpenGaussSystemTableOptionTest {
     
     @Test
     public void assertIsSystemCatalogQueryExpressions() {
-        assertTrue(new 
OpenGaussSystemTableOption().isSystemCatalogQueryExpressions("version()"));
-        assertTrue(new 
OpenGaussSystemTableOption().isSystemCatalogQueryExpressions("intervaltonum(gs_password_deadline())"));
-        assertTrue(new 
OpenGaussSystemTableOption().isSystemCatalogQueryExpressions("gs_password_notifytime()"));
-        assertTrue(new 
OpenGaussSystemTableOption().isSystemCatalogQueryExpressions("Version()"));
-        assertTrue(new 
OpenGaussSystemTableOption().isSystemCatalogQueryExpressions("Intervaltonum(gs_password_deadline())"));
-        assertTrue(new 
OpenGaussSystemTableOption().isSystemCatalogQueryExpressions("Gs_password_notifytime()"));
-        assertFalse(new 
OpenGaussSystemTableOption().isSystemCatalogQueryExpressions("invalid()"));
+        assertTrue(new 
OpenGaussDriverQuerySystemCatalogOption().isSystemCatalogQueryExpressions("version()"));
+        assertTrue(new 
OpenGaussDriverQuerySystemCatalogOption().isSystemCatalogQueryExpressions("intervaltonum(gs_password_deadline())"));
+        assertTrue(new 
OpenGaussDriverQuerySystemCatalogOption().isSystemCatalogQueryExpressions("gs_password_notifytime()"));
+        assertTrue(new 
OpenGaussDriverQuerySystemCatalogOption().isSystemCatalogQueryExpressions("Version()"));
+        assertTrue(new 
OpenGaussDriverQuerySystemCatalogOption().isSystemCatalogQueryExpressions("Intervaltonum(gs_password_deadline())"));
+        assertTrue(new 
OpenGaussDriverQuerySystemCatalogOption().isSystemCatalogQueryExpressions("Gs_password_notifytime()"));
+        assertFalse(new 
OpenGaussDriverQuerySystemCatalogOption().isSystemCatalogQueryExpressions("invalid()"));
     }
 }
diff --git 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
index 542ac90d7a9..acc85065265 100644
--- 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
+++ 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
@@ -25,7 +25,7 @@ import org.apache.calcite.linq4j.Enumerator;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
 import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
-import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectSystemTableOption;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectDriverQuerySystemCatalogOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.system.SystemDatabase;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
@@ -153,9 +153,9 @@ public final class EnumerableScanExecutor implements 
ScanExecutor {
     }
     
     private Enumerable<Object> createMemoryEnumerable(final String 
databaseName, final String schemaName, final ShardingSphereTable table, final 
DatabaseType databaseType) {
-        DialectSystemTableOption systemTableOption = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getSystemTableOption();
-        if (systemTableOption.isDriverQuerySystemCatalog() && 
systemTableOption.isSystemTable(table.getName())) {
-            return 
createMemoryEnumerator(StatisticsAssembleUtils.assembleTableStatistics(table, 
federationContext.getMetaData()), table, databaseType);
+        Optional<DialectDriverQuerySystemCatalogOption> 
driverQuerySystemCatalogOption = new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getDriverQuerySystemCatalogOption();
+        if (driverQuerySystemCatalogOption.isPresent() && 
driverQuerySystemCatalogOption.get().isSystemTable(table.getName())) {
+            return 
createMemoryEnumerator(StatisticsAssembleUtils.assembleTableStatistics(table, 
federationContext.getMetaData(), driverQuerySystemCatalogOption.get()), table, 
databaseType);
         }
         Optional<TableStatistics> tableStatistics = 
Optional.ofNullable(statistics.getDatabaseStatistics(databaseName))
                 .map(optional -> 
optional.getSchemaStatistics(schemaName)).map(optional -> 
optional.getTableStatistics(table.getName()));
diff --git 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
index 867e9595b04..e638f61748e 100644
--- 
a/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
+++ 
b/kernel/sql-federation/executor/src/main/java/org/apache/shardingsphere/sqlfederation/executor/utils/StatisticsAssembleUtils.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.sqlfederation.executor.utils;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.authority.rule.AuthorityRule;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectDriverQuerySystemCatalogOption;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -37,45 +38,39 @@ import java.util.Collection;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class StatisticsAssembleUtils {
     
-    private static final String DAT_COMPATIBILITY = "PG";
-    
-    private static final String PG_DATABASE = "pg_database";
-    
-    private static final String PG_TABLES = "pg_tables";
-    
-    private static final String PG_ROLES = "pg_roles";
-    
     /**
      * Assemble table statistics.
      *
      * @param table table
      * @param metaData meta data
+     * @param driverQuerySystemCatalogOption driver query system catalog option
      * @return table statistics
      */
-    public static TableStatistics assembleTableStatistics(final 
ShardingSphereTable table, final ShardingSphereMetaData metaData) {
+    public static TableStatistics assembleTableStatistics(final 
ShardingSphereTable table, final ShardingSphereMetaData metaData,
+                                                          final 
DialectDriverQuerySystemCatalogOption driverQuerySystemCatalogOption) {
         TableStatistics result = new TableStatistics(table.getName());
-        if (PG_DATABASE.equalsIgnoreCase(table.getName())) {
-            assembleOpenGaussDatabaseData(result, metaData.getAllDatabases());
-        } else if (PG_TABLES.equalsIgnoreCase(table.getName())) {
+        if 
(driverQuerySystemCatalogOption.isDatabaseDataTable(table.getName())) {
+            assembleDatabaseData(result, metaData.getAllDatabases(), 
driverQuerySystemCatalogOption.getDatCompatibility());
+        } else if 
(driverQuerySystemCatalogOption.isTableDataTable(table.getName())) {
             for (ShardingSphereDatabase each : metaData.getAllDatabases()) {
-                assembleOpenGaussTableData(result, each.getAllSchemas());
+                assembleTableData(result, each.getAllSchemas());
             }
-        } else if (PG_ROLES.equalsIgnoreCase(table.getName())) {
-            assembleOpenGaussRoleData(result, metaData);
+        } else if 
(driverQuerySystemCatalogOption.isRoleDataTable(table.getName())) {
+            assembleRoleData(result, metaData);
         }
         return result;
     }
     
-    private static void assembleOpenGaussDatabaseData(final TableStatistics 
tableStatistics, final Collection<ShardingSphereDatabase> databases) {
+    private static void assembleDatabaseData(final TableStatistics 
tableStatistics, final Collection<ShardingSphereDatabase> databases, final 
String datCompatibility) {
         for (ShardingSphereDatabase each : databases) {
             Object[] rows = new Object[15];
             rows[0] = each.getName();
-            rows[11] = DAT_COMPATIBILITY;
+            rows[11] = datCompatibility;
             tableStatistics.getRows().add(new 
RowStatistics(Arrays.asList(rows)));
         }
     }
     
-    private static void assembleOpenGaussTableData(final TableStatistics 
tableStatistics, final Collection<ShardingSphereSchema> schemas) {
+    private static void assembleTableData(final TableStatistics 
tableStatistics, final Collection<ShardingSphereSchema> schemas) {
         for (ShardingSphereSchema schema : schemas) {
             for (ShardingSphereTable each : schema.getAllTables()) {
                 Object[] rows = new Object[10];
@@ -86,7 +81,7 @@ public final class StatisticsAssembleUtils {
         }
     }
     
-    private static void assembleOpenGaussRoleData(final TableStatistics 
tableStatistics, final ShardingSphereMetaData metaData) {
+    private static void assembleRoleData(final TableStatistics 
tableStatistics, final ShardingSphereMetaData metaData) {
         for (Grantee each : 
metaData.getGlobalRuleMetaData().getSingleRule(AuthorityRule.class).getGrantees())
 {
             Object[] rows = new Object[27];
             rows[0] = each.getUsername();

Reply via email to