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 9fa7e857385 Optimize data type option implementations (#35313) 9fa7e857385 is described below commit 9fa7e8573859bed2fcc2a9f29775d58d58b29fde Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun May 4 13:33:11 2025 +0800 Optimize data type option implementations (#35313) - MySQLDataTypeOption: Use a static final map for extra data types - OpenGaussDataTypeOption: Delegate to PostgreSQLDataTypeOption - OracleDataTypeOption: Use a static final map for extra data types - PostgreSQLDataTypeOption: Use a static final map for extra data types --- .../metadata/database/option/MySQLDataTypeOption.java | 18 ++++++++++++++---- infra/database/type/opengauss/pom.xml | 5 +++++ .../database/option/OpenGaussDataTypeOption.java | 18 +++--------------- .../metadata/database/option/OracleDataTypeOption.java | 18 ++++++++++++++---- .../database/option/PostgreSQLDataTypeOption.java | 14 ++++++++++++-- 5 files changed, 48 insertions(+), 25 deletions(-) diff --git a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/option/MySQLDataTypeOption.java b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/option/MySQLDataTypeOption.java index f22f081eca2..0c794eab985 100644 --- a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/option/MySQLDataTypeOption.java +++ b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/metadata/database/option/MySQLDataTypeOption.java @@ -17,12 +17,12 @@ package org.apache.shardingsphere.infra.database.mysql.metadata.database.option; +import com.cedarsoftware.util.CaseInsensitiveMap; 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 java.math.BigInteger; import java.sql.Types; -import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -31,11 +31,16 @@ import java.util.Optional; */ public final class MySQLDataTypeOption implements DialectDataTypeOption { + private static final Map<String, Integer> EXTRA_DATA_TYPES; + private final DialectDataTypeOption delegate = new DefaultDataTypeOption(); - @Override - public Map<String, Integer> getExtraDataTypes() { - Map<String, Integer> result = new HashMap<>(10, 1F); + static { + EXTRA_DATA_TYPES = setUpExtraDataTypes(); + } + + private static Map<String, Integer> setUpExtraDataTypes() { + Map<String, Integer> result = new CaseInsensitiveMap<>(); result.put("JSON", Types.LONGVARCHAR); result.put("GEOMETRY", Types.BINARY); result.put("GEOMETRYCOLLECTION", Types.BINARY); @@ -49,6 +54,11 @@ public final class MySQLDataTypeOption implements DialectDataTypeOption { return result; } + @Override + public Map<String, Integer> getExtraDataTypes() { + return EXTRA_DATA_TYPES; + } + @Override public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { if (Types.TINYINT == dataType || Types.SMALLINT == dataType) { diff --git a/infra/database/type/opengauss/pom.xml b/infra/database/type/opengauss/pom.xml index e6c3d7b6499..ad11a010d80 100644 --- a/infra/database/type/opengauss/pom.xml +++ b/infra/database/type/opengauss/pom.xml @@ -32,6 +32,11 @@ <artifactId>shardingsphere-infra-database-core</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.shardingsphere</groupId> + <artifactId>shardingsphere-infra-database-postgresql</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.shardingsphere</groupId> diff --git a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDataTypeOption.java b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDataTypeOption.java index 9e889b7ac59..ef9b5533350 100644 --- a/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDataTypeOption.java +++ b/infra/database/type/opengauss/src/main/java/org/apache/shardingsphere/infra/database/opengauss/metadata/database/option/OpenGaussDataTypeOption.java @@ -17,11 +17,9 @@ 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.option.datatype.DefaultDataTypeOption; import org.apache.shardingsphere.infra.database.core.metadata.database.metadata.option.datatype.DialectDataTypeOption; +import org.apache.shardingsphere.infra.database.postgresql.metadata.database.option.PostgreSQLDataTypeOption; -import java.sql.Types; import java.util.Map; import java.util.Optional; @@ -30,21 +28,11 @@ import java.util.Optional; */ public final class OpenGaussDataTypeOption implements DialectDataTypeOption { - private final DialectDataTypeOption delegate = new DefaultDataTypeOption(); + private final DialectDataTypeOption delegate = new PostgreSQLDataTypeOption(); @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; + return delegate.getExtraDataTypes(); } @Override diff --git a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleDataTypeOption.java b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleDataTypeOption.java index f8c0e703983..26834918227 100644 --- a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleDataTypeOption.java +++ b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/metadata/database/option/OracleDataTypeOption.java @@ -17,11 +17,11 @@ package org.apache.shardingsphere.infra.database.oracle.metadata.database.option; +import com.cedarsoftware.util.CaseInsensitiveMap; 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 java.sql.Types; -import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -30,11 +30,16 @@ import java.util.Optional; */ public final class OracleDataTypeOption implements DialectDataTypeOption { + private static final Map<String, Integer> EXTRA_DATA_TYPES; + private final DialectDataTypeOption delegate = new DefaultDataTypeOption(); - @Override - public Map<String, Integer> getExtraDataTypes() { - Map<String, Integer> result = new HashMap<>(8); + static { + EXTRA_DATA_TYPES = setUpExtraDataTypes(); + } + + private static Map<String, Integer> setUpExtraDataTypes() { + Map<String, Integer> result = new CaseInsensitiveMap<>(); result.put("SMALLINT", Types.SMALLINT); result.put("TINYINT", Types.TINYINT); result.put("INT", Types.INTEGER); @@ -49,6 +54,11 @@ public final class OracleDataTypeOption implements DialectDataTypeOption { return result; } + @Override + public Map<String, Integer> getExtraDataTypes() { + return EXTRA_DATA_TYPES; + } + @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/option/PostgreSQLDataTypeOption.java b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/option/PostgreSQLDataTypeOption.java index e3d148f7f12..6461c4c7c38 100644 --- a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/option/PostgreSQLDataTypeOption.java +++ b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/metadata/database/option/PostgreSQLDataTypeOption.java @@ -30,10 +30,15 @@ import java.util.Optional; */ public final class PostgreSQLDataTypeOption implements DialectDataTypeOption { + private static final Map<String, Integer> EXTRA_DATA_TYPES; + private final DialectDataTypeOption delegate = new DefaultDataTypeOption(); - @Override - public Map<String, Integer> getExtraDataTypes() { + static { + EXTRA_DATA_TYPES = setUpExtraDataTypes(); + } + + private static Map<String, Integer> setUpExtraDataTypes() { Map<String, Integer> result = new CaseInsensitiveMap<>(); result.put("SMALLINT", Types.SMALLINT); result.put("INT", Types.INTEGER); @@ -47,6 +52,11 @@ public final class PostgreSQLDataTypeOption implements DialectDataTypeOption { return result; } + @Override + public Map<String, Integer> getExtraDataTypes() { + return EXTRA_DATA_TYPES; + } + @Override public Optional<Class<?>> findExtraSQLTypeClass(final int dataType, final boolean unsigned) { if (Types.SMALLINT == dataType) {