Skip to content

Commit 3b303d9

Browse files
committed
Add OracleColumnDesc that implements ColumnDesc
1 parent cb2c739 commit 3b303d9

File tree

4 files changed

+76
-24
lines changed

4 files changed

+76
-24
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright (c) 2011-2021 Contributors to the Eclipse Foundation
3+
*
4+
* This program and the accompanying materials are made available under the
5+
* terms of the Eclipse Public License 2.0 which is available at
6+
* http://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
7+
* which is available at https://www.apache.org/licenses/LICENSE-2.0.
8+
*
9+
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
10+
*/
11+
package io.vertx.oracleclient.impl;
12+
13+
import io.vertx.sqlclient.desc.ColumnDescriptor;
14+
import io.vertx.sqlclient.impl.RowDesc;
15+
16+
import java.sql.JDBCType;
17+
import java.sql.ResultSetMetaData;
18+
import java.sql.SQLException;
19+
import java.util.ArrayList;
20+
import java.util.List;
21+
22+
public class OracleColumnDesc implements ColumnDescriptor {
23+
24+
public static RowDesc rowDesc(ResultSetMetaData metaData) throws SQLException {
25+
int cols = metaData.getColumnCount();
26+
List<String> columnNames = new ArrayList<>(cols);
27+
List<ColumnDescriptor> columnDescriptors = new ArrayList<>(cols);
28+
for (int i = 1; i <= cols; i++) {
29+
columnNames.add(metaData.getColumnLabel(i));
30+
columnDescriptors.add(new OracleColumnDesc(metaData, i));
31+
}
32+
return new RowDesc(columnNames, columnDescriptors);
33+
}
34+
35+
private final String name;
36+
private final String typeName;
37+
private final JDBCType type;
38+
39+
public OracleColumnDesc(ResultSetMetaData md, int idx) throws SQLException {
40+
this.name = md.getColumnLabel(idx);
41+
this.typeName = md.getColumnTypeName(idx);
42+
this.type = JDBCType.valueOf(md.getColumnType(idx));
43+
}
44+
45+
@Override
46+
public String name() {
47+
return name;
48+
}
49+
50+
@Override
51+
public boolean isArray() {
52+
return false;
53+
}
54+
55+
@Override
56+
public String typeName() {
57+
return typeName;
58+
}
59+
60+
@Override
61+
public JDBCType jdbcType() {
62+
return type;
63+
}
64+
}

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

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@
1515
import io.vertx.core.impl.ContextInternal;
1616
import io.vertx.oracleclient.OracleConnectOptions;
1717
import io.vertx.oracleclient.impl.Helper;
18+
import io.vertx.oracleclient.impl.OracleColumnDesc;
1819
import io.vertx.oracleclient.impl.OracleRow;
1920
import io.vertx.oracleclient.impl.RowReader;
2021
import io.vertx.sqlclient.Row;
2122
import io.vertx.sqlclient.RowSet;
2223
import io.vertx.sqlclient.Tuple;
24+
import io.vertx.sqlclient.desc.ColumnDescriptor;
2325
import io.vertx.sqlclient.impl.QueryResultHandler;
2426
import io.vertx.sqlclient.impl.RowDesc;
2527
import io.vertx.sqlclient.impl.command.ExtendedQueryCommand;
@@ -77,8 +79,7 @@ public Future<RowReader> createRowReader(PreparedStatement sqlStatement, Context
7779
return Helper.first(publisher, context)
7880
.compose(ors -> {
7981
try {
80-
RowDesc description = createDescription(ors);
81-
82+
RowDesc description = OracleColumnDesc.rowDesc(ors.getMetaData());
8283
List<String> types = new ArrayList<>();
8384
for (int i = 1; i <= ors.getMetaData().getColumnCount(); i++) {
8485
types.add(ors.getMetaData().getColumnClassName(i));
@@ -96,17 +97,6 @@ public Future<RowReader> createRowReader(PreparedStatement sqlStatement, Context
9697
}
9798
}
9899

99-
private static RowDesc createDescription(OracleResultSet ors) throws SQLException {
100-
List<String> columnNames = new ArrayList<>();
101-
RowDesc desc = new RowDesc(columnNames);
102-
ResultSetMetaData metaData = ors.getMetaData();
103-
int cols = metaData.getColumnCount();
104-
for (int i = 1; i <= cols; i++) {
105-
columnNames.add(metaData.getColumnLabel(i));
106-
}
107-
return desc;
108-
}
109-
110100
private static Row transform(List<String> ors, RowDesc desc, oracle.jdbc.OracleRow or) throws SQLException {
111101
Row row = new OracleRow(desc);
112102
for (int i = 1; i <= desc.columnNames().size(); i++) {

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

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@
1010
*/
1111
package io.vertx.oracleclient.impl.commands;
1212

13+
import io.vertx.oracleclient.impl.OracleColumnDesc;
1314
import io.vertx.sqlclient.impl.ParamDesc;
1415
import io.vertx.sqlclient.impl.RowDesc;
1516
import io.vertx.sqlclient.impl.TupleInternal;
1617

1718
import java.sql.ResultSetMetaData;
1819
import java.sql.SQLException;
19-
import java.util.ArrayList;
20-
import java.util.List;
2120

2221
public class OraclePreparedStatement implements io.vertx.sqlclient.impl.PreparedStatement {
2322

@@ -26,19 +25,15 @@ public class OraclePreparedStatement implements io.vertx.sqlclient.impl.Prepared
2625
private final ParamDesc paramDesc;
2726

2827
public OraclePreparedStatement(String sql, java.sql.PreparedStatement preparedStatement) throws SQLException {
29-
30-
List<String> columnNames = new ArrayList<>();
3128
ResultSetMetaData metaData = preparedStatement.getMetaData();
29+
RowDesc rowDesc;
3230
if (metaData != null) {
33-
// Not a SELECT
34-
int cols = metaData.getColumnCount();
35-
for (int i = 1; i <= cols; i++) {
36-
columnNames.add(metaData.getColumnLabel(i));
37-
}
31+
rowDesc = OracleColumnDesc.rowDesc(metaData);
32+
} else {
33+
rowDesc = RowDesc.EMPTY;
3834
}
39-
4035
this.sql = sql;
41-
this.rowDesc = new RowDesc(columnNames);
36+
this.rowDesc = rowDesc;
4237
this.paramDesc = new ParamDesc();
4338
}
4439

vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/RowDesc.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.vertx.sqlclient.desc.ColumnDescriptor;
2121

2222
import java.sql.JDBCType;
23+
import java.util.Collections;
2324
import java.util.List;
2425
import java.util.stream.Collectors;
2526

@@ -29,6 +30,8 @@
2930

3031
public class RowDesc {
3132

33+
public static final RowDesc EMPTY = new RowDesc(Collections.emptyList(), Collections.emptyList());
34+
3235
private final List<String> columnNames;
3336
private final List<ColumnDescriptor> columnDescriptors;
3437

0 commit comments

Comments
 (0)