Skip to content

Commit 4d892c4

Browse files
committed
Fix issue encoding null values
1 parent 0cfe1ee commit 4d892c4

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public String prepare(TupleInternal values) {
5050
}
5151

5252
private static boolean canConvert(Object val, int type) {
53+
if (val == null)
54+
return true;
5355
if (ClientTypes.canConvert(val, type))
5456
return true;
5557
Class<?> clazz = val.getClass();

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,9 @@ static public int mapDB2TypeToDriverType(boolean isDescribed, int sqlType, long
211211
}
212212

213213
public static boolean canConvert(Object value, int toType) {
214+
if (value == null)
215+
return true;
216+
214217
Class<?> clazz = value.getClass();
215218
// Everything can convert to String
216219
if (clazz == String.class)

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

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ public abstract class BinaryDataTypeEncodeTestBase extends DataTypeTestBase {
2727
public void testSmallInt(TestContext ctx) {
2828
testEncodeGeneric(ctx, "test_int_2", Short.class, (short) Short.MIN_VALUE);
2929
}
30-
30+
3131
@Test
3232
public void testInteger(TestContext ctx) {
3333
testEncodeGeneric(ctx, "test_int_4", Integer.class, (int) Integer.MIN_VALUE);
3434
}
35-
35+
3636
@Test
3737
public void testBigInt(TestContext ctx) {
3838
testEncodeGeneric(ctx, "test_int_8", Long.class, (long) Long.MIN_VALUE);
@@ -82,7 +82,55 @@ public void testDate(TestContext ctx) {
8282
public void testTime(TestContext ctx) {
8383
testEncodeGeneric(ctx, "test_time", LocalTime.class, LocalTime.of(12,1,30));
8484
}
85-
85+
86+
@Test
87+
public void testNullValues(TestContext ctx) {
88+
connector.connect(ctx.asyncAssertSuccess(conn -> {
89+
conn
90+
.preparedQuery(statement("UPDATE basicdatatype SET" +
91+
" test_int_2 = ",
92+
", test_int_4 = ",
93+
", test_int_8 = ",
94+
", test_float_4 = ",
95+
", test_float_8 = ",
96+
", test_numeric = ",
97+
", test_decimal = ",
98+
", test_boolean = ",
99+
", test_char = ",
100+
", test_varchar = ",
101+
", test_date = ",
102+
", test_time = ",
103+
" WHERE id = 2"))
104+
.execute(Tuple.tuple()
105+
.addValue(null)
106+
.addValue(null)
107+
.addValue(null)
108+
.addValue(null)
109+
.addValue(null)
110+
.addValue(null)
111+
.addValue(null)
112+
.addValue(null)
113+
.addValue(null)
114+
.addValue(null)
115+
.addValue(null)
116+
.addValue(null),
117+
ctx.asyncAssertSuccess(updateResult -> {
118+
conn
119+
.preparedQuery("SELECT * FROM basicdatatype WHERE id = 2")
120+
.execute(ctx.asyncAssertSuccess(result -> {
121+
ctx.assertEquals(1, result.size());
122+
Row row = result.iterator().next();
123+
ctx.assertEquals(13, row.size());
124+
ctx.assertEquals(2, row.getInteger(0));
125+
for (int i = 1; i < 13; i++) {
126+
ctx.assertNull(row.getValue(i));
127+
}
128+
conn.close();
129+
}));
130+
}));
131+
}));
132+
}
133+
86134
protected <T> void testEncodeGeneric(TestContext ctx,
87135
String columnName,
88136
Class<T> clazz,
@@ -96,6 +144,7 @@ protected <T> void testEncodeGeneric(TestContext ctx,
96144
.execute(ctx.asyncAssertSuccess(result -> {
97145
ctx.assertEquals(1, result.size());
98146
Row row = result.iterator().next();
147+
ctx.assertEquals(1, row.size());
99148
ctx.assertEquals(expected, row.getValue(0));
100149
ctx.assertEquals(expected, row.getValue(columnName));
101150
// ctx.assertEquals(expected, row.get(clazz, 0));

0 commit comments

Comments
 (0)