diff --git a/clickhouse-jdbc/src/test/java/com/clickhouse/jdbc/GenericJDBCTest.java b/clickhouse-jdbc/src/test/java/com/clickhouse/jdbc/GenericJDBCTest.java index c9474c2f2..36b312d04 100644 --- a/clickhouse-jdbc/src/test/java/com/clickhouse/jdbc/GenericJDBCTest.java +++ b/clickhouse-jdbc/src/test/java/com/clickhouse/jdbc/GenericJDBCTest.java @@ -1,12 +1,16 @@ package com.clickhouse.jdbc; import org.testng.Assert; -import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; import java.util.Properties; +import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertThrows; @Test(groups = { "integration" }) @@ -33,7 +37,7 @@ public void connectionWithPropertiesTest() throws SQLException { properties.setProperty("user", "default"); properties.setProperty("password", "FAKE123456FAKE"); - assertThrows(SQLException.class, () -> getConnection(properties)); + assertFalse(getConnection(properties).isValid(10)); } @Test diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/JdbcConfiguration.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/JdbcConfiguration.java index 9aa5ce61a..3680cc32b 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/JdbcConfiguration.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/JdbcConfiguration.java @@ -217,14 +217,17 @@ private Map parseUrl(String url) throws SQLException { String pathWithoutLeadingSlash = rawPath.startsWith("/") ? rawPath.substring(1) : rawPath; int lastSlashIndex = pathWithoutLeadingSlash.lastIndexOf('/'); + String pathToDecode; if (lastSlashIndex > 0) { httpPath = "/" + pathWithoutLeadingSlash.substring(0, lastSlashIndex); - database = URLDecoder.decode(pathWithoutLeadingSlash.substring(lastSlashIndex + 1), StandardCharsets.UTF_8); + pathToDecode = pathWithoutLeadingSlash.substring(lastSlashIndex + 1); } else { // No slash found (lastSlashIndex == -1), so it's a single segment representing the database name. // Example: "mydb" -> httpPath="", database="mydb" - database = URLDecoder.decode(pathWithoutLeadingSlash, StandardCharsets.UTF_8); + pathToDecode = pathWithoutLeadingSlash; } + // requires 10+ java database = URLDecoder.decode(pathWithoutLeadingSlash.substring(lastSlashIndex + 1), StandardCharsets.UTF_8); + database = URLDecoder.decode(pathToDecode); } // Build connection URL with HTTP path preserved diff --git a/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java b/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java index 9b0e37b4c..d3477ce6c 100644 --- a/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java +++ b/jdbc-v2/src/main/java/com/clickhouse/jdbc/internal/parser/javacc/ClickHouseSqlUtils.java @@ -61,9 +61,11 @@ private static Set initAllowedKeywordAliases() { "USER", "VALID", "VALUES", "VARYING", "VIEW", "VISIBLE", "VOLUME", "WATCH", "WATERMARK", "WEEK", "WEEKS", "WHEN", "WITH_ITEMINDEX", "WK", "WORKER", "WORKLOAD", "WRITABLE", "WRITE", "WW", "YEAR", "YEARS", "YY", "YYYY", "ZKPATH", - // Append 04/01/2026. + // Appended 04/01/2026. "CENTURY", "DECADE", "DOW", "DOY", "EPOCH", "ISODOW", "ISOYEAR", "MILLENNIUM", "NATURAL", "SOME", - "ZONE" + "ZONE", + // Appended 04/10/2026 + "PATH", "PLACING" ); }