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

chengzhang 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 ad684c2bfa1 Refactor BatchDMLE2EIT assert logic to reduce redundant 
code (#29696)
ad684c2bfa1 is described below

commit ad684c2bfa1ce12e82da780986021340987c568e
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Jan 11 13:35:56 2024 +0800

    Refactor BatchDMLE2EIT assert logic to reduce redundant code (#29696)
---
 .../engine/composer/BatchE2EContainerComposer.java | 86 +---------------------
 .../e2e/engine/type/dml/AdditionalDMLE2EIT.java    | 22 +++---
 .../test/e2e/engine/type/dml/BaseDMLE2EIT.java     | 75 +++++++++++++------
 .../test/e2e/engine/type/dml/BatchDMLE2EIT.java    |  4 +-
 .../test/e2e/engine/type/dml/GeneralDMLE2EIT.java  |  4 +-
 5 files changed, 69 insertions(+), 122 deletions(-)

diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
index a8f0e7cbac3..6bccb453e0e 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/composer/BatchE2EContainerComposer.java
@@ -17,36 +17,21 @@
 
 package org.apache.shardingsphere.test.e2e.engine.composer;
 
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.datanode.DataNode;
-import org.apache.shardingsphere.infra.expr.core.InlineExpressionParserFactory;
-import org.apache.shardingsphere.infra.util.datetime.DateTimeFormatterFactory;
 import 
org.apache.shardingsphere.test.e2e.cases.assertion.IntegrationTestCaseAssertion;
 import org.apache.shardingsphere.test.e2e.cases.dataset.DataSet;
 import org.apache.shardingsphere.test.e2e.cases.dataset.DataSetLoader;
-import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
-import 
org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
 import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
 import org.apache.shardingsphere.test.e2e.env.DataSetEnvironmentManager;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath;
 import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioDataPath.Type;
 import 
org.apache.shardingsphere.test.e2e.framework.param.model.CaseTestParameter;
 
-import javax.sql.DataSource;
 import javax.xml.bind.JAXBException;
 import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.ResultSetMetaData;
-import java.sql.SQLException;
-import java.sql.Types;
 import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashSet;
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Set;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -57,15 +42,12 @@ import static org.hamcrest.MatcherAssert.assertThat;
  */
 public final class BatchE2EContainerComposer extends E2EContainerComposer 
implements AutoCloseable {
     
-    private final DatabaseType databaseType;
-    
     private final Collection<DataSet> dataSets = new LinkedList<>();
     
     private final DataSetEnvironmentManager dataSetEnvironmentManager;
     
     public BatchE2EContainerComposer(final CaseTestParameter testParam) throws 
JAXBException, IOException {
         super(testParam);
-        databaseType = testParam.getDatabaseType();
         for (IntegrationTestCaseAssertion each : 
testParam.getTestCaseContext().getTestCase().getAssertions()) {
             
dataSets.add(DataSetLoader.load(testParam.getTestCaseContext().getParentPath(), 
testParam.getScenario(), testParam.getDatabaseType(), testParam.getMode(), 
each.getExpectedDataFile()));
         }
@@ -74,27 +56,12 @@ public final class BatchE2EContainerComposer extends 
E2EContainerComposer implem
     }
     
     /**
-     * Assert data sets.
+     * Get data set.
      * 
      * @param actualUpdateCounts actual update counts
-     * @throws SQLException SQL exception
+     * @return data set
      */
-    public void assertDataSets(final int[] actualUpdateCounts) throws 
SQLException {
-        DataSet expected = getDataSet(actualUpdateCounts);
-        assertThat("Only support single table for DML.", 
expected.getMetaDataList().size(), is(1));
-        DataSetMetaData expectedDataSetMetaData = 
expected.getMetaDataList().get(0);
-        for (String each : 
InlineExpressionParserFactory.newInstance(expectedDataSetMetaData.getDataNodes()).splitAndEvaluate())
 {
-            DataNode dataNode = new DataNode(each);
-            DataSource dataSource = 
getActualDataSourceMap().get(dataNode.getDataSourceName());
-            try (
-                    Connection connection = dataSource.getConnection();
-                    PreparedStatement preparedStatement = 
connection.prepareStatement(String.format("SELECT * FROM %s ORDER BY 1", 
dataNode.getTableName()))) {
-                assertDataSet(preparedStatement, expected.findRows(dataNode), 
expectedDataSetMetaData);
-            }
-        }
-    }
-    
-    private DataSet getDataSet(final int[] actualUpdateCounts) {
+    public DataSet getDataSet(final int[] actualUpdateCounts) {
         Collection<DataSet> dataSets = new LinkedList<>();
         assertThat(actualUpdateCounts.length, is(this.dataSets.size()));
         int count = 0;
@@ -135,53 +102,6 @@ public final class BatchE2EContainerComposer extends 
E2EContainerComposer implem
         dataSet.getRows().sort(Comparator.comparingLong(o -> 
Long.parseLong(o.splitValues(",").get(0))));
     }
     
-    private void assertDataSet(final PreparedStatement 
actualPreparedStatement, final List<DataSetRow> expectedDataSetRows, final 
DataSetMetaData expectedDataSetMetaData) throws SQLException {
-        try (ResultSet actualResultSet = 
actualPreparedStatement.executeQuery()) {
-            assertMetaData(actualResultSet.getMetaData(), 
expectedDataSetMetaData.getColumns());
-            assertRows(actualResultSet, expectedDataSetRows);
-        }
-    }
-    
-    private void assertMetaData(final ResultSetMetaData actualMetaData, final 
Collection<DataSetColumn> columnMetaDataList) throws SQLException {
-        assertThat(actualMetaData.getColumnCount(), 
is(columnMetaDataList.size()));
-        int index = 1;
-        for (DataSetColumn each : columnMetaDataList) {
-            assertThat(actualMetaData.getColumnLabel(index++), 
is(each.getName()));
-        }
-    }
-    
-    private void assertRows(final ResultSet actual, final List<DataSetRow> 
expectedDatSetRows) throws SQLException {
-        int count = 0;
-        while (actual.next()) {
-            int columnIndex = 1;
-            for (String expected : 
expectedDatSetRows.get(count).splitValues(", ")) {
-                if (Types.DATE == 
actual.getMetaData().getColumnType(columnIndex)) {
-                    if 
(!E2EContainerComposer.NOT_VERIFY_FLAG.equals(expected)) {
-                        
assertThat(DateTimeFormatterFactory.getDateFormatter().format(actual.getDate(columnIndex).toLocalDate()),
 is(expected));
-                    }
-                } else if (Types.TIMESTAMP == 
actual.getMetaData().getColumnType(columnIndex)) {
-                    
assertThat(actual.getTimestamp(columnIndex).toLocalDateTime().format(DateTimeFormatterFactory.getShortMillsFormatter()),
 is(expected));
-                } else if (Types.CHAR == 
actual.getMetaData().getColumnType(columnIndex)
-                        && ("PostgreSQL".equals(databaseType.getType()) || 
"openGauss".equals(databaseType.getType()))) {
-                    
assertThat(String.valueOf(actual.getObject(columnIndex)).trim(), is(expected));
-                } else if 
(isPostgreSQLOrOpenGaussMoney(actual.getMetaData().getColumnTypeName(columnIndex)))
 {
-                    assertThat(actual.getString(columnIndex), is(expected));
-                } else if (Types.BINARY == 
actual.getMetaData().getColumnType(columnIndex)) {
-                    assertThat(actual.getObject(columnIndex), 
is(expected.getBytes(StandardCharsets.UTF_8)));
-                } else {
-                    assertThat(String.valueOf(actual.getObject(columnIndex)), 
is(expected));
-                }
-                columnIndex++;
-            }
-            count++;
-        }
-        assertThat("Size of actual result set is different with size of 
expected dat set rows.", count, is(expectedDatSetRows.size()));
-    }
-    
-    private boolean isPostgreSQLOrOpenGaussMoney(final String columnTypeName) {
-        return "money".equalsIgnoreCase(columnTypeName) && 
("PostgreSQL".equals(databaseType.getType()) || 
"openGauss".equals(databaseType.getType()));
-    }
-    
     @Override
     public void close() {
         dataSetEnvironmentManager.cleanData();
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/AdditionalDMLE2EIT.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/AdditionalDMLE2EIT.java
index 8835d4492c9..d1c5aea6e6c 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/AdditionalDMLE2EIT.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/AdditionalDMLE2EIT.java
@@ -62,7 +62,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                     ? 
executeUpdateForStatementWithAutoGeneratedKeys(testParam, containerComposer, 
connection)
                     : 
executeUpdateForPreparedStatementWithAutoGeneratedKeys(testParam, 
containerComposer, connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     // TODO support oracle insert statement return auto generated keys
@@ -78,7 +78,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                                                                final 
SingleE2EContainerComposer containerComposer, final Connection connection) 
throws SQLException {
         try (Statement statement = connection.createStatement()) {
             int result = statement.executeUpdate(containerComposer.getSQL(), 
Statement.RETURN_GENERATED_KEYS);
-            assertGeneratedKeys(testParam, containerComposer, 
statement.getGeneratedKeys());
+            assertGeneratedKeys(containerComposer, 
statement.getGeneratedKeys(), testParam.getDatabaseType());
             return result;
         }
     }
@@ -90,7 +90,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                 preparedStatement.setObject(each.getIndex(), each.getValue());
             }
             int result = preparedStatement.executeUpdate();
-            assertGeneratedKeys(testParam, containerComposer, 
preparedStatement.getGeneratedKeys());
+            assertGeneratedKeys(containerComposer, 
preparedStatement.getGeneratedKeys(), testParam.getDatabaseType());
             return result;
         }
     }
@@ -112,7 +112,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                     ? 
executeUpdateForStatementWithColumnIndexes(containerComposer, connection)
                     : 
executeUpdateForPreparedStatementWithColumnIndexes(containerComposer, 
connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeUpdateForStatementWithColumnIndexes(final 
SingleE2EContainerComposer containerComposer, final Connection connection) 
throws SQLException {
@@ -147,7 +147,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                     ? 
executeUpdateForStatementWithColumnNames(containerComposer, connection)
                     : 
executeUpdateForPreparedStatementWithColumnNames(containerComposer, connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeUpdateForStatementWithColumnNames(final 
SingleE2EContainerComposer containerComposer, final Connection connection) 
throws SQLException {
@@ -184,7 +184,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                     ? 
executeForStatementWithoutAutoGeneratedKeys(containerComposer, connection)
                     : 
executeForPreparedStatementWithoutAutoGeneratedKeys(containerComposer, 
connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeForStatementWithoutAutoGeneratedKeys(final 
SingleE2EContainerComposer containerComposer, final Connection connection) 
throws SQLException {
@@ -223,14 +223,14 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                     ? executeForStatementWithAutoGeneratedKeys(testParam, 
containerComposer, connection)
                     : 
executeForPreparedStatementWithAutoGeneratedKeys(testParam, containerComposer, 
connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeForStatementWithAutoGeneratedKeys(final 
AssertionTestParameter testParam,
                                                          final 
SingleE2EContainerComposer containerComposer, final Connection connection) 
throws SQLException {
         try (Statement statement = connection.createStatement()) {
             assertFalse(statement.execute(containerComposer.getSQL(), 
Statement.RETURN_GENERATED_KEYS), "Not a DML statement.");
-            assertGeneratedKeys(testParam, containerComposer, 
statement.getGeneratedKeys());
+            assertGeneratedKeys(containerComposer, 
statement.getGeneratedKeys(), testParam.getDatabaseType());
             return statement.getUpdateCount();
         }
     }
@@ -242,7 +242,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                 preparedStatement.setObject(each.getIndex(), each.getValue());
             }
             assertFalse(preparedStatement.execute(), "Not a DML statement.");
-            assertGeneratedKeys(testParam, containerComposer, 
preparedStatement.getGeneratedKeys());
+            assertGeneratedKeys(containerComposer, 
preparedStatement.getGeneratedKeys(), testParam.getDatabaseType());
             return preparedStatement.getUpdateCount();
         }
     }
@@ -264,7 +264,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                     ? executeForStatementWithColumnIndexes(containerComposer, 
connection)
                     : 
executeForPreparedStatementWithColumnIndexes(containerComposer, connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeForStatementWithColumnIndexes(final 
SingleE2EContainerComposer containerComposer, final Connection connection) 
throws SQLException {
@@ -301,7 +301,7 @@ class AdditionalDMLE2EIT extends BaseDMLE2EIT {
                     ? executeForStatementWithColumnNames(containerComposer, 
connection)
                     : 
executeForPreparedStatementWithColumnNames(containerComposer, connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeForStatementWithColumnNames(final 
SingleE2EContainerComposer containerComposer, final Connection connection) 
throws SQLException {
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
index b5991082ad6..3b84a460f65 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BaseDMLE2EIT.java
@@ -17,12 +17,15 @@
 
 package org.apache.shardingsphere.test.e2e.engine.type.dml;
 
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import org.apache.shardingsphere.infra.expr.core.InlineExpressionParserFactory;
 import org.apache.shardingsphere.infra.util.datetime.DateTimeFormatterFactory;
+import org.apache.shardingsphere.test.e2e.cases.dataset.DataSet;
 import org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetColumn;
 import 
org.apache.shardingsphere.test.e2e.cases.dataset.metadata.DataSetMetaData;
 import org.apache.shardingsphere.test.e2e.cases.dataset.row.DataSetRow;
+import 
org.apache.shardingsphere.test.e2e.engine.composer.BatchE2EContainerComposer;
 import org.apache.shardingsphere.test.e2e.engine.composer.E2EContainerComposer;
 import 
org.apache.shardingsphere.test.e2e.engine.composer.SingleE2EContainerComposer;
 import org.apache.shardingsphere.test.e2e.env.DataSetEnvironmentManager;
@@ -31,6 +34,7 @@ import 
org.apache.shardingsphere.test.e2e.env.runtime.scenario.path.ScenarioData
 import 
org.apache.shardingsphere.test.e2e.framework.database.DatabaseAssertionMetaData;
 import 
org.apache.shardingsphere.test.e2e.framework.database.DatabaseAssertionMetaDataFactory;
 import 
org.apache.shardingsphere.test.e2e.framework.param.model.AssertionTestParameter;
+import 
org.apache.shardingsphere.test.e2e.framework.param.model.CaseTestParameter;
 import org.junit.jupiter.api.AfterEach;
 
 import javax.sql.DataSource;
@@ -79,35 +83,43 @@ public abstract class BaseDMLE2EIT {
         }
     }
     
-    protected final void assertDataSet(final AssertionTestParameter testParam, 
final SingleE2EContainerComposer containerComposer, final int 
actualUpdateCount) throws SQLException {
+    protected final void assertDataSet(final SingleE2EContainerComposer 
containerComposer, final int actualUpdateCount, final DatabaseType 
databaseType) throws SQLException {
         assertThat(actualUpdateCount, 
is(containerComposer.getDataSet().getUpdateCount()));
         for (DataSetMetaData each : 
containerComposer.getDataSet().getMetaDataList()) {
-            assertDataSet(testParam, containerComposer, each);
+            assertDataSet(containerComposer, each, databaseType);
         }
     }
     
-    private void assertDataSet(final AssertionTestParameter testParam, final 
SingleE2EContainerComposer containerComposer, final DataSetMetaData 
expectedDataSetMetaData) throws SQLException {
+    private void assertDataSet(final SingleE2EContainerComposer 
containerComposer, final DataSetMetaData expectedDataSetMetaData, final 
DatabaseType databaseType) throws SQLException {
         for (String each : 
InlineExpressionParserFactory.newInstance(expectedDataSetMetaData.getDataNodes()).splitAndEvaluate())
 {
             DataNode dataNode = new DataNode(each);
             DataSource dataSource = 
containerComposer.getActualDataSourceMap().get(dataNode.getDataSourceName());
             try (
                     Connection connection = dataSource.getConnection();
-                    PreparedStatement preparedStatement = 
connection.prepareStatement(generateFetchActualDataSQL(testParam, 
containerComposer, dataNode))) {
-                assertDataSet(testParam, preparedStatement, 
expectedDataSetMetaData, containerComposer.getDataSet().findRows(dataNode));
+                    PreparedStatement preparedStatement = 
connection.prepareStatement(generateFetchActualDataSQL(containerComposer, 
dataNode, databaseType))) {
+                assertDataSet(preparedStatement, expectedDataSetMetaData, 
containerComposer.getDataSet().findRows(dataNode), databaseType);
             }
         }
     }
     
-    private void assertDataSet(final AssertionTestParameter testParam,
-                               final PreparedStatement 
actualPreparedStatement, final DataSetMetaData expectedDataSetMetaData, final 
List<DataSetRow> expectedDataSetRows) throws SQLException {
+    private void assertDataSet(final PreparedStatement 
actualPreparedStatement, final DataSetMetaData expectedDataSetMetaData, final 
List<DataSetRow> expectedDataSetRows,
+                               final DatabaseType databaseType) throws 
SQLException {
         try (ResultSet actualResultSet = 
actualPreparedStatement.executeQuery()) {
-            assertMetaData(actualResultSet.getMetaData(), 
expectedDataSetMetaData.getColumns());
-            assertRows(testParam, actualResultSet, expectedDataSetRows);
+            assertMetaData(actualResultSet.getMetaData(), 
expectedDataSetMetaData.getColumns(), databaseType);
+            assertRows(actualResultSet, expectedDataSetRows, databaseType);
         }
     }
     
-    private String generateFetchActualDataSQL(final AssertionTestParameter 
testParam, final SingleE2EContainerComposer containerComposer, final DataNode 
dataNode) throws SQLException {
-        Optional<DatabaseAssertionMetaData> databaseAssertionMetaData = 
DatabaseAssertionMetaDataFactory.newInstance(testParam.getDatabaseType());
+    private void assertDataSet(final PreparedStatement 
actualPreparedStatement, final List<DataSetRow> expectedDataSetRows, final 
DataSetMetaData expectedDataSetMetaData,
+                               final DatabaseType databaseType) throws 
SQLException {
+        try (ResultSet actualResultSet = 
actualPreparedStatement.executeQuery()) {
+            assertMetaData(actualResultSet.getMetaData(), 
expectedDataSetMetaData.getColumns(), databaseType);
+            assertRows(actualResultSet, expectedDataSetRows, databaseType);
+        }
+    }
+    
+    private String generateFetchActualDataSQL(final SingleE2EContainerComposer 
containerComposer, final DataNode dataNode, final DatabaseType databaseType) 
throws SQLException {
+        Optional<DatabaseAssertionMetaData> databaseAssertionMetaData = 
DatabaseAssertionMetaDataFactory.newInstance(databaseType);
         if (databaseAssertionMetaData.isPresent()) {
             String primaryKeyColumnName = 
databaseAssertionMetaData.get().getPrimaryKeyColumnName(
                     
containerComposer.getActualDataSourceMap().get(dataNode.getDataSourceName()), 
dataNode.getTableName());
@@ -116,7 +128,7 @@ public abstract class BaseDMLE2EIT {
         return String.format("SELECT * FROM %s", dataNode.getTableName());
     }
     
-    private void assertMetaData(final ResultSetMetaData actual, final 
Collection<DataSetColumn> expected) throws SQLException {
+    private void assertMetaData(final ResultSetMetaData actual, final 
Collection<DataSetColumn> expected, final DatabaseType databaseType) throws 
SQLException {
         assertThat(actual.getColumnCount(), is(expected.size()));
         int index = 1;
         for (DataSetColumn each : expected) {
@@ -124,12 +136,12 @@ public abstract class BaseDMLE2EIT {
         }
     }
     
-    private void assertRows(final AssertionTestParameter testParam, final 
ResultSet actual, final List<DataSetRow> expected) throws SQLException {
+    private void assertRows(final ResultSet actual, final List<DataSetRow> 
expected, final DatabaseType databaseType) throws SQLException {
         int rowCount = 0;
         while (actual.next()) {
             int columnIndex = 1;
             for (String each : 
expected.get(rowCount).splitValues(DATA_COLUMN_DELIMITER)) {
-                assertValue(testParam, actual, columnIndex, each);
+                assertValue(actual, columnIndex, each, databaseType);
                 columnIndex++;
             }
             rowCount++;
@@ -137,7 +149,7 @@ public abstract class BaseDMLE2EIT {
         assertThat("Size of actual result set is different with size of 
expected dat set rows.", rowCount, is(expected.size()));
     }
     
-    private void assertValue(final AssertionTestParameter testParam, final 
ResultSet actual, final int columnIndex, final String expected) throws 
SQLException {
+    private void assertValue(final ResultSet actual, final int columnIndex, 
final String expected, final DatabaseType databaseType) throws SQLException {
         if (E2EContainerComposer.NOT_VERIFY_FLAG.equals(expected)) {
             return;
         }
@@ -146,16 +158,16 @@ public abstract class BaseDMLE2EIT {
         } else if (Arrays.asList(Types.TIME, 
Types.TIME_WITH_TIMEZONE).contains(actual.getMetaData().getColumnType(columnIndex)))
 {
             
assertThat(DateTimeFormatterFactory.getTimeFormatter().format(actual.getTime(columnIndex).toLocalTime()),
 is(expected));
         } else if (Arrays.asList(Types.TIMESTAMP, 
Types.TIMESTAMP_WITH_TIMEZONE).contains(actual.getMetaData().getColumnType(columnIndex)))
 {
-            if ("Oracle".equals(testParam.getDatabaseType().getType()) && 
"DATE".equalsIgnoreCase(actual.getMetaData().getColumnTypeName(columnIndex))) {
+            if ("Oracle".equals(databaseType.getType()) && 
"DATE".equalsIgnoreCase(actual.getMetaData().getColumnTypeName(columnIndex))) {
                 
assertThat(DateTimeFormatterFactory.getDateFormatter().format(actual.getDate(columnIndex).toLocalDate()),
 is(expected));
             } else {
                 
assertThat(DateTimeFormatterFactory.getShortMillsFormatter().format(actual.getTimestamp(columnIndex).toLocalDateTime()),
 is(expected));
             }
         } else if (Types.CHAR == 
actual.getMetaData().getColumnType(columnIndex)
-                && ("PostgreSQL".equals(testParam.getDatabaseType().getType()) 
|| "openGauss".equals(testParam.getDatabaseType().getType())
-                        || 
"Oracle".equals(testParam.getDatabaseType().getType()))) {
+                && ("PostgreSQL".equals(databaseType.getType()) || 
"openGauss".equals(databaseType.getType())
+                        || "Oracle".equals(databaseType.getType()))) {
             assertThat(String.valueOf(actual.getObject(columnIndex)).trim(), 
is(expected));
-        } else if (isPostgreSQLOrOpenGaussMoney(testParam, 
actual.getMetaData().getColumnTypeName(columnIndex))) {
+        } else if 
(isPostgreSQLOrOpenGaussMoney(actual.getMetaData().getColumnTypeName(columnIndex),
 databaseType)) {
             assertThat(actual.getString(columnIndex), is(expected));
         } else if (Types.BINARY == 
actual.getMetaData().getColumnType(columnIndex)) {
             assertThat(actual.getObject(columnIndex), 
is(expected.getBytes(StandardCharsets.UTF_8)));
@@ -164,16 +176,31 @@ public abstract class BaseDMLE2EIT {
         }
     }
     
-    private boolean isPostgreSQLOrOpenGaussMoney(final AssertionTestParameter 
testParam, final String columnTypeName) {
-        return "money".equalsIgnoreCase(columnTypeName) && 
("PostgreSQL".equals(testParam.getDatabaseType().getType()) || 
"openGauss".equals(testParam.getDatabaseType().getType()));
+    private boolean isPostgreSQLOrOpenGaussMoney(final String columnTypeName, 
final DatabaseType databaseType) {
+        return "money".equalsIgnoreCase(columnTypeName) && 
("PostgreSQL".equals(databaseType.getType()) || 
"openGauss".equals(databaseType.getType()));
     }
     
-    protected void assertGeneratedKeys(final AssertionTestParameter testParam, 
final SingleE2EContainerComposer containerComposer, final ResultSet 
generatedKeys) throws SQLException {
+    protected void assertGeneratedKeys(final SingleE2EContainerComposer 
containerComposer, final ResultSet generatedKeys, final DatabaseType 
databaseType) throws SQLException {
         if (null == containerComposer.getGeneratedKeyDataSet()) {
             return;
         }
         assertThat("Only support single table for DML.", 
containerComposer.getGeneratedKeyDataSet().getMetaDataList().size(), is(1));
-        assertMetaData(generatedKeys.getMetaData(), 
containerComposer.getGeneratedKeyDataSet().getMetaDataList().get(0).getColumns());
-        assertRows(testParam, generatedKeys, 
containerComposer.getGeneratedKeyDataSet().getRows());
+        assertMetaData(generatedKeys.getMetaData(), 
containerComposer.getGeneratedKeyDataSet().getMetaDataList().get(0).getColumns(),
 databaseType);
+        assertRows(generatedKeys, 
containerComposer.getGeneratedKeyDataSet().getRows(), databaseType);
+    }
+    
+    protected void assertDataSets(final CaseTestParameter testParam, final 
BatchE2EContainerComposer containerComposer, final int[] actualUpdateCounts) 
throws SQLException {
+        DataSet expected = containerComposer.getDataSet(actualUpdateCounts);
+        assertThat("Only support single table for DML.", 
expected.getMetaDataList().size(), is(1));
+        DataSetMetaData expectedDataSetMetaData = 
expected.getMetaDataList().get(0);
+        for (String each : 
InlineExpressionParserFactory.newInstance(expectedDataSetMetaData.getDataNodes()).splitAndEvaluate())
 {
+            DataNode dataNode = new DataNode(each);
+            DataSource dataSource = 
containerComposer.getActualDataSourceMap().get(dataNode.getDataSourceName());
+            try (
+                    Connection connection = dataSource.getConnection();
+                    PreparedStatement preparedStatement = 
connection.prepareStatement(String.format("SELECT * FROM %s ORDER BY 1", 
dataNode.getTableName()))) {
+                assertDataSet(preparedStatement, expected.findRows(dataNode), 
expectedDataSetMetaData, testParam.getDatabaseType());
+            }
+        }
     }
 }
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BatchDMLE2EIT.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BatchDMLE2EIT.java
index ad68af7ccb5..3605289a813 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BatchDMLE2EIT.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/BatchDMLE2EIT.java
@@ -39,7 +39,7 @@ import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
 
 @E2ETestCaseSettings(value = SQLCommandType.DML, batch = true)
-class BatchDMLE2EIT {
+class BatchDMLE2EIT extends BaseDMLE2EIT {
     
     @ParameterizedTest(name = "{0}")
     @EnabledIf("isEnabled")
@@ -54,7 +54,7 @@ class BatchDMLE2EIT {
             try (Connection connection = 
containerComposer.getTargetDataSource().getConnection()) {
                 actualUpdateCounts = 
executeBatchForPreparedStatement(testParam, connection);
             }
-            containerComposer.assertDataSets(actualUpdateCounts);
+            assertDataSets(testParam, containerComposer, actualUpdateCounts);
         }
     }
     
diff --git 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/GeneralDMLE2EIT.java
 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/GeneralDMLE2EIT.java
index 53da798fc02..3971140e9ab 100644
--- 
a/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/GeneralDMLE2EIT.java
+++ 
b/test/e2e/sql/src/test/java/org/apache/shardingsphere/test/e2e/engine/type/dml/GeneralDMLE2EIT.java
@@ -57,7 +57,7 @@ class GeneralDMLE2EIT extends BaseDMLE2EIT {
                     ? executeUpdateForStatement(containerComposer, connection)
                     : executeUpdateForPreparedStatement(containerComposer, 
connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeUpdateForStatement(final SingleE2EContainerComposer 
containerComposer, final Connection connection) throws SQLException {
@@ -91,7 +91,7 @@ class GeneralDMLE2EIT extends BaseDMLE2EIT {
                     ? executeForStatement(containerComposer, connection)
                     : executeForPreparedStatement(containerComposer, 
connection);
         }
-        assertDataSet(testParam, containerComposer, actualUpdateCount);
+        assertDataSet(containerComposer, actualUpdateCount, 
testParam.getDatabaseType());
     }
     
     private int executeForStatement(final SingleE2EContainerComposer 
containerComposer, final Connection connection) throws SQLException {

Reply via email to