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 36bc0eeebce Refactor BatchDMLE2EIT logic and add MySQL
rewriteBatchedStatements param (#29827)
36bc0eeebce is described below
commit 36bc0eeebce7f67a7d5f5ca6a0345bb60e1712aa
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Wed Jan 24 17:21:56 2024 +0800
Refactor BatchDMLE2EIT logic and add MySQL rewriteBatchedStatements param
(#29827)
---
.../e2e/env/runtime/DataSourceEnvironment.java | 2 +-
.../engine/composer/BatchE2EContainerComposer.java | 5 ++-
.../test/e2e/engine/type/dml/BaseDMLE2EIT.java | 36 +++++++++-------------
.../test/e2e/engine/type/dml/BatchDMLE2EIT.java | 2 +-
4 files changed, 21 insertions(+), 24 deletions(-)
diff --git
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/DataSourceEnvironment.java
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/DataSourceEnvironment.java
index ca114712809..f67154ae3da 100644
---
a/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/DataSourceEnvironment.java
+++
b/test/e2e/env/src/test/java/org/apache/shardingsphere/test/e2e/env/runtime/DataSourceEnvironment.java
@@ -88,7 +88,7 @@ public final class DataSourceEnvironment {
case "MySQL":
return String.format(
"jdbc:mysql://%s:%s/%s?useSSL=true&requireSSL=true&enabledTLSProtocols=TLSv1.2,TLSv1.3&verifyServerCertificate=false"
- +
"&useServerPrepStmts=true&useLocalSessionState=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&allowMultiQueries=true",
+ +
"&useServerPrepStmts=true&useLocalSessionState=true&characterEncoding=utf-8&allowPublicKeyRetrieval=true&allowMultiQueries=true&rewriteBatchedStatements=true",
host, port, dataSourceName);
case "PostgreSQL":
return
String.format("jdbc:postgresql://%s:%s/%s?ssl=on&sslmode=prefer", host, port,
dataSourceName);
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 6bccb453e0e..6f3c33db546 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
@@ -28,6 +28,7 @@ import
org.apache.shardingsphere.test.e2e.framework.param.model.CaseTestParamete
import javax.xml.bind.JAXBException;
import java.io.IOException;
+import java.sql.Statement;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashSet;
@@ -66,7 +67,9 @@ public final class BatchE2EContainerComposer extends
E2EContainerComposer implem
assertThat(actualUpdateCounts.length, is(this.dataSets.size()));
int count = 0;
for (DataSet each : this.dataSets) {
- assertThat(actualUpdateCounts[count], is(each.getUpdateCount()));
+ if (Statement.SUCCESS_NO_INFO != actualUpdateCounts[count]) {
+ assertThat(actualUpdateCounts[count],
is(each.getUpdateCount()));
+ }
dataSets.add(each);
count++;
}
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 3b84a460f65..43fd0eb3be1 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
@@ -21,7 +21,6 @@ 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;
@@ -34,7 +33,6 @@ 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;
@@ -110,11 +108,22 @@ public abstract class BaseDMLE2EIT {
}
}
- private void assertDataSet(final PreparedStatement
actualPreparedStatement, final List<DataSetRow> expectedDataSetRows, final
DataSetMetaData expectedDataSetMetaData,
+ protected final void assertDataSet(final BatchE2EContainerComposer
containerComposer, final int[] actualUpdateCounts, final DatabaseType
databaseType) throws SQLException {
+ for (DataSetMetaData each :
containerComposer.getDataSet(actualUpdateCounts).getMetaDataList()) {
+ assertDataSet(containerComposer, actualUpdateCounts, each,
databaseType);
+ }
+ }
+
+ private void assertDataSet(final BatchE2EContainerComposer
containerComposer, final int[] actualUpdateCounts, final DataSetMetaData
expectedDataSetMetaData,
final DatabaseType databaseType) throws
SQLException {
- try (ResultSet actualResultSet =
actualPreparedStatement.executeQuery()) {
- assertMetaData(actualResultSet.getMetaData(),
expectedDataSetMetaData.getColumns(), databaseType);
- assertRows(actualResultSet, expectedDataSetRows, databaseType);
+ 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, expectedDataSetMetaData,
containerComposer.getDataSet(actualUpdateCounts).findRows(dataNode),
databaseType);
+ }
}
}
@@ -188,19 +197,4 @@ public abstract class BaseDMLE2EIT {
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 3605289a813..a6fe37e3807 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
@@ -54,7 +54,7 @@ class BatchDMLE2EIT extends BaseDMLE2EIT {
try (Connection connection =
containerComposer.getTargetDataSource().getConnection()) {
actualUpdateCounts =
executeBatchForPreparedStatement(testParam, connection);
}
- assertDataSets(testParam, containerComposer, actualUpdateCounts);
+ assertDataSet(containerComposer, actualUpdateCounts,
testParam.getDatabaseType());
}
}