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

Reply via email to