Skip to content

Commit 8e89a9b

Browse files
simple fix of oracle stream API for RAW column (#1500)
Backported from #1498 Signed-off-by: turakamou <[email protected]> Co-authored-by: turakamou <[email protected]>
1 parent 2402c37 commit 8e89a9b

File tree

2 files changed

+29
-8
lines changed

2 files changed

+29
-8
lines changed

vertx-oracle-client/src/main/java/io/vertx/oracleclient/impl/RowReader.java

+7-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616
import io.vertx.core.impl.logging.Logger;
1717
import io.vertx.core.impl.logging.LoggerFactory;
1818
import io.vertx.oracleclient.OracleException;
19-
import io.vertx.oracleclient.impl.commands.OraclePreparedQueryCommand;
2019
import io.vertx.oracleclient.impl.commands.OracleResponse;
2120
import io.vertx.sqlclient.Row;
2221
import io.vertx.sqlclient.impl.RowDesc;
@@ -40,7 +39,7 @@ public class RowReader<C, R> implements Flow.Subscriber<Row>, Function<oracle.jd
4039
private static final Logger LOG = LoggerFactory.getLogger(RowReader.class);
4140

4241
private final ContextInternal context;
43-
private final List<String> types;
42+
private final List<Class<?>> classes;
4443
private final RowDesc description;
4544
private final Statement resultSetStatement;
4645

@@ -63,9 +62,9 @@ public RowReader(ContextInternal context, Collector<Row, C, R> collector, Oracle
6362
resultSetStatement = ors.getStatement();
6463
ResultSetMetaData metaData = ors.getMetaData();
6564
int cols = metaData.getColumnCount();
66-
types = new ArrayList<>(cols);
65+
classes = new ArrayList<>(cols);
6766
for (int i = 1; i <= cols; i++) {
68-
types.add(metaData.getColumnClassName(i));
67+
classes.add(getType(metaData.getColumnClassName(i)));
6968
}
7069
Flow.Publisher<Row> publisher = ors.publisherOracle(this);
7170
description = OracleRowDesc.create(metaData);
@@ -170,24 +169,24 @@ private OracleResponse<R> createResponse() {
170169
@Override
171170
public Row apply(oracle.jdbc.OracleRow oracleRow) {
172171
try {
173-
return transform(types, description, oracleRow);
172+
return transform(classes, description, oracleRow);
174173
} catch (SQLException e) {
175174
throw new OracleException(e);
176175
}
177176
}
178177

179-
private static Row transform(List<String> ors, RowDesc desc, oracle.jdbc.OracleRow or) throws SQLException {
178+
private static Row transform(List<Class<?>> classes, RowDesc desc, oracle.jdbc.OracleRow or) throws SQLException {
180179
Row row = new OracleRow(desc);
181180
for (int i = 1; i <= desc.columnNames().size(); i++) {
182-
Object res = convertSqlValue(or.getObject(i, getType(ors.get(i - 1))));
181+
Object res = convertSqlValue(or.getObject(i, classes.get(i - 1)));
183182
row.addValue(res);
184183
}
185184
return row;
186185
}
187186

188187
private static Class<?> getType(String cn) {
189188
try {
190-
return OraclePreparedQueryCommand.class.getClassLoader().loadClass(cn);
189+
return Class.forName(cn, true, RowReader.class.getClassLoader());
191190
} catch (ClassNotFoundException e) {
192191
return null;
193192
}

vertx-oracle-client/src/test/java/io/vertx/oracleclient/test/OracleBinaryDataTypesTest.java

+22
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,28 @@ private <T> void testDecode(TestContext ctx, String columnName, JDBCType jdbcTyp
9898
}));
9999
}
100100

101+
private void testDecodeUsingStream(TestContext ctx, String columnName, JDBCType jdbcType, Buffer expected) {
102+
pool.getConnection().onComplete(ctx.asyncAssertSuccess(conn -> {
103+
conn.prepare("SELECT " + columnName + " FROM binary_data_types WHERE id = 1")
104+
.onComplete(ctx.asyncAssertSuccess(preparedStatement -> {
105+
preparedStatement.cursor().read(10).onComplete(ctx.asyncAssertSuccess(result -> {
106+
ctx.assertEquals(1, result.size());
107+
Row row = result.iterator().next();
108+
ctx.assertEquals(expected, row.get(Buffer.class, 0));
109+
ctx.assertEquals(expected, row.get(Buffer.class, columnName));
110+
ColumnDescriptor columnDescriptor = result.columnDescriptors().get(0);
111+
ctx.assertEquals(jdbcType, columnDescriptor.jdbcType());
112+
ctx.assertNotNull(columnDescriptor);
113+
}));
114+
}));
115+
}));
116+
}
117+
118+
@Test
119+
public void testDecodeRawUsingStream(TestContext ctx) {
120+
testDecodeUsingStream(ctx, "test_raw", JDBCType.VARBINARY, Buffer.buffer("See you space cowboy..."));
121+
}
122+
101123
@Test
102124
public void testEncodeNull(TestContext ctx) {
103125
pool

0 commit comments

Comments
 (0)