From 5087a0c34d1b900158ee471e08dc093eb4346771 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Tue, 17 Feb 2026 20:28:17 -0800 Subject: [PATCH 1/3] added a few tests --- .../jdbc/PreparedStatementImpl.java | 3 ++- .../com/clickhouse/jdbc/ConnectionTest.java | 2 +- .../clickhouse/jdbc/JdbcDataTypeTests.java | 20 +++++++++++++++++++ .../metadata/ResultSetMetaDataImplTest.java | 14 ++++++++++++- 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java index 0055bad84..436a13b07 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java @@ -129,11 +129,12 @@ private String buildSQL() throws SQLException { int p = positions[i] + posOffset; String val = values[i]; if (val == null) { - throw new SQLException("Parameter at position '" + i + "' is not set"); + throw new SQLException("Parameter at position '" + (i + 1) + "' is not set"); } compiledSql.replace(p, p+1, val); posOffset += val.length() - 1; } + System.out.println(compiledSql.toString()); return compiledSql.toString(); } diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java index 799a2016c..17006cd03 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java @@ -394,7 +394,7 @@ public void testCreateArray() throws SQLException { Array arrayValue = conn.createArrayOf("Tuple(String, Int8)", srcArray ); assertEquals(arrayValue.getBaseTypeName(), baseType); - assertEquals(arrayValue.getBaseType(), JDBCType.OTHER.getVendorTypeNumber()); + assertEquals(arrayValue.getBaseType(), JDBCType.STRUCT.getVendorTypeNumber()); assertThrows(SQLFeatureNotSupportedException.class, () -> arrayValue.getArray(null)); assertThrows(SQLFeatureNotSupportedException.class, () -> arrayValue.getArray(0, 1, null)); diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/JdbcDataTypeTests.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/JdbcDataTypeTests.java index 8223e8b6a..50014398a 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/JdbcDataTypeTests.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/JdbcDataTypeTests.java @@ -33,6 +33,7 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; +import java.sql.Struct; import java.sql.Time; import java.sql.Timestamp; import java.sql.Types; @@ -1627,6 +1628,25 @@ public void testNestedTypeNonFlatten() throws SQLException { } } + @Test(groups = {"integration"}) + public void testTupleType() throws Exception { + try (Connection conn = getJdbcConnection()) { + try (PreparedStatement stmt = conn.prepareStatement("SELECT ?::Tuple(String, Int32, Date)")) { + Object[] arr = new Object[]{"test", 123, LocalDate.parse("2026-03-02")}; + Struct tuple = conn.createStruct("Tuple(String, Int32, Date)", arr); + Array tupleArr = conn.createArrayOf("Array(Tuple(String, Int32, Date))", arr); + stmt.setObject(1, tuple); + try (ResultSet rs = stmt.executeQuery()) { + rs.next(); + Array dbTuple = rs.getArray(1); + Assert.assertEquals(dbTuple, tupleArr); + Object tupleObjArr = rs.getObject(1); + Assert.assertEquals(tupleObjArr, arr); + } + } + } + } + @Test(groups = { "integration" }) public void testTupleTypeSimpleStatement() throws SQLException { runQuery("CREATE TABLE test_tuple (order Int8, " diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/ResultSetMetaDataImplTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/ResultSetMetaDataImplTest.java index 498188cc9..7e387d76a 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/ResultSetMetaDataImplTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/metadata/ResultSetMetaDataImplTest.java @@ -130,7 +130,7 @@ public void testGetColumnTypeIntegers() throws Exception { } } - @Test + @Test(groups = { "integration" }) public void testGetColumnTypeMap() throws Exception { try (Connection conn = getJdbcConnection()) { try (Statement stmt = conn.createStatement()) { @@ -142,6 +142,18 @@ public void testGetColumnTypeMap() throws Exception { } } + @Test(groups = { "integration" }) + public void testGetColumnTypeTuple() throws Exception { + try (Connection conn = getJdbcConnection()) { + try (Statement stmt = conn.createStatement()) { + ResultSet rs = stmt.executeQuery("select tuple('a', 1) as t"); + ResultSetMetaData rsmd = rs.getMetaData(); + assertEquals(rsmd.getColumnType(1), Types.OTHER); + assertEquals(rsmd.getColumnClassName(1), Object.class.getName()); + } + } + } + @Test(groups = { "integration" }) public void testGetColumnTypeFloats() throws Exception { try (Connection conn = getJdbcConnection()) { From 70d6e5e0908261b1f582b67e5f0ce6bed4b6e4f6 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Tue, 17 Feb 2026 20:30:15 -0800 Subject: [PATCH 2/3] Small fix --- jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java index 17006cd03..799a2016c 100644 --- a/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java +++ b/jdbc-v2/src/test/java/com/clickhouse/jdbc/ConnectionTest.java @@ -394,7 +394,7 @@ public void testCreateArray() throws SQLException { Array arrayValue = conn.createArrayOf("Tuple(String, Int8)", srcArray ); assertEquals(arrayValue.getBaseTypeName(), baseType); - assertEquals(arrayValue.getBaseType(), JDBCType.STRUCT.getVendorTypeNumber()); + assertEquals(arrayValue.getBaseType(), JDBCType.OTHER.getVendorTypeNumber()); assertThrows(SQLFeatureNotSupportedException.class, () -> arrayValue.getArray(null)); assertThrows(SQLFeatureNotSupportedException.class, () -> arrayValue.getArray(0, 1, null)); From ce69cb1f03f7fb238c1a450bf9ef5804bb0f8746 Mon Sep 17 00:00:00 2001 From: Sergey Chernov Date: Tue, 17 Feb 2026 21:41:41 -0800 Subject: [PATCH 3/3] removed System.out. --- .../src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java index 436a13b07..fcd17b6d6 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/PreparedStatementImpl.java @@ -134,7 +134,6 @@ private String buildSQL() throws SQLException { compiledSql.replace(p, p+1, val); posOffset += val.length() - 1; } - System.out.println(compiledSql.toString()); return compiledSql.toString(); }