11package org .testcontainers .containers ;
22
33import org .testcontainers .containers .wait .strategy .HttpWaitStrategy ;
4+ import org .testcontainers .utility .ComparableVersion ;
45import org .testcontainers .utility .DockerImageName ;
56
67import 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