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 39f926eb35a Refactor ShowStorageUnitExecutor (#28697)
39f926eb35a is described below

commit 39f926eb35a6e59f853b7d67a12eca5dec48ef26
Author: Raigor <[email protected]>
AuthorDate: Mon Oct 9 05:09:54 2023 -0500

    Refactor ShowStorageUnitExecutor (#28697)
---
 .../rql/storage/unit/ShowStorageUnitExecutor.java  | 37 +++++++++-------------
 1 file changed, 15 insertions(+), 22 deletions(-)

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 13ea8dcc689..50e7185d473 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
@@ -20,7 +20,6 @@ package 
org.apache.shardingsphere.proxy.backend.handler.distsql.rql.storage.unit
 import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import 
org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowStorageUnitsStatement;
 import 
org.apache.shardingsphere.infra.database.core.connector.ConnectionProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.datasource.pool.CatalogSwitchableDataSource;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator;
@@ -40,7 +39,6 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.Properties;
-import java.util.stream.Collectors;
 
 /**
  * Show storage unit executor.
@@ -56,14 +54,13 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
     @Override
     public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereDatabase database, final ShowStorageUnitsStatement sqlStatement) {
         Collection<LocalDataQueryResultRow> result = new LinkedList<>();
-        for (Entry<String, DataSourcePoolProperties> entry : 
getDataSourcePoolPropertiesMap(database, sqlStatement).entrySet()) {
-            String storageUnitName = entry.getKey();
-            StorageUnit storageUnit = 
database.getResourceMetaData().getStorageUnits().get(storageUnitName);
-            ConnectionProperties connectionProps = 
storageUnit.getConnectionProperties();
-            Map<String, Object> poolProps = 
entry.getValue().getPoolPropertySynonyms().getStandardProperties();
-            Map<String, Object> customProps = 
getCustomProperties(entry.getValue().getCustomProperties().getProperties(), 
connectionProps.getQueryProperties());
-            result.add(new LocalDataQueryResultRow(storageUnitName,
-                    storageUnit.getStorageType().getType(),
+        for (Entry<String, StorageUnit> entry : 
getToBeShownStorageUnits(database, sqlStatement).entrySet()) {
+            ConnectionProperties connectionProps = 
entry.getValue().getConnectionProperties();
+            DataSourcePoolProperties dataSourcePoolProperties = 
getDataSourcePoolProperties(entry.getValue());
+            Map<String, Object> poolProps = 
dataSourcePoolProperties.getPoolPropertySynonyms().getStandardProperties();
+            Map<String, Object> customProps = 
getCustomProperties(dataSourcePoolProperties.getCustomProperties().getProperties(),
 connectionProps.getQueryProperties());
+            result.add(new LocalDataQueryResultRow(entry.getKey(),
+                    entry.getValue().getStorageType().getType(),
                     connectionProps.getHostname(),
                     connectionProps.getPort(),
                     connectionProps.getCatalog(),
@@ -78,10 +75,8 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
         return result;
     }
     
-    private Map<String, DataSourcePoolProperties> 
getDataSourcePoolPropertiesMap(final ShardingSphereDatabase database, final 
ShowStorageUnitsStatement sqlStatement) {
-        Map<String, DataSourcePoolProperties> result = new 
LinkedHashMap<>(database.getResourceMetaData().getStorageUnits().size(), 1F);
-        Map<String, DataSourcePoolProperties> propsMap = 
database.getResourceMetaData().getStorageUnits().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
currentValue, LinkedHashMap::new));
+    private Map<String, StorageUnit> getToBeShownStorageUnits(final 
ShardingSphereDatabase database, final ShowStorageUnitsStatement sqlStatement) {
+        Map<String, StorageUnit> result = new 
LinkedHashMap<>(database.getResourceMetaData().getStorageUnits().size(), 1F);
         Map<String, StorageUnit> storageUnits = 
database.getResourceMetaData().getStorageUnits();
         Optional<Integer> usageCount = sqlStatement.getUsageCount();
         if (usageCount.isPresent()) {
@@ -89,23 +84,21 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
             for (Entry<String, StorageUnit> entry : 
database.getResourceMetaData().getStorageUnits().entrySet()) {
                 int currentUsageCount = 
inUsedStorageUnits.containsKey(entry.getKey()) ? 
inUsedStorageUnits.get(entry.getKey()).size() : 0;
                 if (usageCount.get().equals(currentUsageCount)) {
-                    result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageUnits.get(entry.getKey()).getStorageType(), 
entry.getValue().getDataSource()));
+                    result.put(entry.getKey(), entry.getValue());
                 }
             }
         } else {
-            for (Entry<String, StorageUnit> entry : storageUnits.entrySet()) {
-                result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageUnits.get(entry.getKey()).getStorageType(), 
entry.getValue().getDataSource()));
-            }
+            result.putAll(storageUnits);
         }
         return result;
     }
     
-    private DataSourcePoolProperties getDataSourcePoolProperties(final 
Map<String, DataSourcePoolProperties> propsMap, final String storageUnitName,
-                                                                 final 
DatabaseType databaseType, final DataSource dataSource) {
+    private DataSourcePoolProperties getDataSourcePoolProperties(final 
StorageUnit storageUnit) {
+        DataSource dataSource = storageUnit.getDataSource();
         DataSourcePoolProperties result = 
DataSourcePoolPropertiesCreator.create(
                 dataSource instanceof CatalogSwitchableDataSource ? 
((CatalogSwitchableDataSource) dataSource).getDataSource() : dataSource);
-        if (new 
DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().isInstanceConnectionAvailable()
 && propsMap.containsKey(storageUnitName)) {
-            for (Entry<String, Object> entry : 
propsMap.get(storageUnitName).getPoolPropertySynonyms().getStandardProperties().entrySet())
 {
+        if (new 
DatabaseTypeRegistry(storageUnit.getStorageType()).getDialectDatabaseMetaData().isInstanceConnectionAvailable())
 {
+            for (Entry<String, Object> entry : 
storageUnit.getDataSourcePoolProperties().getPoolPropertySynonyms().getStandardProperties().entrySet())
 {
                 if (null != entry.getValue()) {
                     
result.getPoolPropertySynonyms().getStandardProperties().put(entry.getKey(), 
entry.getValue());
                 }

Reply via email to