diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ResultSetImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ResultSetImpl.java index ce1ec0faf..41aa8c1fb 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/ResultSetImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/ResultSetImpl.java @@ -11,6 +11,7 @@ import java.time.ZonedDateTime; import java.util.Calendar; import java.util.GregorianCalendar; +import java.util.List; import java.util.Map; import com.clickhouse.client.api.data_formats.ClickHouseBinaryFormatReader; @@ -1025,7 +1026,9 @@ public java.sql.Array getArray(String columnLabel) throws SQLException { checkClosed(); try { ClickHouseColumn column = getSchema().getColumnByName(columnLabel); - return new Array(reader.getList(columnLabel), + List lstObj = reader.getList(columnLabel); + wasNull = lstObj == null; + return new Array(lstObj, column.getArrayBaseColumn().getDataType().name(), JdbcUtils.convertToSqlType(column.getArrayBaseColumn().getDataType()).getVendorTypeNumber()); } catch (Exception e) { diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/StatementTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/StatementTest.java index 5d264705f..741946fd3 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/StatementTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/StatementTest.java @@ -671,4 +671,44 @@ public void testNullableFixedStringType() throws Exception { } } } + + @Test(groups = { "integration" }) + public void testWasNullFlagArray() throws Exception { + try (Connection conn = getJdbcConnection()) { + String sql = "SELECT NULL, ['value1', 'value2']"; + Statement stmt = conn.createStatement(); + stmt.executeQuery(sql); + ResultSet rs = stmt.getResultSet(); + assertTrue(rs.next()); + int val = rs.getInt(1); + assertTrue(rs.wasNull()); + Array arr = rs.getArray(2); + assertFalse(rs.wasNull()); + assertNotNull(arr); + Object[] values = (Object[]) arr.getArray(); + assertNotNull(values); + assertEquals(values.length, 2); + assertEquals(values[0], "value1"); + assertEquals(values[1], "value2"); + } + + try (Connection conn = getJdbcConnection()) { + String sql = "SELECT NULL, ['value1', 'value2'] AS array"; + Statement stmt = conn.createStatement(); + stmt.executeQuery(sql); + ResultSet rs = stmt.getResultSet(); + assertTrue(rs.next()); + int val = rs.getInt(1); + assertTrue(rs.wasNull()); + Array arr = rs.getArray("array"); + assertFalse(rs.wasNull()); + assertNotNull(arr); + Object[] values = (Object[]) arr.getArray(); + assertNotNull(values); + assertEquals(values.length, 2); + assertEquals(values[0], "value1"); + assertEquals(values[1], "value2"); + } + } + }