Skip to content

Commit 80700c1

Browse files
authored
[clickHouse] Add support for new driver (#6236)
1 parent c9325e4 commit 80700c1

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

modules/clickhouse/src/main/java/org/testcontainers/containers/ClickHouseContainer.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.testcontainers.containers;
22

33
import org.testcontainers.containers.wait.strategy.HttpWaitStrategy;
4+
import org.testcontainers.utility.ComparableVersion;
45
import org.testcontainers.utility.DockerImageName;
56

67
import java.time.Duration;
@@ -25,7 +26,9 @@ public class ClickHouseContainer extends JdbcDatabaseContainer<ClickHouseContain
2526

2627
public static final Integer NATIVE_PORT = 9000;
2728

28-
private static final String DRIVER_CLASS_NAME = "ru.yandex.clickhouse.ClickHouseDriver";
29+
private static final String LEGACY_DRIVER_CLASS_NAME = "ru.yandex.clickhouse.ClickHouseDriver";
30+
31+
private static final String DRIVER_CLASS_NAME = "com.clickhouse.jdbc.ClickHouseDriver";
2932

3033
private static final String JDBC_URL_PREFIX = "jdbc:" + NAME + "://";
3134

@@ -37,6 +40,8 @@ public class ClickHouseContainer extends JdbcDatabaseContainer<ClickHouseContain
3740

3841
private String password = "";
3942

43+
private boolean supportsNewDriver;
44+
4045
/**
4146
* @deprecated use {@link ClickHouseContainer(DockerImageName)} instead
4247
*/
@@ -52,6 +57,7 @@ public ClickHouseContainer(String dockerImageName) {
5257
public ClickHouseContainer(final DockerImageName dockerImageName) {
5358
super(dockerImageName);
5459
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, CLICKHOUSE_IMAGE_NAME);
60+
supportsNewDriver = isNewDriverSupported(dockerImageName);
5561

5662
addExposedPorts(HTTP_PORT, NATIVE_PORT);
5763
this.waitStrategy =
@@ -69,13 +75,22 @@ public Set<Integer> getLivenessCheckPortNumbers() {
6975
@Override
7076
public String getDriverClassName() {
7177
try {
72-
Class.forName(DRIVER_CLASS_NAME);
73-
return DRIVER_CLASS_NAME;
78+
if (supportsNewDriver) {
79+
Class.forName(DRIVER_CLASS_NAME);
80+
return DRIVER_CLASS_NAME;
81+
} else {
82+
return LEGACY_DRIVER_CLASS_NAME;
83+
}
7484
} catch (ClassNotFoundException e) {
75-
return "com.clickhouse.jdbc.ClickHouseDriver";
85+
return LEGACY_DRIVER_CLASS_NAME;
7686
}
7787
}
7888

89+
private static boolean isNewDriverSupported(DockerImageName dockerImageName) {
90+
// New driver supports versions 20.7+. Check the version part of the tag
91+
return new ComparableVersion(dockerImageName.getVersionPart()).isGreaterThanOrEqualTo("20.7");
92+
}
93+
7994
@Override
8095
public String getJdbcUrl() {
8196
return JDBC_URL_PREFIX + getHost() + ":" + getMappedPort(HTTP_PORT) + "/" + databaseName;

0 commit comments

Comments
 (0)