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]

Reply via email to