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

duanzhengqiang 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 6dc9d1a3c58 Remove usage of StorageUnit.catalog (#31749)
6dc9d1a3c58 is described below

commit 6dc9d1a3c585f6285ef88084b5bd765d488e9351
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jun 18 19:24:07 2024 +0800

    Remove usage of StorageUnit.catalog (#31749)
    
    * For code format
    
    * For codes format
    
    * For codes format
    
    * Remove usage of StorageUnit.catalog
    
    * Remove usage of StorageUnit.catalog
---
 .../database/resource/unit/StorageUnit.java        |  2 +
 .../executor/AbstractDatabaseMetaDataExecutor.java |  4 +-
 .../SelectInformationSchemataExecutor.java         | 46 ++++++++++++++--------
 .../SelectInformationSchemataExecutorTest.java     |  1 +
 4 files changed, 35 insertions(+), 18 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnit.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnit.java
index 2850c4616ef..1d4eb827eca 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnit.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnit.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.metadata.database.resource.unit;
 
+import lombok.AccessLevel;
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.database.core.connector.ConnectionProperties;
 import 
org.apache.shardingsphere.infra.database.core.connector.ConnectionPropertiesParser;
@@ -41,6 +42,7 @@ public final class StorageUnit {
     
     private final DatabaseType storageType;
     
+    @Getter(AccessLevel.NONE)
     private final String catalog;
     
     private final DataSource dataSource;
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
index 23e8fe10f22..dbbe100f996 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
@@ -102,7 +102,7 @@ public abstract class AbstractDatabaseMetaDataExecutor 
implements DatabaseAdminQ
     
     protected abstract Collection<String> getDatabaseNames(ConnectionSession 
connectionSession);
     
-    protected abstract void preProcess(String databaseName, Map<String, 
Object> rows, Map<String, String> alias);
+    protected abstract void preProcess(String databaseName, Map<String, 
Object> rows, Map<String, String> alias) throws SQLException;
     
     protected abstract void postProcess();
     
@@ -169,7 +169,7 @@ public abstract class AbstractDatabaseMetaDataExecutor 
implements DatabaseAdminQ
         }
         
         @Override
-        protected void preProcess(final String databaseName, final Map<String, 
Object> rows, final Map<String, String> alias) {
+        protected void preProcess(final String databaseName, final Map<String, 
Object> rows, final Map<String, String> alias) throws SQLException {
         }
         
         @Override
diff --git 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
index a0de7ba82b4..5d138892f9e 100644
--- 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
+++ 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutor.java
@@ -18,6 +18,7 @@
 package 
org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.information;
 
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.AbstractDatabaseMetaDataExecutor.DefaultDatabaseMetaDataExecutor;
@@ -27,12 +28,16 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.Projecti
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.ShorthandProjectionSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 
+import java.sql.Connection;
+import java.sql.SQLException;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -85,7 +90,7 @@ public final class SelectInformationSchemataExecutor extends 
DefaultDatabaseMeta
     protected Collection<String> getDatabaseNames(final ConnectionSession 
connectionSession) {
         Collection<String> databaseNames = 
ProxyContext.getInstance().getAllDatabaseNames().stream()
                 .filter(each -> isAuthorized(each, 
connectionSession.getConnectionContext().getGrantee())).collect(Collectors.toList());
-        SCHEMA_WITHOUT_DATA_SOURCE.addAll(databaseNames.stream().filter(each 
-> 
!AbstractDatabaseMetaDataExecutor.hasDataSource(each)).collect(Collectors.toSet()));
+        SCHEMA_WITHOUT_DATA_SOURCE.addAll(databaseNames.stream().filter(each 
-> !hasDataSource(each)).collect(Collectors.toSet()));
         Collection<String> result = 
databaseNames.stream().filter(AbstractDatabaseMetaDataExecutor::hasDataSource).collect(Collectors.toList());
         if (!SCHEMA_WITHOUT_DATA_SOURCE.isEmpty()) {
             fillSchemasWithoutDataSource();
@@ -93,21 +98,6 @@ public final class SelectInformationSchemataExecutor extends 
DefaultDatabaseMeta
         return result;
     }
     
-    @Override
-    protected void preProcess(final String databaseName, final Map<String, 
Object> rows, final Map<String, String> alias) {
-        ResourceMetaData resourceMetaData = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData();
-        Collection<String> catalogs = 
resourceMetaData.getStorageUnits().keySet()
-                .stream().map(each -> 
resourceMetaData.getStorageUnits().get(each).getCatalog()).collect(Collectors.toSet());
-        schemaNameAlias = alias.getOrDefault(SCHEMA_NAME, "");
-        String rowValue = rows.getOrDefault(schemaNameAlias, "").toString();
-        queryDatabase = !rowValue.isEmpty();
-        if (catalogs.contains(rowValue)) {
-            rows.replace(schemaNameAlias, databaseName);
-        } else {
-            rows.clear();
-        }
-    }
-    
     private void fillSchemasWithoutDataSource() {
         if (SCHEMA_WITHOUT_DATA_SOURCE.isEmpty()) {
             return;
@@ -132,4 +122,28 @@ public final class SelectInformationSchemataExecutor 
extends DefaultDatabaseMeta
         }
         return result;
     }
+    
+    @Override
+    protected void preProcess(final String databaseName, final Map<String, 
Object> rows, final Map<String, String> alias) throws SQLException {
+        ResourceMetaData resourceMetaData = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData();
+        Collection<String> catalogs = getCatalogs(resourceMetaData);
+        schemaNameAlias = alias.getOrDefault(SCHEMA_NAME, "");
+        String rowValue = rows.getOrDefault(schemaNameAlias, "").toString();
+        queryDatabase = !rowValue.isEmpty();
+        if (catalogs.contains(rowValue)) {
+            rows.replace(schemaNameAlias, databaseName);
+        } else {
+            rows.clear();
+        }
+    }
+    
+    private Collection<String> getCatalogs(final ResourceMetaData 
resourceMetaData) throws SQLException {
+        Collection<String> result = new 
HashSet<>(resourceMetaData.getStorageUnits().size(), 1F);
+        for (Entry<String, StorageUnit> entry : 
resourceMetaData.getStorageUnits().entrySet()) {
+            try (Connection connection = 
entry.getValue().getDataSource().getConnection()) {
+                result.add(connection.getCatalog());
+            }
+        }
+        return result;
+    }
 }
diff --git 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
index e057cf0fd63..e89ee920044 100644
--- 
a/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
+++ 
b/proxy/backend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/information/SelectInformationSchemataExecutorTest.java
@@ -188,6 +188,7 @@ class SelectInformationSchemataExecutorTest {
     private Connection mockConnection(final Map<String, String> 
expectedResultSetMap) throws SQLException {
         Connection result = mock(Connection.class, RETURNS_DEEP_STUBS);
         
when(result.getMetaData().getURL()).thenReturn("jdbc:mysql://localhost:3306/foo_ds");
+        when(result.getCatalog()).thenReturn("foo_ds");
         ResultSet resultSet = mockResultSet(expectedResultSetMap);
         
when(result.prepareStatement(any(String.class)).executeQuery()).thenReturn(resultSet);
         return result;

Reply via email to