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);