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 a6786a17f11 Add DialectTableOption (#35189) a6786a17f11 is described below commit a6786a17f116d3b60ded187225d4b4909faa311e Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Apr 13 23:32:08 2025 +0800 Add DialectTableOption (#35189) * Add DialectTableOption * Add DialectTableOption * Add DialectTableOption --- .../encrypt/enums/EncryptDerivedColumnSuffix.java | 2 +- .../data/loader/type/TableMetaDataLoader.java | 2 +- .../database/metadata/DialectDatabaseMetaData.java | 11 +++-- .../metadata/option/table/DialectTableOption.java | 55 ++++++++++++++++++++++ .../database/FirebirdDatabaseMetaData.java | 6 ++- .../database/OpenGaussDatabaseMetaData.java | 6 ++- .../metadata/database/OracleDatabaseMetaData.java | 6 ++- .../database/OracleDatabaseMetaDataTest.java | 2 +- .../database/PostgreSQLDatabaseMetaData.java | 6 ++- .../database/PostgreSQLDatabaseMetaDataTest.java | 2 +- .../metadata/refresher/util/TableRefreshUtils.java | 2 +- .../test/e2e/env/DataSetEnvironmentManager.java | 2 +- 12 files changed, 83 insertions(+), 19 deletions(-) diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java index 2d7de89c77d..26362f9dfd0 100644 --- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java +++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/enums/EncryptDerivedColumnSuffix.java @@ -44,6 +44,6 @@ public enum EncryptDerivedColumnSuffix { */ public String getDerivedColumnName(final String columnName, final DatabaseType databaseType) { DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData(); - return String.format("%s%s", columnName, dialectDatabaseMetaData.formatTableNamePattern(suffix)); + return String.format("%s%s", columnName, dialectDatabaseMetaData.getTableOption().formatTableNamePattern(suffix)); } } diff --git a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/TableMetaDataLoader.java b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/TableMetaDataLoader.java index 76a75a122f0..17fa728ec15 100644 --- a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/TableMetaDataLoader.java +++ b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/data/loader/type/TableMetaDataLoader.java @@ -50,7 +50,7 @@ public final class TableMetaDataLoader { public static Optional<TableMetaData> load(final DataSource dataSource, final String tableNamePattern, final DatabaseType databaseType) throws SQLException { DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData(); try (MetaDataLoaderConnection connection = new MetaDataLoaderConnection(databaseType, dataSource.getConnection())) { - String formattedTableNamePattern = dialectDatabaseMetaData.formatTableNamePattern(tableNamePattern); + String formattedTableNamePattern = dialectDatabaseMetaData.getTableOption().formatTableNamePattern(tableNamePattern); return isTableExist(connection, formattedTableNamePattern) ? Optional.of(new TableMetaData(tableNamePattern, ColumnMetaDataLoader.load( connection, formattedTableNamePattern, databaseType), IndexMetaDataLoader.load(connection, formattedTableNamePattern), Collections.emptyList())) 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 994d4b79459..9b3b9607210 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 @@ -25,6 +25,8 @@ import org.apache.shardingsphere.infra.database.core.metadata.database.metadata. import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.join.DialectJoinOrderOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DefaultSchemaOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DialectSchemaOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption.Type; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption; import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI; import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI; @@ -69,13 +71,12 @@ public interface DialectDatabaseMetaData extends DatabaseTypedSPI { } /** - * Format table name pattern. + * Get table option. * - * @param tableNamePattern table name pattern - * @return formatted table name pattern + * @return table option */ - default String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern; + default DialectTableOption getTableOption() { + return new DialectTableOption(Type.KEEP_ORIGIN); } /** diff --git a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectTableOption.java b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectTableOption.java new file mode 100644 index 00000000000..182f2fdd9d6 --- /dev/null +++ b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/table/DialectTableOption.java @@ -0,0 +1,55 @@ +/* + * 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.table; + +import lombok.RequiredArgsConstructor; + +/** + * Dialect table option. + */ +@RequiredArgsConstructor +public final class DialectTableOption { + + private final Type type; + + /** + * Format table name pattern. + * + * @param tableNamePattern table name pattern + * @return formatted table name pattern + */ + public String formatTableNamePattern(final String tableNamePattern) { + switch (type) { + case UPPER_CASE: + return tableNamePattern.toUpperCase(); + case LOWER_CASE: + return tableNamePattern.toLowerCase(); + case KEEP_ORIGIN: + default: + return tableNamePattern; + } + } + + /** + * Dialect table option type. + */ + public enum Type { + + UPPER_CASE, LOWER_CASE, KEEP_ORIGIN + } +} diff --git a/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java b/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java index ad7779913b9..dd245f49405 100644 --- a/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java +++ b/infra/database/type/firebird/src/main/java/org/apache/shardingsphere/infra/database/firebird/metadata/database/FirebirdDatabaseMetaData.java @@ -20,6 +20,8 @@ package org.apache.shardingsphere.infra.database.firebird.metadata.database; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.DialectDatabaseMetaData; 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.table.DialectTableOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption.Type; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption; /** @@ -38,8 +40,8 @@ public final class FirebirdDatabaseMetaData implements DialectDatabaseMetaData { } @Override - public String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern.toUpperCase(); + public DialectTableOption getTableOption() { + return new DialectTableOption(Type.UPPER_CASE); } @Override diff --git a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java index a42e8cd273f..f246b00aca9 100644 --- a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java +++ b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java @@ -23,6 +23,8 @@ import org.apache.shardingsphere.infra.database.core.metadata.database.metadata. 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.DefaultSchemaOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DialectSchemaOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption.Type; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption; import org.apache.shardingsphere.infra.database.opengauss.metadata.database.option.OpenGaussDataTypeOption; @@ -57,8 +59,8 @@ public final class OpenGaussDatabaseMetaData implements DialectDatabaseMetaData } @Override - public String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern.toLowerCase(); + public DialectTableOption getTableOption() { + return new DialectTableOption(Type.LOWER_CASE); } @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 f020af082c2..7f7455478db 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 @@ -23,6 +23,8 @@ import org.apache.shardingsphere.infra.database.core.metadata.database.metadata. 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.core.metadata.database.metadata.option.table.DialectTableOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption.Type; import org.apache.shardingsphere.infra.database.oracle.metadata.database.option.OracleDataTypeOption; import org.apache.shardingsphere.infra.database.oracle.metadata.database.option.OracleSchemaOption; @@ -52,8 +54,8 @@ public final class OracleDatabaseMetaData implements DialectDatabaseMetaData { } @Override - public String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern.toUpperCase(); + public DialectTableOption getTableOption() { + return new DialectTableOption(Type.UPPER_CASE); } @Override diff --git a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java index 9b0c75e4850..bd76a81ce07 100644 --- a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java +++ b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaDataTest.java @@ -59,6 +59,6 @@ class OracleDatabaseMetaDataTest { @Test void assertFormatTableNamePattern() { - assertThat(dialectDatabaseMetaData.formatTableNamePattern("tbl"), is("TBL")); + assertThat(dialectDatabaseMetaData.getTableOption().formatTableNamePattern("tbl"), is("TBL")); } } diff --git a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java index 41cc37f6287..89b7b62f83f 100644 --- a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java +++ b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java @@ -23,6 +23,8 @@ import org.apache.shardingsphere.infra.database.core.metadata.database.metadata. 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.DefaultSchemaOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.schema.DialectSchemaOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.table.DialectTableOption.Type; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.transaction.DialectTransactionOption; import org.apache.shardingsphere.infra.database.postgresql.metadata.database.option.PostgreSQLDataTypeOption; @@ -52,8 +54,8 @@ public final class PostgreSQLDatabaseMetaData implements DialectDatabaseMetaData } @Override - public String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern.toLowerCase(); + public DialectTableOption getTableOption() { + return new DialectTableOption(Type.LOWER_CASE); } @Override diff --git a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java index 90df7ff0d5a..e2667ea9ae5 100644 --- a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java +++ b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaDataTest.java @@ -51,6 +51,6 @@ class PostgreSQLDatabaseMetaDataTest { @Test void assertFormatTableNamePattern() { - assertThat(dialectDatabaseMetaData.formatTableNamePattern("T_ORDER"), is("t_order")); + assertThat(dialectDatabaseMetaData.getTableOption().formatTableNamePattern("T_ORDER"), is("t_order")); } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/util/TableRefreshUtils.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/util/TableRefreshUtils.java index c0cb7975d15..825e005c338 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/util/TableRefreshUtils.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/util/TableRefreshUtils.java @@ -53,7 +53,7 @@ public final class TableRefreshUtils { */ public static String getTableName(final IdentifierValue tableIdentifierValue, final DatabaseType databaseType) { return QuoteCharacter.NONE == tableIdentifierValue.getQuoteCharacter() - ? new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().formatTableNamePattern(tableIdentifierValue.getValue()) + ? new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getTableOption().formatTableNamePattern(tableIdentifierValue.getValue()) : tableIdentifierValue.getValue(); } diff --git a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java index 8e153e6ceb0..6efdd8564be 100644 --- a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java +++ b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/env/DataSetEnvironmentManager.java @@ -237,7 +237,7 @@ public final class DataSetEnvironmentManager { private String getQuotedTableName(final String tableName, final DatabaseType databaseType) { DialectDatabaseMetaData dialectDatabaseMetaData = new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData(); - return dialectDatabaseMetaData.getQuoteCharacter().wrap(dialectDatabaseMetaData.formatTableNamePattern(tableName)); + return dialectDatabaseMetaData.getQuoteCharacter().wrap(dialectDatabaseMetaData.getTableOption().formatTableNamePattern(tableName)); } } }