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"));
     }
     

Reply via email to