You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/06/08 07:45:42 UTC
[shardingsphere] branch master updated: Fix the exception thrown when invoking ShardingSphereResultSet#getCharacterStream with CLOB type while using Oracle database. (#26093) (#26094)
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 7566dde5818 Fix the exception thrown when invoking ShardingSphereResultSet#getCharacterStream with CLOB type while using Oracle database. (#26093) (#26094)
7566dde5818 is described below
commit 7566dde581865a01b3e51825941bb7883837e959
Author: Cong Hu <ia...@qq.com>
AuthorDate: Thu Jun 8 15:45:35 2023 +0800
Fix the exception thrown when invoking ShardingSphereResultSet#getCharacterStream with CLOB type while using Oracle database. (#26093) (#26094)
* Fix the exception thrown when invoking ShardingSphereResultSet#getCharacterStream with CLOB type while using Oracle database. (#26093)
* Fix the exception thrown when invoking ShardingSphereResultSet#getCharacterStream with CLOB type while using Oracle database. (#26093)
* retrigger checks
---
.../encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java | 6 ++++++
.../merge/dal/show/EncryptShowCreateTableMergedResult.java | 6 ++++++
.../shardingsphere/encrypt/merge/dql/EncryptMergedResult.java | 6 ++++++
.../encrypt/merge/dql/EncryptMergedResultTest.java | 8 ++++++++
.../apache/shardingsphere/mask/merge/dql/MaskMergedResult.java | 6 ++++++
.../shardingsphere/mask/merge/dql/MaskMergedResultTest.java | 8 ++++++++
.../infra/executor/sql/execute/result/query/QueryResult.java | 10 ++++++++++
.../impl/driver/jdbc/type/stream/JDBCStreamQueryResult.java | 6 ++++++
.../result/query/type/memory/AbstractMemoryQueryResult.java | 10 ++++++++++
.../driver/jdbc/type/stream/JDBCStreamQueryResultTest.java | 9 +++++++++
.../apache/shardingsphere/infra/merge/result/MergedResult.java | 10 ++++++++++
.../merge/result/impl/decorator/DecoratorMergedResult.java | 6 ++++++
.../infra/merge/result/impl/local/LocalDataMergedResult.java | 6 ++++++
.../infra/merge/result/impl/memory/MemoryMergedResult.java | 5 +++++
.../infra/merge/result/impl/stream/StreamMergedResult.java | 8 ++++++++
.../merge/result/impl/transparent/TransparentMergedResult.java | 6 ++++++
.../merge/result/impl/local/LocalDataMergedResultTest.java | 7 +++++++
.../result/impl/transparent/TransparentMergedResultTest.java | 10 ++++++++++
.../driver/jdbc/core/resultset/ShardingSphereResultSet.java | 3 ++-
.../driver/jdbc/adapter/ResultSetGetterAdapterTest.java | 10 +++++++---
.../jdbc/core/resultset/ShardingSphereResultSetTest.java | 4 ++--
21 files changed, 144 insertions(+), 6 deletions(-)
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java
index a49054fece7..1ff7ac08fef 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowColumnsMergedResult.java
@@ -26,6 +26,7 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Calendar;
@@ -94,6 +95,11 @@ public abstract class EncryptShowColumnsMergedResult implements MergedResult {
throw new SQLFeatureNotSupportedException("");
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ throw new SQLFeatureNotSupportedException("");
+ }
+
protected abstract boolean nextValue() throws SQLException;
protected abstract Object getOriginalValue(int columnIndex, Class<?> type) throws SQLException;
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java
index d8c4d210527..f80cc9c703d 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dal/show/EncryptShowCreateTableMergedResult.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Calendar;
@@ -105,6 +106,11 @@ public abstract class EncryptShowCreateTableMergedResult implements MergedResult
throw new SQLFeatureNotSupportedException("");
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ throw new SQLFeatureNotSupportedException("");
+ }
+
protected abstract boolean nextValue() throws SQLException;
protected abstract Object getOriginalValue(int columnIndex, Class<?> type) throws SQLException;
diff --git a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
index 6bc4ce2d890..1f59aba4349 100644
--- a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
+++ b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResult.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.encrypt.api.context.EncryptContext;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Optional;
@@ -67,6 +68,11 @@ public final class EncryptMergedResult implements MergedResult {
return mergedResult.getInputStream(columnIndex, type);
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ return mergedResult.getCharacterStream(columnIndex);
+ }
+
@Override
public boolean wasNull() throws SQLException {
return mergedResult.wasNull();
diff --git a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
index 047d903db5c..34124e20248 100644
--- a/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
+++ b/features/encrypt/core/src/test/java/org/apache/shardingsphere/encrypt/merge/dql/EncryptMergedResultTest.java
@@ -24,6 +24,7 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
@@ -70,6 +71,13 @@ class EncryptMergedResultTest {
assertThat(new EncryptMergedResult(metaData, mergedResult).getInputStream(1, "asc"), is(inputStream));
}
+ @Test
+ void assertGetCharacterStream() throws SQLException {
+ Reader reader = mock(Reader.class);
+ when(mergedResult.getCharacterStream(1)).thenReturn(reader);
+ assertThat(new EncryptMergedResult(metaData, mergedResult).getCharacterStream(1), is(reader));
+ }
+
@Test
void assertWasNull() throws SQLException {
assertFalse(new EncryptMergedResult(metaData, mergedResult).wasNull());
diff --git a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
index 04b4ca8a9cf..8912bd3be34 100644
--- a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
+++ b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResult.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Optional;
@@ -62,6 +63,11 @@ public final class MaskMergedResult implements MergedResult {
return mergedResult.getInputStream(columnIndex, type);
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ return mergedResult.getCharacterStream(columnIndex);
+ }
+
@Override
public boolean wasNull() throws SQLException {
return mergedResult.wasNull();
diff --git a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
index 0deac1219d9..0af3e0ed0e7 100644
--- a/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
+++ b/features/mask/core/src/test/java/org/apache/shardingsphere/mask/merge/dql/MaskMergedResultTest.java
@@ -25,6 +25,7 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Date;
@@ -73,6 +74,13 @@ class MaskMergedResultTest {
assertThat(new MaskMergedResult(metaData, mergedResult).getInputStream(1, "asc"), is(inputStream));
}
+ @Test
+ void assertGetCharacterStream() throws SQLException {
+ Reader reader = mock(Reader.class);
+ when(mergedResult.getCharacterStream(1)).thenReturn(reader);
+ assertThat(new MaskMergedResult(metaData, mergedResult).getCharacterStream(1), is(reader));
+ }
+
@Test
void assertWasNull() throws SQLException {
assertFalse(new MaskMergedResult(metaData, mergedResult).wasNull());
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/QueryResult.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/QueryResult.java
index 99eabddaf13..e2a8460702d 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/QueryResult.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/QueryResult.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.executor.sql.execute.result.query;
import org.apache.shardingsphere.infra.executor.sql.execute.result.ExecuteResult;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
@@ -67,6 +68,15 @@ public interface QueryResult extends ExecuteResult, AutoCloseable {
*/
InputStream getInputStream(int columnIndex, String type) throws SQLException;
+ /**
+ * Get CharacterStream.
+ *
+ * @param columnIndex column index
+ * @return reader
+ * @throws SQLException SQL exception
+ */
+ Reader getCharacterStream(int columnIndex) throws SQLException;
+
/**
* Judge result set is null or not.
*
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResult.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResult.java
index 60663208772..bcfaba882b1 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResult.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResult.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.dr
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.stream.AbstractStreamQueryResult;
import java.io.InputStream;
+import java.io.Reader;
import java.math.BigDecimal;
import java.sql.Array;
import java.sql.Blob;
@@ -135,6 +136,11 @@ public final class JDBCStreamQueryResult extends AbstractStreamQueryResult {
}
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ return resultSet.getCharacterStream(columnIndex);
+ }
+
@Override
public boolean wasNull() throws SQLException {
return resultSet.wasNull();
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/type/memory/AbstractMemoryQueryResult.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/type/memory/AbstractMemoryQueryResult.java
index e37f906a809..0a92070ea4f 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/type/memory/AbstractMemoryQueryResult.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/type/memory/AbstractMemoryQueryResult.java
@@ -23,11 +23,15 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryRe
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
import org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.row.MemoryQueryResultDataRow;
+import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
+import java.io.Reader;
+import java.sql.SQLException;
import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;
@@ -98,6 +102,12 @@ public abstract class AbstractMemoryQueryResult implements QueryResult {
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ // TODO Support connection property character encoding
+ return new BufferedReader(new InputStreamReader(getInputStream(columnIndex)));
+ }
+
@Override
public final boolean wasNull() {
return wasNull;
diff --git a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResultTest.java b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResultTest.java
index 7e3076541dc..9353519f6e6 100644
--- a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResultTest.java
+++ b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/result/query/impl/driver/jdbc/type/stream/JDBCStreamQueryResultTest.java
@@ -237,6 +237,15 @@ class JDBCStreamQueryResultTest {
assertThrows(SQLException.class, () -> queryResult.getInputStream(1, "Unsupported Type"));
}
+ @Test
+ void assertGetCharacterStream() throws SQLException {
+ ResultSet resultSet = getResultSet();
+ JDBCStreamQueryResult queryResult = new JDBCStreamQueryResult(resultSet);
+ queryResult.next();
+ queryResult.getCharacterStream(1);
+ verify(resultSet).getCharacterStream(1);
+ }
+
@Test
void assertWasNull() throws SQLException {
JDBCStreamQueryResult queryResult = new JDBCStreamQueryResult(getResultSet());
diff --git a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/MergedResult.java b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/MergedResult.java
index ac31372f71e..d7f4610f2b0 100644
--- a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/MergedResult.java
+++ b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/MergedResult.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.infra.merge.result;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
@@ -65,6 +66,15 @@ public interface MergedResult {
*/
InputStream getInputStream(int columnIndex, String type) throws SQLException;
+ /**
+ * Get CharacterStream.
+ *
+ * @param columnIndex column index
+ * @return Reader
+ * @throws SQLException SQL exception
+ */
+ Reader getCharacterStream(int columnIndex) throws SQLException;
+
/**
* Judge ResultSet is null or not.
*
diff --git a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/decorator/DecoratorMergedResult.java b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/decorator/DecoratorMergedResult.java
index e36d18a914c..7a00e7117f9 100644
--- a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/decorator/DecoratorMergedResult.java
+++ b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/decorator/DecoratorMergedResult.java
@@ -22,6 +22,7 @@ import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
@@ -49,6 +50,11 @@ public abstract class DecoratorMergedResult implements MergedResult {
return mergedResult.getInputStream(columnIndex, type);
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ return mergedResult.getCharacterStream(columnIndex);
+ }
+
@Override
public final boolean wasNull() throws SQLException {
return mergedResult.wasNull();
diff --git a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResult.java b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResult.java
index 220bfc6bc63..d615f66ed97 100644
--- a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResult.java
+++ b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResult.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.merge.result.impl.local;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.Calendar;
@@ -63,6 +64,11 @@ public final class LocalDataMergedResult implements MergedResult {
throw new SQLFeatureNotSupportedException("getInputStream");
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ throw new SQLFeatureNotSupportedException("getCharacterStream");
+ }
+
@Override
public boolean wasNull() {
return null == currentRow;
diff --git a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryMergedResult.java b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryMergedResult.java
index ff3b0b06bd3..526c5f5e683 100644
--- a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryMergedResult.java
+++ b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryMergedResult.java
@@ -93,6 +93,11 @@ public abstract class MemoryMergedResult<T extends ShardingSphereRule> implement
throw new SQLFeatureNotSupportedException(String.format("Get input stream from `%s`", type));
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ throw new SQLFeatureNotSupportedException("Get Character stream");
+ }
+
@Override
public final boolean wasNull() {
return wasNull;
diff --git a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/stream/StreamMergedResult.java b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/stream/StreamMergedResult.java
index 44f65a8d3be..4d70c7ce3ad 100644
--- a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/stream/StreamMergedResult.java
+++ b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/stream/StreamMergedResult.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
@@ -62,6 +63,13 @@ public abstract class StreamMergedResult implements MergedResult {
return result;
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ Reader result = getCurrentQueryResult().getCharacterStream(columnIndex);
+ wasNull = getCurrentQueryResult().wasNull();
+ return result;
+ }
+
@Override
public final boolean wasNull() {
return wasNull;
diff --git a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResult.java b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResult.java
index b24eb533c80..db55ad768ed 100644
--- a/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResult.java
+++ b/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResult.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryRe
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.SQLException;
import java.util.Calendar;
@@ -53,6 +54,11 @@ public final class TransparentMergedResult implements MergedResult {
return queryResult.getInputStream(columnIndex, type);
}
+ @Override
+ public Reader getCharacterStream(final int columnIndex) throws SQLException {
+ return queryResult.getCharacterStream(columnIndex);
+ }
+
@Override
public boolean wasNull() throws SQLException {
return queryResult.wasNull();
diff --git a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResultTest.java b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResultTest.java
index 2f6ea41dc4b..1f50709a14d 100644
--- a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResultTest.java
+++ b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/local/LocalDataMergedResultTest.java
@@ -64,6 +64,13 @@ class LocalDataMergedResultTest {
assertThrows(SQLFeatureNotSupportedException.class, () -> actual.getInputStream(1, "Ascii"));
}
+ @Test
+ void assertGetCharacterStream() {
+ List<Object> row = Collections.singletonList("value");
+ LocalDataMergedResult actual = new LocalDataMergedResult(Collections.singletonList(new LocalDataQueryResultRow(row)));
+ assertThrows(SQLFeatureNotSupportedException.class, () -> actual.getCharacterStream(1));
+ }
+
@Test
void assertWasNull() {
List<Object> row = Collections.singletonList("value");
diff --git a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResultTest.java b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResultTest.java
index 138de553654..6cc7a9d733f 100644
--- a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResultTest.java
+++ b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/result/impl/transparent/TransparentMergedResultTest.java
@@ -21,6 +21,7 @@ import org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryRe
import org.junit.jupiter.api.Test;
import java.io.InputStream;
+import java.io.Reader;
import java.sql.Date;
import java.sql.SQLException;
@@ -67,6 +68,15 @@ class TransparentMergedResultTest {
assertThat(actual.getInputStream(1, "Ascii"), is(value));
}
+ @Test
+ void assertGetCharacterStream() throws SQLException {
+ QueryResult queryResult = mock(QueryResult.class);
+ Reader value = mock(Reader.class);
+ when(queryResult.getCharacterStream(1)).thenReturn(value);
+ TransparentMergedResult actual = new TransparentMergedResult(queryResult);
+ assertThat(actual.getCharacterStream(1), is(value));
+ }
+
@Test
void assertWasNull() throws SQLException {
TransparentMergedResult actual = new TransparentMergedResult(mock(QueryResult.class));
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java
index 6d93ec9babd..9d6ec2c9146 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSet.java
@@ -298,7 +298,8 @@ public final class ShardingSphereResultSet extends AbstractResultSetAdapter {
@Override
public Reader getCharacterStream(final int columnIndex) throws SQLException {
- return (Reader) mergeResultSet.getValue(columnIndex, Reader.class);
+ // TODO To be supported: encrypt, mask, and so on
+ return mergeResultSet.getCharacterStream(columnIndex);
}
@Override
diff --git a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ResultSetGetterAdapterTest.java b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ResultSetGetterAdapterTest.java
index 44bba35cc24..8055db2578f 100644
--- a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ResultSetGetterAdapterTest.java
+++ b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/ResultSetGetterAdapterTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.driver.jdbc.adapter;
import org.apache.shardingsphere.driver.jdbc.core.resultset.ShardingSphereResultSet;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
import org.junit.jupiter.api.Test;
@@ -343,7 +344,7 @@ class ResultSetGetterAdapterTest {
void assertGetCharacterStreamForColumnIndex() throws SQLException {
Reader reader = mock(Reader.class);
MergedResult mergedResult = mock(MergedResult.class);
- when(mergedResult.getValue(1, Reader.class)).thenReturn(reader);
+ when(mergedResult.getCharacterStream(1)).thenReturn(reader);
assertThat(mockShardingSphereResultSet(mergedResult).getCharacterStream(1), is(reader));
}
@@ -351,7 +352,7 @@ class ResultSetGetterAdapterTest {
void assertGetCharacterStreamForColumnLabel() throws SQLException {
Reader reader = mock(Reader.class);
MergedResult mergedResult = mock(MergedResult.class);
- when(mergedResult.getValue(1, Reader.class)).thenReturn(reader);
+ when(mergedResult.getCharacterStream(1)).thenReturn(reader);
assertThat(mockShardingSphereResultSet(mergedResult).getCharacterStream("col"), is(reader));
}
@@ -439,6 +440,9 @@ class ResultSetGetterAdapterTest {
ResultSet resultSet = mock(ResultSet.class);
when(resultSetMetaData.getColumnCount()).thenReturn(1);
when(resultSet.getMetaData()).thenReturn(resultSetMetaData);
- return new ShardingSphereResultSet(Collections.singletonList(resultSet), mergedResult, mock(Statement.class), true, mock(ExecutionContext.class));
+ SQLStatementContext sqlStatementContext = mock(SQLStatementContext.class);
+ ExecutionContext executionContext = mock(ExecutionContext.class);
+ when(executionContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+ return new ShardingSphereResultSet(Collections.singletonList(resultSet), mergedResult, mock(Statement.class), true, executionContext);
}
}
diff --git a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetTest.java b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetTest.java
index 6e9784599f5..7956854a5cd 100644
--- a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetTest.java
+++ b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/resultset/ShardingSphereResultSetTest.java
@@ -391,14 +391,14 @@ class ShardingSphereResultSetTest {
@Test
void assertGetCharacterStreamWithColumnIndex() throws SQLException {
Reader reader = mock(Reader.class);
- when(mergeResultSet.getValue(1, Reader.class)).thenReturn(reader);
+ when(mergeResultSet.getCharacterStream(1)).thenReturn(reader);
assertThat(shardingSphereResultSet.getCharacterStream(1), is(reader));
}
@Test
void assertGetCharacterStreamWithColumnLabel() throws SQLException {
Reader reader = mock(Reader.class);
- when(mergeResultSet.getValue(1, Reader.class)).thenReturn(reader);
+ when(mergeResultSet.getCharacterStream(1)).thenReturn(reader);
assertThat(shardingSphereResultSet.getCharacterStream("label"), is(reader));
}