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 {