This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 fffa28ee2ce Refactor PipelineCaseHelper generate data methods into SPI
(#37903)
fffa28ee2ce is described below
commit fffa28ee2ce2a4ab84778f65929cb4fbf76370dc
Author: Hongsheng Zhong <[email protected]>
AuthorDate: Fri Jan 30 17:40:36 2026 +0800
Refactor PipelineCaseHelper generate data methods into SPI (#37903)
* Delete unused PipelineCaseHelper.generateFullInsertData
* Move PipelineCaseHelper.generateOrderItemInsertData to IntPkOrderItemDAO
* Move PipelineCaseHelper.generateSmallOrderInsertData to
StringPkSmallOrderDAO
* Refactor PipelineCaseHelper.generateOrderInsertData into
IntPkLargeOrderSQLBuilder impls
* Refactor IntPkLargeOrderDAO.batchInsert to use IntPkLargeOrderSQLBuilder
* Refactor E2EIncrementalTask to use IntPkLargeOrderDAO
---
.../e2e/operation/pipeline/cases/cdc/CDCE2EIT.java | 4 +-
.../general/MySQLMigrationGeneralE2EIT.java | 3 +-
.../general/PostgreSQLMigrationGeneralE2EIT.java | 2 +-
.../pipeline/cases/task/E2EIncrementalTask.java | 22 ++--
.../dao/order/large/IntPkLargeOrderDAO.java | 23 ++--
.../sqlbuilder/IntPkLargeOrderSQLBuilder.java | 12 ++
.../sqlbuilder/MySQLIntPkLargeOrderSQLBuilder.java | 51 +++++++-
.../OpenGaussIntPkLargeOrderSQLBuilder.java | 59 ++++++++-
.../PostgreSQLIntPkLargeOrderSQLBuilder.java | 45 ++++++-
.../dao/order/small/StringPkSmallOrderDAO.java | 22 +++-
.../pipeline/dao/orderitem/IntPkOrderItemDAO.java | 21 +++-
.../framework/helper/PipelineCaseHelper.java | 133 ++-------------------
12 files changed, 234 insertions(+), 163 deletions(-)
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/cdc/CDCE2EIT.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/cdc/CDCE2EIT.java
index f92b1c0e620..10e7192e6c2 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/cdc/CDCE2EIT.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/cdc/CDCE2EIT.java
@@ -106,7 +106,7 @@ class CDCE2EIT {
initSchemaAndTable(containerComposer,
containerComposer.getProxyDataSource(), orderQualifiedTable, 3);
PipelineDataSource jdbcDataSource = new
PipelineDataSource(containerComposer.generateShardingSphereDataSourceFromProxy(),
containerComposer.getDatabaseType());
log.info("init data begin: {}", LocalDateTime.now());
- IntPkLargeOrderDAO orderDAO = new
IntPkLargeOrderDAO(jdbcDataSource, containerComposer.getDatabaseType(),
orderQualifiedTable);
+ IntPkLargeOrderDAO orderDAO = new
IntPkLargeOrderDAO(jdbcDataSource, containerComposer.getDatabaseType(),
orderQualifiedTable.format());
orderDAO.batchInsert(PipelineContainerComposer.TABLE_INIT_ROW_COUNT);
DataSourceExecuteUtils.executeBatch(jdbcDataSource, "INSERT INTO
t_address(id, address_name) VALUES (?,?)", Arrays.asList(new Object[]{1, "a"},
new Object[]{2, "b"}));
DataSourceExecuteUtils.executeBatch(jdbcDataSource, "INSERT INTO
t_single(id) VALUES (?)", Arrays.asList(new Object[]{1}, new Object[]{2}, new
Object[]{3}));
@@ -144,7 +144,7 @@ class CDCE2EIT {
private void initSchemaAndTable(final PipelineContainerComposer
containerComposer, final DataSource dataSource, final QualifiedTable
orderQualifiedTable, final int seconds) throws SQLException {
containerComposer.createSchema(dataSource, seconds);
- new IntPkLargeOrderDAO(dataSource,
containerComposer.getDatabaseType(), orderQualifiedTable).createTable();
+ new IntPkLargeOrderDAO(dataSource,
containerComposer.getDatabaseType(),
orderQualifiedTable.format()).createTable();
try (
Connection connection = dataSource.getConnection();
Statement statement = connection.createStatement()) {
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
index dab81aa027b..33c1da110bf 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
@@ -21,7 +21,6 @@ import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j;
import
org.apache.shardingsphere.data.pipeline.scenario.migration.MigrationJobType;
import
org.apache.shardingsphere.infra.algorithm.keygen.snowflake.SnowflakeKeyGenerateAlgorithm;
-import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.cases.PipelineContainerComposer;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.cases.migration.AbstractMigrationE2EIT;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.cases.task.E2EIncrementalTask;
@@ -65,7 +64,7 @@ class MySQLMigrationGeneralE2EIT extends
AbstractMigrationE2EIT {
try (PipelineContainerComposer containerComposer = new
PipelineContainerComposer(testParam)) {
PipelineE2EDistSQLFacade distSQLFacade = new
PipelineE2EDistSQLFacade(containerComposer, new MigrationJobType());
distSQLFacade.alterPipelineRule();
- IntPkLargeOrderDAO orderDAO = new
IntPkLargeOrderDAO(containerComposer.getSourceDataSource(),
containerComposer.getDatabaseType(), new QualifiedTable(null,
SOURCE_TABLE_NAME));
+ IntPkLargeOrderDAO orderDAO = new
IntPkLargeOrderDAO(containerComposer.getSourceDataSource(),
containerComposer.getDatabaseType(), SOURCE_TABLE_NAME);
orderDAO.createTable();
IntPkOrderItemDAO orderItemDAO = new
IntPkOrderItemDAO(containerComposer.getSourceDataSource(),
containerComposer.getDatabaseType(), null);
orderItemDAO.createTable();
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
index 77beafad189..c360a5392cb 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/migration/general/PostgreSQLMigrationGeneralE2EIT.java
@@ -66,7 +66,7 @@ class PostgreSQLMigrationGeneralE2EIT extends
AbstractMigrationE2EIT {
distSQLFacade.alterPipelineRule();
createSourceSchema(containerComposer,
PipelineContainerComposer.SCHEMA_NAME);
IntPkLargeOrderDAO orderDAO = new
IntPkLargeOrderDAO(containerComposer.getSourceDataSource(),
- containerComposer.getDatabaseType(),
containerComposer.createQualifiedTableWithSchema(SOURCE_TABLE_NAME));
+ containerComposer.getDatabaseType(),
containerComposer.createQualifiedTableWithSchema(SOURCE_TABLE_NAME).format());
orderDAO.createTable();
IntPkOrderItemDAO orderItemDAO = new
IntPkOrderItemDAO(containerComposer.getSourceDataSource(),
containerComposer.getDatabaseType(), PipelineContainerComposer.SCHEMA_NAME);
orderItemDAO.createTable();
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/task/E2EIncrementalTask.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/task/E2EIncrementalTask.java
index db2e1168cac..c837f0717e5 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/task/E2EIncrementalTask.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/cases/task/E2EIncrementalTask.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.database.connector.opengauss.type.OpenGaussData
import
org.apache.shardingsphere.database.connector.postgresql.type.PostgreSQLDatabaseType;
import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
import
org.apache.shardingsphere.infra.exception.external.sql.type.wrapper.SQLWrapperException;
+import
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.large.IntPkLargeOrderDAO;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.helper.PipelineCaseHelper;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.DataSourceExecuteUtils;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.SQLBuilderUtils;
@@ -66,7 +67,7 @@ public final class E2EIncrementalTask implements Runnable {
private final DataSource dataSource;
- private final String orderTableName;
+ private final String orderQualifiedTableName;
private final KeyGenerateAlgorithm primaryKeyGenerateAlgorithm;
@@ -85,7 +86,7 @@ public final class E2EIncrementalTask implements Runnable {
}
private void run0() throws SQLException {
- List<Object[]> orderInsertData =
PipelineCaseHelper.generateOrderInsertData(databaseType,
primaryKeyGenerateAlgorithm, loopCount);
+ List<Object[]> orderInsertData = new IntPkLargeOrderDAO(dataSource,
databaseType,
orderQualifiedTableName).generateInsertData(primaryKeyGenerateAlgorithm,
loopCount);
List<Object> primaryKeys = new LinkedList<>();
for (Object[] each : orderInsertData) {
primaryKeys.add(each[0]);
@@ -108,14 +109,15 @@ public final class E2EIncrementalTask implements Runnable
{
log.info("increment task runnable execute successfully.");
}
+ // TODO Refactor into SPI
private void insertOrder(final Object[] orderInsertData) throws
SQLException {
String sql;
if (databaseType instanceof MySQLDatabaseType) {
- sql = SQLBuilderUtils.buildInsertSQL(MYSQL_COLUMN_NAMES,
orderTableName);
+ sql = SQLBuilderUtils.buildInsertSQL(MYSQL_COLUMN_NAMES,
orderQualifiedTableName);
} else if (databaseType instanceof PostgreSQLDatabaseType) {
- sql = SQLBuilderUtils.buildInsertSQL(POSTGRESQL_COLUMN_NAMES,
orderTableName);
+ sql = SQLBuilderUtils.buildInsertSQL(POSTGRESQL_COLUMN_NAMES,
orderQualifiedTableName);
} else if (databaseType instanceof OpenGaussDatabaseType) {
- sql = SQLBuilderUtils.buildInsertSQL(OPENGAUSS_COLUMN_NAMES,
orderTableName);
+ sql = SQLBuilderUtils.buildInsertSQL(OPENGAUSS_COLUMN_NAMES,
orderQualifiedTableName);
} else {
throw new UnsupportedOperationException("");
}
@@ -144,7 +146,7 @@ public final class E2EIncrementalTask implements Runnable {
ThreadLocalRandom random = ThreadLocalRandom.current();
int randomInt = random.nextInt(-100, 100);
if (databaseType instanceof MySQLDatabaseType) {
- String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(MYSQL_COLUMN_NAMES),
orderTableName, "?");
+ String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(MYSQL_COLUMN_NAMES),
orderQualifiedTableName, "?");
int randomUnsignedInt = random.nextInt(10, 100);
LocalDateTime now = LocalDateTime.now();
Object[] parameters = {"中文测试", randomInt, randomInt, randomInt,
randomUnsignedInt, randomUnsignedInt, randomUnsignedInt,
@@ -156,7 +158,7 @@ public final class E2EIncrementalTask implements Runnable {
return;
}
if (databaseType instanceof PostgreSQLDatabaseType) {
- String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(POSTGRESQL_COLUMN_NAMES),
orderTableName, "?");
+ String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(POSTGRESQL_COLUMN_NAMES),
orderQualifiedTableName, "?");
Object[] parameters = {"中文测试", randomInt,
BigDecimal.valueOf(10000), random.nextBoolean(), new byte[]{-1, 0, 1}, "char",
"varchar", PipelineCaseHelper.generateFloat(),
PipelineCaseHelper.generateDouble(),
PipelineCaseHelper.generateJsonString(10, true),
PipelineCaseHelper.generateJsonString(20, true), "text-update", LocalDate.now(),
LocalTime.now(), Timestamp.valueOf(LocalDateTime.now()),
OffsetDateTime.now(), orderId};
@@ -166,7 +168,7 @@ public final class E2EIncrementalTask implements Runnable {
}
if (databaseType instanceof OpenGaussDatabaseType) {
LocalDateTime now = LocalDateTime.now();
- String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(OPENGAUSS_COLUMN_NAMES),
orderTableName, "?");
+ String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(OPENGAUSS_COLUMN_NAMES),
orderQualifiedTableName, "?");
Object[] parameters = {"中文测试", randomInt, random.nextInt(-999,
999), PipelineCaseHelper.generateFloat(), PipelineCaseHelper.generateDouble(),
BigDecimal.valueOf(10000),
random.nextBoolean(), "update-char", "update-text", new
byte[]{-1, 0, 1}, new byte[]{1, 0}, now.toLocalDate().plusDays(1),
now.toLocalTime().plusHours(6), "2023-03-01", now,
OffsetDateTime.now(), "1 years 1 mons 1 days 1 hours 1
mins 1 secs", "{4, 5, 6}", PipelineCaseHelper.generateJsonString(1, true),
PipelineCaseHelper.generateJsonString(1, false),
@@ -183,14 +185,14 @@ public final class E2EIncrementalTask implements Runnable
{
}
private void deleteOrderById(final Object orderId) throws SQLException {
- String sql = SQLBuilderUtils.buildDeleteSQL(orderTableName,
"order_id");
+ String sql = SQLBuilderUtils.buildDeleteSQL(orderQualifiedTableName,
"order_id");
log.info("delete sql: {}, params: {}", sql, orderId);
DataSourceExecuteUtils.execute(dataSource, sql, new Object[]{orderId});
}
private void setNullToAllFields(final Object orderId) throws SQLException {
if (databaseType instanceof MySQLDatabaseType) {
- String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(MYSQL_COLUMN_NAMES),
orderTableName, "null");
+ String sql =
SQLBuilderUtils.buildUpdateSQL(ignoreShardingColumns(MYSQL_COLUMN_NAMES),
orderQualifiedTableName, "null");
log.info("update sql: {}", sql);
DataSourceExecuteUtils.execute(dataSource, sql, new
Object[]{orderId});
}
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/IntPkLargeOrderDAO.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/IntPkLargeOrderDAO.java
index b6efb3ad99c..b69ce48525c 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/IntPkLargeOrderDAO.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/IntPkLargeOrderDAO.java
@@ -20,9 +20,8 @@ package
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.large;
import lombok.extern.slf4j.Slf4j;
import
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
+import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.large.sqlbuilder.IntPkLargeOrderSQLBuilder;
-import
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.helper.PipelineCaseHelper;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.AutoIncrementKeyGenerateAlgorithm;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.DataSourceExecuteUtils;
@@ -38,17 +37,14 @@ public final class IntPkLargeOrderDAO {
private final DataSource dataSource;
- private final DatabaseType databaseType;
-
private final IntPkLargeOrderSQLBuilder sqlBuilder;
private final String qualifiedTableName;
- public IntPkLargeOrderDAO(final DataSource dataSource, final DatabaseType
databaseType, final QualifiedTable qualifiedTable) {
+ public IntPkLargeOrderDAO(final DataSource dataSource, final DatabaseType
databaseType, final String qualifiedTableName) {
this.dataSource = dataSource;
- this.databaseType = databaseType;
this.sqlBuilder =
DatabaseTypedSPILoader.getService(IntPkLargeOrderSQLBuilder.class,
databaseType);
- this.qualifiedTableName = qualifiedTable.format();
+ this.qualifiedTableName = qualifiedTableName;
}
/**
@@ -69,12 +65,23 @@ public final class IntPkLargeOrderDAO {
* @throws SQLException SQL exception
*/
public void batchInsert(final int recordCount) throws SQLException {
- List<Object[]> paramsList =
PipelineCaseHelper.generateOrderInsertData(databaseType, new
AutoIncrementKeyGenerateAlgorithm(), recordCount);
+ List<Object[]> paramsList = generateInsertData(new
AutoIncrementKeyGenerateAlgorithm(), recordCount);
String sql = sqlBuilder.buildPreparedInsertSQL(qualifiedTableName);
log.info("Batch insert int pk large order SQL: {}, params list size:
{}", sql, paramsList.size());
DataSourceExecuteUtils.executeBatch(dataSource, sql, paramsList);
}
+ /**
+ * Generate insert data.
+ *
+ * @param keyGenerateAlgorithm key generate algorithm
+ * @param recordCount record count
+ * @return insert data
+ */
+ public List<Object[]> generateInsertData(final KeyGenerateAlgorithm
keyGenerateAlgorithm, final int recordCount) {
+ return sqlBuilder.generateInsertData(keyGenerateAlgorithm,
recordCount);
+ }
+
/**
* Insert order.
*
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/IntPkLargeOrderSQLBuilder.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/IntPkLargeOrderSQLBuilder.java
index 79f3dc2549f..ba7cd01bfbc 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/IntPkLargeOrderSQLBuilder.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/IntPkLargeOrderSQLBuilder.java
@@ -18,6 +18,9 @@
package
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.large.sqlbuilder;
import org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPI;
+import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
+
+import java.util.List;
public interface IntPkLargeOrderSQLBuilder extends DatabaseTypedSPI {
@@ -37,6 +40,15 @@ public interface IntPkLargeOrderSQLBuilder extends
DatabaseTypedSPI {
*/
String buildPreparedInsertSQL(String qualifiedTableName);
+ /**
+ * Generate insert data.
+ *
+ * @param keyGenerateAlgorithm key generate algorithm
+ * @param recordCount record count
+ * @return insert data
+ */
+ List<Object[]> generateInsertData(KeyGenerateAlgorithm
keyGenerateAlgorithm, int recordCount);
+
/**
* Build prepared simple insert SQL.
*
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/MySQLIntPkLargeOrderSQLBuilder.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/MySQLIntPkLargeOrderSQLBuilder.java
index 3f004070ba6..3273bccad36 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/MySQLIntPkLargeOrderSQLBuilder.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/MySQLIntPkLargeOrderSQLBuilder.java
@@ -17,6 +17,18 @@
package
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.large.sqlbuilder;
+import
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
+import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
+import
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.helper.PipelineCaseHelper;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.Year;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+
public final class MySQLIntPkLargeOrderSQLBuilder implements
IntPkLargeOrderSQLBuilder {
@Override
@@ -62,15 +74,42 @@ public final class MySQLIntPkLargeOrderSQLBuilder
implements IntPkLargeOrderSQLB
@Override
public String buildPreparedInsertSQL(final String qualifiedTableName) {
return String.format("""
- INSERT INTO %s
- (order_id, user_id, status, t_mediumint, t_smallint,
t_tinyint, t_unsigned_int, t_unsigned_mediumint,
- t_unsigned_smallint, t_unsigned_tinyint, t_float, t_double,
t_decimal, t_timestamp, t_datetime, t_date, t_time, t_year,
- t_bit, t_binary, t_varbinary, t_blob, t_mediumblob, t_char,
t_text, t_mediumtext, t_enum, t_set, t_json)
- VALUES
- (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?)
+ INSERT INTO %s (
+ order_id, user_id, status,
+ t_mediumint, t_smallint, t_tinyint, t_unsigned_int,
t_unsigned_mediumint, t_unsigned_smallint, t_unsigned_tinyint,
+ t_float, t_double, t_decimal,
+ t_timestamp, t_datetime, t_date, t_time, t_year,
+ t_bit, t_binary, t_varbinary, t_blob, t_mediumblob,
+ t_char, t_text, t_mediumtext,
+ t_enum, t_set,
+ t_json
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", qualifiedTableName);
}
+ @Override
+ public List<Object[]> generateInsertData(final KeyGenerateAlgorithm
keyGenerateAlgorithm, final int recordCount) {
+ List<Object[]> result = new ArrayList<>(recordCount);
+ for (int i = 0; i < recordCount; i++) {
+ int randomInt = PipelineCaseHelper.generateInt(-100, 100);
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
+ int randomUnsignedInt = PipelineCaseHelper.generateInt(0, 100);
+ LocalDateTime now = LocalDateTime.now();
+ Object[] params = {
+ orderId, PipelineCaseHelper.generateInt(0, 100),
PipelineCaseHelper.generateString(6),
+ randomInt, randomInt, randomInt, randomUnsignedInt,
randomUnsignedInt, randomUnsignedInt, randomUnsignedInt,
+ PipelineCaseHelper.generateFloat(),
PipelineCaseHelper.generateDouble(),
BigDecimal.valueOf(PipelineCaseHelper.generateDouble()),
+ now, now, now.toLocalDate(), now.toLocalTime(),
Year.now().getValue(),
+ "1", "t", "e", "s", "t",
+ PipelineCaseHelper.generateString(2), "☠️x☺️x✋x☹️",
PipelineCaseHelper.generateString(1),
+ "1", "2",
+ PipelineCaseHelper.generateJsonString(32, false)
+ };
+ result.add(params);
+ }
+ return result;
+ }
+
@Override
public String getDatabaseType() {
return "MySQL";
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/OpenGaussIntPkLargeOrderSQLBuilder.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/OpenGaussIntPkLargeOrderSQLBuilder.java
index dd73e553668..f855049e3c2 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/OpenGaussIntPkLargeOrderSQLBuilder.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/OpenGaussIntPkLargeOrderSQLBuilder.java
@@ -17,6 +17,23 @@
package
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.large.sqlbuilder;
+import org.apache.commons.codec.digest.DigestUtils;
+import
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
+import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
+import
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.helper.PipelineCaseHelper;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.UUID;
+
+import static org.mockito.Mockito.mock;
+
public final class OpenGaussIntPkLargeOrderSQLBuilder implements
IntPkLargeOrderSQLBuilder {
@Override
@@ -74,13 +91,49 @@ public final class OpenGaussIntPkLargeOrderSQLBuilder
implements IntPkLargeOrder
public String buildPreparedInsertSQL(final String qualifiedTableName) {
return String.format("""
INSERT INTO %s (
- order_id, user_id, status, c_int, c_smallint, c_float,
c_double, c_numeric, c_boolean, c_char, c_text, c_bytea, c_raw, c_date, c_time,
- c_smalldatetime, c_timestamp, c_timestamptz, c_interval,
c_array, c_json, c_jsonb, c_uuid, c_hash32, c_tsvector, c_tsquery, c_bit,
- c_int4range, c_daterange, c_tsrange, c_reltime, c_abstime,
c_point, c_lseg, c_box, c_circle, c_bitvarying, c_cidr, c_inet, c_macaddr,
c_hll, c_money
+ order_id, user_id, status,
+ c_int, c_smallint,
+ c_float, c_double, c_numeric, c_boolean,
+ c_char, c_text, c_bytea, c_raw,
+ c_date, c_time, c_smalldatetime, c_timestamp, c_timestamptz,
c_interval,
+ c_array, c_json, c_jsonb,
+ c_uuid, c_hash32,
+ c_tsvector, c_tsquery, c_bit,
+ c_int4range, c_daterange, c_tsrange,
+ c_reltime, c_abstime,
+ c_point, c_lseg, c_box, c_circle, c_bitvarying,
+ c_cidr, c_inet, c_macaddr,
+ c_hll, c_money
) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", qualifiedTableName);
}
+ @Override
+ public List<Object[]> generateInsertData(final KeyGenerateAlgorithm
keyGenerateAlgorithm, final int recordCount) {
+ List<Object[]> result = new ArrayList<>(recordCount);
+ for (int i = 0; i < recordCount; i++) {
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
+ byte[] bytesValue = {Byte.MIN_VALUE, -1, 0, 1, Byte.MAX_VALUE};
+ Object[] params = new Object[]{
+ orderId, PipelineCaseHelper.generateInt(0, 1000),
"'status'" + i,
+ PipelineCaseHelper.generateInt(-1000, 9999),
PipelineCaseHelper.generateInt(0, 100),
+ PipelineCaseHelper.generateFloat(),
PipelineCaseHelper.generateDouble(),
BigDecimal.valueOf(PipelineCaseHelper.generateDouble()), false,
+ PipelineCaseHelper.generateString(6), "texts", bytesValue,
bytesValue,
+ LocalDate.now(), LocalTime.now(), "2001-10-01",
Timestamp.valueOf(LocalDateTime.now()), OffsetDateTime.now(), "0 years 0 mons 1
days 2 hours 3 mins 4 secs", "{1, 2, 3}",
+ PipelineCaseHelper.generateJsonString(8, false),
PipelineCaseHelper.generateJsonString(8, true),
+ UUID.randomUUID().toString(),
DigestUtils.md5Hex(orderId.toString()),
+ "'rat' 'sat'", "tsquery", "0000",
+ "[1,1000)", "[2020-01-02,2021-01-01)", "[2020-01-01
00:00:00,2021-01-01 00:00:00)",
+ "1 years 1 mons 10 days -06:00:00", "2000-01-02
00:00:00+00",
+ "(1.0,1.0)", "[(0.0,0.0),(2.0,2.0)]",
"(3.0,3.0),(1.0,1.0)", "<(5.0,5.0),5.0>", "1111",
+ "192.168.0.0/16", "192.168.1.1", "08:00:2b:01:02:03",
+
"\\x484c4c00000000002b05000000000000000000000000000000000000", 999
+ };
+ result.add(params);
+ }
+ return result;
+ }
+
@Override
public String getDatabaseType() {
return "openGauss";
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/PostgreSQLIntPkLargeOrderSQLBuilder.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/PostgreSQLIntPkLargeOrderSQLBuilder.java
index 0a0546e3c10..c9f575baef0 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/PostgreSQLIntPkLargeOrderSQLBuilder.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/large/sqlbuilder/PostgreSQLIntPkLargeOrderSQLBuilder.java
@@ -17,6 +17,21 @@
package
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.large.sqlbuilder;
+import
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
+import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
+import
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.helper.PipelineCaseHelper;
+
+import java.math.BigDecimal;
+import java.sql.Timestamp;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.OffsetDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.mockito.Mockito.mock;
+
public final class PostgreSQLIntPkLargeOrderSQLBuilder implements
IntPkLargeOrderSQLBuilder {
@Override
@@ -49,13 +64,35 @@ public final class PostgreSQLIntPkLargeOrderSQLBuilder
implements IntPkLargeOrde
@Override
public String buildPreparedInsertSQL(final String qualifiedTableName) {
return String.format("""
- INSERT INTO %s
- (order_id, user_id, status, t_int2, t_numeric, t_bool,
t_bytea, t_char, t_varchar,
- t_float, t_double, t_json, t_jsonb, t_text, t_date, t_time,
t_timestamp, t_timestamptz)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
+ INSERT INTO %s (
+ order_id, user_id, status,
+ t_int2, t_numeric, t_bool,
+ t_bytea, t_char, t_varchar,
+ t_float, t_double,
+ t_json, t_jsonb, t_text,
+ t_date, t_time, t_timestamp, t_timestamptz
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
""", qualifiedTableName);
}
+ @Override
+ public List<Object[]> generateInsertData(final KeyGenerateAlgorithm
keyGenerateAlgorithm, final int recordCount) {
+ List<Object[]> result = new ArrayList<>(recordCount);
+ for (int i = 0; i < recordCount; i++) {
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
+ Object[] params = new Object[]{
+ orderId, PipelineCaseHelper.generateInt(0, 100),
PipelineCaseHelper.generateString(6),
+ PipelineCaseHelper.generateInt(-128, 127),
BigDecimal.valueOf(PipelineCaseHelper.generateDouble()), true,
+ "bytea".getBytes(), PipelineCaseHelper.generateString(2),
PipelineCaseHelper.generateString(2),
+ PipelineCaseHelper.generateFloat(),
PipelineCaseHelper.generateDouble(),
+ PipelineCaseHelper.generateJsonString(8, false),
PipelineCaseHelper.generateJsonString(12, true), "☠️x☺️x✋x☹️",
+ LocalDate.now(), LocalTime.now(),
Timestamp.valueOf(LocalDateTime.now()), OffsetDateTime.now()
+ };
+ result.add(params);
+ }
+ return result;
+ }
+
@Override
public String getDatabaseType() {
return "PostgreSQL";
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/small/StringPkSmallOrderDAO.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/small/StringPkSmallOrderDAO.java
index 6865d27deb4..3e9f08f8d5a 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/small/StringPkSmallOrderDAO.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/order/small/StringPkSmallOrderDAO.java
@@ -20,15 +20,20 @@ package
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.small;
import lombok.extern.slf4j.Slf4j;
import
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
+import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
import
org.apache.shardingsphere.infra.algorithm.keygen.uuid.UUIDKeyGenerateAlgorithm;
import org.apache.shardingsphere.infra.metadata.database.schema.QualifiedTable;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.order.small.sqlbuilder.StringPkSmallOrderSQLBuilder;
-import
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.helper.PipelineCaseHelper;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.DataSourceExecuteUtils;
import javax.sql.DataSource;
import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+import static org.mockito.Mockito.mock;
/**
* String PK small order DAO. Small table means the table has few columns.
@@ -66,12 +71,25 @@ public final class StringPkSmallOrderDAO {
* @throws SQLException SQL exception
*/
public void batchInsert(final int recordCount) throws SQLException {
- List<Object[]> paramsList =
PipelineCaseHelper.generateSmallOrderInsertData(new UUIDKeyGenerateAlgorithm(),
recordCount);
+ List<Object[]> paramsList = generateInsertData(recordCount);
String sql = sqlBuilder.buildPreparedInsertSQL(qualifiedTableName);
log.info("Batch insert string pk small order SQL: {}, params list
size: {}", sql, paramsList.size());
DataSourceExecuteUtils.executeBatch(dataSource, sql, paramsList);
}
+ private List<Object[]> generateInsertData(final int recordCount) {
+ List<Object[]> result = new ArrayList<>(recordCount);
+ KeyGenerateAlgorithm keyGenerateAlgorithm = new
UUIDKeyGenerateAlgorithm();
+ for (int i = 0; i < recordCount; i++) {
+ Object[] params = new Object[3];
+ params[0] =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
+ params[1] = ThreadLocalRandom.current().nextInt(0, 6);
+ params[2] = "OK";
+ result.add(params);
+ }
+ return result;
+ }
+
/**
* Insert order.
*
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/orderitem/IntPkOrderItemDAO.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/orderitem/IntPkOrderItemDAO.java
index 755504274a5..14bb2fe1280 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/orderitem/IntPkOrderItemDAO.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/dao/orderitem/IntPkOrderItemDAO.java
@@ -20,14 +20,19 @@ package
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.orderitem;
import lombok.extern.slf4j.Slf4j;
import
org.apache.shardingsphere.database.connector.core.spi.DatabaseTypedSPILoader;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
+import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.dao.orderitem.sqlbuilder.IntPkOrderItemSQLBuilder;
-import
org.apache.shardingsphere.test.e2e.operation.pipeline.framework.helper.PipelineCaseHelper;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.AutoIncrementKeyGenerateAlgorithm;
import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.DataSourceExecuteUtils;
import javax.sql.DataSource;
import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.ThreadLocalRandom;
+
+import static org.mockito.Mockito.mock;
@Slf4j
public final class IntPkOrderItemDAO {
@@ -62,12 +67,24 @@ public final class IntPkOrderItemDAO {
* @throws SQLException SQL exception
*/
public void batchInsert(final int recordCount) throws SQLException {
- List<Object[]> paramsList =
PipelineCaseHelper.generateOrderItemInsertData(new
AutoIncrementKeyGenerateAlgorithm(), recordCount);
+ List<Object[]> paramsList = generateInsertData(recordCount);
String sql = sqlBuilder.buildPreparedInsertSQL(schemaPrefix);
log.info("Batch insert order_item SQL: {}, params list size: {}", sql,
paramsList.size());
DataSourceExecuteUtils.executeBatch(dataSource, sql, paramsList);
}
+ private List<Object[]> generateInsertData(final int recordCount) {
+ List<Object[]> result = new ArrayList<>(recordCount);
+ KeyGenerateAlgorithm keyGenerateAlgorithm = new
AutoIncrementKeyGenerateAlgorithm();
+ ThreadLocalRandom random = ThreadLocalRandom.current();
+ for (int i = 0; i < recordCount; i++) {
+ Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
+ int userId = random.nextInt(0, 100);
+ result.add(new
Object[]{keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next(), orderId, userId, "SUCCESS"});
+ }
+ return result;
+ }
+
/**
* Insert order item.
*
diff --git
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/helper/PipelineCaseHelper.java
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/helper/PipelineCaseHelper.java
index 88009cf719b..5371a344fe7 100644
---
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/helper/PipelineCaseHelper.java
+++
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/operation/pipeline/framework/helper/PipelineCaseHelper.java
@@ -21,31 +21,14 @@ import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.RandomStringUtils;
-import org.apache.commons.lang3.tuple.Pair;
-import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import
org.apache.shardingsphere.database.connector.mariadb.type.MariaDBDatabaseType;
-import
org.apache.shardingsphere.database.connector.mysql.type.MySQLDatabaseType;
-import
org.apache.shardingsphere.database.connector.opengauss.type.OpenGaussDatabaseType;
-import
org.apache.shardingsphere.database.connector.postgresql.type.PostgreSQLDatabaseType;
import
org.apache.shardingsphere.infra.algorithm.core.context.AlgorithmSQLContext;
import
org.apache.shardingsphere.infra.algorithm.keygen.spi.KeyGenerateAlgorithm;
-import
org.apache.shardingsphere.test.e2e.operation.pipeline.util.AutoIncrementKeyGenerateAlgorithm;
-import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
-import java.sql.Timestamp;
-import java.time.LocalDate;
import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.OffsetDateTime;
-import java.time.Year;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom;
import static org.mockito.Mockito.mock;
@@ -55,101 +38,23 @@ import static org.mockito.Mockito.mock;
public final class PipelineCaseHelper {
/**
- * Generate insert data, contains full fields.
+ * Generate a pseudorandom integer in the specified range.
*
- * @param databaseType database type
- * @param insertRows insert rows
- * @return insert data list
+ * @param min lower bound (inclusive)
+ * @param max upper bound (exclusive)
+ * @return a pseudorandom int between {@code min} (inclusive) and {@code
max} (exclusive)
*/
- // TODO Delete
- public static Pair<List<Object[]>, List<Object[]>>
generateFullInsertData(final DatabaseType databaseType, final int insertRows) {
- if (insertRows < 0) {
- return Pair.of(null, null);
- }
- AutoIncrementKeyGenerateAlgorithm orderKeyGenerate = new
AutoIncrementKeyGenerateAlgorithm();
- AutoIncrementKeyGenerateAlgorithm orderItemKeyGenerate = new
AutoIncrementKeyGenerateAlgorithm();
- List<Object[]> orderData = generateOrderInsertData(databaseType,
orderKeyGenerate, insertRows);
- List<Object[]> orderItemData =
generateOrderItemInsertData(orderItemKeyGenerate, insertRows);
- return Pair.of(orderData, orderItemData);
- }
-
- /**
- * Generate small order insert data.
- *
- * @param keyGenerateAlgorithm key generate algorithm
- * @param recordCount record count
- * @return small order insert data
- */
- public static List<Object[]> generateSmallOrderInsertData(final
KeyGenerateAlgorithm keyGenerateAlgorithm, final int recordCount) {
- List<Object[]> result = new ArrayList<>(recordCount);
- for (int i = 0; i < recordCount; i++) {
- Object[] params = new Object[3];
- params[0] =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
- params[1] = ThreadLocalRandom.current().nextInt(0, 6);
- params[2] = "OK";
- result.add(params);
- }
- return result;
+ public static int generateInt(final int min, final int max) {
+ return ThreadLocalRandom.current().nextInt(min, max);
}
/**
- * Generate order insert data.
+ * Generate a random alphanumeric string of the given length.
*
- * @param databaseType database type
- * @param keyGenerateAlgorithm key generate algorithm
- * @param recordCount record count
- * @return order insert data
- * @throws UnsupportedOperationException Unsupported operation exception
+ * @param strLength desired string length
+ * @return random alphanumeric string
*/
- // TODO Refactor to use SPI
- public static List<Object[]> generateOrderInsertData(final DatabaseType
databaseType, final KeyGenerateAlgorithm keyGenerateAlgorithm, final int
recordCount) {
- List<Object[]> result = new ArrayList<>(recordCount);
- String emojiText = "☠️x☺️x✋x☹️";
- if (databaseType instanceof MySQLDatabaseType || databaseType
instanceof MariaDBDatabaseType) {
- for (int i = 0; i < recordCount; i++) {
- int randomInt = generateInt(-100, 100);
- Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
- int randomUnsignedInt = generateInt(0, 100);
- LocalDateTime now = LocalDateTime.now();
- Object[] addObjs = {orderId, generateInt(0, 100),
generateString(6), randomInt, randomInt, randomInt,
- randomUnsignedInt, randomUnsignedInt,
randomUnsignedInt, randomUnsignedInt, generateFloat(), generateDouble(),
- BigDecimal.valueOf(generateDouble()), now, now,
now.toLocalDate(), now.toLocalTime(), Year.now().getValue(), "1", "t", "e",
"s", "t", generateString(2),
- emojiText, generateString(1), "1", "2",
generateJsonString(32, false)};
- result.add(addObjs);
- }
- return result;
- }
- if (databaseType instanceof PostgreSQLDatabaseType) {
- for (int i = 0; i < recordCount; i++) {
- Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
- result.add(new Object[]{orderId, generateInt(0, 100),
generateString(6), generateInt(-128, 127),
- BigDecimal.valueOf(generateDouble()), true,
"bytea".getBytes(), generateString(2), generateString(2), generateFloat(),
generateDouble(),
- generateJsonString(8, false), generateJsonString(12,
true), emojiText, LocalDate.now(),
- LocalTime.now(),
Timestamp.valueOf(LocalDateTime.now()), OffsetDateTime.now()});
- }
- return result;
- }
- if (databaseType instanceof OpenGaussDatabaseType) {
- for (int i = 0; i < recordCount; i++) {
- Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
- byte[] bytesValue = {Byte.MIN_VALUE, -1, 0, 1, Byte.MAX_VALUE};
- result.add(new Object[]{orderId, generateInt(0, 1000),
"'status'" + i, generateInt(-1000, 9999), generateInt(0, 100), generateFloat(),
generateDouble(),
- BigDecimal.valueOf(generateDouble()), false,
generateString(6), "texts", bytesValue, bytesValue, LocalDate.now(),
LocalTime.now(), "2001-10-01",
- Timestamp.valueOf(LocalDateTime.now()),
OffsetDateTime.now(), "0 years 0 mons 1 days 2 hours 3 mins 4 secs", "{1, 2,
3}", generateJsonString(8, false),
- generateJsonString(8, true),
UUID.randomUUID().toString(), DigestUtils.md5Hex(orderId.toString()), "'rat'
'sat'", "tsquery", "0000", "[1,1000)", "[2020-01-02,2021-01-01)",
- "[2020-01-01 00:00:00,2021-01-01 00:00:00)", "1 years
1 mons 10 days -06:00:00", "2000-01-02 00:00:00+00", "(1.0,1.0)",
"[(0.0,0.0),(2.0,2.0)]", "(3.0,3.0),(1.0,1.0)",
- "<(5.0,5.0),5.0>", "1111", "192.168.0.0/16",
"192.168.1.1", "08:00:2b:01:02:03",
"\\x484c4c00000000002b05000000000000000000000000000000000000", 999});
- }
- return result;
- }
- throw new UnsupportedOperationException(String.format("Not support
generate %s insert data", databaseType.getType()));
- }
-
- private static int generateInt(final int min, final int max) {
- return ThreadLocalRandom.current().nextInt(min, max);
- }
-
- private static String generateString(final int strLength) {
+ public static String generateString(final int strLength) {
return RandomStringUtils.randomAlphanumeric(strLength);
}
@@ -188,23 +93,6 @@ public final class PipelineCaseHelper {
return ThreadLocalRandom.current().nextInt(-1000000000, 1000000000) /
1000000.0D;
}
- /**
- * Generate order item insert data.
- *
- * @param keyGenerateAlgorithm key generate algorithm
- * @param recordCount record count
- * @return order item insert data
- */
- public static List<Object[]> generateOrderItemInsertData(final
KeyGenerateAlgorithm keyGenerateAlgorithm, final int recordCount) {
- List<Object[]> result = new ArrayList<>(recordCount);
- for (int i = 0; i < recordCount; i++) {
- Object orderId =
keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next();
- int userId = generateInt(0, 100);
- result.add(new
Object[]{keyGenerateAlgorithm.generateKeys(mock(AlgorithmSQLContext.class),
1).iterator().next(), orderId, userId, "SUCCESS"});
- }
- return result;
- }
-
/**
* Batch insert order records with general columns.
*
@@ -214,7 +102,6 @@ public final class PipelineCaseHelper {
* @param recordCount record count
* @throws SQLException sql exception
*/
- // TODO Delete
public static void batchInsertOrderRecordsWithGeneralColumns(final
Connection connection, final KeyGenerateAlgorithm keyGenerateAlgorithm, final
String tableName,
final int
recordCount) throws SQLException {
log.info("init data begin: {}", LocalDateTime.now());