Skip to content

Commit c735c41

Browse files
committed
Fixes for storing a Java byte into a SMALLINT column
1 parent 6e9d39e commit c735c41

File tree

3 files changed

+50
-10
lines changed

3 files changed

+50
-10
lines changed

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

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -219,16 +219,9 @@ public static boolean canConvert(Object value, int toType) {
219219
if (clazz == String.class)
220220
return true;
221221
switch (toType) {
222-
case ClientTypes.BIGINT:
223-
case ClientTypes.BIT:
224-
case ClientTypes.BOOLEAN:
225-
case ClientTypes.CHAR:
226-
case ClientTypes.DECIMAL:
227-
case ClientTypes.DOUBLE:
228222
case ClientTypes.INTEGER:
223+
case ClientTypes.BIGINT:
229224
case ClientTypes.LONGVARCHAR:
230-
case ClientTypes.REAL:
231-
case ClientTypes.SMALLINT:
232225
return clazz == boolean.class ||
233226
clazz == Boolean.class ||
234227
clazz == double.class ||
@@ -242,6 +235,30 @@ public static boolean canConvert(Object value, int toType) {
242235
clazz == short.class ||
243236
clazz == Short.class ||
244237
clazz == BigDecimal.class;
238+
case ClientTypes.DOUBLE:
239+
case ClientTypes.REAL:
240+
case ClientTypes.DECIMAL:
241+
return clazz == double.class ||
242+
clazz == Double.class ||
243+
clazz == float.class ||
244+
clazz == Float.class;
245+
case ClientTypes.BIT:
246+
case ClientTypes.BOOLEAN:
247+
case ClientTypes.CHAR:
248+
case ClientTypes.SMALLINT:
249+
return clazz == boolean.class ||
250+
clazz == Boolean.class ||
251+
clazz == char.class ||
252+
clazz == Character.class ||
253+
clazz == int.class ||
254+
clazz == Integer.class ||
255+
clazz == long.class ||
256+
clazz == Long.class ||
257+
clazz == short.class ||
258+
clazz == Short.class ||
259+
clazz == byte.class ||
260+
clazz == Byte.class ||
261+
clazz == BigDecimal.class;
245262
case ClientTypes.BINARY:
246263
case ClientTypes.BLOB:
247264
return clazz == boolean.class ||

vertx-db2-client/src/test/java/io/vertx/db2client/DB2DataTypeTest.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,12 +37,12 @@ public class DB2DataTypeTest extends DB2TestBase {
3737
* float can still be inserted and selected from such a column
3838
*/
3939
@Test
40-
public void testInsertFloatColumn(TestContext ctx) {
40+
public void testFloatIntoFloatColumn(TestContext ctx) {
4141
connect(ctx.asyncAssertSuccess(conn -> {
4242
// Insert some data
4343
conn.preparedQuery("INSERT INTO db2_types (id,test_float) VALUES (?, ?)")
4444
.execute(Tuple.of(1, 5.0f), ctx.asyncAssertSuccess(insertResult -> {
45-
conn.query("SELECT * FROM db2_types WHERE id = 1")
45+
conn.query("SELECT id,test_float FROM db2_types WHERE id = 1")
4646
.execute(ctx.asyncAssertSuccess(rows -> {
4747
ctx.assertEquals(1, rows.size());
4848
Row row = rows.iterator().next();
@@ -53,6 +53,28 @@ public void testInsertFloatColumn(TestContext ctx) {
5353
}));
5454
}
5555

56+
/**
57+
* DB2 has no BYTE or BOOLEAN column type, and instead maps it to a
58+
* 2-byte SMALLINT column type. This means Java byte types must be
59+
* converted into SMALLINT formats
60+
*/
61+
@Test
62+
public void testByteIntoSmallIntColumn(TestContext ctx) {
63+
connect(ctx.asyncAssertSuccess(conn -> {
64+
// Insert some data
65+
conn.preparedQuery("INSERT INTO db2_types (id,test_byte) VALUES (?, ?)")
66+
.execute(Tuple.of(2, (byte) 0xCA), ctx.asyncAssertSuccess(insertResult -> {
67+
conn.query("SELECT id,test_byte FROM db2_types WHERE id = 2")
68+
.execute(ctx.asyncAssertSuccess(rows -> {
69+
ctx.assertEquals(1, rows.size());
70+
Row row = rows.iterator().next();
71+
ctx.assertEquals(2, row.getInteger(0));
72+
ctx.assertEquals((byte) 0xCA, row.get(Byte.class, 1));
73+
}));
74+
}));
75+
}));
76+
}
77+
5678
@Test
5779
public void testRowId(TestContext ctx) {
5880
assumeTrue("Only DB2/Z supports the ROWID column type", rule.isZOS());

vertx-db2-client/src/test/resources/init.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,5 +114,6 @@ DROP TABLE IF EXISTS db2_types;
114114
CREATE TABLE db2_types
115115
(
116116
id INT,
117+
test_byte SMALLINT,
117118
test_float FLOAT
118119
);

0 commit comments

Comments
 (0)