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 <[email protected]>
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 <[email protected]>
---
.../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"));