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

strongduanmu 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 ec9d301cb9a Minor refacotr for E2E test framework (#38724)
ec9d301cb9a is described below

commit ec9d301cb9a0a7595f05390504d73992dc7f94e8
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed May 27 10:09:13 2026 +0800

    Minor refacotr for E2E test framework (#38724)
---
 .../storage/type/NativeStorageContainer.java       | 29 +++++++++++++++++++---
 .../test/e2e/sql/it/sql/dql/BaseDQLE2EIT.java      | 22 +++++++++-------
 .../dml/standard/UpdateStatementTestCase.java      |  4 +++
 3 files changed, 42 insertions(+), 13 deletions(-)

diff --git 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
index a657b09ca6c..7cdc7831c5a 100644
--- 
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
+++ 
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/container/storage/type/NativeStorageContainer.java
@@ -36,6 +36,7 @@ import javax.sql.DataSource;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
@@ -44,8 +45,11 @@ import java.util.Map;
  */
 public final class NativeStorageContainer implements StorageContainer {
     
+    private static final Collection<String> INITIALIZED_DATABASES = new 
HashSet<>();
+    
     private final NativeDatabaseEnvironment env;
     
+    @Getter
     private final DatabaseType databaseType;
     
     private final String scenario;
@@ -73,10 +77,26 @@ public final class NativeStorageContainer implements 
StorageContainer {
     }
     
     private void initDatabase() {
-        if (null != option) {
-            DataSource dataSource = 
StorageContainerUtils.generateDataSource(option.getConnectOption().getURL(env.getHost(),
 env.getPort(databaseType)), env.getUser(), env.getPassword(), 2);
-            new MountSQLResourceGenerator(option.getType(), 
option.getCreateOption()).generate(0, scenario).keySet().forEach(each -> 
SQLScriptUtils.execute(dataSource, each));
+        if (null == option) {
+            return;
         }
+        synchronized (INITIALIZED_DATABASES) {
+            String initDatabaseCacheKey = getInitDatabaseCacheKey();
+            if (!INITIALIZED_DATABASES.contains(initDatabaseCacheKey)) {
+                initDatabase(initDatabaseCacheKey);
+            }
+        }
+    }
+    
+    private void initDatabase(final String initDatabaseCacheKey) {
+        DataSource dataSource = 
StorageContainerUtils.generateDataSource(option.getConnectOption().getURL(env.getHost(),
 env.getPort(databaseType)),
+                env.getUser(), env.getPassword(), 2);
+        new MountSQLResourceGenerator(option.getType(), 
option.getCreateOption()).generate(0, scenario).keySet().forEach(each -> 
SQLScriptUtils.execute(dataSource, each));
+        INITIALIZED_DATABASES.add(initDatabaseCacheKey);
+    }
+    
+    private String getInitDatabaseCacheKey() {
+        return String.join(":", String.valueOf(scenario), 
databaseType.getType(), env.getHost(), 
String.valueOf(env.getPort(databaseType)));
     }
     
     private Map<String, DataSource> createDataSourceMap(final Type type) {
@@ -86,7 +106,8 @@ public final class NativeStorageContainer implements 
StorageContainer {
     private Map<String, DataSource> getDataSourceMap(final Collection<String> 
databaseNames) {
         Map<String, DataSource> result = new HashMap<>(databaseNames.size(), 
1F);
         for (String each : databaseNames) {
-            DataSource dataSource = 
StorageContainerUtils.generateDataSource(option.getConnectOption().getURL(env.getHost(),
 env.getPort(databaseType), each), env.getUser(), env.getPassword(), 2);
+            DataSource dataSource = 
StorageContainerUtils.generateDataSource(option.getConnectOption().getURL(env.getHost(),
 env.getPort(databaseType), each),
+                    env.getUser(), env.getPassword(), 2);
             result.put(each, dataSource);
         }
         return result;
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/sql/it/sql/dql/BaseDQLE2EIT.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/sql/it/sql/dql/BaseDQLE2EIT.java
index 08756bfb120..c692a9c0507 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/sql/it/sql/dql/BaseDQLE2EIT.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/sql/it/sql/dql/BaseDQLE2EIT.java
@@ -89,16 +89,20 @@ public abstract class BaseDQLE2EIT implements SQLE2EIT {
     
     private void fillDataOnlyOnce(final AssertionTestParameter testParam) 
throws IOException, JAXBException {
         String cacheKey = testParam.getKey() + "-" + 
System.identityHashCode(getEnvironmentEngine().getActualDataSourceMap());
-        if (!FILLED_SUITES.contains(cacheKey)) {
-            synchronized (FILLED_SUITES) {
-                if (!FILLED_SUITES.contains(cacheKey)) {
-                    new DataSetEnvironmentManager(
-                            new ScenarioDataPath(testParam.getScenario(), 
Type.ACTUAL).getDataSetFile(), getEnvironmentEngine().getActualDataSourceMap(), 
testParam.getDatabaseType()).fillData();
-                    new DataSetEnvironmentManager(
-                            new ScenarioDataPath(testParam.getScenario(), 
Type.EXPECTED).getDataSetFile(), 
getEnvironmentEngine().getExpectedDataSourceMap(), 
testParam.getDatabaseType()).fillData();
-                    FILLED_SUITES.add(cacheKey);
-                }
+        if (FILLED_SUITES.contains(cacheKey)) {
+            return;
+        }
+        synchronized (FILLED_SUITES) {
+            if (FILLED_SUITES.contains(cacheKey)) {
+                return;
             }
+            new DataSetEnvironmentManager(
+                    new ScenarioDataPath(testParam.getScenario(), 
Type.ACTUAL).getDataSetFile(), getEnvironmentEngine().getActualDataSourceMap(),
+                    testParam.getDatabaseType()).fillData();
+            new DataSetEnvironmentManager(
+                    new ScenarioDataPath(testParam.getScenario(), 
Type.EXPECTED).getDataSetFile(), 
getEnvironmentEngine().getExpectedDataSourceMap(),
+                    testParam.getDatabaseType()).fillData();
+            FILLED_SUITES.add(cacheKey);
         }
     }
     
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/standard/UpdateStatementTestCase.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/standard/UpdateStatementTestCase.java
index 82080592e86..f2fb8705242 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/standard/UpdateStatementTestCase.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/dml/standard/UpdateStatementTestCase.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.set.ExpectedSetClause;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.table.ExpectedTable;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.where.ExpectedWhereClause;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.segment.impl.with.ExpectedWithClause;
 
 import javax.xml.bind.annotation.XmlElement;
 
@@ -37,6 +38,9 @@ import javax.xml.bind.annotation.XmlElement;
 @Setter
 public final class UpdateStatementTestCase extends SQLParserTestCase {
     
+    @XmlElement(name = "with")
+    private ExpectedWithClause withClause;
+    
     @XmlElement
     private ExpectedTable table;
     

Reply via email to