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;