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 751c9108564 Add DialectConnectionOption (#35188)
751c9108564 is described below

commit 751c9108564f6664c68c54ab208511336640ed2e
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sun Apr 13 23:05:50 2025 +0800

    Add DialectConnectionOption (#35188)
    
    * Add DialectConnectionOption
    
    * Add DialectConnectionOption
---
 .../resource/node/StorageNodeAggregator.java       |  2 +-
 .../database/resource/unit/StorageUnit.java        |  2 +-
 .../resource/unit/StorageUnitNodeMapCreator.java   |  2 +-
 .../database/schema/util/SchemaMetaDataUtils.java  |  4 +--
 .../database/metadata/DialectDatabaseMetaData.java | 18 ++++--------
 .../option/connection/DialectConnectionOption.java | 33 ++++++++++++++++++++++
 .../metadata/database/MySQLDatabaseMetaData.java   | 10 ++-----
 .../metadata/database/OracleDatabaseMetaData.java  |  5 ++--
 .../rql/resource/ShowStorageUnitExecutor.java      |  2 +-
 .../SelectInformationSchemataExecutorTest.java     |  2 +-
 10 files changed, 51 insertions(+), 29 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java
index f78868830b7..7e93b099f54 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/node/StorageNodeAggregator.java
@@ -61,7 +61,7 @@ public final class StorageNodeAggregator {
         for (Entry<String, DataSourcePoolProperties> entry : 
storageUnitDataSourcePoolPropsMap.entrySet()) {
             Map<String, Object> standardProps = 
entry.getValue().getConnectionPropertySynonyms().getStandardProperties();
             String url = standardProps.get("url").toString();
-            boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(DatabaseTypeFactory.get(url)).getDialectDatabaseMetaData().isInstanceConnectionAvailable();
+            boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(DatabaseTypeFactory.get(url)).getDialectDatabaseMetaData().getConnectionOption().isInstanceConnectionAvailable();
             StorageNode storageNode = getStorageNode(entry.getKey(), url, 
standardProps.get("username").toString(), isInstanceConnectionAvailable);
             result.putIfAbsent(storageNode, entry.getValue());
         }
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 5507b391b20..d15d41c12bd 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
@@ -54,7 +54,7 @@ public final class StorageUnit {
         Object originUsername = standardProps.get("username");
         String username = null != originUsername ? originUsername.toString() : 
"";
         storageType = DatabaseTypeFactory.get(url);
-        boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(storageType).getDialectDatabaseMetaData().isInstanceConnectionAvailable();
+        boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(storageType).getDialectDatabaseMetaData().getConnectionOption().isInstanceConnectionAvailable();
         String catalog = isInstanceConnectionAvailable ? 
DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, 
storageType).parse(url, username, null).getCatalog() : null;
         this.dataSource = isInstanceConnectionAvailable ? new 
CatalogSwitchableDataSource(dataSource, catalog, url) : dataSource;
         dataSourcePoolProperties = dataSourcePoolProps;
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java
index 2fbab552e9d..55e36d5fea5 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitNodeMapCreator.java
@@ -55,7 +55,7 @@ public final class StorageUnitNodeMapCreator {
     }
     
     private static StorageNode create(final String storageUnitName, final 
String url, final String username) {
-        boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(DatabaseTypeFactory.get(url)).getDialectDatabaseMetaData().isInstanceConnectionAvailable();
+        boolean isInstanceConnectionAvailable = new 
DatabaseTypeRegistry(DatabaseTypeFactory.get(url)).getDialectDatabaseMetaData().getConnectionOption().isInstanceConnectionAvailable();
         try {
             ConnectionProperties connectionProps = 
DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, 
DatabaseTypeFactory.get(url)).parse(url, username, null);
             return isInstanceConnectionAvailable ? new 
StorageNode(connectionProps.getHostname(), connectionProps.getPort(), username) 
: new StorageNode(storageUnitName);
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
index cbc2719114e..1a5e1e7a284 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
@@ -111,8 +111,8 @@ public final class SchemaMetaDataUtils {
     }
     
     private static Collection<DatabaseType> 
getUnsupportedThreeTierStorageStructureDatabaseTypes(final 
Collection<StorageUnit> storageUnits) {
-        return storageUnits.stream()
-                .map(StorageUnit::getStorageType).filter(each -> !new 
DatabaseTypeRegistry(each).getDialectDatabaseMetaData().isSupportThreeTierStorageStructure()).collect(Collectors.toList());
+        return storageUnits.stream().map(StorageUnit::getStorageType)
+                .filter(each -> !new 
DatabaseTypeRegistry(each).getDialectDatabaseMetaData().getConnectionOption().isSupportThreeTierStorageStructure()).collect(Collectors.toList());
     }
     
     private static void addOneActualTableDataNode(final 
GenericSchemaBuilderMaterial material,
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
index ce16d32ee61..994d4b79459 100644
--- 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/DialectDatabaseMetaData.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata
 
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.connection.DialectConnectionOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DefaultDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.join.DialectJoinOrderOption;
@@ -78,21 +79,12 @@ public interface DialectDatabaseMetaData extends 
DatabaseTypedSPI {
     }
     
     /**
-     * Is instance connection available.
+     * Get connection option.
      *
-     * @return available or not
+     * @return connection option
      */
-    default boolean isInstanceConnectionAvailable() {
-        return false;
-    }
-    
-    /**
-     * Is support three tier storage structure.
-     *
-     * @return support or not
-     */
-    default boolean isSupportThreeTierStorageStructure() {
-        return false;
+    default DialectConnectionOption getConnectionOption() {
+        return new DialectConnectionOption(false, false);
     }
     
     /**
diff --git 
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/connection/DialectConnectionOption.java
 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/connection/DialectConnectionOption.java
new file mode 100644
index 00000000000..437fe56555e
--- /dev/null
+++ 
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/connection/DialectConnectionOption.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.connection;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * Dialect connection option.
+ */
+@RequiredArgsConstructor
+@Getter
+public final class DialectConnectionOption {
+    
+    private final boolean isInstanceConnectionAvailable;
+    
+    private final boolean isSupportThreeTierStorageStructure;
+}
diff --git 
a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/MySQLDatabaseMetaData.java
 
b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/MySQLDatabaseMetaData.java
index f85b245aa25..8246e53a90d 100644
--- 
a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/MySQLDatabaseMetaData.java
+++ 
b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/MySQLDatabaseMetaData.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.infra.database.mysql.metadata.database;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.connection.DialectConnectionOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.join.DialectJoinOrderOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption;
@@ -46,13 +47,8 @@ public final class MySQLDatabaseMetaData implements 
DialectDatabaseMetaData {
     }
     
     @Override
-    public boolean isInstanceConnectionAvailable() {
-        return true;
-    }
-    
-    @Override
-    public boolean isSupportThreeTierStorageStructure() {
-        return true;
+    public DialectConnectionOption getConnectionOption() {
+        return new DialectConnectionOption(true, true);
     }
     
     @Override
diff --git 
a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
 
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
index ba1fb47ca29..f020af082c2 100644
--- 
a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
+++ 
b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.infra.database.oracle.metadata.database;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.NullsOrderType;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData;
+import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.connection.DialectConnectionOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption;
 import 
org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DialectSchemaOption;
 import 
org.apache.shardingsphere.infra.database.oracle.metadata.database.option.OracleDataTypeOption;
@@ -56,8 +57,8 @@ public final class OracleDatabaseMetaData implements 
DialectDatabaseMetaData {
     }
     
     @Override
-    public boolean isInstanceConnectionAvailable() {
-        return true;
+    public DialectConnectionOption getConnectionOption() {
+        return new DialectConnectionOption(true, false);
     }
     
     @Override
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
index 7191974b4bd..1acdd649ffb 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/executor/rql/resource/ShowStorageUnitExecutor.java
@@ -86,7 +86,7 @@ public final class ShowStorageUnitExecutor implements 
DistSQLQueryExecutor<ShowS
         DataSource dataSource = storageUnit.getDataSource();
         DataSourcePoolProperties result = 
DataSourcePoolPropertiesCreator.create(
                 dataSource instanceof CatalogSwitchableDataSource ? 
((CatalogSwitchableDataSource) dataSource).getDataSource() : dataSource);
-        if (new 
DatabaseTypeRegistry(storageUnit.getStorageType()).getDialectDatabaseMetaData().isInstanceConnectionAvailable())
 {
+        if (new 
DatabaseTypeRegistry(storageUnit.getStorageType()).getDialectDatabaseMetaData().getConnectionOption().isInstanceConnectionAvailable())
 {
             for (Entry<String, Object> entry : 
storageUnit.getDataSourcePoolProperties().getPoolPropertySynonyms().getStandardProperties().entrySet())
 {
                 if (null != entry.getValue()) {
                     
result.getPoolPropertySynonyms().getStandardProperties().put(entry.getKey(), 
entry.getValue());
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 04658f455c4..e0d1b3f2031 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
@@ -114,7 +114,7 @@ class SelectInformationSchemataExecutorTest {
         expectedResultSetMap.put("DEFAULT_COLLATION_NAME", "utf8mb4");
         try (MockedConstruction<DatabaseTypeRegistry> ignored = 
mockConstruction(DatabaseTypeRegistry.class, (mock, mockContext) -> {
             DialectDatabaseMetaData dialectDatabaseMetaData = 
mock(DialectDatabaseMetaData.class, RETURNS_DEEP_STUBS);
-            
when(dialectDatabaseMetaData.isInstanceConnectionAvailable()).thenReturn(true);
+            
when(dialectDatabaseMetaData.getConnectionOption().isInstanceConnectionAvailable()).thenReturn(true);
             
when(mock.getDialectDatabaseMetaData()).thenReturn(dialectDatabaseMetaData);
         })) {
             ShardingSphereDatabase database = 
createDatabase(expectedResultSetMap);

Reply via email to