This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 73e016ff826 Fix integration issues with clickhouse-server `25.10` 
(#37421)
73e016ff826 is described below

commit 73e016ff826519682bbf4b3f48138c34e88153a1
Author: Ling Hengqian <[email protected]>
AuthorDate: Thu Dec 18 16:46:32 2025 +0800

    Fix integration issues with clickhouse-server `25.10` (#37421)
---
 distribution/proxy-native/pom.xml                  |    2 +-
 distribution/proxy/pom.xml                         |    2 +-
 distribution/proxy/src/main/release-docs/LICENSE   |    2 +-
 .../graalvm-native-image/_index.cn.md              |   39 +-
 .../graalvm-native-image/_index.en.md              |   39 +-
 .../optional-plugins/clickhouse/_index.cn.md       |   34 +-
 .../optional-plugins/clickhouse/_index.en.md       |   39 +-
 .../optional-plugins/hiveserver2/_index.cn.md      |    4 +-
 .../optional-plugins/hiveserver2/_index.en.md      |    4 +-
 .../0.6.3/reachability-metadata.json               |   16 -
 .../0.9.4-all/reachability-metadata.json           |  167 +++
 .../3.6.0/reachability-metadata.json               | 1100 ++++++++++++++++++++
 .../reachability-metadata.json                     |   19 +-
 .../reachability-metadata.json                     |  206 ++--
 .../2.0.1/reachability-metadata.json               |  303 ++++++
 pom.xml                                            |    6 +-
 test/e2e/operation/pipeline/pom.xml                |    2 +-
 test/native/native-image-filter/extra-filter.json  |    9 +-
 test/native/pom.xml                                |   10 +-
 .../test/natived/commons/TestShardingService.java  |  145 ++-
 .../commons/repository/OrderItemRepository.java    |   62 +-
 .../commons/repository/OrderRepository.java        |   34 +-
 .../test/natived/jdbc/databases/SQLServerTest.java |   12 -
 .../reachability-metadata.json                     |    2 +-
 .../resources/test-native/sql/clickhouse-init.sql  |    2 +-
 .../yaml/jdbc/databases/clickhouse.yaml            |    6 +-
 test/pom.xml                                       |    2 +-
 27 files changed, 1917 insertions(+), 351 deletions(-)

diff --git a/distribution/proxy-native/pom.xml 
b/distribution/proxy-native/pom.xml
index 10c1f5354fe..df02de36c45 100644
--- a/distribution/proxy-native/pom.xml
+++ b/distribution/proxy-native/pom.xml
@@ -718,7 +718,7 @@
                 <dependency>
                     <groupId>com.clickhouse</groupId>
                     <artifactId>clickhouse-jdbc</artifactId>
-                    <classifier>http</classifier>
+                    <classifier>all</classifier>
                     <scope>runtime</scope>
                 </dependency>
             </dependencies>
diff --git a/distribution/proxy/pom.xml b/distribution/proxy/pom.xml
index fe6d087a4d8..2b58d13aaab 100644
--- a/distribution/proxy/pom.xml
+++ b/distribution/proxy/pom.xml
@@ -753,7 +753,7 @@
                 <dependency>
                     <groupId>com.clickhouse</groupId>
                     <artifactId>clickhouse-jdbc</artifactId>
-                    <classifier>http</classifier>
+                    <classifier>all</classifier>
                     <scope>runtime</scope>
                 </dependency>
             </dependencies>
diff --git a/distribution/proxy/src/main/release-docs/LICENSE 
b/distribution/proxy/src/main/release-docs/LICENSE
index e104befce96..4efe9abd7e9 100644
--- a/distribution/proxy/src/main/release-docs/LICENSE
+++ b/distribution/proxy/src/main/release-docs/LICENSE
@@ -324,7 +324,7 @@ BSD licenses
 The following components are provided under a BSD license. See project link 
for details.
 The text of each license is also included at licenses/LICENSE-[project].txt.
 
-    antlr4-runtime 4.10.1: https://github.com/antlr/antlr4, BSD-3-Clause
+    antlr4-runtime 4.13.2: https://github.com/antlr/antlr4, BSD-3-Clause
     asm 9.3: https://github.com/llbit/ow2-asm, BSD-3-Clause
     commons-compiler 3.1.11: https://github.com/janino-compiler/janino, 
BSD-3-Clause
     janino 3.1.11: https://github.com/janino-compiler/janino, BSD-3-Clause
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md
index 67103d87c42..b4029669f02 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.cn.md
@@ -280,42 +280,13 @@ Caused by: java.io.UnsupportedEncodingException: Codepage 
Cp1252 is not supporte
 }
 ```
 
-6. 当需要通过 ShardingSphere JDBC 使用 ClickHouse 方言时,
-用户需要手动引入相关的可选模块和 classifier 为 `http` 的 ClickHouse JDBC 驱动。
-原则上,ShardingSphere 的 GraalVM Native Image 集成不希望使用 classifier 为 `all` 的 
`com.clickhouse:clickhouse-jdbc`,
-因为 Uber Jar 会导致采集重复的 GraalVM Reachability Metadata。
-可能的配置例子如下,
-
-```xml
-<project>
-    <dependencies>
-      <dependency>
-         <groupId>org.apache.shardingsphere</groupId>
-         <artifactId>shardingsphere-jdbc</artifactId>
-         <version>${shardingsphere.version}</version>
-      </dependency>
-       <dependency>
-          <groupId>org.apache.shardingsphere</groupId>
-          <artifactId>shardingsphere-jdbc-dialect-clickhouse</artifactId>
-          <version>${shardingsphere.version}</version>
-      </dependency>
-       <dependency>
-          <groupId>com.clickhouse</groupId>
-          <artifactId>clickhouse-jdbc</artifactId>
-          <version>0.6.3</version>
-          <classifier>http</classifier>
-       </dependency>
-    </dependencies>
-</project>
-```
-
-7. ShardingSphere 的单元测试仅使用 Maven 模块 
`io.github.linghengqian:hive-server2-jdbc-driver-thin` 来在 GraalVM Native Image 
下验证 HiveServer2 集成的可用性。
+6. ShardingSphere 的单元测试仅使用 Maven 模块 
`io.github.linghengqian:hive-server2-jdbc-driver-thin` 来在 GraalVM Native Image 
下验证 HiveServer2 集成的可用性。
 如果开发者直接使用 `org.apache.hive:hive-jdbc`,则应自行处理依赖冲突和提供额外的 GraalVM Reachability 
Metadata 。
 
-8. 由于 https://github.com/oracle/graal/issues/7979 的影响,
+7. 由于 https://github.com/oracle/graal/issues/7979 的影响,
 对应 `com.oracle.database.jdbc:ojdbc8` Maven 模块的 Oracle JDBC Driver 无法在 GraalVM 
Native Image 下使用。
 
-9. 包括但不限于来自第三方依赖的 `com.mysql.cj.LocalizedErrorMessages`,
+8. 包括但不限于来自第三方依赖的 `com.mysql.cj.LocalizedErrorMessages`,
    `com.microsoft.sqlserver.jdbc.SQLServerResource`,
    `org.postgresql.translation.messages`,
    `org.opengauss.translation.messages` 等 `Resource Bundles` 
在默认情况下会根据系统的默认语言环境加载 L10N 资源,
@@ -340,11 +311,11 @@ without it being registered as reachable. Add it to the 
resource metadata to sol
   com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:186)
 ```
 
-10. 受 `apache/calcite` 使用的 `janino-compiler/janino` 的影响,
+9. 受 `apache/calcite` 使用的 `janino-compiler/janino` 的影响,
     ShardingSphere 的 `SQL Federation` 功能在 GraalVM Native Image 下不可用。
     这同样导致 ShardingSphere Proxy Native 无法使用 OpenGauss 集成。
 
-11. 受 https://github.com/oracle/graal/issues/11280 影响,
+10. 受 https://github.com/oracle/graal/issues/11280 影响,
     Etcd 的 Cluster 模式集成无法在通过 Windows 11 编译的 GraalVM Native Image 下使用,
     且 Etcd 的 Cluster 模式会与 GraalVM Tracing Agent 产生冲突。
     若开发者需要在通过 Linux 编译的 GraalVM Native Image 下使用 Etcd 的 Cluster 模式,
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md
index 472bd64d707..dc2b58bad05 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/graalvm-native-image/_index.en.md
@@ -291,42 +291,13 @@ Users need to define the following JSON in the 
`reachability-metadata.json` file
 }
 ```
 
-6. When using the ClickHouse dialect through ShardingSphere JDBC, 
-users need to manually introduce the relevant optional modules and the 
ClickHouse JDBC driver with the classifier `http`.
-In principle, ShardingSphere's GraalVM Native Image integration does not want 
to use `com.clickhouse:clickhouse-jdbc` with classifier `all`, 
-because Uber Jar will cause the collection of duplicate GraalVM Reachability 
Metadata.
-Possible configuration examples are as follows,
-
-```xml
-<project>
-    <dependencies>
-      <dependency>
-         <groupId>org.apache.shardingsphere</groupId>
-         <artifactId>shardingsphere-jdbc</artifactId>
-         <version>${shardingsphere.version}</version>
-      </dependency>
-       <dependency>
-          <groupId>org.apache.shardingsphere</groupId>
-          <artifactId>shardingsphere-jdbc-dialect-clickhouse</artifactId>
-          <version>${shardingsphere.version}</version>
-      </dependency>
-       <dependency>
-          <groupId>com.clickhouse</groupId>
-          <artifactId>clickhouse-jdbc</artifactId>
-          <version>0.6.3</version>
-          <classifier>http</classifier>
-       </dependency>
-    </dependencies>
-</project>
-```
-
-7. ShardingSphere's unit test only uses the Maven module 
`io.github.linghengqian:hive-server2-jdbc-driver-thin` to verify the 
availability of HiveServer2 integration under GraalVM Native Image. 
+6. ShardingSphere's unit test only uses the Maven module 
`io.github.linghengqian:hive-server2-jdbc-driver-thin` to verify the 
availability of HiveServer2 integration under GraalVM Native Image. 
 If developers use `org.apache.hive:hive-jdbc` directly, they should handle 
dependency conflicts and provide additional GraalVM Reachability Metadata by 
themselves.
 
-8. Due to https://github.com/oracle/graal/issues/7979 , 
+7. Due to https://github.com/oracle/graal/issues/7979 , 
 the Oracle JDBC Driver corresponding to the `com.oracle.database.jdbc:ojdbc8` 
Maven module cannot be used under GraalVM Native Image.
 
-9. Including but not limited to `com.mysql.cj.LocalizedErrorMessages`,
+8. Including but not limited to `com.mysql.cj.LocalizedErrorMessages`,
    `com.microsoft.sqlserver.jdbc.SQLServerResource`,
    `org.postgresql.translation.messages`,
    `org.opengauss.translation.messages` from third-party dependencies. By 
default, L10N resources are loaded according to the system's default locale,
@@ -351,11 +322,11 @@ without it being registered as reachable. Add it to the 
resource metadata to sol
   com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:186)
 ```
 
-10. Due to the use of `janino-compiler/janino` by `apache/calcite`, 
+9. Due to the use of `janino-compiler/janino` by `apache/calcite`, 
     ShardingSphere's `SQL Federation` feature is unavailable in the GraalVM 
Native Image.
     This also prevents ShardingSphere Proxy Native from integrating with 
OpenGauss.
 
-11. Due to the issue at https://github.com/oracle/graal/issues/11280, 
+10. Due to the issue at https://github.com/oracle/graal/issues/11280, 
     Etcd's Cluster mode integration cannot be used on GraalVM Native Images 
compiled via Windows 11,
     and Etcd's Cluster mode will conflict with the GraalVM Tracing Agent.
     If developers need to use Etcd's Cluster mode on GraalVM Native Images 
compiled via Linux,
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.cn.md
index 8728ff87cdd..da5237fb6a7 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.cn.md
@@ -28,8 +28,8 @@ ShardingSphere 对 ClickHouse JDBC Driver 的支持位于可选模块中。
     <dependency>
         <groupId>com.clickhouse</groupId>
         <artifactId>clickhouse-jdbc</artifactId>
-        <classifier>http</classifier>
-        <version>0.6.3</version>
+        <classifier>all</classifier>
+        <version>0.9.4</version>
     </dependency>
 </dependencies>
 ```
@@ -43,7 +43,7 @@ ShardingSphere 对 ClickHouse JDBC Driver 的支持位于可选模块中。
 ```yaml
 services:
   clickhouse-server:
-    image: clickhouse/clickhouse-server:25.9.6.117
+    image: clickhouse/clickhouse-server:25.10.3.100
     environment:
       CLICKHOUSE_SKIP_USER_SETUP: "1"
     ports:
@@ -167,24 +167,14 @@ public class ExampleUtils {
 ### SQL 限制
 
 ShardingSphere JDBC DataSource 尚不支持执行 ClickHouse 的 `create table`,`truncate 
table` 和 `drop table` 语句。
-用户应考虑为 ShardingSphere 提交包含单元测试的 PR。
+当前 ShardingSphere 对 ClickHouse 的 `INNER JOIN` 语法解析存在不足,
+对 `SELECT i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id` 这类 
SQL,它可能返回错误的查询结果。
 
 ### 分布式序列限制
 
-ClickHouse 自身的,对应分布式序列功能的列类型是 `UUID`,`UUID` 在 ClickHouse JDBC Driver 中接收为 
`java.util.UUID`,
-参考 https://github.com/ClickHouse/ClickHouse/issues/56228 。 
-而 ShardingSphere 的 `SNOWFLAKE` 的分布式序列 SPI 实现对应的列类型是 `UInt64`,
-在 ShardingSphere JDBC Driver 中接收为 `java.lang.Long`。
-
-当为 ShardingSphere 配置连接至 ClickHouse 时, 若同时配置了 ShardingSphere 使用 `SNOWFLAKE` 
的分布式序列 SPI 实现,
-ShardingSphere 的分布式序列功能使用的 ClickHouse 真实数据库中的列类型不应该被设置为 `UUID`。
-
-由于 `com.clickhouse:clickhouse-jdbc:0.6.3:http` Maven 模块的 
`com.clickhouse.jdbc.ClickHouseConnection#prepareStatement(String, int)`
-故意在 `autoGeneratedKeys` 为 `java.sql.Statement.RETURN_GENERATED_KEYS` 时抛出异常,
-以阻止 ShardingSphere 正常代理 
`com.clickhouse.jdbc.internal.ClickHouseConnectionImpl`,
-因此如果用户需要从 JDBC 业务代码获取 ShardingSphere 生成的分布式序列,需要将 `autoGeneratedKeys` 置为 
`java.sql.Statement.NO_GENERATED_KEYS`。
-
-一个可能的示例如下,
+受 https://github.com/ClickHouse/ClickHouse/issues/21697 影响,
+由于 ClickHouse 不支持 `INSERT ... RETURNING` 语法,
+开发者无法在向 ShardingSphere 的逻辑数据源执行 `INSERT` SQL 后获得分布式序列。即,如下操作是不允许的,
 
 ```java
 import com.zaxxer.hikari.HikariConfig;
@@ -199,7 +189,7 @@ public class ExampleTest {
              Connection connection = dataSource.getConnection();
              PreparedStatement preparedStatement = connection.prepareStatement(
                      "INSERT INTO t_order (user_id, order_type, address_id, 
status) VALUES (1, 1, 1, 'INSERT_TEST')",
-                     Statement.NO_GENERATED_KEYS
+                     Statement.RETURN_GENERATED_KEYS
              )) {
             preparedStatement.executeUpdate();
             try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) {
@@ -227,9 +217,3 @@ ClickHouse 不支持 ShardingSphere 集成级别的本地事务,XA 事务或 S
 嵌入式 ClickHouse `chDB` 尚未发布 Java 客户端,
 ShardingSphere 不针对 SNAPSHOT 版本的 https://github.com/chdb-io/chdb-java 做集成测试。
 参考 https://github.com/chdb-io/chdb/issues/243 。
-
-### ClickHouse JDBC Driver V2 限制
-
-ClickHouse JDBC Driver V2 自 
https://github.com/ClickHouse/clickhouse-java/pull/2368 所在的 `0.8.6` 里程碑开始,
-使用 `org.antlr:antlr4-maven-plugin:4.13.2`。这与 ShardingSphere 使用的 
`org.antlr:antlr4-runtime:4.10.1` 产生冲突。
-ShardingSphere 仅使用 `com.clickhouse:clickhouse-jdbc:0.6.3:http` 测试 ClickHouse 
集成。
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.en.md
index 71999eadf74..37d44757b61 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/clickhouse/_index.en.md
@@ -28,8 +28,8 @@ the possible Maven dependencies are as follows,
     <dependency>
         <groupId>com.clickhouse</groupId>
         <artifactId>clickhouse-jdbc</artifactId>
-        <classifier>http</classifier>
-        <version>0.6.3</version>
+        <classifier>all</classifier>
+        <version>0.9.4</version>
     </dependency>
 </dependencies>
 ```
@@ -43,7 +43,7 @@ Write a Docker Compose file to start ClickHouse.
 ```yaml
 services:
   clickhouse-server:
-    image: clickhouse/clickhouse-server:25.9.6.117
+    image: clickhouse/clickhouse-server:25.10.3.100
     environment:
       CLICKHOUSE_SKIP_USER_SETUP: "1"
     ports:
@@ -170,27 +170,15 @@ public class ExampleUtils {
 
 ShardingSphere JDBC DataSource does not yet support executing ClickHouse's 
`create table`, `truncate table`,
 and `drop table` statements.
-Users should consider submitting a PR containing unit tests for ShardingSphere.
+The current ShardingSphere parsing of ClickHouse's `INNER JOIN` syntax has 
shortcomings, 
+and it may return incorrect query results for SQL statements such as `SELECT 
i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id`.
 
 ### Key Generate restrictions
 
-The column type corresponding to the Key Generate function of ClickHouse 
itself is `UUID`, 
-and `UUID` is received as `java.util.UUID` in ClickHouse JDBC Driver,
-refer to https://github.com/ClickHouse/ClickHouse/issues/56228 .
-The column type corresponding to the Key Generate SPI implementation of 
ShardingSphere's `SNOWFLAKE` is `UInt64`,
-which is received as `java.lang.Long` in ShardingSphere JDBC Driver.
-
-When configuring ShardingSphere to connect to ClickHouse, 
-if ShardingSphere is also configured to use the Key Generate SPI 
implementation of `SNOWFLAKE`,
-the column type in the ClickHouse real database used by ShardingSphere's Key 
Generate function should not be set to `UUID`.
-
-Because `com.clickhouse.jdbc.ClickHouseConnection#prepareStatement(String, 
int)` of `com.clickhouse:clickhouse-jdbc:0.6.3:http`
-Maven module intentionally throws an exception when `autoGeneratedKeys` is 
`java.sql.Statement.RETURN_GENERATED_KEYS`,
-to prevent ShardingSphere from proxying 
`com.clickhouse.jdbc.internal.ClickHouseConnectionImpl` normally,
-therefore, if users need to obtain the Key generated by ShardingSphere from 
the JDBC business code, 
-they need to set `autoGeneratedKeys` to `java.sql.Statement.NO_GENERATED_KEYS`.
-
-A possible example is as follows,
+Due to the issue mentioned in 
https://github.com/ClickHouse/ClickHouse/issues/21697 ,
+because ClickHouse does not support the `INSERT ... RETURNING` syntax,
+developers cannot obtain distributed sequences after executing `INSERT` SQL 
into ShardingSphere's logical data source. 
+Specifically, the following operations are not allowed:
 
 ```java
 import com.zaxxer.hikari.HikariConfig;
@@ -205,7 +193,7 @@ public class ExampleTest {
              Connection connection = dataSource.getConnection();
              PreparedStatement preparedStatement = connection.prepareStatement(
                      "INSERT INTO t_order (user_id, order_type, address_id, 
status) VALUES (1, 1, 1, 'INSERT_TEST')",
-                     Statement.NO_GENERATED_KEYS
+                     Statement.RETURN_GENERATED_KEYS
              )) {
             preparedStatement.executeUpdate();
             try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) {
@@ -233,10 +221,3 @@ See 
https://github.com/ClickHouse/clickhouse-java/issues/2023 .
 The embedded ClickHouse `chDB` Java client has not been released yet.
 ShardingSphere does not do integration testing for the SNAPSHOT version of 
https://github.com/chdb-io/chdb-java .
 Refer to https://github.com/chdb-io/chdb/issues/243 .
-
-### Limitations of ClickHouse JDBC Driver V2
-
-Starting from the `0.8.6` milestone at 
https://github.com/ClickHouse/clickhouse-java/pull/2368 , 
-ClickHouse JDBC Driver V2 uses `org.antlr:antlr4-maven-plugin:4.13.2`. 
-This conflicts with `org.antlr:antlr4-runtime:4.10.1` used by ShardingSphere.
-ShardingSphere only uses `com.clickhouse:clickhouse-jdbc:0.6.3:http` to test 
ClickHouse integration.
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
index 423171971cf..78273748cc4 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.cn.md
@@ -366,9 +366,9 @@ ShardingSphere 仅针对 HiveServer2 `4.0.1` 进行集成测试。
 
 ### SQL 限制
 
-HiveServer2 并不能保证每一条 `insert` 相关的 DML SQL 都能成功执行,尽管可能没有任何异常被抛出。
-
 ShardingSphere JDBC DataSource 尚不支持执行 HiveServer2 的 `set` 语句。
+当前 ShardingSphere 对 HiveServer2 的 `INNER JOIN` 语法解析存在不足,
+对 `SELECT i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id` 这类 
SQL,它可能返回错误的查询结果。
 
 #### 使用 `initFile` 参数部分绕开 SQL 限制
 
diff --git 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
index c6d350df793..cf58b89e4eb 100644
--- 
a/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-jdbc/optional-plugins/hiveserver2/_index.en.md
@@ -372,9 +372,9 @@ Reference https://issues.apache.org/jira/browse/HIVE-28418 .
 
 ### SQL Limitations
 
-HiveServer2 does not guarantee that every `insert` related DML SQL can be 
executed successfully, although no exception may be thrown.
-
 ShardingSphere JDBC DataSource does not yet support executing the `set` 
statement of HiveServer2.
+The current ShardingSphere parsing of HiveServer2's `INNER JOIN` syntax has 
shortcomings,
+and it may return incorrect query results for SQL statements such as `SELECT 
i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id`.
 
 #### Use `initFile` parameter to partially bypass SQL restrictions
 
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.clickhouse/clickhouse-jdbc/0.6.3/reachability-metadata.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.clickhouse/clickhouse-jdbc/0.6.3/reachability-metadata.json
deleted file mode 100644
index 09bf953ccfe..00000000000
--- 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.clickhouse/clickhouse-jdbc/0.6.3/reachability-metadata.json
+++ /dev/null
@@ -1,16 +0,0 @@
-{
-  "resources": [
-    {
-      "condition": {
-        "typeReached": "com.clickhouse.logging.LoggerFactory"
-      },
-      "glob": "META-INF/services/com.clickhouse.*"
-    },
-    {
-      "condition": {
-        "typeReached": "com.clickhouse.client.internal.jpountz.lz4.LZ4JNI"
-      },
-      "glob": 
"com/clickhouse/client/internal/jpountz/util/*/amd64/liblz4-java.so"
-    }
-  ]
-}
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.clickhouse/clickhouse-jdbc/0.9.4-all/reachability-metadata.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.clickhouse/clickhouse-jdbc/0.9.4-all/reachability-metadata.json
new file mode 100644
index 00000000000..edbd0185795
--- /dev/null
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.clickhouse/clickhouse-jdbc/0.9.4-all/reachability-metadata.json
@@ -0,0 +1,167 @@
+{
+  "reflection": [
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4HCJNICompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ],
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": [
+            "int"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4HCJavaUnsafeCompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ],
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": [
+            "int"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4JNICompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4JNIFastDecompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4JNISafeDecompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4JavaUnsafeCompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4JavaUnsafeFastDecompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4Factory"
+      },
+      "type": 
"com.clickhouse.client.internal.net.jpountz.lz4.LZ4JavaUnsafeSafeDecompressor",
+      "fields": [
+        {
+          "name": "INSTANCE"
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.clickhouse.data.ClickHouseFormat"
+      },
+      "type": "com.clickhouse.data.ClickHouseFormat",
+      "fields": [
+        {
+          "name": "RowBinary"
+        },
+        {
+          "name": "TabSeparated"
+        }
+      ]
+    }
+  ],
+  "resources": [
+    {
+      "condition": {
+        "typeReached": "com.clickhouse.logging.LoggerFactory"
+      },
+      "glob": "META-INF/services/com.clickhouse.logging.LoggerFactory"
+    },
+    {
+      "condition": {
+        "typeReached": "com.clickhouse.client.config.ClickHouseClientOption"
+      },
+      "glob": "clickhouse-client-version.properties"
+    },
+    {
+      "condition": {
+        "typeReached": "com.clickhouse.client.api.Client"
+      },
+      "glob": "client-v2-version.properties"
+    },
+    {
+      "condition": {
+        "typeReached": "com.clickhouse.client.api.internal.HttpAPIClientHelper"
+      },
+      "glob": "client-v2-version.properties"
+    },
+    {
+      "condition": {
+        "typeReached": "com.clickhouse.client.internal.net.jpountz.util.Native"
+      },
+      "glob": 
"com/clickhouse/client/internal/net/jpountz/util/win32/amd64/liblz4-java.so"
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.clickhouse.client.internal.org.apache.hc.core5.util.VersionInfo"
+      },
+      "glob": 
"com/clickhouse/client/internal/org/apache/hc/client5/version.properties"
+    },
+    {
+      "condition": {
+        "typeReached": "com.clickhouse.jdbc.Driver"
+      },
+      "glob": "jdbc-v2-version.properties"
+    }
+  ],
+  "bundles": []
+}
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.github.docker-java/docker-java-api/3.6.0/reachability-metadata.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.github.docker-java/docker-java-api/3.6.0/reachability-metadata.json
new file mode 100644
index 00000000000..49f87e4b12b
--- /dev/null
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/com.github.docker-java/docker-java-api/3.6.0/reachability-metadata.json
@@ -0,0 +1,1100 @@
+{
+  "reflection": [
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.CreateContainerCmd"
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.CreateContainerResponse",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        },
+        {
+          "name": "setId",
+          "parameterTypes": [
+            "java.lang.String"
+          ]
+        },
+        {
+          "name": "setWarnings",
+          "parameterTypes": [
+            "java.lang.String[]"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.DockerCmd"
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.GraphData",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.GraphDriver",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.HealthState",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.HealthStateLog",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.InspectContainerResponse",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": 
"com.github.dockerjava.api.command.InspectContainerResponse$ContainerState",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": [
+            "com.github.dockerjava.api.command.InspectContainerResponse"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": 
"com.github.dockerjava.api.command.InspectContainerResponse$Mount",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": 
"com.github.dockerjava.api.command.InspectContainerResponse$Node",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.InspectImageResponse",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.RootFS",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.command.SyncDockerCmd"
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.AccessMode",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.AuthConfig",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Bind",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.BindOptions",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.BindPropagation",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Binds",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "fromPrimitive",
+          "parameterTypes": [
+            "java.lang.String[]"
+          ]
+        },
+        {
+          "name": "toPrimitive",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.BlkioRateDevice",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.BlkioWeightDevice",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Capability",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ClusterInfo",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ContainerConfig",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ContainerNetwork",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ContainerNetwork$Ipam",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Device",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.DeviceRequest",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.DockerObject",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "getRawValues",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Driver",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ExposedPort",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ExposedPorts",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "fromPrimitive",
+          "parameterTypes": [
+            "java.util.Map"
+          ]
+        },
+        {
+          "name": "toPrimitive",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ExternalCA",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ExternalCAProtocol",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.HealthCheck",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.HostConfig",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        },
+        {
+          "name": "getAnnotations",
+          "parameterTypes": []
+        },
+        {
+          "name": "getAutoRemove",
+          "parameterTypes": []
+        },
+        {
+          "name": "getBlkioDeviceReadBps",
+          "parameterTypes": []
+        },
+        {
+          "name": "getBlkioDeviceReadIOps",
+          "parameterTypes": []
+        },
+        {
+          "name": "getBlkioDeviceWriteBps",
+          "parameterTypes": []
+        },
+        {
+          "name": "getBlkioDeviceWriteIOps",
+          "parameterTypes": []
+        },
+        {
+          "name": "getBlkioWeight",
+          "parameterTypes": []
+        },
+        {
+          "name": "getBlkioWeightDevice",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCapAdd",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCapDrop",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCgroup",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCgroupParent",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCgroupnsMode",
+          "parameterTypes": []
+        },
+        {
+          "name": "getConsoleSize",
+          "parameterTypes": []
+        },
+        {
+          "name": "getContainerIDFile",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpuCount",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpuPercent",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpuPeriod",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpuQuota",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpuRealtimePeriod",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpuRealtimeRuntime",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpuShares",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpusetCpus",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCpusetMems",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDeviceCgroupRules",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDeviceRequests",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDevices",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDiskQuota",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDns",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDnsOptions",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDnsSearch",
+          "parameterTypes": []
+        },
+        {
+          "name": "getExtraHosts",
+          "parameterTypes": []
+        },
+        {
+          "name": "getGroupAdd",
+          "parameterTypes": []
+        },
+        {
+          "name": "getInit",
+          "parameterTypes": []
+        },
+        {
+          "name": "getIoMaximumBandwidth",
+          "parameterTypes": []
+        },
+        {
+          "name": "getIoMaximumIOps",
+          "parameterTypes": []
+        },
+        {
+          "name": "getIpcMode",
+          "parameterTypes": []
+        },
+        {
+          "name": "getIsolation",
+          "parameterTypes": []
+        },
+        {
+          "name": "getKernelMemory",
+          "parameterTypes": []
+        },
+        {
+          "name": "getLxcConf",
+          "parameterTypes": []
+        },
+        {
+          "name": "getMemory",
+          "parameterTypes": []
+        },
+        {
+          "name": "getMemoryReservation",
+          "parameterTypes": []
+        },
+        {
+          "name": "getMemorySwap",
+          "parameterTypes": []
+        },
+        {
+          "name": "getMemorySwappiness",
+          "parameterTypes": []
+        },
+        {
+          "name": "getMounts",
+          "parameterTypes": []
+        },
+        {
+          "name": "getNanoCPUs",
+          "parameterTypes": []
+        },
+        {
+          "name": "getNetworkMode",
+          "parameterTypes": []
+        },
+        {
+          "name": "getOomKillDisable",
+          "parameterTypes": []
+        },
+        {
+          "name": "getOomScoreAdj",
+          "parameterTypes": []
+        },
+        {
+          "name": "getPidMode",
+          "parameterTypes": []
+        },
+        {
+          "name": "getPidsLimit",
+          "parameterTypes": []
+        },
+        {
+          "name": "getPortBindings",
+          "parameterTypes": []
+        },
+        {
+          "name": "getPrivileged",
+          "parameterTypes": []
+        },
+        {
+          "name": "getPublishAllPorts",
+          "parameterTypes": []
+        },
+        {
+          "name": "getReadonlyRootfs",
+          "parameterTypes": []
+        },
+        {
+          "name": "getRestartPolicy",
+          "parameterTypes": []
+        },
+        {
+          "name": "getRuntime",
+          "parameterTypes": []
+        },
+        {
+          "name": "getSecurityOpts",
+          "parameterTypes": []
+        },
+        {
+          "name": "getShmSize",
+          "parameterTypes": []
+        },
+        {
+          "name": "getStorageOpt",
+          "parameterTypes": []
+        },
+        {
+          "name": "getSysctls",
+          "parameterTypes": []
+        },
+        {
+          "name": "getTmpFs",
+          "parameterTypes": []
+        },
+        {
+          "name": "getUlimits",
+          "parameterTypes": []
+        },
+        {
+          "name": "getUsernsMode",
+          "parameterTypes": []
+        },
+        {
+          "name": "getUtSMode",
+          "parameterTypes": []
+        },
+        {
+          "name": "getVolumeDriver",
+          "parameterTypes": []
+        },
+        {
+          "name": "getVolumesFrom",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Image",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ImageOptions",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Info",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.InfoRegistryConfig",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.InfoRegistryConfig$IndexConfig",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.InternetProtocol",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Isolation",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "fromValue",
+          "parameterTypes": [
+            "java.lang.String"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Link",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Links",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "toPrimitive",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.LocalNodeState",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "forValue",
+          "parameterTypes": [
+            "java.lang.String"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.LogConfig",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        },
+        {
+          "name": "setType",
+          "parameterTypes": [
+            "com.github.dockerjava.api.model.LogConfig$LoggingType"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.LogConfig$LoggingType",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "fromValue",
+          "parameterTypes": [
+            "java.lang.String"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.LxcConf",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Mount",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.MountType",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.NetworkSettings",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.PeerNode",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Ports",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "fromPrimitive",
+          "parameterTypes": [
+            "java.util.Map"
+          ]
+        },
+        {
+          "name": "toPrimitive",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Ports$Binding",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.PropagationMode",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.ResourceVersion",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.RestartPolicy",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.RuntimeInfo",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        },
+        {
+          "name": "setPath",
+          "parameterTypes": [
+            "java.lang.String"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.SELContext",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.SwarmCAConfig",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.SwarmDispatcherConfig",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.SwarmInfo",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.SwarmOrchestration",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.SwarmRaftConfig",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.SwarmSpec",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.TaskDefaults",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.TmpfsOptions",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Ulimit",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Version",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VersionComponent",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VersionPlatform",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Volume",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": [
+            "java.lang.String"
+          ]
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VolumeBind",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VolumeBinds",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VolumeOptions",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VolumeRW",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.Volumes",
+      "allDeclaredFields": true,
+      "methods": [
+        {
+          "name": "toPrimitive",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VolumesFrom",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "type": "com.github.dockerjava.api.model.VolumesRW",
+      "allDeclaredFields": true
+    }
+  ],
+  "resources": [
+    {
+      "condition": {
+        "typeReached": 
"com.github.dockerjava.zerodep.shaded.org.apache.hc.core5.util.VersionInfo"
+      },
+      "glob": 
"com/github/dockerjava/zerodep/shaded/org/apache/hc/client5/version.properties"
+    },
+    {
+      "condition": {
+        "typeReached": "com.github.dockerjava.api.DockerClientDelegate"
+      },
+      "glob": "docker-java.properties"
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.psl.PublicSuffixMatcherLoader"
+      },
+      "glob": "org/publicsuffix/list/effective_tld_names.dat"
+    }
+  ]
+}
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reachability-metadata.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reachability-metadata.json
index 01ad295c03e..22411bf900c 100644
--- 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reachability-metadata.json
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/generated-reachability-metadata/reachability-metadata.json
@@ -613,7 +613,12 @@
       "condition": {
         "typeReached": 
"org.apache.shardingsphere.infra.expr.groovy.GroovyInlineExpressionParser"
       },
-      "type": "java.lang.Thread"
+      "type": "java.lang.Thread",
+      "fields": [
+        {
+          "name": "threadLocalRandomProbe"
+        }
+      ]
     },
     {
       "condition": {
@@ -2488,6 +2493,12 @@
       },
       "type": "org.apache.shardingsphere.driver.ShardingSphereDriver"
     },
+    {
+      "condition": {
+        "typeReached": 
"org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.JDBCBackendDataSource"
+      },
+      "type": "org.apache.shardingsphere.driver.ShardingSphereDriver"
+    },
     {
       "condition": {
         "typeReached": 
"org.apache.shardingsphere.proxy.backend.handler.distsql.DistSQLUpdateProxyBackendHandler"
@@ -11222,6 +11233,12 @@
       },
       "glob": "META-INF/services/java.nio.charset.spi.CharsetProvider"
     },
+    {
+      "condition": {
+        "typeReached": 
"org.apache.shardingsphere.infra.algorithm.keygen.snowflake.SnowflakeKeyGenerateAlgorithm"
+      },
+      "glob": "META-INF/services/java.time.zone.ZoneRulesProvider"
+    },
     {
       "condition": {
         "typeReached": 
"org.apache.shardingsphere.mode.repository.standalone.jdbc.sql.JDBCRepositorySQLLoader"
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reachability-metadata.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reachability-metadata.json
index d58c1d1f5d8..5b0058f55de 100644
--- 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reachability-metadata.json
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.apache.shardingsphere/shardingsphere-infra-reachability-metadata/reachability-metadata.json
@@ -2,23 +2,30 @@
   "reflection": [
     {
       "condition": {
-        "typeReached": "com.oracle.svm.core.code.CodeCacheManagerMXBean"
+        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateCompilationMXBean"
       },
-      "type": "com.oracle.svm.core.code.CodeCacheManagerMXBean",
+      "type": "com.oracle.svm.core.jdk.management.SubstrateCompilationMXBean",
       "allPublicConstructors": true
     },
     {
       "condition": {
-        "typeReached": 
"com.oracle.svm.core.genscavenge.CompleteGarbageCollectorMXBean"
+        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateClassLoadingMXBean"
       },
-      "type": "com.oracle.svm.core.genscavenge.CompleteGarbageCollectorMXBean",
+      "type": "com.oracle.svm.core.jdk.management.SubstrateClassLoadingMXBean",
       "allPublicConstructors": true
     },
     {
       "condition": {
-        "typeReached": "com.oracle.svm.core.genscavenge.HeapImplMemoryMXBean"
+        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateThreadMXBean"
       },
-      "type": "com.oracle.svm.core.genscavenge.HeapImplMemoryMXBean",
+      "type": "com.oracle.svm.core.jdk.management.SubstrateThreadMXBean",
+      "allPublicConstructors": true
+    },
+    {
+      "condition": {
+        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateRuntimeMXBean"
+      },
+      "type": "com.oracle.svm.core.jdk.management.SubstrateRuntimeMXBean",
       "allPublicConstructors": true
     },
     {
@@ -30,9 +37,16 @@
     },
     {
       "condition": {
-        "typeReached": 
"com.oracle.svm.core.genscavenge.GenScavengeMemoryPoolMXBeans"
+        "typeReached": 
"com.oracle.svm.core.genscavenge.CompleteGarbageCollectorMXBean"
       },
-      "type": 
"com.oracle.svm.core.genscavenge.GenScavengeMemoryPoolMXBeans$SurvivorMemoryPoolMXBean",
+      "type": "com.oracle.svm.core.genscavenge.CompleteGarbageCollectorMXBean",
+      "allPublicConstructors": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.oracle.svm.core.code.CodeCacheManagerMXBean"
+      },
+      "type": "com.oracle.svm.core.code.CodeCacheManagerMXBean",
       "allPublicConstructors": true
     },
     {
@@ -44,194 +58,199 @@
     },
     {
       "condition": {
-        "typeReached": 
"com.oracle.svm.core.genscavenge.IncrementalGarbageCollectorMXBean"
+        "typeReached": "com.oracle.svm.core.genscavenge.HeapImplMemoryMXBean"
       },
-      "type": 
"com.oracle.svm.core.genscavenge.IncrementalGarbageCollectorMXBean",
+      "type": "com.oracle.svm.core.genscavenge.HeapImplMemoryMXBean",
       "allPublicConstructors": true
     },
     {
       "condition": {
-        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateCompilationMXBean"
+        "typeReached": 
"com.oracle.svm.core.genscavenge.GenScavengeMemoryPoolMXBeans"
       },
-      "type": "com.oracle.svm.core.jdk.management.SubstrateCompilationMXBean",
+      "type": 
"com.oracle.svm.core.genscavenge.GenScavengeMemoryPoolMXBeans$SurvivorMemoryPoolMXBean",
       "allPublicConstructors": true
     },
     {
       "condition": {
-        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateThreadMXBean"
+        "typeReached": 
"com.oracle.svm.core.genscavenge.IncrementalGarbageCollectorMXBean"
       },
-      "type": "com.oracle.svm.core.jdk.management.SubstrateThreadMXBean",
+      "type": 
"com.oracle.svm.core.genscavenge.IncrementalGarbageCollectorMXBean",
       "allPublicConstructors": true
     },
     {
       "condition": {
-        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateRuntimeMXBean"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "com.oracle.svm.core.jdk.management.SubstrateRuntimeMXBean",
-      "allPublicConstructors": true
+      "type": "com.sun.management.OperatingSystemMXBean",
+      "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": 
"com.oracle.svm.core.jdk.management.SubstrateClassLoadingMXBean"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "com.oracle.svm.core.jdk.management.SubstrateClassLoadingMXBean",
+      "type": "com.sun.management.internal.OperatingSystemImpl",
       "allPublicConstructors": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.management.GarbageCollectorMXBean"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "com.sun.management.GarbageCollectorMXBean",
+      "type": "com.sun.management.ThreadMXBean",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.management.ThreadMXBean"
+        "typeReached": "com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory"
       },
-      "type": "com.sun.management.ThreadMXBean",
+      "type": "com.sun.management.GcInfo",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.management.OperatingSystemMXBean"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "com.sun.management.OperatingSystemMXBean",
+      "type": "com.sun.management.GarbageCollectorMXBean",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.management.UnixOperatingSystemMXBean"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "com.sun.management.UnixOperatingSystemMXBean",
+      "type": "java.lang.Deprecated",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.management.internal.OperatingSystemImpl"
+        "typeReached": "sun.net.www.protocol.http.HttpURLConnection"
       },
-      "type": "com.sun.management.internal.OperatingSystemImpl",
-      "allPublicMethods": true,
+      "type": "java.net.SocketException",
       "allPublicConstructors": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
+        "typeReached": "java.util.Collections"
       },
-      "type": "java.lang.Deprecated",
-      "allPublicMethods": true
+      "type": "java.util.Collections$UnmodifiableMap",
+      "allDeclaredFields": true,
+      "allDeclaredMethods": true,
+      "allDeclaredConstructors": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
+        "typeReached": "java.util.Collections"
       },
-      "type": "java.lang.management.ClassLoadingMXBean",
-      "allPublicMethods": true
+      "type": "java.util.Collections$SingletonMap",
+      "allDeclaredFields": true,
+      "allDeclaredMethods": true,
+      "allDeclaredConstructors": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
+        "typeReached": "java.util.AbstractList"
       },
-      "type": "java.lang.management.MonitorInfo",
-      "allPublicMethods": true
+      "type": "java.util.AbstractList",
+      "allDeclaredFields": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
+        "typeReached": "java.util.Arrays"
       },
-      "type": "java.lang.management.MemoryMXBean",
-      "allPublicMethods": true
+      "type": "java.util.Arrays$ArrayList",
+      "allDeclaredFields": true,
+      "allDeclaredMethods": true,
+      "allDeclaredConstructors": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
+        "typeReached": "java.util.RandomAccess"
       },
-      "type": "java.lang.management.MemoryPoolMXBean",
-      "allPublicMethods": true
+      "type": "java.util.RandomAccess",
+      "allDeclaredMethods": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.jmx.mbeanserver.MXBeanIntrospector"
+        "typeReached": "java.util.HashSet"
       },
-      "type": "com.sun.management.GcInfo",
+      "type": "java.util.HashSet",
+      "allDeclaredMethods": true,
+      "allDeclaredConstructors": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory"
+      },
+      "type": "java.lang.StackTraceElement",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.lang.management.CompilationMXBean"
+        "typeReached": "java.net.HttpURLConnection"
+      },
+      "type": "java.net.SocketTimeoutException",
+      "allPublicConstructors": true
+    },
+    {
+      "condition": {
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
       "type": "java.lang.management.CompilationMXBean",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.lang.management.MemoryManagerMXBean"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "java.lang.management.MemoryManagerMXBean",
+      "type": "java.lang.management.ClassLoadingMXBean",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.lang.management.LockInfo"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "java.lang.management.LockInfo",
+      "type": "java.lang.management.MemoryPoolMXBean",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "com.sun.jmx.mbeanserver.MXBeanIntrospector"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "java.lang.management.MemoryUsage",
+      "type": "java.lang.management.MemoryManagerMXBean",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.lang.management.ThreadInfo"
+        "typeReached": "com.sun.jmx.mbeanserver.MBeanIntrospector"
       },
-      "type": "java.lang.management.ThreadInfo",
+      "type": "java.lang.management.MemoryMXBean",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.lang.StackTraceElement"
+        "typeReached": "com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory"
       },
-      "type": "java.lang.StackTraceElement",
+      "type": "java.lang.management.ThreadInfo",
       "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.net.SocketException"
+        "typeReached": "com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory"
       },
-      "type": "java.net.SocketException",
-      "methods": [
-        {
-          "name": "<init>",
-          "parameterTypes": [
-            "java.lang.String"
-          ]
-        }
-      ]
+      "type": "java.lang.management.LockInfo",
+      "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.net.SocketTimeoutException"
+        "typeReached": "com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory"
       },
-      "type": "java.net.SocketTimeoutException",
-      "methods": [
-        {
-          "name": "<init>",
-          "parameterTypes": [
-            "java.lang.String"
-          ]
-        }
-      ]
+      "type": "java.lang.management.MonitorInfo",
+      "allPublicMethods": true
     },
     {
       "condition": {
-        "typeReached": "java.util.HashSet"
+        "typeReached": "com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory"
       },
-      "type": "java.util.HashSet",
-      "allDeclaredMethods": true,
-      "allDeclaredConstructors": true
+      "type": "java.lang.management.MemoryUsage",
+      "allPublicMethods": true
     },
     {
       "condition": {
@@ -541,14 +560,7 @@
         "typeReached": "sun.security.provider.SecureRandom"
       },
       "type": "sun.security.provider.SecureRandom",
-      "methods": [
-        {
-          "name": "<init>",
-          "parameterTypes": [
-            "java.security.SecureRandomParameters"
-          ]
-        }
-      ]
+      "allPublicConstructors": true
     },
     {
       "condition": {
@@ -564,7 +576,7 @@
   "resources": [
     {
       "condition": {
-        "typeReached": 
"org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader"
+        "typeReached": 
"org.apache.shardingsphere.database.connector.core.metadata.data.loader.MetaDataLoader"
       },
       "glob": "META-INF/services/org.apache.shardingsphere.*"
     },
@@ -585,6 +597,12 @@
         "typeReached": "javax.xml.parsers.FactoryFinder"
       },
       "glob": "META-INF/services/javax.xml.parsers.SAXParserFactory"
+    },
+    {
+      "condition": {
+        "typeReached": "java.net.spi.InetAddressResolverProvider"
+      },
+      "glob": "META-INF/services/java.net.spi.InetAddressResolverProvider"
     }
   ],
   "bundles": [
@@ -593,12 +611,6 @@
         "typeReached": "org.opengauss.util.GT"
       },
       "name": "org.opengauss.translation.messages"
-    },
-    {
-      "condition": {
-        "typeReached": "org.postgresql.util.GT"
-      },
-      "name": "org.postgresql.translation.messages"
     }
   ]
 }
diff --git 
a/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.testcontainers/testcontainers-junit-jupiter/2.0.1/reachability-metadata.json
 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.testcontainers/testcontainers-junit-jupiter/2.0.1/reachability-metadata.json
new file mode 100644
index 00000000000..4f8fdb5bb94
--- /dev/null
+++ 
b/infra/reachability-metadata/src/main/resources/META-INF/native-image/org.testcontainers/testcontainers-junit-jupiter/2.0.1/reachability-metadata.json
@@ -0,0 +1,303 @@
+{
+  "reflection": [
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
+      },
+      "type": "org.testcontainers.containers.ClickHouseProvider"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
+      },
+      "type": "org.testcontainers.containers.MSSQLServerContainerProvider"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
+      },
+      "type": "org.testcontainers.containers.PgVectorContainerProvider"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
+      },
+      "type": "org.testcontainers.containers.PostgisContainerProvider"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
+      },
+      "type": "org.testcontainers.containers.PostgreSQLContainerProvider"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
+      },
+      "type": "org.testcontainers.containers.TimescaleDBContainerProvider"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.DockerClientFactory"
+      },
+      "type": 
"org.testcontainers.dockerclient.DockerDesktopClientProviderStrategy"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.DockerClientFactory"
+      },
+      "type": 
"org.testcontainers.dockerclient.DockerMachineClientProviderStrategy"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.DockerClientFactory"
+      },
+      "type": 
"org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.DockerClientFactory"
+      },
+      "type": 
"org.testcontainers.dockerclient.NpipeSocketClientProviderStrategy"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.dockerclient.DockerClientProviderStrategy"
+      },
+      "type": 
"org.testcontainers.dockerclient.NpipeSocketClientProviderStrategy",
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.DockerClientFactory"
+      },
+      "type": 
"org.testcontainers.dockerclient.RootlessDockerClientProviderStrategy"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.DockerClientFactory"
+      },
+      "type": 
"org.testcontainers.dockerclient.TestcontainersHostPropertyClientProviderStrategy"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.DockerClientFactory"
+      },
+      "type": 
"org.testcontainers.dockerclient.UnixSocketClientProviderStrategy"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.fasterxml.jackson.databind.ext.Java7Support"
+      },
+      "type": 
"org.testcontainers.shaded.com.fasterxml.jackson.databind.ext.Java7SupportImpl"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.fasterxml.jackson.databind.util.ClassUtil"
+      },
+      "type": 
"org.testcontainers.shaded.com.fasterxml.jackson.databind.ext.Java7SupportImpl",
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.dockerclient.DockerClientProviderStrategy"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.DockerConfigFile",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.DockerConfigFile"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.fasterxml.jackson.databind.ObjectMapper"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.DockerConfigFile",
+      "methods": [
+        {
+          "name": "<init>",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.github.dockerjava.core.DefaultDockerClientConfig$Builder"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.DockerConfigFile"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.github.dockerjava.core.DockerConfigFile"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.DockerConfigFile"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.AbstrAsyncDockerCmd"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.containers.ExecInContainerPattern"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.AbstrDockerCmd"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.containers.Network$NetworkImpl"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.CreateNetworkCmdImpl"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.github.dockerjava.core.exec.CreateNetworkCmdExec"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.CreateNetworkCmdImpl",
+      "methods": [
+        {
+          "name": "getAttachable",
+          "parameterTypes": []
+        },
+        {
+          "name": "getCheckDuplicate",
+          "parameterTypes": []
+        },
+        {
+          "name": "getDriver",
+          "parameterTypes": []
+        },
+        {
+          "name": "getEnableIPv6",
+          "parameterTypes": []
+        },
+        {
+          "name": "getInternal",
+          "parameterTypes": []
+        },
+        {
+          "name": "getIpam",
+          "parameterTypes": []
+        },
+        {
+          "name": "getLabels",
+          "parameterTypes": []
+        },
+        {
+          "name": "getName",
+          "parameterTypes": []
+        },
+        {
+          "name": "getOptions",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.containers.ExecInContainerPattern"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.ExecCreateCmdImpl",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.ExecCreateCmdImpl"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.ExecCreateCmdImpl"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.github.dockerjava.core.exec.ExecCreateCmdExec"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.ExecCreateCmdImpl",
+      "methods": [
+        {
+          "name": "getContainerId",
+          "parameterTypes": []
+        },
+        {
+          "name": "getEnv",
+          "parameterTypes": []
+        },
+        {
+          "name": "getPrivileged",
+          "parameterTypes": []
+        },
+        {
+          "name": "getUser",
+          "parameterTypes": []
+        },
+        {
+          "name": "getWorkingDir",
+          "parameterTypes": []
+        }
+      ]
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder"
+      },
+      "type": 
"org.testcontainers.shaded.com.github.dockerjava.core.command.ExecStartCmdImpl",
+      "allDeclaredFields": true
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.containers.GenericContainer"
+      },
+      "type": 
"org.testcontainers.shaded.org.awaitility.core.ConditionFactory$1"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.org.awaitility.core.ConditionFactory"
+      },
+      "type": 
"org.testcontainers.shaded.org.awaitility.core.ConditionFactory$1"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.org.awaitility.core.ConditionFactory$1"
+      },
+      "type": 
"org.testcontainers.shaded.org.awaitility.core.ConditionFactory$1"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.shaded.org.hamcrest.TypeSafeMatcher"
+      },
+      "type": 
"org.testcontainers.shaded.org.awaitility.core.ConditionFactory$1"
+    },
+    {
+      "condition": {
+        "typeReached": 
"org.testcontainers.shaded.org.hamcrest.internal.ReflectiveTypeFinder"
+      },
+      "type": 
"org.testcontainers.shaded.org.awaitility.core.ConditionFactory$1"
+    }
+  ],
+  "resources": [
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
+      },
+      "glob": "META-INF/services/org.testcontainers.**"
+    },
+    {
+      "condition": {
+        "typeReached": "org.testcontainers.utility.ClasspathScanner"
+      },
+      "glob": "testcontainers.properties"
+    }
+  ]
+}
diff --git a/pom.xml b/pom.xml
index 65f1a3486c7..f00b54ef3d9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -82,7 +82,7 @@
         <caffeine.version>2.9.3</caffeine.version>
         
<transmittable-thread-local.version>2.14.2</transmittable-thread-local.version>
         
-        <antlr4.version>4.10.1</antlr4.version>
+        <antlr4.version>4.13.2</antlr4.version>
         <snakeyaml.version>2.2</snakeyaml.version>
         <gson.version>2.10.1</gson.version>
         <jackson.version>2.16.1</jackson.version>
@@ -124,7 +124,7 @@
         <h2.version>2.2.224</h2.version>
         <opengauss.version>3.1.0-og</opengauss.version>
         <mariadb-java-client.version>2.4.2</mariadb-java-client.version>
-        <clickhouse-jdbc.version>0.6.3</clickhouse-jdbc.version>
+        <clickhouse-jdbc.version>0.9.4</clickhouse-jdbc.version>
         <hive-jdbc.version>4.0.1</hive-jdbc.version>
         
<hive-server2-jdbc-driver-thin.version>1.8.2</hive-server2-jdbc-driver-thin.version>
         <presto.version>0.296</presto.version>
@@ -561,7 +561,7 @@
                 <groupId>com.clickhouse</groupId>
                 <artifactId>clickhouse-jdbc</artifactId>
                 <version>${clickhouse-jdbc.version}</version>
-                <classifier>http</classifier>
+                <classifier>all</classifier>
                 <scope>test</scope>
             </dependency>
             <dependency>
diff --git a/test/e2e/operation/pipeline/pom.xml 
b/test/e2e/operation/pipeline/pom.xml
index 63f73b54dfa..b8aa2ba43cc 100644
--- a/test/e2e/operation/pipeline/pom.xml
+++ b/test/e2e/operation/pipeline/pom.xml
@@ -164,7 +164,7 @@
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
-            <artifactId>postgresql</artifactId>
+            <artifactId>testcontainers-postgresql</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git a/test/native/native-image-filter/extra-filter.json 
b/test/native/native-image-filter/extra-filter.json
index 074ec8da147..f9bced562d1 100644
--- a/test/native/native-image-filter/extra-filter.json
+++ b/test/native/native-image-filter/extra-filter.json
@@ -4,8 +4,6 @@
 
     {"excludeClasses": "android.app.**"},
     {"excludeClasses": "com.**"},
-    {"includeClasses": "com.oracle.svm.core.**"},
-    {"includeClasses": "com.sun.management.**"},
     {"excludeClasses": "ch.qos.logback.**"},
     {"excludeClasses": "groovy.**"},
     {"excludeClasses": "io.**"},
@@ -14,11 +12,14 @@
     {"excludeClasses": "libcore.io.**"},
     {"excludeClasses": "net.bytebuddy.**"},
     {"excludeClasses": "org.**"},
-    {"includeClasses": "org.apache.shardingsphere.**"},
     {"excludeClasses": "sun.**"},
-    {"includeClasses": "sun.security.provider.SecureRandom"},
     {"excludeClasses": "JdkLogger"},
 
+    {"includeClasses": "com.oracle.svm.core.**"},
+    {"includeClasses": "com.sun.management.**"},
+    {"includeClasses": "org.apache.shardingsphere.**"},
+    {"includeClasses": "sun.security.provider.SecureRandom"},
+
     {"excludeClasses": "org.apache.shardingsphere.test.natived.**"}
   ],
   "regexRules": [
diff --git a/test/native/pom.xml b/test/native/pom.xml
index 4867e65049d..9994b917328 100644
--- a/test/native/pom.xml
+++ b/test/native/pom.xml
@@ -96,7 +96,7 @@
         <dependency>
             <groupId>com.clickhouse</groupId>
             <artifactId>clickhouse-jdbc</artifactId>
-            <classifier>http</classifier>
+            <classifier>all</classifier>
             <scope>test</scope>
         </dependency>
         <dependency>
@@ -118,22 +118,22 @@
         
         <dependency>
             <groupId>org.testcontainers</groupId>
-            <artifactId>junit-jupiter</artifactId>
+            <artifactId>testcontainers-junit-jupiter</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
-            <artifactId>postgresql</artifactId>
+            <artifactId>testcontainers-postgresql</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
-            <artifactId>mssqlserver</artifactId>
+            <artifactId>testcontainers-mssqlserver</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.testcontainers</groupId>
-            <artifactId>clickhouse</artifactId>
+            <artifactId>testcontainers-clickhouse</artifactId>
             <scope>test</scope>
         </dependency>
         <dependency>
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java
index 3a2913247fa..9c12cab20ef 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/TestShardingService.java
@@ -27,10 +27,10 @@ import 
org.apache.shardingsphere.test.natived.commons.repository.OrderRepository
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
-import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.LongStream;
@@ -68,63 +68,36 @@ public final class TestShardingService {
     }
     
     /**
-     * Process success in ClickHouse. ClickHouse JDBC Driver does not support 
the use of transactions.
+     * Process success in ClickHouse.
+     * ClickHouse JDBC Driver does not support the use of transactions.
+     * Databases like ClickHouse do not support returning auto generated keys 
after executing SQL,
+     * see <a 
href="https://github.com/ClickHouse/ClickHouse/issues/56228";>ClickHouse/ClickHouse#56228</a>
 .
+     * TODO The current ShardingSphere parsing of ClickHouse's `INNER JOIN` 
syntax has shortcomings,
+     *  and it returns incorrect query results for SQL statements such as 
`SELECT i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id`.
      *
      * @throws SQLException An exception that provides information on a 
database access error or other errors
      */
     public void processSuccessInClickHouse() throws SQLException {
-        Collection<Long> orderIds = insertData(Statement.NO_GENERATED_KEYS);
-        assertQueryInClickHouse();
+        Collection<Long> orderIds = insertDataWithoutGeneratedKeys();
+        assertQueryLoose();
         deleteDataInClickHouse(orderIds);
         assertTrue(orderRepository.selectAll().isEmpty());
         assertTrue(orderItemRepository.selectAll().isEmpty());
         assertTrue(addressRepository.selectAll().isEmpty());
     }
     
-    private void assertQueryInClickHouse() throws SQLException {
-        Collection<Order> orders = orderRepository.selectAll();
-        
assertThat(orders.stream().map(Order::getOrderId).collect(Collectors.toList()), 
not(empty()));
-        
assertThat(orders.stream().map(Order::getOrderType).collect(Collectors.toList()),
-                containsInAnyOrder(0, 1, 0, 1, 0, 1, 0, 1, 0, 1));
-        
assertThat(orders.stream().map(Order::getUserId).collect(Collectors.toList()),
-                containsInAnyOrder(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
-        
assertThat(orders.stream().map(Order::getAddressId).collect(Collectors.toList()),
-                containsInAnyOrder(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L));
-        
assertThat(orders.stream().map(Order::getStatus).collect(Collectors.toList()),
-                is(IntStream.range(1, 11).mapToObj(i -> 
"INSERT_TEST").collect(Collectors.toList())));
-        Collection<OrderItem> orderItems = orderItemRepository.selectAll();
-        
assertThat(orderItems.stream().map(OrderItem::getOrderItemId).collect(Collectors.toList()),
 not(empty()));
-        
assertThat(orderItems.stream().map(OrderItem::getOrderId).collect(Collectors.toList()),
 not(empty()));
-        
assertThat(orderItems.stream().map(OrderItem::getUserId).collect(Collectors.toList()),
-                containsInAnyOrder(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
-        
assertThat(orderItems.stream().map(OrderItem::getPhone).collect(Collectors.toList()),
-                is(IntStream.range(1, 11).mapToObj(i -> 
"13800000001").collect(Collectors.toList())));
-        
assertThat(orderItems.stream().map(OrderItem::getStatus).collect(Collectors.toList()),
-                is(IntStream.range(1, 11).mapToObj(i -> 
"INSERT_TEST").collect(Collectors.toList())));
-        assertThat(new HashSet<>(addressRepository.selectAll()),
-                is(LongStream.range(1L, 11L).mapToObj(each -> new 
Address(each, "address_test_" + each)).collect(Collectors.toSet())));
-    }
-    
-    private void deleteDataInClickHouse(final Collection<Long> orderIds) 
throws SQLException {
-        long count = 1L;
-        for (Long each : orderIds) {
-            orderRepository.deleteInClickHouse(each);
-            orderItemRepository.deleteInClickHouse(each);
-            addressRepository.deleteInClickHouse(count++);
-        }
-    }
-    
     /**
      * Process success in Hive.
      * Hive has not fully supported BEGIN, COMMIT, and ROLLBACK. Refer to <a 
href="https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions";>Hive 
Transactions</a>.
      * So ShardingSphere should not use {@link 
OrderItemRepository#assertRollbackWithTransactions()}
-     * TODO It looks like HiveServer2 insert statements are inserted out of 
order. Waiting for further investigation.
-     *  The result of the insert is not currently asserted.
+     * TODO The current ShardingSphere parsing of HiveServer2's `INNER JOIN` 
syntax has shortcomings,
+     *  and it returns incorrect query results for SQL statements such as 
`SELECT i.* FROM t_order o, t_order_item i WHERE o.order_id = i.order_id`.
      *
      * @throws SQLException An exception that provides information on a 
database access error or other errors
      */
     public void processSuccessInHive() throws SQLException {
-        Collection<Long> orderIds = 
insertData(Statement.RETURN_GENERATED_KEYS);
+        Collection<Long> orderIds = insertData();
+        assertQueryLoose();
         deleteData(orderIds);
         assertTrue(orderRepository.selectAll().isEmpty());
         assertTrue(orderItemRepository.selectAll().isEmpty());
@@ -142,22 +115,71 @@ public final class TestShardingService {
      * @throws SQLException SQL exception
      */
     public void processSuccessWithoutTransactions() throws SQLException {
-        Collection<Long> orderIds = 
insertData(Statement.RETURN_GENERATED_KEYS);
-        assertQueryInClickHouse();
+        Collection<Long> orderIds = insertData();
+        assertQuery();
         deleteData(orderIds);
         assertTrue(orderRepository.selectAll().isEmpty());
         assertTrue(orderItemRepository.selectAll().isEmpty());
         assertTrue(addressRepository.selectAll().isEmpty());
     }
     
+    private void assertQuery() throws SQLException {
+        assertQueryInTOrder();
+        assertQueryInTOrderItem(orderItemRepository.selectAll());
+        assertQueryInTAddress();
+    }
+    
+    private void assertQueryLoose() throws SQLException {
+        assertQueryInTOrder();
+        assertQueryInTOrderItem(orderItemRepository.selectAllLoose());
+        assertQueryInTAddress();
+    }
+    
+    private void assertQueryInTOrder() throws SQLException {
+        List<Order> orders = orderRepository.selectAll();
+        
assertThat(orders.stream().map(Order::getOrderId).collect(Collectors.toList()), 
not(empty()));
+        
assertThat(orders.stream().map(Order::getOrderType).collect(Collectors.toList()),
+                containsInAnyOrder(0, 1, 0, 1, 0, 1, 0, 1, 0, 1));
+        
assertThat(orders.stream().map(Order::getUserId).collect(Collectors.toList()),
+                containsInAnyOrder(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
+        
assertThat(orders.stream().map(Order::getAddressId).collect(Collectors.toList()),
+                containsInAnyOrder(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L));
+        
assertThat(orders.stream().map(Order::getStatus).collect(Collectors.toList()),
+                is(IntStream.range(1, 11).mapToObj(i -> 
"INSERT_TEST").collect(Collectors.toList())));
+    }
+    
+    private void assertQueryInTOrderItem(final List<OrderItem> orderItems) {
+        
assertThat(orderItems.stream().map(OrderItem::getOrderItemId).collect(Collectors.toList()),
 not(empty()));
+        
assertThat(orderItems.stream().map(OrderItem::getOrderId).collect(Collectors.toList()),
 not(empty()));
+        
assertThat(orderItems.stream().map(OrderItem::getUserId).collect(Collectors.toList()),
+                containsInAnyOrder(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
+        
assertThat(orderItems.stream().map(OrderItem::getPhone).collect(Collectors.toList()),
+                is(IntStream.range(1, 11).mapToObj(i -> 
"13800000001").collect(Collectors.toList())));
+        
assertThat(orderItems.stream().map(OrderItem::getStatus).collect(Collectors.toList()),
+                is(IntStream.range(1, 11).mapToObj(i -> 
"INSERT_TEST").collect(Collectors.toList())));
+    }
+    
+    private void assertQueryInTAddress() throws SQLException {
+        assertThat(new HashSet<>(addressRepository.selectAll()),
+                is(LongStream.range(1L, 11L).mapToObj(each -> new 
Address(each, "address_test_" + each)).collect(Collectors.toSet())));
+    }
+    
+    private void deleteDataInClickHouse(final Collection<Long> orderIds) 
throws SQLException {
+        long count = 1L;
+        for (Long each : orderIds) {
+            orderRepository.deleteInClickHouse(each);
+            orderItemRepository.deleteInClickHouse(each);
+            addressRepository.deleteInClickHouse(count++);
+        }
+    }
+    
     /**
      * Insert data.
      *
-     * @param autoGeneratedKeys a flag indicating whether auto-generated keys 
should be returned; one of {@code Statement.RETURN_GENERATED_KEYS} or {@code 
Statement.NO_GENERATED_KEYS}
      * @return orderId of the insert statement
      * @throws SQLException An exception that provides information on a 
database access error or other errors
      */
-    public Collection<Long> insertData(final int autoGeneratedKeys) throws 
SQLException {
+    public Collection<Long> insertData() throws SQLException {
         Collection<Long> result = new ArrayList<>(10);
         for (int i = 1; i <= 10; i++) {
             Order order = new Order();
@@ -165,13 +187,13 @@ public final class TestShardingService {
             order.setOrderType(i % 2);
             order.setAddressId(i);
             order.setStatus("INSERT_TEST");
-            orderRepository.insert(order, autoGeneratedKeys);
+            orderRepository.insert(order);
             OrderItem orderItem = new OrderItem();
             orderItem.setOrderId(order.getOrderId());
             orderItem.setUserId(i);
             orderItem.setPhone("13800000001");
             orderItem.setStatus("INSERT_TEST");
-            orderItemRepository.insert(orderItem, autoGeneratedKeys);
+            orderItemRepository.insert(orderItem);
             Address address = new Address((long) i, "address_test_" + i);
             addressRepository.insert(address);
             result.add(order.getOrderId());
@@ -179,6 +201,35 @@ public final class TestShardingService {
         return result;
     }
     
+    /**
+     * Insert data without generated keys.
+     *
+     * @return orderId of the insert statement
+     * @throws SQLException An exception that provides information on a 
database access error or other errors
+     */
+    public Collection<Long> insertDataWithoutGeneratedKeys() throws 
SQLException {
+        for (int i = 1; i <= 10; i++) {
+            Order order = new Order();
+            order.setUserId(i);
+            order.setOrderType(i % 2);
+            order.setAddressId(i);
+            order.setStatus("INSERT_TEST");
+            orderRepository.insertWithoutGeneratedKeys(order);
+            Address address = new Address((long) i, "address_test_" + i);
+            addressRepository.insert(address);
+        }
+        List<Long> result = 
orderRepository.selectAll().stream().map(Order::getOrderId).collect(Collectors.toList());
+        for (int i = 1; i <= 10; i++) {
+            OrderItem orderItem = new OrderItem();
+            orderItem.setOrderId(result.get(i - 1));
+            orderItem.setUserId(i);
+            orderItem.setPhone("13800000001");
+            orderItem.setStatus("INSERT_TEST");
+            orderItemRepository.insertWithoutGeneratedKeys(orderItem);
+        }
+        return result;
+    }
+    
     /**
      * Delete data.
      *
@@ -206,7 +257,7 @@ public final class TestShardingService {
     }
     
     /**
-     * Clean environment in Firebird.
+     * Clean environment in Firebird. See <a 
href="https://github.com/FirebirdSQL/firebird/issues/4203";>FirebirdSQL/firebird#4203</a>.
      *
      * @throws SQLException An exception that provides information on a 
database access error or other errors
      */
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderItemRepository.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderItemRepository.java
index eb5859e035b..f55c5072696 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderItemRepository.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderItemRepository.java
@@ -231,24 +231,10 @@ public final class OrderItemRepository {
      * @throws SQLException SQL Exception
      */
     public Long insert(final OrderItem orderItem) throws SQLException {
-        return insert(orderItem, Statement.RETURN_GENERATED_KEYS);
-    }
-    
-    /**
-     * insert OrderItem to table. Databases like ClickHouse do not support 
returning auto generated keys after executing SQL,
-     * see <a 
href="https://github.com/ClickHouse/ClickHouse/issues/56228";>ClickHouse/ClickHouse#56228</a>
 .
-     *
-     * @param orderItem         orderItem
-     * @param autoGeneratedKeys a flag indicating whether auto-generated keys 
should be returned; one of {@code Statement.RETURN_GENERATED_KEYS} or {@code 
Statement.NO_GENERATED_KEYS}
-     * @return orderItemId of the insert statement
-     * @throws SQLException SQL exception
-     */
-    @SuppressWarnings("MagicConstant")
-    public Long insert(final OrderItem orderItem, final int autoGeneratedKeys) 
throws SQLException {
         String sql = "INSERT INTO t_order_item (order_id, user_id, phone, 
status) VALUES (?, ?, ?, ?)";
         try (
                 Connection connection = dataSource.getConnection();
-                PreparedStatement preparedStatement = 
connection.prepareStatement(sql, autoGeneratedKeys)) {
+                PreparedStatement preparedStatement = 
connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
             preparedStatement.setLong(1, orderItem.getOrderId());
             preparedStatement.setInt(2, orderItem.getUserId());
             preparedStatement.setString(3, orderItem.getPhone());
@@ -263,6 +249,27 @@ public final class OrderItemRepository {
         return orderItem.getOrderItemId();
     }
     
+    /**
+     * insert OrderItem to table without generated keys.
+     *
+     * @param orderItem order item
+     * @throws RuntimeException Runtime exception
+     */
+    public void insertWithoutGeneratedKeys(final OrderItem orderItem) {
+        String sql = "INSERT INTO t_order_item (order_id, user_id, phone, 
status) VALUES (?, ?, ?, ?)";
+        try (
+                Connection connection = dataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement(sql)) {
+            preparedStatement.setLong(1, orderItem.getOrderId());
+            preparedStatement.setInt(2, orderItem.getUserId());
+            preparedStatement.setString(3, orderItem.getPhone());
+            preparedStatement.setString(4, orderItem.getStatus());
+            preparedStatement.executeUpdate();
+        } catch (final SQLException ex) {
+            throw new RuntimeException(ex);
+        }
+    }
+    
     /**
      * delete by orderItemId.
      *
@@ -321,6 +328,31 @@ public final class OrderItemRepository {
         return result;
     }
     
+    /**
+     * select all loose. This is primarily in contrast to {@link 
OrderItemRepository#selectAll()}.
+     *
+     * @return order items
+     * @throws SQLException SQL exception
+     */
+    public List<OrderItem> selectAllLoose() throws SQLException {
+        List<OrderItem> result = new LinkedList<>();
+        try (
+                Connection connection = dataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement("SELECT * FROM t_order_item");
+                ResultSet resultSet = preparedStatement.executeQuery()) {
+            while (resultSet.next()) {
+                OrderItem orderItem = new OrderItem();
+                orderItem.setOrderItemId(resultSet.getLong(1));
+                orderItem.setOrderId(resultSet.getLong(2));
+                orderItem.setUserId(resultSet.getInt(3));
+                orderItem.setPhone(resultSet.getString(4));
+                orderItem.setStatus(resultSet.getString(5));
+                result.add(orderItem);
+            }
+        }
+        return result;
+    }
+    
     /**
      * Assert rollback with transactions.
      * This is currently just a simple test against a non-existent table 
{@code t_order_item_does_not_exist}
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderRepository.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderRepository.java
index 0e6c661c9b2..862b469965f 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderRepository.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/commons/repository/OrderRepository.java
@@ -254,37 +254,41 @@ public final class OrderRepository {
      * @throws SQLException SQL Exception
      */
     public Long insert(final Order order) throws SQLException {
-        return insert(order, Statement.RETURN_GENERATED_KEYS);
+        String sql = "INSERT INTO t_order (user_id, order_type, address_id, 
status) VALUES (?, ?, ?, ?)";
+        try (
+                Connection connection = dataSource.getConnection();
+                PreparedStatement preparedStatement = 
connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) {
+            preparedStatement.setInt(1, order.getUserId());
+            preparedStatement.setInt(2, order.getOrderType());
+            preparedStatement.setLong(3, order.getAddressId());
+            preparedStatement.setString(4, order.getStatus());
+            preparedStatement.executeUpdate();
+            try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) {
+                if (resultSet.next()) {
+                    order.setOrderId(resultSet.getLong(1));
+                }
+            }
+        }
+        return order.getOrderId();
     }
     
     /**
-     * Insert Order to table.
-     * Databases like ClickHouse do not support returning auto generated keys 
after executing SQL,
-     * see <a 
href="https://github.com/ClickHouse/ClickHouse/issues/56228";>ClickHouse/ClickHouse#56228</a>
 .
+     * Insert Order to table without generated keys.
      *
      * @param order order
-     * @param autoGeneratedKeys a flag indicating whether auto-generated keys 
should be returned; one of {@link Statement#RETURN_GENERATED_KEYS} or {@link 
Statement#NO_GENERATED_KEYS}
-     * @return order ID of the insert statement
      * @throws SQLException SQL Exception
      */
-    @SuppressWarnings("MagicConstant")
-    public Long insert(final Order order, final int autoGeneratedKeys) throws 
SQLException {
+    public void insertWithoutGeneratedKeys(final Order order) throws 
SQLException {
         String sql = "INSERT INTO t_order (user_id, order_type, address_id, 
status) VALUES (?, ?, ?, ?)";
         try (
                 Connection connection = dataSource.getConnection();
-                PreparedStatement preparedStatement = 
connection.prepareStatement(sql, autoGeneratedKeys)) {
+                PreparedStatement preparedStatement = 
connection.prepareStatement(sql)) {
             preparedStatement.setInt(1, order.getUserId());
             preparedStatement.setInt(2, order.getOrderType());
             preparedStatement.setLong(3, order.getAddressId());
             preparedStatement.setString(4, order.getStatus());
             preparedStatement.executeUpdate();
-            try (ResultSet resultSet = preparedStatement.getGeneratedKeys()) {
-                if (resultSet.next()) {
-                    order.setOrderId(resultSet.getLong(1));
-                }
-            }
         }
-        return order.getOrderId();
     }
     
     /**
diff --git 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
index 512049999bd..8fa8d6ebde0 100644
--- 
a/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
+++ 
b/test/native/src/test/java/org/apache/shardingsphere/test/natived/jdbc/databases/SQLServerTest.java
@@ -22,15 +22,12 @@ import com.zaxxer.hikari.HikariDataSource;
 import org.apache.shardingsphere.test.natived.commons.TestShardingService;
 import org.apache.shardingsphere.test.natived.commons.util.ResourceUtils;
 import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.EnabledInNativeImage;
 import org.testcontainers.jdbc.ContainerDatabaseDriver;
 
 import javax.sql.DataSource;
 import java.sql.SQLException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 @EnabledInNativeImage
 class SQLServerTest {
@@ -39,15 +36,6 @@ class SQLServerTest {
     
     private TestShardingService testShardingService;
     
-    /**
-     * Related to <a 
href="https://github.com/testcontainers/testcontainers-java/issues/3079";>testcontainers/testcontainers-java#3079</a>
-     * and {@link com.microsoft.sqlserver.jdbc.SQLServerConnection}.
-     */
-    @BeforeEach
-    void beforeEach() {
-        
Logger.getLogger("com.microsoft.sqlserver.jdbc.internals.SQLServerConnection").setLevel(Level.SEVERE);
-    }
-    
     @AfterEach
     void afterEach() throws SQLException {
         ResourceUtils.closeJdbcDataSource(logicDataSource);
diff --git 
a/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native/reachability-metadata.json
 
b/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native/reachability-metadata.json
index f775cf3df0a..be2c5d146f3 100644
--- 
a/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native/reachability-metadata.json
+++ 
b/test/native/src/test/resources/META-INF/native-image/shardingsphere-test-native/reachability-metadata.json
@@ -286,7 +286,7 @@
     },
     {
       "condition": {
-        "typeReached": 
"org.apache.shardingsphere.infra.url.classpath.ClassPathLocalFileURLLoader"
+        "typeReached": "org.testcontainers.jdbc.ContainerDatabaseDriver"
       },
       "glob": "test-native/sql/**/*.sql"
     },
diff --git a/test/native/src/test/resources/test-native/sql/clickhouse-init.sql 
b/test/native/src/test/resources/test-native/sql/clickhouse-init.sql
index 63222b52738..c290a3a08af 100644
--- a/test/native/src/test/resources/test-native/sql/clickhouse-init.sql
+++ b/test/native/src/test/resources/test-native/sql/clickhouse-init.sql
@@ -36,7 +36,7 @@ create table IF NOT EXISTS t_order_item (
     primary key (order_item_id)
     order by (order_item_id);
 CREATE TABLE IF NOT EXISTS t_address (
-    address_id   BIGINT NOT NULL,
+    address_id   Int64 NOT NULL,
     address_name VARCHAR(100) NOT NULL,
     PRIMARY      KEY (address_id)
 );
diff --git 
a/test/native/src/test/resources/test-native/yaml/jdbc/databases/clickhouse.yaml
 
b/test/native/src/test/resources/test-native/yaml/jdbc/databases/clickhouse.yaml
index 44127a21623..9f86d3b58e0 100644
--- 
a/test/native/src/test/resources/test-native/yaml/jdbc/databases/clickhouse.yaml
+++ 
b/test/native/src/test/resources/test-native/yaml/jdbc/databases/clickhouse.yaml
@@ -19,15 +19,15 @@ dataSources:
   ds_0:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:clickhouse:25.9.6.117:///demo_ds_0?TC_INITSCRIPT=test-native/sql/clickhouse-init.sql
+    jdbcUrl: 
jdbc:tc:clickhouse:25.10.3.100:///demo_ds_0?TC_INITSCRIPT=test-native/sql/clickhouse-init.sql
   ds_1:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:clickhouse:25.9.6.117:///demo_ds_1?TC_INITSCRIPT=test-native/sql/clickhouse-init.sql
+    jdbcUrl: 
jdbc:tc:clickhouse:25.10.3.100:///demo_ds_1?TC_INITSCRIPT=test-native/sql/clickhouse-init.sql
   ds_2:
     dataSourceClassName: com.zaxxer.hikari.HikariDataSource
     driverClassName: org.testcontainers.jdbc.ContainerDatabaseDriver
-    jdbcUrl: 
jdbc:tc:clickhouse:25.9.6.117:///demo_ds_2?TC_INITSCRIPT=test-native/sql/clickhouse-init.sql
+    jdbcUrl: 
jdbc:tc:clickhouse:25.10.3.100:///demo_ds_2?TC_INITSCRIPT=test-native/sql/clickhouse-init.sql
 
 rules:
   - !SHARDING
diff --git a/test/pom.xml b/test/pom.xml
index cc3c00bfbb5..4851422f2e1 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -36,7 +36,7 @@
     
     <properties>
         <glassfish-jaxb.version>2.3.9</glassfish-jaxb.version>
-        <testcontainers.version>1.21.3</testcontainers.version>
+        <testcontainers.version>2.0.1</testcontainers.version>
         <maven.deploy.skip>true</maven.deploy.skip>
     </properties>
     

Reply via email to