Skip to content

Commit 9a56c6c

Browse files
committed
DB2 support for LocalTime and BigDecimal
1 parent 9a5ecef commit 9a56c6c

File tree

6 files changed

+35
-18
lines changed

6 files changed

+35
-18
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public <T> T get(Class<T> type, int position) {
6969
return type.cast(getLocalDate(position));
7070
} else if (type == LocalDateTime.class) {
7171
return type.cast(getLocalDateTime(position));
72+
} else if (type == LocalTime.class) {
73+
return type.cast(getLocalTime(position));
7274
} else if (type == Duration.class) {
7375
return type.cast(getDuration(position));
7476
} else if (type == RowId.class || type == DB2RowId.class) {
@@ -195,7 +197,8 @@ public LocalDate getLocalDate(String name) {
195197

196198
@Override
197199
public LocalTime getLocalTime(String name) {
198-
throw new UnsupportedOperationException();
200+
int pos = getColumnIndex(name);
201+
return pos == -1 ? null : getLocalTime(pos);
199202
}
200203

201204
@Override
@@ -221,7 +224,8 @@ public UUID getUUID(String name) {
221224

222225
@Override
223226
public BigDecimal getBigDecimal(String name) {
224-
throw new UnsupportedOperationException();
227+
int pos = getColumnIndex(name);
228+
return pos == -1 ? null : getBigDecimal(pos);
225229
}
226230

227231
@Override

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,8 @@ public static boolean canConvert(Object value, int toType) {
243243
return clazz == double.class ||
244244
clazz == Double.class ||
245245
clazz == float.class ||
246-
clazz == Float.class;
246+
clazz == Float.class ||
247+
clazz == BigDecimal.class;
247248
case ClientTypes.BIT:
248249
case ClientTypes.BOOLEAN:
249250
case ClientTypes.CHAR:

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class SqlCode {
4040
public static final int OBJECT_NOT_DEFINED = -204;
4141
public static final int COLUMN_DOES_NOT_EXIST = -206;
4242

43-
private int code_;
43+
private final int code_;
4444

4545
SqlCode(int code) {
4646
code_ = code;
@@ -62,4 +62,9 @@ public final int getCode() {
6262
/** SQL code for SQL state 02000 (end of data). DRDA does not
6363
* specify the SQL code for this SQL state, but Derby/DB2 uses 100. */
6464
public final static SqlCode END_OF_DATA = new SqlCode(100);
65+
66+
@Override
67+
public String toString() {
68+
return "SQLCode=" + code_;
69+
}
6570
}

vertx-db2-client/src/test/java/io/vertx/db2client/tck/DB2BinaryDataTypeEncodeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ protected String statement(String... parts) {
4141
@Override
4242
public void testDouble(TestContext ctx) {
4343
// The smallest positive value supported by the DOUBLE column type in DB2 is 5.4E-079
44-
testEncodeGeneric(ctx, "test_float_8", Double.class, Double.valueOf("5.4E-079"));
44+
testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, Double.valueOf("5.4E-079"));
4545
}
4646

4747
@Override

vertx-mysql-client/src/test/java/io/vertx/mysqlclient/tck/MySQLBinaryDataTypeEncodeTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,6 @@ public void testBoolean(TestContext ctx) {
5959
@Override
6060
public void testTime(TestContext ctx) {
6161
// MySQL TIME type is mapped to java.time.Duration so we need to override here
62-
testEncodeGeneric(ctx, "test_time", Duration.class, Duration.ofHours(18).plusMinutes(45).plusSeconds(2));
62+
testEncodeGeneric(ctx, "test_time", Duration.class, null, Duration.ofHours(18).plusMinutes(45).plusSeconds(2));
6363
}
6464
}

vertx-sql-client/src/test/java/io/vertx/sqlclient/tck/BinaryDataTypeEncodeTestBase.java

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,68 +19,71 @@
1919

2020
import java.time.LocalDate;
2121
import java.time.LocalTime;
22+
import java.util.function.BiFunction;
23+
import java.util.function.Function;
24+
import java.util.function.Supplier;
2225

2326
public abstract class BinaryDataTypeEncodeTestBase extends DataTypeTestBase {
2427
protected abstract String statement(String... parts);
2528

2629
@Test
2730
public void testSmallInt(TestContext ctx) {
28-
testEncodeGeneric(ctx, "test_int_2", Short.class, (short) Short.MIN_VALUE);
31+
testEncodeGeneric(ctx, "test_int_2", Short.class, Row::getShort, (short) Short.MIN_VALUE);
2932
}
3033

3134
@Test
3235
public void testInteger(TestContext ctx) {
33-
testEncodeGeneric(ctx, "test_int_4", Integer.class, (int) Integer.MIN_VALUE);
36+
testEncodeGeneric(ctx, "test_int_4", Integer.class, Row::getInteger, (int) Integer.MIN_VALUE);
3437
}
3538

3639
@Test
3740
public void testBigInt(TestContext ctx) {
38-
testEncodeGeneric(ctx, "test_int_8", Long.class, (long) Long.MIN_VALUE);
41+
testEncodeGeneric(ctx, "test_int_8", Long.class, Row::getLong, (long) Long.MIN_VALUE);
3942
}
4043

4144
@Test
4245
public void testFloat4(TestContext ctx) {
43-
testEncodeGeneric(ctx, "test_float_4", Float.class, (float) -3.402823e38F);
46+
testEncodeGeneric(ctx, "test_float_4", Float.class, Row::getFloat, (float) -3.402823e38F);
4447
}
4548

4649
@Test
4750
public void testDouble(TestContext ctx) {
48-
testEncodeGeneric(ctx, "test_float_8", Double.class, (double) Double.MIN_VALUE);
51+
testEncodeGeneric(ctx, "test_float_8", Double.class, Row::getDouble, (double) Double.MIN_VALUE);
4952
}
5053

5154
@Test
5255
public void testNumeric(TestContext ctx) {
53-
testEncodeGeneric(ctx, "test_numeric", Numeric.class, Numeric.parse("-999.99"));
56+
testEncodeGeneric(ctx, "test_numeric", Numeric.class, null, Numeric.parse("-999.99"));
5457
}
5558

5659
@Test
5760
public void testDecimal(TestContext ctx) {
58-
testEncodeGeneric(ctx, "test_decimal", Numeric.class, Numeric.parse("-12345"));
61+
testEncodeGeneric(ctx, "test_decimal", Numeric.class, null, Numeric.parse("-12345"));
5962
}
6063

6164
@Test
6265
public void testChar(TestContext ctx) {
63-
testEncodeGeneric(ctx, "test_char", String.class, "newchar0");
66+
testEncodeGeneric(ctx, "test_char", String.class, Row::getString, "newchar0");
6467
}
6568

6669
@Test
6770
public void testVarchar(TestContext ctx) {
68-
testEncodeGeneric(ctx, "test_varchar", String.class, "newvarchar");
71+
testEncodeGeneric(ctx, "test_varchar", String.class, Row::getString, "newvarchar");
6972
}
7073

7174
@Test
7275
public void testBoolean(TestContext ctx) {
73-
testEncodeGeneric(ctx, "test_boolean", Boolean.class, false);
76+
testEncodeGeneric(ctx, "test_boolean", Boolean.class, Row::getBoolean, false);
7477
}
7578

7679
@Test
7780
public void testDate(TestContext ctx) {
78-
testEncodeGeneric(ctx, "test_date", LocalDate.class, LocalDate.parse("1999-12-31"));
81+
testEncodeGeneric(ctx, "test_date", LocalDate.class, Row::getLocalDate, LocalDate.parse("1999-12-31"));
7982
}
8083

8184
@Test
8285
public void testTime(TestContext ctx) {
83-
testEncodeGeneric(ctx, "test_time", LocalTime.class, LocalTime.of(12,1,30));
86+
testEncodeGeneric(ctx, "test_time", LocalTime.class, Row::getLocalTime, LocalTime.of(12,1,30));
8487
}
8588

8689
@Test
@@ -134,6 +137,7 @@ public void testNullValues(TestContext ctx) {
134137
protected <T> void testEncodeGeneric(TestContext ctx,
135138
String columnName,
136139
Class<T> clazz,
140+
BiFunction<Row,String,T> getter,
137141
T expected) {
138142
connector.connect(ctx.asyncAssertSuccess(conn -> {
139143
conn
@@ -147,6 +151,9 @@ protected <T> void testEncodeGeneric(TestContext ctx,
147151
ctx.assertEquals(1, row.size());
148152
ctx.assertEquals(expected, row.getValue(0));
149153
ctx.assertEquals(expected, row.getValue(columnName));
154+
if (getter != null) {
155+
ctx.assertEquals(expected, getter.apply(row, columnName));
156+
}
150157
// ctx.assertEquals(expected, row.get(clazz, 0));
151158
// ColumnChecker.checkColumn(0, columnName)
152159
// .returns(Tuple::getValue, Row::getValue, expected)

0 commit comments

Comments
 (0)