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 1bc023e823c Refactor ShardingSphereStatisticsBuilder (#34365)
1bc023e823c is described below

commit 1bc023e823c4d5a7b23ca614877228a7de7d2d8c
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jan 16 00:15:38 2025 +0800

    Refactor ShardingSphereStatisticsBuilder (#34365)
    
    * Refactor ShardingSphereStatisticsBuilder
    
    * Refactor ShardingSphereStatisticsBuilder
---
 .../builder/ShardingSphereStatisticsBuilder.java   | 10 +++----
 .../MySQLShardingSphereStatisticsBuilder.java      | 29 +++++---------------
 .../PostgreSQLShardingSphereStatisticsBuilder.java | 22 ++++-----------
 ...tgreSQLShardingSphereStatisticsBuilderTest.java | 32 ++++++++--------------
 .../metadata/ShardingSphereStatisticsFactory.java  | 15 +++++++++-
 5 files changed, 42 insertions(+), 66 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsBuilder.java
index feddbba3f97..16cfbd4f6eb 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/ShardingSphereStatisticsBuilder.java
@@ -17,9 +17,9 @@
 
 package org.apache.shardingsphere.infra.metadata.statistics.builder;
 
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 
 /**
@@ -31,8 +31,8 @@ public interface ShardingSphereStatisticsBuilder extends 
DatabaseTypedSPI {
     /**
      * Build ShardingSphere data.
      *
-     * @param metaData meta data
-     * @return ShardingSphere statistics
+     * @param database database
+     * @return built ShardingSphere data
      */
-    ShardingSphereStatistics build(ShardingSphereMetaData metaData);
+    ShardingSphereDatabaseData build(ShardingSphereDatabase database);
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
index f8fd2cf450f..eeff4e09998 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/MySQLShardingSphereStatisticsBuilder.java
@@ -18,13 +18,10 @@
 package org.apache.shardingsphere.infra.metadata.statistics.builder.dialect;
 
 import org.apache.shardingsphere.infra.autogen.version.ShardingSphereVersion;
-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;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereRowData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereSchemaData;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereTableData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsBuilder;
 
@@ -43,29 +40,17 @@ public final class MySQLShardingSphereStatisticsBuilder 
implements ShardingSpher
     private static final String SHARDING_TABLE_STATISTICS = 
"sharding_table_statistics";
     
     @Override
-    public ShardingSphereStatistics build(final ShardingSphereMetaData 
metaData) {
-        ShardingSphereStatistics result = new ShardingSphereStatistics();
-        for (ShardingSphereDatabase each : metaData.getAllDatabases()) {
-            ShardingSphereDatabaseData databaseData = new 
ShardingSphereDatabaseData();
-            initSchemas(each, databaseData);
-            if (!databaseData.getSchemaData().isEmpty()) {
-                result.putDatabase(each.getName(), databaseData);
-            }
+    public ShardingSphereDatabaseData build(final ShardingSphereDatabase 
database) {
+        ShardingSphereDatabaseData result = new ShardingSphereDatabaseData();
+        if (database.containsSchema(SHARDINGSPHERE)) {
+            ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
+            initClusterInformationTable(schemaData);
+            initShardingTableStatisticsTable(schemaData);
+            result.putSchema(SHARDINGSPHERE, schemaData);
         }
         return result;
     }
     
-    private void initSchemas(final ShardingSphereDatabase database, final 
ShardingSphereDatabaseData databaseData) {
-        for (ShardingSphereSchema each : database.getAllSchemas()) {
-            if (SHARDINGSPHERE.equals(each.getName())) {
-                ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
-                initClusterInformationTable(schemaData);
-                initShardingTableStatisticsTable(schemaData);
-                databaseData.putSchema(SHARDINGSPHERE, schemaData);
-            }
-        }
-    }
-    
     private void initClusterInformationTable(final ShardingSphereSchemaData 
schemaData) {
         ShardingSphereTableData tableData = new 
ShardingSphereTableData(CLUSTER_INFORMATION);
         tableData.getRows().add(new 
ShardingSphereRowData(Collections.singletonList(ShardingSphereVersion.VERSION)));
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
index 9aa63248429..dc369c79774 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilder.java
@@ -18,14 +18,12 @@
 package org.apache.shardingsphere.infra.metadata.statistics.builder.dialect;
 
 import org.apache.shardingsphere.infra.autogen.version.ShardingSphereVersion;
-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;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereRowData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereSchemaData;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereTableData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsBuilder;
 
@@ -55,32 +53,22 @@ public final class 
PostgreSQLShardingSphereStatisticsBuilder implements Sharding
     }
     
     @Override
-    public ShardingSphereStatistics build(final ShardingSphereMetaData 
metaData) {
-        ShardingSphereStatistics result = new ShardingSphereStatistics();
-        for (ShardingSphereDatabase each : metaData.getAllDatabases()) {
-            ShardingSphereDatabaseData databaseData = new 
ShardingSphereDatabaseData();
-            initSchemas(each, databaseData);
-            if (!databaseData.getSchemaData().isEmpty()) {
-                result.putDatabase(each.getName(), databaseData);
-            }
-        }
-        return result;
-    }
-    
-    private void initSchemas(final ShardingSphereDatabase database, final 
ShardingSphereDatabaseData databaseData) {
+    public ShardingSphereDatabaseData build(final ShardingSphereDatabase 
database) {
+        ShardingSphereDatabaseData result = new ShardingSphereDatabaseData();
         if (null != database.getSchema(SHARDINGSPHERE)) {
             ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
             initClusterInformationTable(schemaData);
             initShardingTableStatisticsTable(schemaData);
-            databaseData.putSchema(SHARDINGSPHERE, schemaData);
+            result.putSchema(SHARDINGSPHERE, schemaData);
         }
         for (Entry<String, Collection<String>> entry : 
INIT_DATA_SCHEMA_TABLES.entrySet()) {
             ShardingSphereSchemaData schemaData = new 
ShardingSphereSchemaData();
             if (null != database.getSchema(entry.getKey())) {
                 initTables(database.getSchema(entry.getKey()), 
entry.getValue(), schemaData);
-                databaseData.putSchema(entry.getKey(), schemaData);
+                result.putSchema(entry.getKey(), schemaData);
             }
         }
+        return result;
     }
     
     private void initClusterInformationTable(final ShardingSphereSchemaData 
schemaData) {
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
index daafa53d062..67bccef0de1 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/statistics/builder/dialect/PostgreSQLShardingSphereStatisticsBuilderTest.java
@@ -17,14 +17,12 @@
 
 package org.apache.shardingsphere.infra.metadata.statistics.builder.dialect;
 
-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;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import org.junit.jupiter.api.Test;
 
-import java.util.Collection;
 import java.util.Collections;
 
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -36,27 +34,19 @@ class PostgreSQLShardingSphereStatisticsBuilderTest {
     
     @Test
     void assertBuild() {
-        ShardingSphereMetaData metaData = mockMetaData();
-        ShardingSphereStatistics statistics = new 
PostgreSQLShardingSphereStatisticsBuilder().build(metaData);
-        assertTrue(statistics.getDatabaseData().containsKey("logic_db"));
-        
assertTrue(statistics.getDatabaseData().get("logic_db").getSchemaData().containsKey("pg_catalog"));
-        
assertTrue(statistics.getDatabaseData().get("logic_db").getSchemaData().get("pg_catalog").getTableData().containsKey("pg_class"));
+        ShardingSphereDatabase database = mockDatabase();
+        ShardingSphereDatabaseData databaseData = new 
PostgreSQLShardingSphereStatisticsBuilder().build(database);
+        assertTrue(databaseData.getSchemaData().containsKey("pg_catalog"));
+        
assertTrue(databaseData.getSchemaData().get("pg_catalog").getTableData().containsKey("pg_class"));
     }
     
-    private ShardingSphereMetaData mockMetaData() {
-        ShardingSphereMetaData result = mock(ShardingSphereMetaData.class);
-        Collection<ShardingSphereDatabase> databases = mockDatabases();
-        when(result.getAllDatabases()).thenReturn(databases);
-        return result;
-    }
-    
-    private Collection<ShardingSphereDatabase> mockDatabases() {
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        when(database.getName()).thenReturn("logic_db");
+    private ShardingSphereDatabase mockDatabase() {
+        ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getName()).thenReturn("logic_db");
         ShardingSphereSchema schema = mockSchema();
-        
when(database.getAllSchemas()).thenReturn(Collections.singleton(schema));
-        when(database.getSchema("pg_catalog")).thenReturn(schema);
-        return Collections.singleton(database);
+        when(result.getAllSchemas()).thenReturn(Collections.singleton(schema));
+        when(result.getSchema("pg_catalog")).thenReturn(schema);
+        return result;
     }
     
     private ShardingSphereSchema mockSchema() {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
index 348bb18cf9a..73fb59dc907 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/ShardingSphereStatisticsFactory.java
@@ -24,6 +24,8 @@ import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereDatabaseData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
 import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsBuilder;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -52,7 +54,7 @@ public final class ShardingSphereStatisticsFactory {
         if (!statisticsBuilder.isPresent()) {
             return new ShardingSphereStatistics();
         }
-        ShardingSphereStatistics builtStatistics = 
statisticsBuilder.get().build(metaData);
+        ShardingSphereStatistics builtStatistics = build(metaData, 
statisticsBuilder.get());
         Optional<ShardingSphereStatistics> loadedStatistics = 
persistService.getShardingSphereDataPersistService().load(metaData);
         if (!loadedStatistics.isPresent()) {
             return builtStatistics;
@@ -68,6 +70,17 @@ public final class ShardingSphereStatisticsFactory {
         return dialectDatabaseMetaData.getDefaultSchema().isPresent() ? 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL") : protocolType;
     }
     
+    private static ShardingSphereStatistics build(final ShardingSphereMetaData 
metaData, final ShardingSphereStatisticsBuilder statisticsBuilder) {
+        ShardingSphereStatistics result = new ShardingSphereStatistics();
+        for (ShardingSphereDatabase each : metaData.getAllDatabases()) {
+            ShardingSphereDatabaseData databaseData = 
statisticsBuilder.build(each);
+            if (!databaseData.getSchemaData().isEmpty()) {
+                result.putDatabase(each.getName(), databaseData);
+            }
+        }
+        return result;
+    }
+    
     private static void putStatisticsIfAbsent(final ShardingSphereStatistics 
loadedStatistics, final ShardingSphereStatistics builtStatistics) {
         
loadedStatistics.getDatabaseData().keySet().stream().filter(builtStatistics::containsDatabase).forEach(builtStatistics::dropDatabase);
         
builtStatistics.getDatabaseData().forEach(loadedStatistics::putDatabase);

Reply via email to