Skip to content

Commit cd0ff4e

Browse files
committed
Make RowBase and RowDesc usable without creating subclasses.
Motivation: RowBase is abstract and does not implement a couple of methods from its contract, such implementation actually relies on a description field present in each of its subclasses. Instead we can have RowBase carry the description field and implement those methods, as consequence RowBase can be reused as such and does not need to be abstract. RowDesc is simply abstract but is usable out of the box, just make it not abstract so it can be instantiated right away.
1 parent 32c48b7 commit cd0ff4e

File tree

8 files changed

+44
-126
lines changed

8 files changed

+44
-126
lines changed

vertx-db2-client/src/main/java/io/vertx/db2client/impl/DB2RowImpl.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,8 @@
3434

3535
public class DB2RowImpl extends RowBase {
3636

37-
private final RowDesc rowDesc;
38-
3937
public DB2RowImpl(RowDesc rowDesc) {
40-
super(rowDesc.columnNames().size());
41-
this.rowDesc = rowDesc;
38+
super(rowDesc);
4239
}
4340

4441
@Override
@@ -82,23 +79,14 @@ public <T> T get(Class<T> type, int position) {
8279
}
8380
}
8481

85-
@Override
86-
public String getColumnName(int pos) {
87-
List<String> columnNames = rowDesc.columnNames();
88-
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
89-
}
90-
9182
@Override
9283
public int getColumnIndex(String name) {
93-
if (name == null) {
94-
throw new NullPointerException();
95-
}
96-
int idx = rowDesc.columnIndex(name);
84+
int idx = super.getColumnIndex(name);
9785
if (idx >= 0) {
9886
return idx;
9987
}
10088
// Unless the column is renamed in the SQL query, the column name will be uppercase
101-
return rowDesc.columnIndex(name.toUpperCase());
89+
return super.getColumnIndex(name.toUpperCase());
10290
}
10391

10492
@Override

vertx-mssql-client/src/main/java/io/vertx/mssqlclient/impl/MSSQLRowImpl.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,25 +25,9 @@
2525
import java.util.UUID;
2626

2727
public class MSSQLRowImpl extends RowBase {
28-
private final RowDesc rowDesc;
2928

3029
public MSSQLRowImpl(RowDesc rowDesc) {
31-
super(rowDesc.columnNames().size());
32-
this.rowDesc = rowDesc;
33-
}
34-
35-
@Override
36-
public String getColumnName(int pos) {
37-
List<String> columnNames = rowDesc.columnNames();
38-
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
39-
}
40-
41-
@Override
42-
public int getColumnIndex(String column) {
43-
if (column == null) {
44-
throw new IllegalArgumentException("Column name can not be null");
45-
}
46-
return rowDesc.columnNames().indexOf(column);
30+
super(rowDesc);
4731
}
4832

4933
@Override

vertx-mysql-client/src/main/java/io/vertx/mysqlclient/impl/MySQLRowImpl.java

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,8 @@
2828

2929
public class MySQLRowImpl extends RowBase {
3030

31-
private final MySQLRowDesc rowDesc;
32-
3331
public MySQLRowImpl(MySQLRowDesc rowDesc) {
34-
super(rowDesc.columnNames().size());
35-
this.rowDesc = rowDesc;
32+
super(rowDesc);
3633
}
3734

3835
@Override
@@ -92,20 +89,6 @@ public <T> T get(Class<T> type, int position) {
9289
}
9390
}
9491

95-
@Override
96-
public String getColumnName(int pos) {
97-
List<String> columnNames = rowDesc.columnNames();
98-
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
99-
}
100-
101-
@Override
102-
public int getColumnIndex(String name) {
103-
if (name == null) {
104-
throw new NullPointerException();
105-
}
106-
return rowDesc.columnNames().indexOf(name);
107-
}
108-
10992
@Override
11093
public Temporal getTemporal(int pos) {
11194
throw new UnsupportedOperationException(buildIllegalAccessMessage(getValue(pos), getColumnName(pos), Temporal.class));
@@ -241,7 +224,7 @@ private GeometryCollection getGeometryCollection(int pos) {
241224

242225
@Override
243226
public LocalTime getLocalTime(int pos) {
244-
ColumnDefinition columnDefinition = rowDesc.get(pos);
227+
ColumnDefinition columnDefinition = ((MySQLRowDesc)desc).get(pos);
245228
Object val = getValue(pos);
246229
if (columnDefinition.type() == DataType.TIME && val instanceof Duration) {
247230
// map MySQL TIME data type to java.time.LocalTime

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

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,24 @@
1818
import io.vertx.sqlclient.internal.RowDesc;
1919

2020
import java.time.*;
21-
import java.util.List;
2221
import java.util.UUID;
2322

2423
public class OracleRow extends RowBase {
2524

26-
private final RowDesc desc;
27-
2825
public OracleRow(RowDesc desc) {
29-
super(desc.columnNames().size());
30-
this.desc = desc;
26+
super(desc);
3127
}
3228

3329
public OracleRow(OracleRow row) {
34-
super(row);
35-
this.desc = row.desc;
36-
}
37-
38-
@Override
39-
public String getColumnName(int pos) {
40-
List<String> columnNames = desc.columnNames();
41-
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
30+
super(row.desc, row);
4231
}
4332

4433
@Override
4534
public int getColumnIndex(String name) {
4635
if (name == null) {
4736
throw new NullPointerException();
4837
}
49-
return desc.columnNames().indexOf(name.toUpperCase());
38+
return super.getColumnIndex(name.toUpperCase());
5039
}
5140

5241
@Override

vertx-pg-client/src/main/java/io/vertx/pgclient/impl/RowImpl.java

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,30 +33,12 @@
3333

3434
public class RowImpl extends RowBase {
3535

36-
private final RowDesc desc;
37-
3836
public RowImpl(RowDesc desc) {
39-
super(desc.columnNames().size());
40-
this.desc = desc;
37+
super(desc);
4138
}
4239

4340
public RowImpl(RowImpl row) {
44-
super(row);
45-
this.desc = row.desc;
46-
}
47-
48-
@Override
49-
public String getColumnName(int pos) {
50-
List<String> columnNames = desc.columnNames();
51-
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
52-
}
53-
54-
@Override
55-
public int getColumnIndex(String name) {
56-
if (name == null) {
57-
throw new NullPointerException();
58-
}
59-
return desc.columnNames().indexOf(name);
41+
super(row.desc, row);
6042
}
6143

6244
@Override

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

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,50 @@
22

33
import io.vertx.sqlclient.Tuple;
44
import io.vertx.sqlclient.internal.ArrayTuple;
5+
import io.vertx.sqlclient.internal.RowDesc;
56
import io.vertx.sqlclient.internal.RowInternal;
67

78
import java.util.Collection;
9+
import java.util.List;
810

911
/**
1012
* Base class for rows.
1113
*/
12-
public abstract class RowBase extends ArrayTuple implements RowInternal {
14+
public class RowBase extends ArrayTuple implements RowInternal {
1315

1416
private boolean released;
17+
protected final RowDesc desc;
1518

16-
public RowBase(int len) {
17-
super(len);
19+
public RowBase(RowDesc desc) {
20+
super(desc.columnNames().size());
21+
22+
this.desc = desc;
1823
}
1924

20-
public RowBase(Collection<?> c) {
25+
public RowBase(RowDesc desc, Collection<?> c) {
2126
super(c);
27+
28+
this.desc = desc;
2229
}
2330

24-
public RowBase(Tuple tuple) {
31+
public RowBase(RowDesc desc, Tuple tuple) {
2532
super(tuple);
33+
34+
this.desc = desc;
35+
}
36+
37+
@Override
38+
public String getColumnName(int pos) {
39+
List<String> columnNames = desc.columnNames();
40+
return pos < 0 || columnNames.size() - 1 < pos ? null : columnNames.get(pos);
41+
}
42+
43+
@Override
44+
public int getColumnIndex(String name) {
45+
if (name == null) {
46+
throw new NullPointerException();
47+
}
48+
return desc.columnIndex(name);
2649
}
2750

2851
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@
2626
/**
2727
* @author <a href="mailto:[email protected]">Emad Alblueshi</a>
2828
*/
29-
public abstract class RowDesc {
29+
public class RowDesc {
3030

3131
private final ColumnNames columnNames;
3232
private final ColumnDescriptors columnDescriptors;
3333

34-
protected RowDesc(ColumnDescriptor[] columnDescriptors) {
34+
public RowDesc(ColumnDescriptor[] columnDescriptors) {
3535
this.columnNames = new ColumnNames(columnDescriptors);
3636
this.columnDescriptors = new ColumnDescriptors(columnDescriptors);
3737
}

vertx-sql-client/src/test/java/io/vertx/tests/sqlclient/spi/backend/GenericDriverTest.java

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -34,13 +34,6 @@
3434

3535
public class GenericDriverTest {
3636

37-
private static class GenericRowDesc extends RowDesc {
38-
public GenericRowDesc(ColumnDescriptor[] columnDescriptors) {
39-
super(columnDescriptors);
40-
}
41-
}
42-
43-
4437
private static class VarcharColumnDescriptor implements ColumnDescriptor {
4538

4639
private final String name;
@@ -67,31 +60,6 @@ public JDBCType jdbcType() {
6760
}
6861
}
6962

70-
private static class GenericRow extends RowBase {
71-
public GenericRow() {
72-
super(10);
73-
}
74-
@Override
75-
public String getColumnName(int pos) {
76-
switch (pos) {
77-
case 0:
78-
return "value";
79-
default:
80-
return null;
81-
}
82-
}
83-
84-
@Override
85-
public int getColumnIndex(String column) {
86-
switch (column) {
87-
case "value":
88-
return 0;
89-
default:
90-
return -1;
91-
}
92-
}
93-
}
94-
9563
@Test
9664
public void testSimple() {
9765

@@ -171,11 +139,12 @@ private <T, A> void scheduleQueryCommand(SimpleQueryCommand<T> simpleQuery, Comp
171139
Collector<Row, A, T> collector = (Collector<Row, A, T>) simpleQuery.collector();
172140
A container = collector.supplier().get();
173141
BiConsumer<A, Row> accumulator = collector.accumulator();
174-
Row row = new GenericRow();
142+
RowDesc rowDesc = new RowDesc(new ColumnDescriptor[]{new VarcharColumnDescriptor("value")});
143+
Row row = new RowBase(rowDesc);
175144
row.addValue("Hello " + simpleQuery.sql());
176145
accumulator.accept(container, row);
177146
T result = collector.finisher().apply(container);
178-
qrh.handleResult(0, 1, new GenericRowDesc(new ColumnDescriptor[] { new VarcharColumnDescriptor("value") })
147+
qrh.handleResult(0, 1, rowDesc
179148
, result, null);
180149
handler.succeed(true);
181150
}

0 commit comments

Comments
 (0)