diff --git a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/RowImpl.java b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/RowImpl.java index 2875571fb..e5d9f60e5 100644 --- a/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/RowImpl.java +++ b/vertx-pg-client/src/main/java/io/vertx/pgclient/impl/RowImpl.java @@ -264,8 +264,12 @@ private Interval[] getArrayOfIntervals(int pos) { return (Interval[]) getValue(pos); } + @SuppressWarnings({"unchecked", "rawtypes"}) private Object[] getArrayOfEnums(Class enumType, int pos) { Object val = getValue(pos); + if (val == null) { + return null; + } if (val instanceof String[]) { String[] array = (String[]) val; Object[] ret = (Object[]) Array.newInstance(enumType, array.length); @@ -276,7 +280,8 @@ private Object[] getArrayOfEnums(Class enumType, int pos) { } } return ret; - } else if (val instanceof Number[]) { + } + if (val instanceof Number[]) { Number[] array = (Number[]) val; Object[] ret = (Object[]) Array.newInstance(enumType, array.length); Object[] constants = enumType.getEnumConstants(); @@ -290,8 +295,7 @@ private Object[] getArrayOfEnums(Class enumType, int pos) { } } return ret; - } else { - throw new ClassCastException(); } + throw new ClassCastException(); } } diff --git a/vertx-pg-client/src/test/java/io/vertx/tests/pgclient/data/JavaEnumTest.java b/vertx-pg-client/src/test/java/io/vertx/tests/pgclient/data/JavaEnumTest.java index e6cffde47..d8ed998fd 100644 --- a/vertx-pg-client/src/test/java/io/vertx/tests/pgclient/data/JavaEnumTest.java +++ b/vertx-pg-client/src/test/java/io/vertx/tests/pgclient/data/JavaEnumTest.java @@ -83,6 +83,22 @@ private void testJavaEnumToArrayColumn(TestContext ctx, String value, String sql })); } + @Test + public void testJavaEnumToNullArrayColumn(TestContext ctx) { + PgConnection.connect(vertx, options).onComplete(ctx.asyncAssertSuccess(conn -> { + conn + .preparedQuery("SELECT NULL") + .execute() + .onComplete(ctx.asyncAssertSuccess(v -> { + RowIterator it = v.iterator(); + ctx.assertTrue(it.hasNext()); + Row row = it.next(); + Mood[] result = row.get(Mood[].class, 0); + ctx.assertNull(result); + })); + })); + } + @Test public void testJavaEnumToEnumParam(TestContext ctx) { testJavaEnumToParam(ctx, "happy", "Mood");