From f489bfc26868b5fd10e4c79baad94dea4313f7b2 Mon Sep 17 00:00:00 2001 From: mzitnik Date: Wed, 9 Apr 2025 08:33:13 +0300 Subject: [PATCH 1/2] Adding issue #2266 tests --- .../com/clickhouse/jdbc/StatementTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) 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..9168f7a34 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,38 @@ 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()); + Array arr = rs.getArray(2); + 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()); + Array arr = rs.getArray("array"); + assertNotNull(arr); + Object[] values = (Object[]) arr.getArray(); + assertNotNull(values); + assertEquals(values.length, 2); + assertEquals(values[0], "value1"); + assertEquals(values[1], "value2"); + } + } + } From 4ee6ff41495689f69eba0dc49162d31d616f09c4 Mon Sep 17 00:00:00 2001 From: mzitnik Date: Thu, 10 Apr 2025 12:31:40 +0300 Subject: [PATCH 2/2] Adding to getArray wasNull value change if the retrieve data is null --- .../src/main/java/com/clickhouse/jdbc/ResultSetImpl.java | 5 ++++- .../src/test/java/com/clickhouse/jdbc/StatementTest.java | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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 9168f7a34..741946fd3 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/StatementTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/StatementTest.java @@ -680,7 +680,10 @@ public void testWasNullFlagArray() throws Exception { 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); @@ -695,7 +698,10 @@ public void testWasNullFlagArray() throws Exception { 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);