This is an automated email from the ASF dual-hosted git repository. zhangliang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push: new 4fe1fcb9543 Add `shardingsphere-infra-database-testcontainers` optional module to unify JDBC support for testcontainers-java (#29397) 4fe1fcb9543 is described below commit 4fe1fcb95436983f85881165b7cab9bdd37ee821 Author: Ling Hengqian <linghengq...@outlook.com> AuthorDate: Wed Dec 13 21:28:04 2023 +0800 Add `shardingsphere-infra-database-testcontainers` optional module to unify JDBC support for testcontainers-java (#29397) --- .../optional-plugins/_index.cn.md | 2 ++ .../optional-plugins/_index.en.md | 2 ++ .../optional-plugins/_index.cn.md | 2 ++ .../optional-plugins/_index.en.md | 2 ++ .../clickhouse/type/ClickHouseDatabaseType.java | 4 +-- .../type/ClickHouseDatabaseTypeTest.java | 3 +-- .../database/mariadb/type/MariaDBDatabaseType.java | 6 ++--- .../mariadb/type/MariaDBDatabaseTypeTest.java | 4 +-- .../database/mysql/type/MySQLDatabaseType.java | 4 +-- .../database/mysql/type/MySQLDatabaseTypeTest.java | 2 +- .../database/oracle/type/OracleDatabaseType.java | 6 ++--- .../oracle/type/OracleDatabaseTypeTest.java | 4 +-- infra/database/type/pom.xml | 1 + .../postgresql/type/PostgreSQLDatabaseType.java | 6 ++--- .../type/PostgreSQLDatabaseTypeTest.java | 4 +-- .../sqlserver/type/SQLServerDatabaseType.java | 4 +-- .../sqlserver/type/SQLServerDatabaseTypeTest.java | 2 +- infra/database/type/{ => testcontainers}/pom.xml | 30 ++++++++++++---------- .../type/AbstractTestcontainersDatabaseType.java} | 20 +++------------ .../type/TcClickHouseDatabaseType.java} | 14 +++++----- .../type/TcMariaDBDatabaseType.java} | 14 +++++----- .../testcontainers/type/TcMySQLDatabaseType.java} | 12 ++++----- .../testcontainers/type/TcOracleDatabaseType.java} | 14 +++++----- .../type/TcPostgreSQLDatabaseType.java} | 14 +++++----- .../type/TcSQLServerDatabaseType.java} | 14 +++++----- ...ingsphere.infra.database.core.type.DatabaseType | 23 +++++++++++++++++ .../type/TestcontainersDatabaseTypeTest.java} | 14 ++++++---- test/native/pom.xml | 6 +++++ 28 files changed, 132 insertions(+), 101 deletions(-) diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.cn.md b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.cn.md index 423d9b0e1d6..a884f47178f 100644 --- a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.cn.md +++ b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.cn.md @@ -52,5 +52,7 @@ ShardingSphere 默认情况下仅包含核心 SPI 的实现,在 Git Source 存 - `org.apache.shardingsphere:shardingsphere-sql-translator-jooq-provider`,使用 JooQ 的 SQL 翻译器 - 行表达式 - `org.apache.shardingsphere:shardingsphere-infra-expr-espresso`,基于 GraalVM Truffle 的 Espresso 实现的使用 Groovy 语法的行表达式 +- 数据库类型识别 + - `org.apache.shardingsphere:shardingsphere-infra-database-testcontainers`, 对 `testcontainers-java` 的 `JDBC support` 的 jdbcURL 的识别适配 除了以上可选插件外,ShardingSphere 社区开发者还贡献了大量的插件实现,可以在 [ShardingSphere Plugin](https://github.com/apache/shardingsphere-plugin) 仓库中查看插件的使用说明,ShardingSphere Plugin 仓库中的插件会和 ShardingSphere 保持相同的发布节奏,可以在 https://central.sonatype.com/ 进行检索,并安装到 ShardingSphere 中。 diff --git a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.en.md b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.en.md index 009973ee41b..a8dc0adf92d 100644 --- a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.en.md +++ b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/_index.en.md @@ -52,5 +52,7 @@ All optional plugins are listed below in the form of `groupId:artifactId`. - `org.apache.shardingsphere:shardingsphere-sql-translator-jooq-provider`, JooQ SQL translator - Row Value Expressions definition - `org.apache.shardingsphere:shardingsphere-infra-expr-espresso`,Row Value Expressions that uses the Groovy syntax based on GraalVM Truffle's Espresso implementation +- Database type identification + - `org.apache.shardingsphere:shardingsphere-infra-database-testcontainers`, Adaptation of jdbcURL for `JDBC support` of `testcontainers-java` In addition to the above optional plugins, ShardingSphere community developers have contributed a number of plugin implementations. These plugins can be found in [ShardingSphere Plugins] (https://github.com/apache/shardingsphere-plugin) repository. Plugins in ShardingSphere Plugin repository would remain the same release plan with ShardingSphere, they can be retrieved at https://central.sonatype.com/, and install into ShardingSphere. diff --git a/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.cn.md b/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.cn.md index 0233fe8eee8..2fdf18541ee 100644 --- a/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.cn.md +++ b/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.cn.md @@ -40,5 +40,7 @@ ShardingSphere 默认情况下仅包含核心 SPI 的实现,在 Git Source 存 - `org.apache.shardingsphere:shardingsphere-sql-translator-jooq-provider`,使用 JooQ 的 SQL 翻译器 - 行表达式 - `org.apache.shardingsphere:shardingsphere-infra-expr-espresso`,基于 GraalVM Truffle 的 Espresso 实现的使用 Groovy 语法的行表达式 +- 数据库类型识别 + - `org.apache.shardingsphere:shardingsphere-infra-database-testcontainers`, 对 `testcontainers-java` 的 `JDBC support` 的 jdbcURL 的识别适配 除了以上可选插件外,ShardingSphere 社区开发者还贡献了大量的插件实现,可以在 [ShardingSphere Plugin](https://github.com/apache/shardingsphere-plugin) 仓库中查看插件的使用说明,ShardingSphere Plugin 仓库中的插件会和 ShardingSphere 保持相同的发布节奏,可以在 https://central.sonatype.com/ 进行检索,并安装到 ShardingSphere 中。 diff --git a/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.en.md b/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.en.md index d056937ca04..b39fd6b4c37 100644 --- a/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.en.md +++ b/docs/document/content/user-manual/shardingsphere-proxy/optional-plugins/_index.en.md @@ -40,5 +40,7 @@ All optional plugins are listed below in the form of `groupId:artifactId`. - `org.apache.shardingsphere:shardingsphere-sql-translator-jooq-provider`, JooQ SQL translator - Row Value Expressions definition - `org.apache.shardingsphere:shardingsphere-infra-expr-espresso`,Row Value Expressions that uses the Groovy syntax based on GraalVM Truffle's Espresso implementation +- Database type identification + - `org.apache.shardingsphere:shardingsphere-infra-database-testcontainers`, Adaptation of jdbcURL for `JDBC support` of `testcontainers-java` In addition to the above optional plugins, ShardingSphere community developers have contributed a number of plugin implementations. These plugins can be found in [ShardingSphere Plugins](https://github.com/apache/shardingsphere-plugin) repository. Plugins in ShardingSphere Plugin repository would remain the same release plan with ShardingSphere, they can be retrieved at https://central.sonatype.com/, and install into ShardingSphere. diff --git a/infra/database/type/clickhouse/src/main/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseType.java b/infra/database/type/clickhouse/src/main/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseType.java index 84b1daacecd..c03b7b18bb2 100644 --- a/infra/database/type/clickhouse/src/main/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseType.java +++ b/infra/database/type/clickhouse/src/main/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseType.java @@ -25,14 +25,14 @@ import java.util.Collection; import java.util.Optional; /** - * Database type of ClickHouse. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of ClickHouse. * ClickHouse currently uses MySQL dialect parsing. */ public final class ClickHouseDatabaseType implements DatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList("jdbc:ch:", "jdbc:clickhouse:", "jdbc:tc:clickhouse/clickhouse-server:", "jdbc:tc:yandex/clickhouse-server:"); + return Arrays.asList("jdbc:ch:", "jdbc:clickhouse:"); } @Override diff --git a/infra/database/type/clickhouse/src/test/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseTypeTest.java b/infra/database/type/clickhouse/src/test/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseTypeTest.java index 9b91e31b0e3..87e7dc7ed45 100644 --- a/infra/database/type/clickhouse/src/test/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseTypeTest.java +++ b/infra/database/type/clickhouse/src/test/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseTypeTest.java @@ -30,7 +30,6 @@ class ClickHouseDatabaseTypeTest { @Test void assertGetJdbcUrlPrefixes() { - assertThat(TypedSPILoader.getService(DatabaseType.class, "ClickHouse").getJdbcUrlPrefixes(), - is(Arrays.asList("jdbc:ch:", "jdbc:clickhouse:", "jdbc:tc:clickhouse/clickhouse-server:", "jdbc:tc:yandex/clickhouse-server:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "ClickHouse").getJdbcUrlPrefixes(), is(Arrays.asList("jdbc:ch:", "jdbc:clickhouse:"))); } } diff --git a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java b/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java index c53ff914878..a8a621b4949 100644 --- a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java +++ b/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java @@ -20,18 +20,18 @@ package org.apache.shardingsphere.infra.database.mariadb.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Optional; /** - * Database type of MariaDB. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of MariaDB. */ public final class MariaDBDatabaseType implements DatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:mariadb:"); + return Collections.singletonList(String.format("jdbc:%s:", getType().toLowerCase())); } @Override diff --git a/infra/database/type/mariadb/src/test/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseTypeTest.java b/infra/database/type/mariadb/src/test/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseTypeTest.java index 3530facdb94..da4e68d408e 100644 --- a/infra/database/type/mariadb/src/test/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseTypeTest.java +++ b/infra/database/type/mariadb/src/test/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseTypeTest.java @@ -21,7 +21,7 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.junit.jupiter.api.Test; -import java.util.Arrays; +import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -30,6 +30,6 @@ class MariaDBDatabaseTypeTest { @Test void assertGetJdbcUrlPrefixes() { - assertThat(TypedSPILoader.getService(DatabaseType.class, "MariaDB").getJdbcUrlPrefixes(), is(Arrays.asList("jdbc:mariadb:", "jdbc:tc:mariadb:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "MariaDB").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:mariadb:"))); } } diff --git a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseType.java b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseType.java index fd3f14f4258..bd8c6355759 100644 --- a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseType.java +++ b/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseType.java @@ -23,13 +23,13 @@ import java.util.Arrays; import java.util.Collection; /** - * Database type of MySQL. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of MySQL. */ public final class MySQLDatabaseType implements DatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList("jdbc:mysql:", "jdbc:mysqlx:", "jdbc:tc:mysql:"); + return Arrays.asList("jdbc:mysql:", "jdbc:mysqlx:"); } @Override diff --git a/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseTypeTest.java b/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseTypeTest.java index 64f2927bcd1..63d7970db38 100644 --- a/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseTypeTest.java +++ b/infra/database/type/mysql/src/test/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseTypeTest.java @@ -30,6 +30,6 @@ class MySQLDatabaseTypeTest { @Test void assertGetJdbcUrlPrefixes() { - assertThat(TypedSPILoader.getService(DatabaseType.class, "MySQL").getJdbcUrlPrefixes(), is(Arrays.asList("jdbc:mysql:", "jdbc:mysqlx:", "jdbc:tc:mysql:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "MySQL").getJdbcUrlPrefixes(), is(Arrays.asList("jdbc:mysql:", "jdbc:mysqlx:"))); } } diff --git a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseType.java b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseType.java index 1404fa1a063..39961ae07f4 100644 --- a/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseType.java +++ b/infra/database/type/oracle/src/main/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseType.java @@ -19,17 +19,17 @@ package org.apache.shardingsphere.infra.database.oracle.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; /** - * Database type of Oracle. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of Oracle. */ public final class OracleDatabaseType implements DatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:gvenzl/oracle-free:", "jdbc:tc:gvenzl/oracle-xe:"); + return Collections.singletonList(String.format("jdbc:%s:", getType().toLowerCase())); } @Override diff --git a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseTypeTest.java b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseTypeTest.java index 5cca23fdb8e..f7ec24a15f4 100644 --- a/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseTypeTest.java +++ b/infra/database/type/oracle/src/test/java/org/apache/shardingsphere/infra/database/oracle/type/OracleDatabaseTypeTest.java @@ -21,7 +21,7 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.junit.jupiter.api.Test; -import java.util.Arrays; +import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -30,6 +30,6 @@ class OracleDatabaseTypeTest { @Test void assertGetJdbcUrlPrefixes() { - assertThat(TypedSPILoader.getService(DatabaseType.class, "Oracle").getJdbcUrlPrefixes(), is(Arrays.asList("jdbc:oracle:", "jdbc:tc:gvenzl/oracle-free:", "jdbc:tc:gvenzl/oracle-xe:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "Oracle").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:oracle:"))); } } diff --git a/infra/database/type/pom.xml b/infra/database/type/pom.xml index 0d2e4169b7e..a70e18f3415 100644 --- a/infra/database/type/pom.xml +++ b/infra/database/type/pom.xml @@ -37,5 +37,6 @@ <module>h2</module> <module>sql92</module> <module>clickhouse</module> + <module>testcontainers</module> </modules> </project> diff --git a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseType.java b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseType.java index 6a0ee5c741e..2300718051e 100644 --- a/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseType.java +++ b/infra/database/type/postgresql/src/main/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseType.java @@ -19,17 +19,17 @@ package org.apache.shardingsphere.infra.database.postgresql.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; /** - * Database type of PostgreSQL. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of PostgreSQL. */ public final class PostgreSQLDatabaseType implements DatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:postgresql:"); + return Collections.singletonList(String.format("jdbc:%s:", getType().toLowerCase())); } @Override diff --git a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseTypeTest.java b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseTypeTest.java index c784dee54f9..de62363e121 100644 --- a/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseTypeTest.java +++ b/infra/database/type/postgresql/src/test/java/org/apache/shardingsphere/infra/database/postgresql/type/PostgreSQLDatabaseTypeTest.java @@ -21,7 +21,7 @@ import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.junit.jupiter.api.Test; -import java.util.Arrays; +import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -30,6 +30,6 @@ class PostgreSQLDatabaseTypeTest { @Test void assertGetJdbcUrlPrefixes() { - assertThat(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL").getJdbcUrlPrefixes(), is(Arrays.asList("jdbc:postgresql:", "jdbc:tc:postgresql:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:postgresql:"))); } } diff --git a/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseType.java b/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseType.java index e1725acb12b..69e7e4763d0 100644 --- a/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseType.java +++ b/infra/database/type/sqlserver/src/main/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseType.java @@ -23,13 +23,13 @@ import java.util.Arrays; import java.util.Collection; /** - * Database type of SQLServer. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of SQLServer. */ public final class SQLServerDatabaseType implements DatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList("jdbc:microsoft:sqlserver:", "jdbc:sqlserver:", "jdbc:tc:mcr.microsoft.com/mssql/server:"); + return Arrays.asList("jdbc:microsoft:sqlserver:", "jdbc:sqlserver:"); } @Override diff --git a/infra/database/type/sqlserver/src/test/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseTypeTest.java b/infra/database/type/sqlserver/src/test/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseTypeTest.java index 33e75ae4bea..9edf61a6161 100644 --- a/infra/database/type/sqlserver/src/test/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseTypeTest.java +++ b/infra/database/type/sqlserver/src/test/java/org/apache/shardingsphere/infra/database/sqlserver/type/SQLServerDatabaseTypeTest.java @@ -31,6 +31,6 @@ class SQLServerDatabaseTypeTest { @Test void assertGetJdbcUrlPrefixes() { assertThat(TypedSPILoader.getService(DatabaseType.class, "SQLServer").getJdbcUrlPrefixes(), - is(Arrays.asList("jdbc:microsoft:sqlserver:", "jdbc:sqlserver:", "jdbc:tc:mcr.microsoft.com/mssql/server:"))); + is(Arrays.asList("jdbc:microsoft:sqlserver:", "jdbc:sqlserver:"))); } } diff --git a/infra/database/type/pom.xml b/infra/database/type/testcontainers/pom.xml similarity index 66% copy from infra/database/type/pom.xml copy to infra/database/type/testcontainers/pom.xml index 0d2e4169b7e..1a2af7427f0 100644 --- a/infra/database/type/pom.xml +++ b/infra/database/type/testcontainers/pom.xml @@ -20,22 +20,24 @@ <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.shardingsphere</groupId> - <artifactId>shardingsphere-infra-database</artifactId> + <artifactId>shardingsphere-infra-database-type</artifactId> <version>5.4.2-SNAPSHOT</version> </parent> - <artifactId>shardingsphere-infra-database-type</artifactId> - <packaging>pom</packaging> + <artifactId>shardingsphere-infra-database-testcontainers</artifactId> <name>${project.artifactId}</name> - <modules> - <module>mysql</module> - <module>mariadb</module> - <module>postgresql</module> - <module>opengauss</module> - <module>oracle</module> - <module>sqlserver</module> - <module>h2</module> - <module>sql92</module> - <module>clickhouse</module> - </modules> + <dependencies> + <dependency> + <groupId>org.apache.shardingsphere</groupId> + <artifactId>shardingsphere-infra-database-core</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.shardingsphere</groupId> + <artifactId>shardingsphere-test-util</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> + </dependencies> </project> diff --git a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseType.java b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/AbstractTestcontainersDatabaseType.java similarity index 62% copy from infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseType.java copy to infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/AbstractTestcontainersDatabaseType.java index fd3f14f4258..328f3cbf911 100644 --- a/infra/database/type/mysql/src/main/java/org/apache/shardingsphere/infra/database/mysql/type/MySQLDatabaseType.java +++ b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/AbstractTestcontainersDatabaseType.java @@ -15,25 +15,13 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mysql.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; -import java.util.Arrays; -import java.util.Collection; - /** - * Database type of MySQL. Includes verification of Docker Images involved in commonly used testcontainers. + * Abstract Database type in testcontainers-java. + * All jdbcUrl prefixes supported by testcontainers-java should extend this class. */ -public final class MySQLDatabaseType implements DatabaseType { - - @Override - public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList("jdbc:mysql:", "jdbc:mysqlx:", "jdbc:tc:mysql:"); - } - - @Override - public String getType() { - return "MySQL"; - } +public abstract class AbstractTestcontainersDatabaseType implements DatabaseType { } diff --git a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcClickHouseDatabaseType.java similarity index 75% copy from infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java copy to infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcClickHouseDatabaseType.java index c53ff914878..77f6ab97d6c 100644 --- a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java +++ b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcClickHouseDatabaseType.java @@ -15,32 +15,32 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mariadb.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Optional; /** - * Database type of MariaDB. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of ClickHouse in testcontainers-java. */ -public final class MariaDBDatabaseType implements DatabaseType { +public final class TcClickHouseDatabaseType extends AbstractTestcontainersDatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:mariadb:"); + return Collections.singletonList("jdbc:tc:clickhouse:"); } @Override public Optional<DatabaseType> getTrunkDatabaseType() { - return Optional.of(TypedSPILoader.getService(DatabaseType.class, "MySQL")); + return Optional.of(TypedSPILoader.getService(DatabaseType.class, "ClickHouse")); } @Override public String getType() { - return "MariaDB"; + return "TestContainersClickHouse"; } } diff --git a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcMariaDBDatabaseType.java similarity index 75% copy from infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java copy to infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcMariaDBDatabaseType.java index c53ff914878..36bf2f124b3 100644 --- a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java +++ b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcMariaDBDatabaseType.java @@ -15,32 +15,32 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mariadb.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Optional; /** - * Database type of MariaDB. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of MariaDB in testcontainers-java. */ -public final class MariaDBDatabaseType implements DatabaseType { +public final class TcMariaDBDatabaseType extends AbstractTestcontainersDatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:mariadb:"); + return Collections.singletonList("jdbc:tc:mariadb:"); } @Override public Optional<DatabaseType> getTrunkDatabaseType() { - return Optional.of(TypedSPILoader.getService(DatabaseType.class, "MySQL")); + return Optional.of(TypedSPILoader.getService(DatabaseType.class, "MariaDB")); } @Override public String getType() { - return "MariaDB"; + return "TestContainersMariaDB"; } } diff --git a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcMySQLDatabaseType.java similarity index 77% copy from infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java copy to infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcMySQLDatabaseType.java index c53ff914878..c19545a69ea 100644 --- a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java +++ b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcMySQLDatabaseType.java @@ -15,23 +15,23 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mariadb.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Optional; /** - * Database type of MariaDB. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of MySQL in testcontainers-java. */ -public final class MariaDBDatabaseType implements DatabaseType { +public final class TcMySQLDatabaseType extends AbstractTestcontainersDatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:mariadb:"); + return Collections.singletonList("jdbc:tc:mysql:"); } @Override @@ -41,6 +41,6 @@ public final class MariaDBDatabaseType implements DatabaseType { @Override public String getType() { - return "MariaDB"; + return "TestContainersMySQL"; } } diff --git a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcOracleDatabaseType.java similarity index 75% copy from infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java copy to infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcOracleDatabaseType.java index c53ff914878..d5169f1d885 100644 --- a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java +++ b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcOracleDatabaseType.java @@ -15,32 +15,32 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mariadb.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Optional; /** - * Database type of MariaDB. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of Oracle in testcontainers-java. */ -public final class MariaDBDatabaseType implements DatabaseType { +public final class TcOracleDatabaseType extends AbstractTestcontainersDatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:mariadb:"); + return Collections.singletonList("jdbc:tc:oracle:"); } @Override public Optional<DatabaseType> getTrunkDatabaseType() { - return Optional.of(TypedSPILoader.getService(DatabaseType.class, "MySQL")); + return Optional.of(TypedSPILoader.getService(DatabaseType.class, "Oracle")); } @Override public String getType() { - return "MariaDB"; + return "TestContainersOracle"; } } diff --git a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcPostgreSQLDatabaseType.java similarity index 75% copy from infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java copy to infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcPostgreSQLDatabaseType.java index c53ff914878..d9136e6fb06 100644 --- a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java +++ b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcPostgreSQLDatabaseType.java @@ -15,32 +15,32 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mariadb.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Optional; /** - * Database type of MariaDB. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of PostgreSQL in testcontainers-java. */ -public final class MariaDBDatabaseType implements DatabaseType { +public final class TcPostgreSQLDatabaseType extends AbstractTestcontainersDatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:mariadb:"); + return Collections.singletonList("jdbc:tc:postgresql:"); } @Override public Optional<DatabaseType> getTrunkDatabaseType() { - return Optional.of(TypedSPILoader.getService(DatabaseType.class, "MySQL")); + return Optional.of(TypedSPILoader.getService(DatabaseType.class, "PostgreSQL")); } @Override public String getType() { - return "MariaDB"; + return "TestContainersPostgreSQL"; } } diff --git a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcSQLServerDatabaseType.java similarity index 75% copy from infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java copy to infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcSQLServerDatabaseType.java index c53ff914878..92049f5b30e 100644 --- a/infra/database/type/mariadb/src/main/java/org/apache/shardingsphere/infra/database/mariadb/type/MariaDBDatabaseType.java +++ b/infra/database/type/testcontainers/src/main/java/org/apache/shardingsphere/infra/database/testcontainers/type/TcSQLServerDatabaseType.java @@ -15,32 +15,32 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.mariadb.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; -import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.Optional; /** - * Database type of MariaDB. Includes verification of Docker Images involved in commonly used testcontainers. + * Database type of MSSQL Server in testcontainers-java. */ -public final class MariaDBDatabaseType implements DatabaseType { +public final class TcSQLServerDatabaseType extends AbstractTestcontainersDatabaseType { @Override public Collection<String> getJdbcUrlPrefixes() { - return Arrays.asList(String.format("jdbc:%s:", getType().toLowerCase()), "jdbc:tc:mariadb:"); + return Collections.singletonList("jdbc:tc:sqlserver:"); } @Override public Optional<DatabaseType> getTrunkDatabaseType() { - return Optional.of(TypedSPILoader.getService(DatabaseType.class, "MySQL")); + return Optional.of(TypedSPILoader.getService(DatabaseType.class, "SQLServer")); } @Override public String getType() { - return "MariaDB"; + return "TestContainersSQLServer"; } } diff --git a/infra/database/type/testcontainers/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.database.core.type.DatabaseType b/infra/database/type/testcontainers/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.database.core.type.DatabaseType new file mode 100644 index 00000000000..081085fcf0d --- /dev/null +++ b/infra/database/type/testcontainers/src/main/resources/META-INF/services/org.apache.shardingsphere.infra.database.core.type.DatabaseType @@ -0,0 +1,23 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +org.apache.shardingsphere.infra.database.testcontainers.type.TcClickHouseDatabaseType +org.apache.shardingsphere.infra.database.testcontainers.type.TcMariaDBDatabaseType +org.apache.shardingsphere.infra.database.testcontainers.type.TcMySQLDatabaseType +org.apache.shardingsphere.infra.database.testcontainers.type.TcOracleDatabaseType +org.apache.shardingsphere.infra.database.testcontainers.type.TcPostgreSQLDatabaseType +org.apache.shardingsphere.infra.database.testcontainers.type.TcSQLServerDatabaseType diff --git a/infra/database/type/clickhouse/src/test/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseTypeTest.java b/infra/database/type/testcontainers/src/test/java/org/apache/shardingsphere/infra/database/testcontainers/type/TestcontainersDatabaseTypeTest.java similarity index 53% copy from infra/database/type/clickhouse/src/test/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseTypeTest.java copy to infra/database/type/testcontainers/src/test/java/org/apache/shardingsphere/infra/database/testcontainers/type/TestcontainersDatabaseTypeTest.java index 9b91e31b0e3..91dcaac3307 100644 --- a/infra/database/type/clickhouse/src/test/java/org/apache/shardingsphere/infra/database/clickhouse/type/ClickHouseDatabaseTypeTest.java +++ b/infra/database/type/testcontainers/src/test/java/org/apache/shardingsphere/infra/database/testcontainers/type/TestcontainersDatabaseTypeTest.java @@ -15,22 +15,26 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.database.clickhouse.type; +package org.apache.shardingsphere.infra.database.testcontainers.type; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader; import org.junit.jupiter.api.Test; -import java.util.Arrays; +import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -class ClickHouseDatabaseTypeTest { +class TestcontainersDatabaseTypeTest { @Test void assertGetJdbcUrlPrefixes() { - assertThat(TypedSPILoader.getService(DatabaseType.class, "ClickHouse").getJdbcUrlPrefixes(), - is(Arrays.asList("jdbc:ch:", "jdbc:clickhouse:", "jdbc:tc:clickhouse/clickhouse-server:", "jdbc:tc:yandex/clickhouse-server:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "TestContainersClickHouse").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:tc:clickhouse:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "TestContainersMariaDB").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:tc:mariadb:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "TestContainersMySQL").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:tc:mysql:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "TestContainersOracle").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:tc:oracle:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "TestContainersPostgreSQL").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:tc:postgresql:"))); + assertThat(TypedSPILoader.getService(DatabaseType.class, "TestContainersSQLServer").getJdbcUrlPrefixes(), is(Collections.singletonList("jdbc:tc:sqlserver:"))); } } diff --git a/test/native/pom.xml b/test/native/pom.xml index fa00a4ee966..c5f1e8d4948 100644 --- a/test/native/pom.xml +++ b/test/native/pom.xml @@ -33,6 +33,12 @@ <version>${project.version}</version> <scope>test</scope> </dependency> + <dependency> + <groupId>org.apache.shardingsphere</groupId> + <artifactId>shardingsphere-infra-database-testcontainers</artifactId> + <version>${project.version}</version> + <scope>test</scope> + </dependency> <dependency> <groupId>org.hamcrest</groupId>