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 98426abc964 Add DialectDataTypeOption (#35183) 98426abc964 is described below commit 98426abc964fa84c8bb23d828754afc8becd74ea Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Apr 13 20:06:56 2025 +0800 Add DialectDataTypeOption (#35183) * Add DialectDataTypeOption * Add DialectDataTypeOption --- .../metadata/database/datatype/DataTypeLoader.java | 2 +- .../database/metadata/DialectDatabaseMetaData.java | 23 +++------ .../metadata/option/DefaultDataTypeOption.java | 38 +++++++++++++++ .../metadata/option/DialectDataTypeOption.java | 43 +++++++++++++++++ .../metadata/database/MySQLDatabaseMetaData.java | 39 ++------------- .../MySQLDataTypeOption.java} | 47 ++---------------- .../database/OpenGaussDatabaseMetaData.java | 21 ++------ .../OpenGaussDataTypeOption.java} | 45 +++-------------- .../metadata/database/OracleDatabaseMetaData.java | 29 ++++------- .../OracleDataTypeOption.java} | 56 ++++------------------ .../database/PostgreSQLDatabaseMetaData.java | 29 ++--------- .../PostgreSQLDataTypeOption.java} | 46 ++---------------- .../metadata/util/SQLFederationDataTypeUtils.java | 2 +- 13 files changed, 135 insertions(+), 285 deletions(-) diff --git a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/datatype/DataTypeLoader.java b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/datatype/DataTypeLoader.java index b327a65c8cb..bfcf6e17399 100644 --- a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/datatype/DataTypeLoader.java +++ b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/datatype/DataTypeLoader.java @@ -41,7 +41,7 @@ public final class DataTypeLoader { */ public Map<String, Integer> load(final DatabaseMetaData databaseMetaData, final DatabaseType databaseType) throws SQLException { Map<String, Integer> result = loadStandardDataTypes(databaseMetaData); - result.putAll(new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getExtraDataTypes()); + result.putAll(new DatabaseTypeRegistry(databaseType).getDialectDatabaseMetaData().getDataTypeOption().getExtraDataTypes()); return result; } 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 429a9d40caf..bcfbed8940d 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,8 @@ 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.DefaultDataTypeOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectJoinOrderOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectTransactionOption; import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI; @@ -26,8 +28,6 @@ import org.apache.shardingsphere.infra.spi.annotation.SingletonSPI; import java.sql.Connection; import java.sql.SQLException; -import java.util.Collections; -import java.util.Map; import java.util.Optional; /** @@ -44,23 +44,12 @@ public interface DialectDatabaseMetaData extends DatabaseTypedSPI { QuoteCharacter getQuoteCharacter(); /** - * Get extra data types. + * Get data type option. * - * @return extra data type map + * @return data type option */ - default Map<String, Integer> getExtraDataTypes() { - return Collections.emptyMap(); - } - - /** - * Find extra SQL type class. - * - * @param dataType data type - * @param unsigned whether unsigned - * @return extra SQL type class - */ - default Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { - return Optional.empty(); + default DialectDataTypeOption getDataTypeOption() { + return new DefaultDataTypeOption(); } /** diff --git a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/DefaultDataTypeOption.java b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/DefaultDataTypeOption.java new file mode 100644 index 00000000000..2fe51b1df68 --- /dev/null +++ b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/DefaultDataTypeOption.java @@ -0,0 +1,38 @@ +/* + * 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; + +import java.util.Collections; +import java.util.Map; +import java.util.Optional; + +/** + * Default data type option. + */ +public final class DefaultDataTypeOption implements DialectDataTypeOption { + + @Override + public Map<String, Integer> getExtraDataTypes() { + return Collections.emptyMap(); + } + + @Override + public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { + return Optional.empty(); + } +} diff --git a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/DialectDataTypeOption.java b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/DialectDataTypeOption.java new file mode 100644 index 00000000000..648aee5d082 --- /dev/null +++ b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/metadata/database/metadata/option/DialectDataTypeOption.java @@ -0,0 +1,43 @@ +/* + * 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; + +import java.util.Map; +import java.util.Optional; + +/** + * Dialect data type option. + */ +public interface DialectDataTypeOption { + + /** + * Get extra data types. + * + * @return extra data type map + */ + Map<String, Integer> getExtraDataTypes(); + + /** + * Find extra SQL type class. + * + * @param dataType data type + * @param unsigned whether unsigned + * @return extra SQL type class + */ + Optional<Class<?>> findExtraSQLTypeClass(int dataType, boolean unsigned); +} 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 79eab7cfc7e..f8fd7fa696b 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 @@ -17,17 +17,13 @@ package org.apache.shardingsphere.infra.database.mysql.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.DialectDatabaseMetaData; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectJoinOrderOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectTransactionOption; - -import java.math.BigInteger; -import java.sql.Types; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; +import org.apache.shardingsphere.infra.database.mysql.metadata.database.option.MySQLDataTypeOption; /** * Database meta data of MySQL. @@ -40,33 +36,8 @@ public final class MySQLDatabaseMetaData implements DialectDatabaseMetaData { } @Override - public Map<String, Integer> getExtraDataTypes() { - Map<String, Integer> result = new HashMap<>(10, 1F); - result.put("JSON", Types.LONGVARCHAR); - result.put("GEOMETRY", Types.BINARY); - result.put("GEOMETRYCOLLECTION", Types.BINARY); - result.put("YEAR", Types.DATE); - result.put("POINT", Types.BINARY); - result.put("MULTIPOINT", Types.BINARY); - result.put("POLYGON", Types.BINARY); - result.put("MULTIPOLYGON", Types.BINARY); - result.put("LINESTRING", Types.BINARY); - result.put("MULTILINESTRING", Types.BINARY); - return result; - } - - @Override - public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { - if (Types.TINYINT == dataType || Types.SMALLINT == dataType) { - return Optional.of(Integer.class); - } - if (Types.INTEGER == dataType) { - return unsigned ? Optional.of(Long.class) : Optional.of(Integer.class); - } - if (Types.BIGINT == dataType) { - return unsigned ? Optional.of(BigInteger.class) : Optional.of(Long.class); - } - return Optional.empty(); + public DialectDataTypeOption getDataTypeOption() { + return new MySQLDataTypeOption(); } @Override 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/option/MySQLDataTypeOption.java similarity index 61% copy from infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/MySQLDatabaseMetaData.java copy to infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/option/MySQLDataTypeOption.java index 79eab7cfc7e..9c542a48a89 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/option/MySQLDataTypeOption.java @@ -15,13 +15,9 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mysql.metadata.database; +package org.apache.shardingsphere.infra.database.mysql.metadata.database.option; -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.DialectJoinOrderOption; -import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectTransactionOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; import java.math.BigInteger; import java.sql.Types; @@ -30,14 +26,9 @@ import java.util.Map; import java.util.Optional; /** - * Database meta data of MySQL. + * Data type option for MySQL. */ -public final class MySQLDatabaseMetaData implements DialectDatabaseMetaData { - - @Override - public QuoteCharacter getQuoteCharacter() { - return QuoteCharacter.BACK_QUOTE; - } +public final class MySQLDataTypeOption implements DialectDataTypeOption { @Override public Map<String, Integer> getExtraDataTypes() { @@ -68,34 +59,4 @@ public final class MySQLDatabaseMetaData implements DialectDatabaseMetaData { } return Optional.empty(); } - - @Override - public NullsOrderType getDefaultNullsOrderType() { - return NullsOrderType.LOW; - } - - @Override - public boolean isInstanceConnectionAvailable() { - return true; - } - - @Override - public boolean isSupportThreeTierStorageStructure() { - return true; - } - - @Override - public DialectTransactionOption getTransactionOption() { - return new DialectTransactionOption(false, false, true, false, true); - } - - @Override - public DialectJoinOrderOption getJoinOrderOption() { - return new DialectJoinOrderOption(true, true); - } - - @Override - public String getDatabaseType() { - return "MySQL"; - } } 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 466cd9d3056..3be6c70ac08 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 @@ -17,14 +17,13 @@ package org.apache.shardingsphere.infra.database.opengauss.metadata.database; -import com.cedarsoftware.util.CaseInsensitiveMap; -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.DialectDatabaseMetaData; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectTransactionOption; +import org.apache.shardingsphere.infra.database.opengauss.metadata.database.option.OpenGaussDataTypeOption; -import java.sql.Types; -import java.util.Map; import java.util.Optional; /** @@ -38,18 +37,8 @@ public final class OpenGaussDatabaseMetaData implements DialectDatabaseMetaData } @Override - public Map<String, Integer> getExtraDataTypes() { - Map<String, Integer> result = new CaseInsensitiveMap<>(); - result.put("SMALLINT", Types.SMALLINT); - result.put("INT", Types.INTEGER); - result.put("INTEGER", Types.INTEGER); - result.put("BIGINT", Types.BIGINT); - result.put("DECIMAL", Types.DECIMAL); - result.put("NUMERIC", Types.NUMERIC); - result.put("REAL", Types.REAL); - result.put("BOOL", Types.BOOLEAN); - result.put("CHARACTER VARYING", Types.VARCHAR); - return result; + public DialectDataTypeOption getDataTypeOption() { + return new OpenGaussDataTypeOption(); } @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/option/OpenGaussDataTypeOption.java similarity index 56% copy from infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/OpenGaussDatabaseMetaData.java copy to infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDataTypeOption.java index 466cd9d3056..e4b0bd03ea1 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/option/OpenGaussDataTypeOption.java @@ -15,27 +15,19 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.opengauss.metadata.database; +package org.apache.shardingsphere.infra.database.opengauss.metadata.database.option; import com.cedarsoftware.util.CaseInsensitiveMap; -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.DialectTransactionOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; import java.sql.Types; import java.util.Map; import java.util.Optional; /** - * Database meta data of openGauss. + * Data type option for openGauss. */ -public final class OpenGaussDatabaseMetaData implements DialectDatabaseMetaData { - - @Override - public QuoteCharacter getQuoteCharacter() { - return QuoteCharacter.QUOTE; - } +public final class OpenGaussDataTypeOption implements DialectDataTypeOption { @Override public Map<String, Integer> getExtraDataTypes() { @@ -53,32 +45,7 @@ public final class OpenGaussDatabaseMetaData implements DialectDatabaseMetaData } @Override - public NullsOrderType getDefaultNullsOrderType() { - return NullsOrderType.HIGH; - } - - @Override - public boolean isSchemaAvailable() { - return true; - } - - @Override - public Optional<String> getDefaultSchema() { - return Optional.of("public"); - } - - @Override - public DialectTransactionOption getTransactionOption() { - return new DialectTransactionOption(true, false, false, true, false); - } - - @Override - public String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern.toLowerCase(); - } - - @Override - public String getDatabaseType() { - return "openGauss"; + public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { + return Optional.empty(); } } 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 75955b2f911..4cd7f85e948 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 @@ -17,15 +17,14 @@ package org.apache.shardingsphere.infra.database.oracle.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.DialectDatabaseMetaData; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; +import org.apache.shardingsphere.infra.database.oracle.metadata.database.option.OracleDataTypeOption; import java.sql.Connection; import java.sql.SQLException; -import java.sql.Types; -import java.util.HashMap; -import java.util.Map; import java.util.Optional; /** @@ -38,6 +37,11 @@ public final class OracleDatabaseMetaData implements DialectDatabaseMetaData { return QuoteCharacter.QUOTE; } + @Override + public DialectDataTypeOption getDataTypeOption() { + return new OracleDataTypeOption(); + } + @Override public NullsOrderType getDefaultNullsOrderType() { return NullsOrderType.HIGH; @@ -71,21 +75,4 @@ public final class OracleDatabaseMetaData implements DialectDatabaseMetaData { public String getDatabaseType() { return "Oracle"; } - - @Override - public Map<String, Integer> getExtraDataTypes() { - Map<String, Integer> result = new HashMap<>(8); - result.put("SMALLINT", Types.SMALLINT); - result.put("TINYINT", Types.TINYINT); - result.put("INT", Types.INTEGER); - result.put("TEXT", Types.LONGVARCHAR); - result.put("CHARACTER", Types.CHAR); - result.put("VARCHAR2", Types.VARCHAR); - result.put("DATETIME", Types.TIMESTAMP); - result.put("ROWID", Types.ROWID); - result.put("BINARY_DOUBLE", Types.DOUBLE); - result.put("BINARY_FLOAT", Types.FLOAT); - result.put("NUMBER", Types.NUMERIC); - return result; - } } 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/option/OracleDataTypeOption.java similarity index 56% copy from infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/OracleDatabaseMetaData.java copy to infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleDataTypeOption.java index 75955b2f911..138675e89fd 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/option/OracleDataTypeOption.java @@ -15,62 +15,19 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.oracle.metadata.database; +package org.apache.shardingsphere.infra.database.oracle.metadata.database.option; -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.DialectDataTypeOption; -import java.sql.Connection; -import java.sql.SQLException; import java.sql.Types; import java.util.HashMap; import java.util.Map; import java.util.Optional; /** - * Database meta data of Oracle. + * Data type option for Oracle. */ -public final class OracleDatabaseMetaData implements DialectDatabaseMetaData { - - @Override - public QuoteCharacter getQuoteCharacter() { - return QuoteCharacter.QUOTE; - } - - @Override - public NullsOrderType getDefaultNullsOrderType() { - return NullsOrderType.HIGH; - } - - @Override - public boolean isSchemaAvailable() { - return true; - } - - @Override - public String getSchema(final Connection connection) { - try { - return Optional.ofNullable(connection.getMetaData().getUserName()).map(String::toUpperCase).orElse(null); - } catch (final SQLException ignored) { - return null; - } - } - - @Override - public String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern.toUpperCase(); - } - - @Override - public boolean isInstanceConnectionAvailable() { - return true; - } - - @Override - public String getDatabaseType() { - return "Oracle"; - } +public final class OracleDataTypeOption implements DialectDataTypeOption { @Override public Map<String, Integer> getExtraDataTypes() { @@ -88,4 +45,9 @@ public final class OracleDatabaseMetaData implements DialectDatabaseMetaData { result.put("NUMBER", Types.NUMERIC); return result; } + + @Override + public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { + return Optional.empty(); + } } 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 60a4227dbe8..8c7702779ba 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 @@ -17,14 +17,13 @@ package org.apache.shardingsphere.infra.database.postgresql.metadata.database; -import com.cedarsoftware.util.CaseInsensitiveMap; -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.DialectDatabaseMetaData; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectTransactionOption; +import org.apache.shardingsphere.infra.database.postgresql.metadata.database.option.PostgreSQLDataTypeOption; -import java.sql.Types; -import java.util.Map; import java.util.Optional; /** @@ -38,26 +37,8 @@ public final class PostgreSQLDatabaseMetaData implements DialectDatabaseMetaData } @Override - public Map<String, Integer> getExtraDataTypes() { - Map<String, Integer> result = new CaseInsensitiveMap<>(); - result.put("SMALLINT", Types.SMALLINT); - result.put("INT", Types.INTEGER); - result.put("INTEGER", Types.INTEGER); - result.put("BIGINT", Types.BIGINT); - result.put("DECIMAL", Types.DECIMAL); - result.put("NUMERIC", Types.NUMERIC); - result.put("REAL", Types.REAL); - result.put("BOOL", Types.BOOLEAN); - result.put("CHARACTER VARYING", Types.VARCHAR); - return result; - } - - @Override - public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { - if (Types.SMALLINT == dataType) { - return Optional.of(Integer.class); - } - return Optional.empty(); + public DialectDataTypeOption getDataTypeOption() { + return new PostgreSQLDataTypeOption(); } @Override 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/option/PostgreSQLDataTypeOption.java similarity index 59% copy from infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/PostgreSQLDatabaseMetaData.java copy to infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/option/PostgreSQLDataTypeOption.java index 60a4227dbe8..edd4c5f2a4c 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/option/PostgreSQLDataTypeOption.java @@ -15,27 +15,19 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.postgresql.metadata.database; +package org.apache.shardingsphere.infra.database.postgresql.metadata.database.option; import com.cedarsoftware.util.CaseInsensitiveMap; -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.DialectTransactionOption; +import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.DialectDataTypeOption; import java.sql.Types; import java.util.Map; import java.util.Optional; /** - * Database meta data of PostgreSQL. + * Data type option for PostgreSQL. */ -public final class PostgreSQLDatabaseMetaData implements DialectDatabaseMetaData { - - @Override - public QuoteCharacter getQuoteCharacter() { - return QuoteCharacter.QUOTE; - } +public final class PostgreSQLDataTypeOption implements DialectDataTypeOption { @Override public Map<String, Integer> getExtraDataTypes() { @@ -59,34 +51,4 @@ public final class PostgreSQLDatabaseMetaData implements DialectDatabaseMetaData } return Optional.empty(); } - - @Override - public NullsOrderType getDefaultNullsOrderType() { - return NullsOrderType.HIGH; - } - - @Override - public boolean isSchemaAvailable() { - return true; - } - - @Override - public Optional<String> getDefaultSchema() { - return Optional.of("public"); - } - - @Override - public String formatTableNamePattern(final String tableNamePattern) { - return tableNamePattern.toLowerCase(); - } - - @Override - public DialectTransactionOption getTransactionOption() { - return new DialectTransactionOption(false, false, false, true, false); - } - - @Override - public String getDatabaseType() { - return "PostgreSQL"; - } } diff --git a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/util/SQLFederationDataTypeUtils.java b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/util/SQLFederationDataTypeUtils.java index 626ac7ce853..3fbbea38a70 100644 --- a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/util/SQLFederationDataTypeUtils.java +++ b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/metadata/util/SQLFederationDataTypeUtils.java @@ -64,7 +64,7 @@ public final class SQLFederationDataTypeUtils { * @return SQL type class */ public static Class<?> getSqlTypeClass(final DatabaseType protocolType, final ShardingSphereColumn column) { - return new DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData().findExtraSQLTypeClass(column.getDataType(), column.isUnsigned()) + return new DatabaseTypeRegistry(protocolType).getDialectDatabaseMetaData().getDataTypeOption().findExtraSQLTypeClass(column.getDataType(), column.isUnsigned()) .orElseGet(() -> SqlType.valueOf(column.getDataType()).clazz); } }