From 0297730bb3806d3b0c1ea9f8b281f29b5172aa56 Mon Sep 17 00:00:00 2001 From: trolley813 Date: Thu, 24 Nov 2022 19:59:15 +0300 Subject: [PATCH 1/3] ClickHouse uses new driver if it is available and version is compatible --- .../containers/ClickHouseContainer.java | 46 +++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java index 4e87c77ee5b..7679cfb86ac 100644 --- a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java @@ -25,7 +25,8 @@ public class ClickHouseContainer extends JdbcDatabaseContainer getLivenessCheckPortNumbers() { @Override public String getDriverClassName() { try { - Class.forName(DRIVER_CLASS_NAME); - return DRIVER_CLASS_NAME; + if (supportsNewDriver) { + Class.forName(DRIVER_CLASS_NAME); + return DRIVER_CLASS_NAME; + } else { + return LEGACY_DRIVER_CLASS_NAME; + } } catch (ClassNotFoundException e) { - return "com.clickhouse.jdbc.ClickHouseDriver"; + return LEGACY_DRIVER_CLASS_NAME; + } + } + + private static boolean isNewDriverSupported(DockerImageName dockerImageName) { + // New driver supports versions 20.7+. Check the version part of the tag + String[] versionParts = dockerImageName.getVersionPart().split("."); + // if no version part found (unknown version), return false for compatibility + if (versionParts.length == 0) { + return false; + } + try { + int major = Integer.parseInt(versionParts[0]); + // v21+ support the new driver + if (major >= 21) return true; + if (major == 20) { + if (versionParts.length == 1) { + // tag "20" points to the latest 20.x tag + return true; + } + int minor = Integer.parseInt(versionParts[1]); + // versions 20.7 and beyond support the latest driver + return minor >= 7; + } + // 19.x and older versions do not support + return false; + } + catch (NumberFormatException e) { + // non-numbered tags are "head-*", which point to the latest available version + return true; } } From 9e17496f84d4031c6a0404035ab8abae65a1fdd6 Mon Sep 17 00:00:00 2001 From: trolley813 Date: Mon, 5 Dec 2022 13:07:38 +0300 Subject: [PATCH 2/3] Clickhouse container uses ComparableVersion --- .../containers/ClickHouseContainer.java | 29 ++----------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java index 7679cfb86ac..988ad03d1b4 100644 --- a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java @@ -2,6 +2,7 @@ import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; import org.testcontainers.utility.DockerImageName; +import org.testcontainers.utility.ComparableVersion; import java.time.Duration; import java.util.HashSet; @@ -26,6 +27,7 @@ public class ClickHouseContainer extends JdbcDatabaseContainer= 21) return true; - if (major == 20) { - if (versionParts.length == 1) { - // tag "20" points to the latest 20.x tag - return true; - } - int minor = Integer.parseInt(versionParts[1]); - // versions 20.7 and beyond support the latest driver - return minor >= 7; - } - // 19.x and older versions do not support - return false; - } - catch (NumberFormatException e) { - // non-numbered tags are "head-*", which point to the latest available version - return true; - } + return new ComparableVersion(dockerImageName.getVersionPart()).isGreaterThanOrEqualTo("20.7"); } @Override From a9425a89423e586deab980eeadc9d2fd1fa58c79 Mon Sep 17 00:00:00 2001 From: trolley813 Date: Tue, 6 Dec 2022 10:09:15 +0300 Subject: [PATCH 3/3] fixed import sorting --- .../java/org/testcontainers/containers/ClickHouseContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java index 988ad03d1b4..d9879402ebb 100644 --- a/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java +++ b/modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java @@ -1,8 +1,8 @@ package org.testcontainers.containers; import org.testcontainers.containers.wait.strategy.HttpWaitStrategy; -import org.testcontainers.utility.DockerImageName; import org.testcontainers.utility.ComparableVersion; +import org.testcontainers.utility.DockerImageName; import java.time.Duration; import java.util.HashSet;