This is an automated email from the ASF dual-hosted git repository.
panjuan 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 6ecca0275d4 Refactor
DialectPipelineSQLBuilder.buildInsertOnDuplicateClause() (#27218)
6ecca0275d4 is described below
commit 6ecca0275d4e1746b3be109101271988278bc814
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jul 15 16:06:28 2023 +0800
Refactor DialectPipelineSQLBuilder.buildInsertOnDuplicateClause() (#27218)
---
.../pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java | 3 +--
.../common/sqlbuilder/CommonPipelineSQLBuilder.java | 13 +++++--------
.../common/sqlbuilder/PipelineImportSQLBuilder.java | 2 +-
.../DataMatchDataConsistencyCalculateAlgorithm.java | 4 +++-
.../pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java | 2 +-
.../mysql/sqlbuilder/MySQLPipelineSQLBuilderTest.java | 4 ++--
.../opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java | 2 +-
.../sqlbuilder/OpenGaussPipelineSQLBuilderTest.java | 2 +-
.../postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java | 2 +-
.../sqlbuilder/PostgreSQLPipelineSQLBuilderTest.java | 2 +-
10 files changed, 17 insertions(+), 19 deletions(-)
diff --git
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
index 568cd4903c3..a72d6ee762c 100644
---
a/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/api/src/main/java/org/apache/shardingsphere/data/pipeline/spi/sqlbuilder/DialectPipelineSQLBuilder.java
@@ -40,11 +40,10 @@ public interface DialectPipelineSQLBuilder extends
DatabaseTypedSPI {
/**
* Build on duplicate clause of insert SQL.
*
- * @param schemaName schema name
* @param dataRecord data record
* @return on duplicate clause of insert SQL
*/
- default Optional<String> buildInsertOnDuplicateClause(String schemaName,
DataRecord dataRecord) {
+ default Optional<String> buildInsertOnDuplicateClause(DataRecord
dataRecord) {
return Optional.empty();
}
diff --git
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/CommonPipelineSQLBuilder.java
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/CommonPipelineSQLBuilder.java
index f81575f1319..769b192e4c9 100644
---
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/CommonPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/CommonPipelineSQLBuilder.java
@@ -21,7 +21,7 @@ import
org.apache.shardingsphere.data.pipeline.spi.sqlbuilder.DialectPipelineSQL
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.spi.DatabaseTypedSPILoader;
-import java.util.List;
+import java.util.Collection;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -105,16 +105,13 @@ public final class CommonPipelineSQLBuilder {
* @param firstQuery first query
* @return query SQL
*/
- public String buildQueryAllOrderingSQL(final String schemaName, final
String tableName, final List<String> columnNames, final String uniqueKey, final
boolean firstQuery) {
+ public String buildQueryAllOrderingSQL(final String schemaName, final
String tableName, final Collection<String> columnNames, final String uniqueKey,
final boolean firstQuery) {
String qualifiedTableName =
sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName);
String escapedUniqueKey =
sqlSegmentBuilder.getEscapedIdentifier(uniqueKey);
+ String queryColumns =
columnNames.stream().map(sqlSegmentBuilder::getEscapedIdentifier).collect(Collectors.joining(","));
return firstQuery
- ? String.format("SELECT %s FROM %s ORDER BY %s ASC",
buildQueryColumns(columnNames), qualifiedTableName, escapedUniqueKey)
- : String.format("SELECT %s FROM %s WHERE %s>? ORDER BY %s
ASC", buildQueryColumns(columnNames), qualifiedTableName, escapedUniqueKey,
escapedUniqueKey);
- }
-
- private String buildQueryColumns(final List<String> columnNames) {
- return columnNames.isEmpty() ? "*" :
columnNames.stream().map(sqlSegmentBuilder::getEscapedIdentifier).collect(Collectors.joining(","));
+ ? String.format("SELECT %s FROM %s ORDER BY %s ASC",
queryColumns, qualifiedTableName, escapedUniqueKey)
+ : String.format("SELECT %s FROM %s WHERE %s>? ORDER BY %s
ASC", queryColumns, qualifiedTableName, escapedUniqueKey, escapedUniqueKey);
}
/**
diff --git
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineImportSQLBuilder.java
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineImportSQLBuilder.java
index f6165d8b844..ad99002d853 100644
---
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineImportSQLBuilder.java
+++
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/sqlbuilder/PipelineImportSQLBuilder.java
@@ -63,7 +63,7 @@ public final class PipelineImportSQLBuilder {
String sqlCacheKey = INSERT_SQL_CACHE_KEY_PREFIX +
dataRecord.getTableName();
if (!sqlCacheMap.containsKey(sqlCacheKey)) {
String insertMainClause = buildInsertMainClause(schemaName,
dataRecord);
- sqlCacheMap.put(sqlCacheKey,
dialectSQLBuilder.buildInsertOnDuplicateClause(schemaName,
dataRecord).map(optional -> insertMainClause + " " +
optional).orElse(insertMainClause));
+ sqlCacheMap.put(sqlCacheKey,
dialectSQLBuilder.buildInsertOnDuplicateClause(dataRecord).map(optional ->
insertMainClause + " " + optional).orElse(insertMainClause));
}
return sqlCacheMap.get(sqlCacheKey);
}
diff --git
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/DataMatchDataConsistencyCalculateAlgorithm.java
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/DataMatchDataConsistencyCalculateAlgorithm.java
index ff314ef957d..801acac23e5 100644
---
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/DataMatchDataConsistencyCalculateAlgorithm.java
+++
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/consistencycheck/algorithm/DataMatchDataConsistencyCalculateAlgorithm.java
@@ -42,6 +42,7 @@ import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedList;
import java.util.Optional;
import java.util.Properties;
@@ -165,8 +166,9 @@ public final class
DataMatchDataConsistencyCalculateAlgorithm extends AbstractSt
}
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, param.getDatabaseType());
CommonPipelineSQLBuilder pipelineSQLBuilder = new
CommonPipelineSQLBuilder(databaseType);
+ Collection<String> columnNames = param.getColumnNames().isEmpty() ?
Collections.singleton("*") : param.getColumnNames();
boolean firstQuery = null == param.getTableCheckPosition();
- return
pipelineSQLBuilder.buildQueryAllOrderingSQL(param.getSchemaName(),
param.getLogicTableName(), param.getColumnNames(),
param.getUniqueKey().getName(), firstQuery);
+ return
pipelineSQLBuilder.buildQueryAllOrderingSQL(param.getSchemaName(),
param.getLogicTableName(), columnNames, param.getUniqueKey().getName(),
firstQuery);
}
@Override
diff --git
a/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
b/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
index 74069a1af95..6711609a879 100644
---
a/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/dialect/mysql/src/main/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilder.java
@@ -30,7 +30,7 @@ import java.util.Optional;
public final class MySQLPipelineSQLBuilder implements
DialectPipelineSQLBuilder {
@Override
- public Optional<String> buildInsertOnDuplicateClause(final String
schemaName, final DataRecord dataRecord) {
+ public Optional<String> buildInsertOnDuplicateClause(final DataRecord
dataRecord) {
StringBuilder result = new StringBuilder("ON DUPLICATE KEY UPDATE ");
PipelineSQLSegmentBuilder sqlSegmentBuilder = new
PipelineSQLSegmentBuilder(getType());
for (int i = 0; i < dataRecord.getColumnCount(); i++) {
diff --git
a/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilderTest.java
b/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilderTest.java
index bedd29843f6..fddf5969e9f 100644
---
a/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilderTest.java
+++
b/kernel/data-pipeline/dialect/mysql/src/test/java/org/apache/shardingsphere/data/pipeline/mysql/sqlbuilder/MySQLPipelineSQLBuilderTest.java
@@ -35,13 +35,13 @@ class MySQLPipelineSQLBuilderTest {
@Test
void assertBuildInsertSQLOnDuplicateClause() {
- String actual = sqlBuilder.buildInsertOnDuplicateClause(null,
mockDataRecord("t1")).orElse(null);
+ String actual =
sqlBuilder.buildInsertOnDuplicateClause(mockDataRecord("t1")).orElse(null);
assertThat(actual, is("ON DUPLICATE KEY UPDATE
c1=VALUES(c1),c2=VALUES(c2),c3=VALUES(c3)"));
}
@Test
void assertBuildInsertSQLOnDuplicateClauseHasShardingColumn() {
- String actual = sqlBuilder.buildInsertOnDuplicateClause(null,
mockDataRecord("t2")).orElse(null);
+ String actual =
sqlBuilder.buildInsertOnDuplicateClause(mockDataRecord("t2")).orElse(null);
assertThat(actual, is("ON DUPLICATE KEY UPDATE
c1=VALUES(c1),c2=VALUES(c2),c3=VALUES(c3)"));
}
diff --git
a/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
b/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
index 06d16d4b358..8fa42823114 100644
---
a/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/dialect/opengauss/src/main/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilder.java
@@ -36,7 +36,7 @@ public final class OpenGaussPipelineSQLBuilder implements
DialectPipelineSQLBuil
}
@Override
- public Optional<String> buildInsertOnDuplicateClause(final String
schemaName, final DataRecord dataRecord) {
+ public Optional<String> buildInsertOnDuplicateClause(final DataRecord
dataRecord) {
StringBuilder result = new StringBuilder("ON DUPLICATE KEY UPDATE ");
PipelineSQLSegmentBuilder sqlSegmentBuilder = new
PipelineSQLSegmentBuilder(getType());
for (int i = 0; i < dataRecord.getColumnCount(); i++) {
diff --git
a/kernel/data-pipeline/dialect/opengauss/src/test/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilderTest.java
b/kernel/data-pipeline/dialect/opengauss/src/test/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilderTest.java
index 20112e39018..f7fabda1b12 100644
---
a/kernel/data-pipeline/dialect/opengauss/src/test/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilderTest.java
+++
b/kernel/data-pipeline/dialect/opengauss/src/test/java/org/apache/shardingsphere/data/pipeline/opengauss/sqlbuilder/OpenGaussPipelineSQLBuilderTest.java
@@ -32,7 +32,7 @@ class OpenGaussPipelineSQLBuilderTest {
@Test
void assertBuildInsertSQLOnDuplicatePart() {
- String actual = sqlBuilder.buildInsertOnDuplicateClause(null,
mockDataRecord()).orElse(null);
+ String actual =
sqlBuilder.buildInsertOnDuplicateClause(mockDataRecord()).orElse(null);
assertThat(actual, is("ON DUPLICATE KEY UPDATE
c0=EXCLUDED.c0,c1=EXCLUDED.c1,c2=EXCLUDED.c2,c3=EXCLUDED.c3"));
}
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
index 15398e1747e..8c408ff2ba1 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/main/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilder.java
@@ -37,7 +37,7 @@ public final class PostgreSQLPipelineSQLBuilder implements
DialectPipelineSQLBui
}
@Override
- public Optional<String> buildInsertOnDuplicateClause(final String
schemaName, final DataRecord dataRecord) {
+ public Optional<String> buildInsertOnDuplicateClause(final DataRecord
dataRecord) {
// TODO without unique key, job has been interrupted, which may lead
to data duplication
if (dataRecord.getUniqueKeyValue().isEmpty()) {
return Optional.empty();
diff --git
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilderTest.java
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilderTest.java
index a2d4e99b7e9..1612aab71ed 100644
---
a/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilderTest.java
+++
b/kernel/data-pipeline/dialect/postgresql/src/test/java/org/apache/shardingsphere/data/pipeline/postgresql/sqlbuilder/PostgreSQLPipelineSQLBuilderTest.java
@@ -34,7 +34,7 @@ class PostgreSQLPipelineSQLBuilderTest {
@Test
void assertBuildInsertSQLOnDuplicateClause() {
- String actual = sqlBuilder.buildInsertOnDuplicateClause("schema1",
mockDataRecord()).orElse(null);
+ String actual =
sqlBuilder.buildInsertOnDuplicateClause(mockDataRecord()).orElse(null);
assertThat(actual, is("ON CONFLICT (order_id) DO UPDATE SET
user_id=EXCLUDED.user_id,status=EXCLUDED.status"));
}