This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 08eb9ebf5cc Use dialect row loader to load resultSet when use 
JDBCMemoryQueryResult (#15457)
08eb9ebf5cc is described below

commit 08eb9ebf5cc5185d7546b84303f43e8a34752c99
Author: SirMin <1064919...@qq.com>
AuthorDate: Thu May 19 22:46:52 2022 +0800

    Use dialect row loader to load resultSet when use JDBCMemoryQueryResult 
(#15457)
    
    * dialect load jdbc rows
    
    * dialect load jdbc rows
    
    * dialect load jdbc rows
    
    * fix review suggestion
    
    Co-authored-by: tuichenchuxin <chuxinche...@qq.com>
---
 .../engine/driver/jdbc/JDBCExecutorCallback.java   |  2 +
 .../jdbc/type/memory/JDBCMemoryQueryResult.java    |  6 ++-
 .../AbstractJDBCRowsLoader.java}                   | 42 ++++++---------
 .../DefaultRowsLoader.java}                        | 24 ++++++---
 .../loader/DialectJDBCRowsLoaderFactory.java       | 46 ++++++++++++++++
 .../JDBCRowsLoader.java}                           | 26 ++++++---
 .../MySQLRowsLoader.java}                          | 29 +++++++---
 ...l.driver.jdbc.type.memory.loader.JDBCRowsLoader | 19 +++++++
 .../type/memory/JDBCMemoryQueryResultTest.java     | 62 ++++++++++++----------
 .../table/FilterableTableScanExecutor.java         |  6 +--
 .../executor/callback/ExecuteQueryCallback.java    |  2 +-
 .../callback/ProxyJDBCExecutorCallback.java        |  2 +-
 .../opengauss/OpenGaussSelectDatabaseExecutor.java |  2 +-
 .../OpenGaussSelectDatabaseExecutorTest.java       |  6 ++-
 14 files changed, 186 insertions(+), 88 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
index 857b9d84c5d..e6b3d2bdac8 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
@@ -17,6 +17,7 @@
 
 package 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc;
 
+import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -50,6 +51,7 @@ public abstract class JDBCExecutorCallback<T> implements 
ExecutorCallback<JDBCEx
     
     private static final Map<String, DataSourceMetaData> 
CACHED_DATASOURCE_METADATA = new ConcurrentHashMap<>();
     
+    @Getter
     private final DatabaseType databaseType;
     
     private final SQLStatement sqlStatement;
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
index 1b00f1f8048..f6024989569 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
@@ -17,7 +17,9 @@
 
 package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.metadata.JDBCQueryResultMetaData;
+import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader.DialectJDBCRowsLoaderFactory;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.AbstractMemoryQueryResult;
 
 import java.sql.ResultSet;
@@ -28,7 +30,7 @@ import java.sql.SQLException;
  */
 public final class JDBCMemoryQueryResult extends AbstractMemoryQueryResult {
     
-    public JDBCMemoryQueryResult(final ResultSet resultSet) throws 
SQLException {
-        super(new JDBCQueryResultMetaData(resultSet.getMetaData()), 
JDBCRowsLoader.load(resultSet.getMetaData().getColumnCount(), 
resultSet).iterator());
+    public JDBCMemoryQueryResult(final ResultSet resultSet, final DatabaseType 
databaseType) throws SQLException {
+        super(new JDBCQueryResultMetaData(resultSet.getMetaData()), 
DialectJDBCRowsLoaderFactory.getInstance(databaseType).load(resultSet.getMetaData().getColumnCount(),
 resultSet).iterator());
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCRowsLoader.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/AbstractJDBCRowsLoader.java
similarity index 76%
rename from 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCRowsLoader.java
rename to 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/AbstractJDBCRowsLoader.java
index 2ecc55be212..ff94c16cec0 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCRowsLoader.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/AbstractJDBCRowsLoader.java
@@ -15,10 +15,8 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory;
+package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader;
 
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.row.MemoryQueryResultDataRow;
 
 import java.math.BigDecimal;
@@ -32,22 +30,12 @@ import java.util.LinkedList;
 import java.util.List;
 
 /**
- * JDBC rows loader.
+ * Abstract JDBC rows loader.
  */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class JDBCRowsLoader {
+public abstract class AbstractJDBCRowsLoader implements JDBCRowsLoader {
     
-    private static final String YEAR_DATA_TYPE = "YEAR";
-    
-    /**
-     * Load rows.
-     * 
-     * @param columnCount column count
-     * @param resultSet result set of JDBC
-     * @return Query result data rows
-     * @throws SQLException SQL exception
-     */
-    public static Collection<MemoryQueryResultDataRow> load(final int 
columnCount, final ResultSet resultSet) throws SQLException {
+    @Override
+    public Collection<MemoryQueryResultDataRow> load(final int columnCount, 
final ResultSet resultSet) throws SQLException {
         Collection<MemoryQueryResultDataRow> result = new LinkedList<>();
         while (resultSet.next()) {
             List<Object> rowData = new ArrayList<>(columnCount);
@@ -61,7 +49,7 @@ public final class JDBCRowsLoader {
     }
     
     @SuppressWarnings("ReturnOfNull")
-    private static Object loadRowValue(final ResultSet resultSet, final int 
columnIndex) throws SQLException {
+    private Object loadRowValue(final ResultSet resultSet, final int 
columnIndex) throws SQLException {
         ResultSetMetaData metaData = resultSet.getMetaData();
         switch (metaData.getColumnType(columnIndex)) {
             case Types.BOOLEAN:
@@ -91,11 +79,7 @@ public final class JDBCRowsLoader {
             case Types.LONGVARCHAR:
                 return resultSet.getString(columnIndex);
             case Types.DATE:
-                if 
(isYearDataType(resultSet.getMetaData().getColumnTypeName(columnIndex))) {
-                    Object result = resultSet.getObject(columnIndex);
-                    return resultSet.wasNull() ? null : result;
-                }
-                return resultSet.getDate(columnIndex);
+                return getDate(resultSet, columnIndex);
             case Types.TIME:
                 return resultSet.getTime(columnIndex);
             case Types.TIMESTAMP:
@@ -115,7 +99,13 @@ public final class JDBCRowsLoader {
         }
     }
     
-    private static boolean isYearDataType(final String columnDataTypeName) {
-        return YEAR_DATA_TYPE.equalsIgnoreCase(columnDataTypeName);
-    }
+    /**
+     * Get date from result set.
+     * 
+     * @param resultSet result set
+     * @param columnIndex column index
+     * @return date
+     * @throws SQLException sql exception
+     */
+    protected abstract Object getDate(ResultSet resultSet, int columnIndex) 
throws SQLException;
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/DefaultRowsLoader.java
similarity index 60%
copy from 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
copy to 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/DefaultRowsLoader.java
index 1b00f1f8048..1204c3d8c80 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/DefaultRowsLoader.java
@@ -15,20 +15,28 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory;
-
-import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.metadata.JDBCQueryResultMetaData;
-import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.AbstractMemoryQueryResult;
+package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
 /**
- * JDBC query result for memory loading.
+ * Default rows loader.
  */
-public final class JDBCMemoryQueryResult extends AbstractMemoryQueryResult {
+public final class DefaultRowsLoader extends AbstractJDBCRowsLoader {
+    
+    @Override
+    protected Object getDate(final ResultSet resultSet, final int columnIndex) 
throws SQLException {
+        return resultSet.getDate(columnIndex);
+    }
+    
+    @Override
+    public String getType() {
+        return "Default";
+    }
     
-    public JDBCMemoryQueryResult(final ResultSet resultSet) throws 
SQLException {
-        super(new JDBCQueryResultMetaData(resultSet.getMetaData()), 
JDBCRowsLoader.load(resultSet.getMetaData().getColumnCount(), 
resultSet).iterator());
+    @Override
+    public boolean isDefault() {
+        return true;
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/DialectJDBCRowsLoaderFactory.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/DialectJDBCRowsLoaderFactory.java
new file mode 100644
index 00000000000..8ee99d28de4
--- /dev/null
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/DialectJDBCRowsLoaderFactory.java
@@ -0,0 +1,46 @@
+/*
+ * 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.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.spi.type.required.RequiredSPIRegistry;
+import org.apache.shardingsphere.spi.type.typed.TypedSPIRegistry;
+
+/**
+ * Dialect JDBC rows loader factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DialectJDBCRowsLoaderFactory {
+    
+    static {
+        ShardingSphereServiceLoader.register(JDBCRowsLoader.class);
+    }
+    
+    /**
+     * Find instance of dialect JDBC rows loader factory.
+     *
+     * @param databaseType database type
+     * @return found instance
+     */
+    public static JDBCRowsLoader getInstance(final DatabaseType databaseType) {
+        return TypedSPIRegistry.findRegisteredService(JDBCRowsLoader.class, 
databaseType.getType()).orElseGet(() -> 
RequiredSPIRegistry.getRegisteredService(JDBCRowsLoader.class));
+    }
+}
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/JDBCRowsLoader.java
similarity index 58%
copy from 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
copy to 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/JDBCRowsLoader.java
index 1b00f1f8048..8714f2102da 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/JDBCRowsLoader.java
@@ -15,20 +15,30 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory;
+package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader;
 
-import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.metadata.JDBCQueryResultMetaData;
-import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.AbstractMemoryQueryResult;
+import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.row.MemoryQueryResultDataRow;
+import org.apache.shardingsphere.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.spi.type.required.RequiredSPI;
+import org.apache.shardingsphere.spi.type.typed.TypedSPI;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.util.Collection;
 
 /**
- * JDBC query result for memory loading.
+ * JDBC rows loader.
  */
-public final class JDBCMemoryQueryResult extends AbstractMemoryQueryResult {
+@SingletonSPI
+public interface JDBCRowsLoader extends TypedSPI, RequiredSPI {
     
-    public JDBCMemoryQueryResult(final ResultSet resultSet) throws 
SQLException {
-        super(new JDBCQueryResultMetaData(resultSet.getMetaData()), 
JDBCRowsLoader.load(resultSet.getMetaData().getColumnCount(), 
resultSet).iterator());
-    }
+    /**
+     * Load rows.
+     *
+     * @param columnCount column count
+     * @param resultSet result set of JDBC
+     * @return Query result data rows
+     * @throws SQLException SQL exception
+     */
+    Collection<MemoryQueryResultDataRow> load(int columnCount, ResultSet 
resultSet) throws SQLException;
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/MySQLRowsLoader.java
similarity index 53%
copy from 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
copy to 
shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/MySQLRowsLoader.java
index 1b00f1f8048..540ce836352 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResult.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/loader/MySQLRowsLoader.java
@@ -15,20 +15,33 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory;
-
-import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.metadata.JDBCQueryResultMetaData;
-import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.AbstractMemoryQueryResult;
+package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
 
 /**
- * JDBC query result for memory loading.
+ * MySQL rows loader.
  */
-public final class JDBCMemoryQueryResult extends AbstractMemoryQueryResult {
+public final class MySQLRowsLoader extends AbstractJDBCRowsLoader {
+    
+    private static final String YEAR_DATA_TYPE = "YEAR";
+    
+    @Override
+    protected Object getDate(final ResultSet resultSet, final int columnIndex) 
throws SQLException {
+        if 
(isYearDataType(resultSet.getMetaData().getColumnTypeName(columnIndex))) {
+            Object result = resultSet.getObject(columnIndex);
+            return resultSet.wasNull() ? null : result;
+        }
+        return resultSet.getDate(columnIndex);
+    }
+    
+    private static boolean isYearDataType(final String columnDataTypeName) {
+        return YEAR_DATA_TYPE.equalsIgnoreCase(columnDataTypeName);
+    }
     
-    public JDBCMemoryQueryResult(final ResultSet resultSet) throws 
SQLException {
-        super(new JDBCQueryResultMetaData(resultSet.getMetaData()), 
JDBCRowsLoader.load(resultSet.getMetaData().getColumnCount(), 
resultSet).iterator());
+    @Override
+    public String getType() {
+        return "MySQL";
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader.JDBCRowsLoader
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader.JDBCRowsLoader
new file mode 100644
index 00000000000..9b791effc34
--- /dev/null
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader.JDBCRowsLoader
@@ -0,0 +1,19 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader.DefaultRowsLoader
+org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory.loader.MySQLRowsLoader
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResultTest.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResultTest.java
index 7e014bcd624..fa89a901068 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResultTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/memory/JDBCMemoryQueryResultTest.java
@@ -17,6 +17,8 @@
 
 package 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.driver.jdbc.type.memory;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.hamcrest.core.Is;
 import org.junit.Test;
 
@@ -49,16 +51,18 @@ import static org.mockito.Mockito.when;
 
 public final class JDBCMemoryQueryResultTest {
     
+    private final DatabaseType databaseType = new MySQLDatabaseType();
+    
     @Test(expected = SQLException.class)
     public void assertConstructorWithSqlException() throws SQLException {
         ResultSet resultSet = mockResultSet();
         when(resultSet.next()).thenThrow(new SQLException(""));
-        new JDBCMemoryQueryResult(resultSet);
+        new JDBCMemoryQueryResult(resultSet, databaseType);
     }
     
     @Test
     public void assertNext() throws SQLException {
-        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet());
+        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet(), databaseType);
         assertTrue(queryResult.next());
         assertFalse(queryResult.next());
     }
@@ -71,7 +75,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSetMetaData resultSetMetaData = mock(ResultSetMetaData.class);
         when(resultSetMetaData.getColumnCount()).thenReturn(1);
         when(resultSet.getMetaData()).thenReturn(resultSetMetaData);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertNull(actual.getValue(1, boolean.class));
         assertFalse(actual.next());
@@ -81,7 +85,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByBoolean() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.BOOLEAN);
         when(resultSet.getBoolean(1)).thenReturn(true);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertTrue((boolean) actual.getValue(1, boolean.class));
         assertFalse(actual.next());
@@ -91,7 +95,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByTinyInt() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.TINYINT);
         when(resultSet.getInt(1)).thenReturn(1);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, int.class), is(1));
         assertFalse(actual.next());
@@ -101,7 +105,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueBySmallInt() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.SMALLINT);
         when(resultSet.getInt(1)).thenReturn(1);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, int.class), is(1));
         assertFalse(actual.next());
@@ -112,7 +116,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.INTEGER);
         when(resultSet.getInt(1)).thenReturn(1);
         when(resultSet.getMetaData().isSigned(1)).thenReturn(true);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, int.class), is(1));
         assertFalse(actual.next());
@@ -123,7 +127,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.INTEGER);
         when(resultSet.getLong(1)).thenReturn(1L);
         when(resultSet.getMetaData().isSigned(1)).thenReturn(false);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, int.class), is(1L));
         assertFalse(actual.next());
@@ -134,7 +138,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.BIGINT);
         when(resultSet.getLong(1)).thenReturn(1L);
         when(resultSet.getMetaData().isSigned(1)).thenReturn(true);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, long.class), is(1L));
         assertFalse(actual.next());
@@ -145,7 +149,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.BIGINT);
         when(resultSet.getBigDecimal(1)).thenReturn(new BigDecimal("1"));
         when(resultSet.getMetaData().isSigned(1)).thenReturn(false);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, long.class), is(new 
BigDecimal("1").toBigInteger()));
         assertFalse(actual.next());
@@ -155,7 +159,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByNumeric() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.NUMERIC);
         when(resultSet.getBigDecimal(1)).thenReturn(new BigDecimal("1"));
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, BigDecimal.class), is(new 
BigDecimal("1")));
         assertFalse(actual.next());
@@ -165,7 +169,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByDecimal() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.DECIMAL);
         when(resultSet.getBigDecimal(1)).thenReturn(new BigDecimal("1"));
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, BigDecimal.class), is(new 
BigDecimal("1")));
         assertFalse(actual.next());
@@ -175,7 +179,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByFloat() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.FLOAT);
         when(resultSet.getDouble(1)).thenReturn(1.0D);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, double.class), is(1.0D));
         assertFalse(actual.next());
@@ -185,7 +189,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByDouble() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.DOUBLE);
         when(resultSet.getDouble(1)).thenReturn(1.0D);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, double.class), is(1.0D));
         assertFalse(actual.next());
@@ -195,7 +199,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByChar() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.CHAR);
         when(resultSet.getString(1)).thenReturn("value");
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, String.class), is("value"));
         assertFalse(actual.next());
@@ -205,7 +209,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByVarchar() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.VARCHAR);
         when(resultSet.getString(1)).thenReturn("value");
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, String.class), is("value"));
         assertFalse(actual.next());
@@ -215,7 +219,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByLongVarchar() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.LONGVARCHAR);
         when(resultSet.getString(1)).thenReturn("value");
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, String.class), is("value"));
         assertFalse(actual.next());
@@ -225,7 +229,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByDate() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.DATE);
         when(resultSet.getDate(1)).thenReturn(new Date(0L));
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, Date.class), is(new Date(0L)));
         assertFalse(actual.next());
@@ -235,7 +239,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByTime() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.TIME);
         when(resultSet.getTime(1)).thenReturn(new Time(0L));
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, Time.class), is(new Time(0L)));
         assertFalse(actual.next());
@@ -245,7 +249,7 @@ public final class JDBCMemoryQueryResultTest {
     public void assertGetValueByTimestamp() throws SQLException {
         ResultSet resultSet = getMockedResultSet(Types.TIMESTAMP);
         when(resultSet.getTimestamp(1)).thenReturn(new Timestamp(0L));
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, Timestamp.class), is(new Timestamp(0L)));
         assertFalse(actual.next());
@@ -256,7 +260,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.CLOB);
         Clob value = mock(Clob.class);
         when(resultSet.getClob(1)).thenReturn(value);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, Clob.class), is(value));
         assertFalse(actual.next());
@@ -267,7 +271,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.BLOB);
         Blob value = mock(Blob.class);
         when(resultSet.getBlob(1)).thenReturn(value);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, Blob.class), is(value));
         assertFalse(actual.next());
@@ -278,7 +282,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.BINARY);
         byte[] value = new byte[10];
         when(resultSet.getBytes(1)).thenReturn(value);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, byte[].class), is(value));
         assertFalse(actual.next());
@@ -289,7 +293,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.VARBINARY);
         byte[] value = new byte[10];
         when(resultSet.getBytes(1)).thenReturn(value);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, byte[].class), is(value));
         assertFalse(actual.next());
@@ -300,7 +304,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.LONGVARBINARY);
         byte[] value = new byte[10];
         when(resultSet.getBytes(1)).thenReturn(value);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, byte[].class), is(value));
         assertFalse(actual.next());
@@ -311,7 +315,7 @@ public final class JDBCMemoryQueryResultTest {
         ResultSet resultSet = getMockedResultSet(Types.ARRAY);
         Array value = mock(Array.class);
         when(resultSet.getArray(1)).thenReturn(value);
-        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet);
+        JDBCMemoryQueryResult actual = new JDBCMemoryQueryResult(resultSet, 
databaseType);
         assertTrue(actual.next());
         assertThat(actual.getValue(1, Array.class), is(value));
         assertFalse(actual.next());
@@ -329,14 +333,14 @@ public final class JDBCMemoryQueryResultTest {
     
     @Test
     public void assertGetCalendarValue() throws SQLException {
-        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet());
+        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet(), databaseType);
         queryResult.next();
         assertThat(queryResult.getCalendarValue(1, Integer.class, 
Calendar.getInstance()), Is.is(1));
     }
     
     @Test
     public void assertGetInputStream() throws SQLException, IOException {
-        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet());
+        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet(), databaseType);
         queryResult.next();
         InputStream inputStream = queryResult.getInputStream(1, "Unicode");
         assertThat(inputStream.read(), is(getInputStream(1).read()));
@@ -353,7 +357,7 @@ public final class JDBCMemoryQueryResultTest {
     
     @Test
     public void assertWasNull() throws SQLException {
-        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet());
+        JDBCMemoryQueryResult queryResult = new 
JDBCMemoryQueryResult(mockResultSet(), databaseType);
         queryResult.next();
         assertFalse(queryResult.wasNull());
         queryResult.next();
diff --git 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
index 823f701cac7..3a4ee90f600 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-executor/src/main/java/org/apache/shardingsphere/infra/federation/executor/original/table/FilterableTableScanExecutor.java
@@ -153,7 +153,7 @@ public final class FilterableTableScanExecutor {
             ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = 
prepareEngine.prepare(context.getRouteContext(), context.getExecutionUnits());
             setParameters(executionGroupContext.getInputGroups());
             ExecuteProcessEngine.initialize(context.getLogicSQL(), 
executionGroupContext, executorContext.getProps());
-            List<QueryResult> queryResults = execute(executionGroupContext);
+            List<QueryResult> queryResults = execute(executionGroupContext, 
databaseType);
             
ExecuteProcessEngine.finish(executionGroupContext.getExecutionID());
             MergeEngine mergeEngine = new MergeEngine(schemaName, 
databaseType, databaseMetaData, executorContext.getProps(), 
databaseMetaData.getRuleMetaData().getRules());
             MergedResult mergedResult = mergeEngine.merge(queryResults, 
logicSQL.getSqlStatementContext());
@@ -166,12 +166,12 @@ public final class FilterableTableScanExecutor {
         }
     }
     
-    private List<QueryResult> execute(final 
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext) throws 
SQLException {
+    private List<QueryResult> execute(final 
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext, final 
DatabaseType databaseType) throws SQLException {
         Collection<QueryResult> queryResults = 
jdbcExecutor.execute(executionGroupContext, callback).stream().map(each -> 
(QueryResult) each).collect(Collectors.toList());
         List<QueryResult> result = new LinkedList<>();
         for (QueryResult each : queryResults) {
             QueryResult queryResult = each instanceof JDBCStreamQueryResult
-                    ? new JDBCMemoryQueryResult(((JDBCStreamQueryResult) 
each).getResultSet())
+                    ? new JDBCMemoryQueryResult(((JDBCStreamQueryResult) 
each).getResultSet(), databaseType)
                     : each;
             result.add(queryResult);
         }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/callback/ExecuteQueryCallback.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/callback/ExecuteQueryCallback.java
index bc2f5437523..1488228446b 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/callback/ExecuteQueryCallback.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/callback/ExecuteQueryCallback.java
@@ -42,7 +42,7 @@ public abstract class ExecuteQueryCallback extends 
JDBCExecutorCallback<QueryRes
     @Override
     protected final QueryResult executeSQL(final String sql, final Statement 
statement, final ConnectionMode connectionMode) throws SQLException {
         ResultSet resultSet = executeQuery(sql, statement);
-        return ConnectionMode.MEMORY_STRICTLY == connectionMode ? new 
JDBCStreamQueryResult(resultSet) : new JDBCMemoryQueryResult(resultSet);
+        return ConnectionMode.MEMORY_STRICTLY == connectionMode ? new 
JDBCStreamQueryResult(resultSet) : new JDBCMemoryQueryResult(resultSet, 
getDatabaseType());
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
index 2d757233eb8..0c84d3bedeb 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
@@ -81,7 +81,7 @@ public abstract class ProxyJDBCExecutorCallback extends 
JDBCExecutorCallback<Exe
     protected abstract boolean execute(String sql, Statement statement, 
boolean isReturnGeneratedKeys) throws SQLException;
     
     private QueryResult createQueryResult(final ResultSet resultSet, final 
ConnectionMode connectionMode) throws SQLException {
-        return ConnectionMode.MEMORY_STRICTLY == connectionMode ? new 
JDBCStreamQueryResult(resultSet) : new JDBCMemoryQueryResult(resultSet);
+        return ConnectionMode.MEMORY_STRICTLY == connectionMode ? new 
JDBCStreamQueryResult(resultSet) : new JDBCMemoryQueryResult(resultSet, 
getDatabaseType());
     }
     
     private long getGeneratedKey(final Statement statement) throws 
SQLException {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutor.java
index 9d198d6667f..73f4e57822f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutor.java
@@ -67,7 +67,7 @@ public final class OpenGaussSelectDatabaseExecutor implements 
DatabaseAdminQuery
             connection.setSchema(PG_CATALOG);
             try (Statement statement = connection.createStatement(); ResultSet 
resultSet = statement.executeQuery(sql)) {
                 queryResultMetaData = new 
JDBCQueryResultMetaData(resultSet.getMetaData());
-                mergedResult = new 
IteratorStreamMergedResult(Collections.singletonList(new 
JDBCMemoryQueryResult(resultSet)));
+                mergedResult = new 
IteratorStreamMergedResult(Collections.singletonList(new 
JDBCMemoryQueryResult(resultSet, connectionSession.getDatabaseType())));
             }
         }
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutorTest.java
index e2fcee4ea54..3311865469b 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/opengauss/OpenGaussSelectDatabaseExecutorTest.java
@@ -17,9 +17,11 @@
 
 package org.apache.shardingsphere.proxy.backend.text.admin.opengauss;
 
+import 
org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.junit.Test;
 import org.mockito.MockedStatic;
 
@@ -49,7 +51,9 @@ public final class OpenGaussSelectDatabaseExecutorTest {
     private void assertExecute0() throws SQLException {
         
when(ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Arrays.asList("foo",
 "bar", "sharding_db", "other_db"));
         OpenGaussSelectDatabaseExecutor executor = new 
OpenGaussSelectDatabaseExecutor(SQL);
-        executor.execute(null);
+        ConnectionSession connectionSession = mock(ConnectionSession.class);
+        when(connectionSession.getDatabaseType()).thenReturn(new 
OpenGaussDatabaseType());
+        executor.execute(connectionSession);
         QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
         assertThat(actualMetaData.getColumnCount(), is(2));
         assertThat(actualMetaData.getColumnName(1), is("datname"));

Reply via email to