This is an automated email from the ASF dual-hosted git repository.

sunnianjun 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 4c6dfcf6af8 Refactor usage of StorageUnitMetaData.getStorageTypes() 
(#28171)
4c6dfcf6af8 is described below

commit 4c6dfcf6af87169dacd5124f5389b1f3ea50d216
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Aug 18 23:55:26 2023 +0800

    Refactor usage of StorageUnitMetaData.getStorageTypes() (#28171)
    
    * Refactor ShardingSphereTableDataCollectorUtils
    
    * Refactor ShowStorageUnitExecutor
    
    * Refactor ShardingSphereProxyVersion
    
    * Refactor FrontDatabaseProtocolTypeFactory
    
    * Refactor TransactionRule
---
 .../ShardingSphereTableDataCollectorUtils.java     | 54 +++++++++++-----------
 .../collector/tables/PgClassTableCollector.java    |  2 +-
 .../tables/PgNamespaceTableCollector.java          |  2 +-
 .../transaction/rule/TransactionRule.java          |  2 +-
 .../rql/storage/unit/ShowStorageUnitExecutor.java  |  6 +--
 .../proxy/version/ShardingSphereProxyVersion.java  |  3 +-
 .../protocol/FrontDatabaseProtocolTypeFactory.java |  2 +-
 7 files changed, 36 insertions(+), 35 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
index 96849f50ac9..05b1ead4dbd 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
@@ -44,54 +44,64 @@ public final class ShardingSphereTableDataCollectorUtils {
     /**
      * Collect row data.
      *
-     * @param shardingSphereDatabase ShardingSphere database
-     * @param sql sql
+     * @param database ShardingSphere database
      * @param table table
      * @param selectedColumnNames selected column names
+     * @param sql SQL
      * @return ShardingSphere row data
      * @throws SQLException sql exception
      */
-    public static Collection<ShardingSphereRowData> collectRowData(final 
ShardingSphereDatabase shardingSphereDatabase, final String sql, final 
ShardingSphereTable table,
-                                                                   final 
Collection<String> selectedColumnNames) throws SQLException {
-        if (isProtocolTypeAndStorageTypeDifferent(shardingSphereDatabase)) {
+    public static Collection<ShardingSphereRowData> collectRowData(final 
ShardingSphereDatabase database, final ShardingSphereTable table,
+                                                                   final 
Collection<String> selectedColumnNames, final String sql) throws SQLException {
+        if (isDifferentProtocolAndStorageType(database)) {
             return Collections.emptyList();
         }
         Collection<ShardingSphereRowData> result = new LinkedList<>();
-        for (StorageUnit each : 
shardingSphereDatabase.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values())
 {
+        for (StorageUnit each : 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values())
 {
             try (
                     Connection connection = 
each.getDataSource().getConnection();
                     Statement statement = connection.createStatement();
                     ResultSet resultSet = statement.executeQuery(sql)) {
-                result.addAll(getRows(resultSet, table, selectedColumnNames));
+                result.addAll(getRows(table, selectedColumnNames, resultSet));
             }
         }
         return result;
     }
     
-    private static boolean isProtocolTypeAndStorageTypeDifferent(final 
ShardingSphereDatabase shardingSphereDatabase) {
-        return 
!shardingSphereDatabase.getResourceMetaData().getStorageTypes().values().stream().allMatch(each
 -> each.getType().equals(shardingSphereDatabase.getProtocolType().getType()));
+    private static boolean isDifferentProtocolAndStorageType(final 
ShardingSphereDatabase database) {
+        return 
!database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values().stream().allMatch(each
 -> each.getStorageType().equals(database.getProtocolType()));
     }
     
-    private static Collection<ShardingSphereRowData> getRows(final ResultSet 
resultSet, final ShardingSphereTable table, final Collection<String> 
selectedColumnNames) throws SQLException {
+    private static Collection<ShardingSphereRowData> getRows(final 
ShardingSphereTable table, final Collection<String> selectedColumnNames, final 
ResultSet resultSet) throws SQLException {
         Collection<ShardingSphereRowData> result = new LinkedList<>();
         while (resultSet.next()) {
-            result.add(new ShardingSphereRowData(getRow(table, resultSet, 
selectedColumnNames)));
+            result.add(new ShardingSphereRowData(getRow(table, 
selectedColumnNames, resultSet)));
         }
         return result;
     }
     
-    private static List<Object> getRow(final ShardingSphereTable table, final 
ResultSet resultSet, final Collection<String> selectedColumnNames) throws 
SQLException {
+    private static List<Object> getRow(final ShardingSphereTable table, final 
Collection<String> selectedColumnNames, final ResultSet resultSet) throws 
SQLException {
         List<Object> result = new LinkedList<>();
         for (ShardingSphereColumn each : table.getColumnValues()) {
-            if (selectedColumnNames.contains(each.getName())) {
-                
result.add(convertIfNecessary(resultSet.getObject(each.getName()), 
each.getDataType()));
-            } else {
-                result.add(mockValue(each.getDataType()));
-            }
+            result.add(selectedColumnNames.contains(each.getName()) ? 
convertValueIfNecessary(resultSet.getObject(each.getName()), 
each.getDataType()) : mockValue(each.getDataType()));
         }
         return result;
     }
     
+    private static Object convertValueIfNecessary(final Object data, final int 
dataType) {
+        if (null == data) {
+            return null;
+        }
+        switch (dataType) {
+            case Types.ARRAY:
+                return data.toString();
+            case Types.BIGINT:
+                return Long.valueOf(data.toString());
+            default:
+                return data;
+        }
+    }
+    
     private static Object mockValue(final int dataType) {
         switch (dataType) {
             case Types.BIGINT:
@@ -112,14 +122,4 @@ public final class ShardingSphereTableDataCollectorUtils {
                 return null;
         }
     }
-    
-    private static Object convertIfNecessary(final Object data, final int 
dataType) {
-        if (Types.ARRAY == dataType) {
-            return null == data ? null : data.toString();
-        }
-        if (Types.BIGINT == dataType) {
-            return null == data ? null : Long.valueOf(data.toString());
-        }
-        return data;
-    }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
index 22f7b2fc416..b72ff4290b5 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
@@ -52,7 +52,7 @@ public final class PgClassTableCollector implements 
ShardingSphereStatisticsColl
     public Optional<ShardingSphereTableData> collect(final String 
databaseName, final ShardingSphereTable table,
                                                      final Map<String, 
ShardingSphereDatabase> shardingSphereDatabases) throws SQLException {
         Collection<ShardingSphereRowData> rows = 
ShardingSphereTableDataCollectorUtils.collectRowData(shardingSphereDatabases.get(databaseName),
-                SELECT_SQL, table, 
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()));
+                table, 
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()),
 SELECT_SQL);
         Collection<ShardingSphereRowData> rowData = decorateTableName(rows, 
table, shardingSphereDatabases.get(databaseName).getRuleMetaData().getRules());
         ShardingSphereTableData result = new ShardingSphereTableData(PG_CLASS);
         result.getRows().addAll(rowData);
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
index b6d16c2803c..bdea1de566b 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
@@ -46,7 +46,7 @@ public final class PgNamespaceTableCollector implements 
ShardingSphereStatistics
     public Optional<ShardingSphereTableData> collect(final String 
databaseName, final ShardingSphereTable table,
                                                      final Map<String, 
ShardingSphereDatabase> shardingSphereDatabases) throws SQLException {
         Collection<ShardingSphereRowData> rows = 
ShardingSphereTableDataCollectorUtils.collectRowData(shardingSphereDatabases.get(databaseName),
-                SELECT_SQL, table, 
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()));
+                table, 
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()),
 SELECT_SQL);
         ShardingSphereTableData result = new 
ShardingSphereTableData(PG_NAMESPACE);
         result.getRows().addAll(rows);
         return Optional.of(result);
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
index 90529dbe0bd..ce567379c56 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
@@ -72,7 +72,7 @@ public final class TransactionRule implements GlobalRule, 
ResourceHeldRule<Shard
         for (Entry<String, ShardingSphereDatabase> entry : 
databases.entrySet()) {
             ShardingSphereDatabase database = entry.getValue();
             
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().forEach((key,
 value) -> dataSourceMap.put(database.getName() + "." + key, 
value.getDataSource()));
-            database.getResourceMetaData().getStorageTypes().forEach((key, 
value) -> databaseTypes.put(database.getName() + "." + key, value));
+            
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().forEach((key,
 value) -> databaseTypes.put(database.getName() + "." + key, 
value.getStorageType()));
         }
         if (dataSourceMap.isEmpty()) {
             return new ShardingSphereTransactionManagerEngine(defaultType);
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
index a28ba7aeb3f..256febd2fc2 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
@@ -96,7 +96,7 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
         Map<String, DataSourcePoolProperties> result = new 
LinkedHashMap<>(database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().size(),
 1F);
         Map<String, DataSourcePoolProperties> propsMap = 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet().stream()
                 .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
currentValue, LinkedHashMap::new));
-        Map<String, DatabaseType> storageTypes = 
database.getResourceMetaData().getStorageTypes();
+        Map<String, StorageUnit> storageUnits = 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits();
         Optional<Integer> usageCount = sqlStatement.getUsageCount();
         if (usageCount.isPresent()) {
             Map<String, Collection<String>> inUsedStorageUnits = 
StorageUnitUtils.getInUsedStorageUnits(
@@ -104,12 +104,12 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
             for (Entry<String, StorageUnit> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet())
 {
                 Integer currentUsageCount = 
inUsedStorageUnits.containsKey(entry.getKey()) ? 
inUsedStorageUnits.get(entry.getKey()).size() : 0;
                 if (usageCount.get().equals(currentUsageCount)) {
-                    result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageTypes.get(entry.getKey()), entry.getValue().getDataSource()));
+                    result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageUnits.get(entry.getKey()).getStorageType(), 
entry.getValue().getDataSource()));
                 }
             }
         } else {
             for (Entry<String, StorageUnit> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet())
 {
-                result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageTypes.get(entry.getKey()), entry.getValue().getDataSource()));
+                result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageUnits.get(entry.getKey()).getStorageType(), 
entry.getValue().getDataSource()));
             }
         }
         return result;
diff --git 
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
 
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
index 77cca55965c..4781eb78d33 100644
--- 
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
+++ 
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
@@ -73,7 +73,8 @@ public final class ShardingSphereProxyVersion {
     }
     
     private static Optional<DataSource> findDataSourceByProtocolType(final 
String databaseName, final ResourceMetaData resourceMetaData, final 
DatabaseType protocolType) {
-        Optional<String> dataSourceName = 
resourceMetaData.getStorageTypes().entrySet().stream().filter(entry -> 
entry.getValue().equals(protocolType)).map(Entry::getKey).findFirst();
+        Optional<String> dataSourceName = 
resourceMetaData.getStorageUnitMetaData().getStorageUnits().entrySet()
+                .stream().filter(entry -> 
entry.getValue().getStorageType().equals(protocolType)).map(Entry::getKey).findFirst();
         return dataSourceName.flatMap(optional -> Optional.ofNullable(
                 
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName, 
resourceMetaData.getStorageUnitMetaData().getDataSources()).get(optional)));
     }
diff --git 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
index 3becba054cc..b6c1589fe84 100644
--- 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
+++ 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
@@ -51,7 +51,7 @@ public final class FrontDatabaseProtocolTypeFactory {
             return TypedSPILoader.getService(DatabaseType.class, 
DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE);
         }
         Optional<ShardingSphereDatabase> database = 
metaDataContexts.getMetaData().getDatabases().values().stream().filter(ShardingSphereDatabase::containsDataSource).findFirst();
-        return database.isPresent() ? 
database.get().getResourceMetaData().getStorageTypes().values().iterator().next()
+        return database.isPresent() ? 
database.get().getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values().iterator().next().getStorageType()
                 : TypedSPILoader.getService(DatabaseType.class, 
DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE);
     }
     

Reply via email to