This is an automated email from the ASF dual-hosted git repository.
suxiaogang223 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new f2ce3300aee [fix](fe) Recognize prefixed ClickHouse JDBC driver
versions (#69378)
f2ce3300aee is described below
commit f2ce3300aee41e7c299513611d075c2c0fbde7c2
Author: Socrates <[email protected]>
AuthorDate: Thu Oct 22 17:44:28 2026 +0800
[fix](fe) Recognize prefixed ClickHouse JDBC driver versions (#69378)
### What problem does this PR solve?
Issue Number: N/A
Related PR: None
Problem Summary:
Legacy ClickHouse JDBC drivers report versions such as `clickhouse-jdbc
0.3.2-patch11 (revision: 27f8951)`. The retained FE client parses the
artifact prefix as an integer and fails initialization. The connector
client treats the same parse failure as an unknown/new driver, which can
select the wrong metadata mode.
Remove the known artifact prefix before the existing major/minor
comparison in both clients. Versions below 0.5 continue to use legacy
metadata mode; the existing behavior for unrelated unknown or invalid
strings is preserved.
### Release note
Fix recognition of ClickHouse JDBC versions that include the
`clickhouse-jdbc` artifact prefix.
### Check List (For Author)
- Test: targeted FE UT through `run-fe-ut.sh` with the JDBC connector
included: 11 tests passed (6 connector, 5 FE client). Checkstyle 9.3
with the repository configuration passed for all four changed files;
`git diff --check` passed.
- Tests cover the original 0.3.2-patch11 string, 0.4/0.5/1.0 boundaries,
and legacy metadata selection even when catalog support is advertised.
- No external ClickHouse server/driver integration test was run.
- Behavior changed: Yes. Prefixed legacy driver versions are recognized
as legacy rather than failing or being classified as new.
- Does this need documentation: No.
---
.../jdbc/client/JdbcClickHouseConnectorClient.java | 3 ++-
.../jdbc/client/JdbcClickHouseConnectorClientTest.java | 13 +++++++++++++
.../datasource/jdbc/client/JdbcClickHouseClient.java | 3 ++-
.../datasource/jdbc/client/JdbcClickHouseClientTest.java | 15 +++++++++++++++
4 files changed, 32 insertions(+), 2 deletions(-)
diff --git
a/fe/fe-connector/fe-connector-jdbc/src/main/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClient.java
b/fe/fe-connector/fe-connector-jdbc/src/main/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClient.java
index 6990b3074d1..78692e9c31f 100644
---
a/fe/fe-connector/fe-connector-jdbc/src/main/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClient.java
+++
b/fe/fe-connector/fe-connector-jdbc/src/main/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClient.java
@@ -160,7 +160,8 @@ public class JdbcClickHouseConnectorClient extends
JdbcConnectorClient {
return true;
}
try {
- String[] versionParts = driverVersion.split("\\.");
+ // Legacy drivers include the artifact name before the numeric
version.
+ String[] versionParts =
driverVersion.trim().replaceFirst("^clickhouse-jdbc\\s+", "").split("\\.");
int majorVersion = Integer.parseInt(versionParts[0]);
int minorVersion = Integer.parseInt(versionParts[1]);
return majorVersion > 0 || (majorVersion == 0 && minorVersion >=
5);
diff --git
a/fe/fe-connector/fe-connector-jdbc/src/test/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClientTest.java
b/fe/fe-connector/fe-connector-jdbc/src/test/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClientTest.java
index 39f2a275698..5f16668276f 100644
---
a/fe/fe-connector/fe-connector-jdbc/src/test/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClientTest.java
+++
b/fe/fe-connector/fe-connector-jdbc/src/test/java/org/apache/doris/connector/jdbc/client/JdbcClickHouseConnectorClientTest.java
@@ -46,6 +46,19 @@ public class JdbcClickHouseConnectorClientTest {
Assertions.assertFalse(JdbcClickHouseConnectorClient.isNewClickHouseDriverVersion("0.4.2"));
}
+ @Test
+ void testPrefixedDriverVersions() {
+ for (String version : new String[] {"clickhouse-jdbc 0.3.2-patch11
(revision: 27f8951)",
+ "clickhouse-jdbc 0.4.2 (revision: 1513b27)"}) {
+
Assertions.assertFalse(JdbcClickHouseConnectorClient.isNewClickHouseDriverVersion(version));
+
Assertions.assertFalse(JdbcClickHouseConnectorClient.isDatabaseTermCatalog(version,
true));
+ }
+
Assertions.assertTrue(JdbcClickHouseConnectorClient.isNewClickHouseDriverVersion(
+ "clickhouse-jdbc 0.5.0 (revision: test)"));
+
Assertions.assertTrue(JdbcClickHouseConnectorClient.isDatabaseTermCatalog(
+ "clickhouse-jdbc 1.0.0", true));
+ }
+
@Test
void testDatabaseTermFollowsDriverMetadata() {
Assertions.assertFalse(JdbcClickHouseConnectorClient.isDatabaseTermCatalog("0.9.8",
false));
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
index 3618ffcaa53..51d8a7001b9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClient.java
@@ -223,7 +223,8 @@ public class JdbcClickHouseClient extends JdbcClient {
throw new JdbcClientException("Driver version cannot be null");
}
try {
- String[] versionParts = driverVersion.split("\\.");
+ // Legacy drivers include the artifact name before the numeric
version.
+ String[] versionParts =
driverVersion.trim().replaceFirst("^clickhouse-jdbc\\s+", "").split("\\.");
int majorVersion = Integer.parseInt(versionParts[0]);
int minorVersion = Integer.parseInt(versionParts[1]);
// Determine whether it is greater than or equal to 0.5.x
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClientTest.java
b/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClientTest.java
index c41914edf1a..33883dca4b4 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClientTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/datasource/jdbc/client/JdbcClickHouseClientTest.java
@@ -62,6 +62,21 @@ public class JdbcClickHouseClientTest {
Assertions.assertEquals(Type.UUID, client.jdbcTypeToDoris(field));
}
+ @Test
+ public void testPrefixedDriverVersions() throws Exception {
+ Method method =
JdbcClickHouseClient.class.getDeclaredMethod("isNewClickHouseDriver",
String.class);
+ method.setAccessible(true);
+ Assertions.assertFalse((boolean) method.invoke(null,
+ "clickhouse-jdbc 0.3.2-patch11 (revision: 27f8951)"));
+ Assertions.assertFalse((boolean) method.invoke(null, "clickhouse-jdbc
0.4.2 (revision: 1513b27)"));
+ Assertions.assertTrue((boolean) method.invoke(null, "clickhouse-jdbc
0.5.0 (revision: test)"));
+ Assertions.assertTrue((boolean) method.invoke(null, "clickhouse-jdbc
1.0.0"));
+ DatabaseMetaData metadata = Mockito.mock(DatabaseMetaData.class);
+
Mockito.when(metadata.supportsCatalogsInDataManipulation()).thenReturn(true);
+
Assertions.assertFalse(JdbcClickHouseClient.isDatabaseTermCatalog(metadata,
+ "clickhouse-jdbc 0.3.2-patch11 (revision: 27f8951)"));
+ }
+
@Test
public void testIsNewClickHouseDriver() {
try {
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]