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 cf6e3af17f0 Fix StringPrimaryKeyPosition handle empty string. (#27917)
cf6e3af17f0 is described below

commit cf6e3af17f071bf4238a8a4bad8f365ea5aad676
Author: Xinze Guo <[email protected]>
AuthorDate: Fri Aug 4 19:10:32 2023 +0800

    Fix StringPrimaryKeyPosition handle empty string. (#27917)
---
 .../common/ingest/position/pk/type/StringPrimaryKeyPosition.java  | 8 ++++++--
 .../ingest/position/pk/type/StringPrimaryKeyPositionTest.java     | 8 ++++++++
 .../cases/migration/general/MySQLMigrationGeneralE2EIT.java       | 2 ++
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java
 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java
index 33e906b3f85..f6466a8c53c 100644
--- 
a/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java
+++ 
b/kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPosition.java
@@ -17,14 +17,13 @@
 
 package org.apache.shardingsphere.data.pipeline.common.ingest.position.pk.type;
 
+import com.google.common.base.Strings;
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.data.pipeline.common.ingest.position.pk.PrimaryKeyPosition;
 
 /**
  * String primary key position.
  */
-@RequiredArgsConstructor
 @Getter
 public final class StringPrimaryKeyPosition implements 
PrimaryKeyPosition<String> {
     
@@ -32,6 +31,11 @@ public final class StringPrimaryKeyPosition implements 
PrimaryKeyPosition<String
     
     private final String endValue;
     
+    public StringPrimaryKeyPosition(final String beginValue, final String 
endValue) {
+        this.beginValue = Strings.emptyToNull(beginValue);
+        this.endValue = Strings.emptyToNull(endValue);
+    }
+    
     @Override
     public String convert(final String value) {
         return value;
diff --git 
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java
 
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java
index d1e972c5cb6..f7139e02f56 100644
--- 
a/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java
+++ 
b/kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/common/ingest/position/pk/type/StringPrimaryKeyPositionTest.java
@@ -22,6 +22,7 @@ import org.junit.jupiter.api.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 class StringPrimaryKeyPositionTest {
     
@@ -36,4 +37,11 @@ class StringPrimaryKeyPositionTest {
     void assertToString() {
         assertThat(new StringPrimaryKeyPosition("hi", "jk").toString(), 
is("s,hi,jk"));
     }
+    
+    @Test
+    void assertEmptyToNull() {
+        StringPrimaryKeyPosition actual = (StringPrimaryKeyPosition) 
PrimaryKeyPositionFactory.newInstance("s,,");
+        assertNull(actual.getBeginValue());
+        assertNull(actual.getEndValue());
+    }
 }
diff --git 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
index fdadfb1cc52..37f9b4c6294 100644
--- 
a/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
+++ 
b/test/e2e/operation/pipeline/src/test/java/org/apache/shardingsphere/test/e2e/data/pipeline/cases/migration/general/MySQLMigrationGeneralE2EIT.java
@@ -83,6 +83,8 @@ class MySQLMigrationGeneralE2EIT extends 
AbstractMigrationE2EIT {
                     new 
E2EIncrementalTask(containerComposer.getSourceDataSource(), SOURCE_TABLE_NAME, 
new SnowflakeKeyGenerateAlgorithm(), containerComposer.getDatabaseType(), 30));
             
TimeUnit.SECONDS.timedJoin(containerComposer.getIncreaseTaskThread(), 30);
             containerComposer.sourceExecuteWithLog(String.format("INSERT INTO 
%s (order_id, user_id, status) VALUES (10000, 1, 'OK')", SOURCE_TABLE_NAME));
+            stopMigrationByJobId(containerComposer, orderJobId);
+            startMigrationByJobId(containerComposer, orderJobId);
             DataSource jdbcDataSource = 
containerComposer.generateShardingSphereDataSourceFromProxy();
             containerComposer.assertOrderRecordExist(jdbcDataSource, 
"t_order", 10000);
             assertMigrationSuccessById(containerComposer, orderJobId, 
"DATA_MATCH");

Reply via email to