This is an automated email from the ASF dual-hosted git repository.

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new c92e64e26c [core] Refactor distinct in FieldListaggAgg
c92e64e26c is described below

commit c92e64e26cea6c3ae4c469a52c20ed81b20513a7
Author: JingsongLi <[email protected]>
AuthorDate: Tue Nov 25 15:20:22 2025 +0800

    [core] Refactor distinct in FieldListaggAgg
---
 .../compact/aggregate/FieldListaggAgg.java         | 47 +++++++++-------------
 1 file changed, 19 insertions(+), 28 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldListaggAgg.java
 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldListaggAgg.java
index def24e3ed6..c73352c0c4 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldListaggAgg.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/aggregate/FieldListaggAgg.java
@@ -23,11 +23,11 @@ import org.apache.paimon.data.BinaryString;
 import org.apache.paimon.types.VarCharType;
 import org.apache.paimon.utils.BinaryStringUtils;
 
-import org.apache.paimon.shade.guava30.com.google.common.collect.Lists;
-
-import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.List;
 
+import static 
org.apache.paimon.utils.BinaryStringUtils.splitByWholeSeparatorPreserveAllTokens;
+
 /** listagg aggregate a field of a row. */
 public class FieldListaggAgg extends FieldAggregator {
 
@@ -64,33 +64,24 @@ public class FieldListaggAgg extends FieldAggregator {
 
         if (distinct) {
             BinaryString delimiterBinaryString = 
BinaryString.fromString(delimiter);
-            BinaryString[] binaryStrings =
-                    BinaryStringUtils.splitByWholeSeparatorPreserveAllTokens(
-                            inFieldSD, delimiterBinaryString);
-
-            List<BinaryString> concatItems =
-                    Arrays.stream(binaryStrings)
-                            .filter(it -> it.getSizeInBytes() > 0 && 
!mergeFieldSD.contains(it))
-                            .collect(
-                                    () -> Lists.newArrayList(mergeFieldSD),
-                                    (acc, r) -> {
-                                        if (!acc.isEmpty()) {
-                                            acc.add(delimiterBinaryString);
-                                        }
-                                        acc.add(r);
-                                    },
-                                    (l, r) -> {
-                                        if (!l.isEmpty() && !r.isEmpty()) {
-                                            l.add(delimiterBinaryString);
-                                        }
-                                        l.addAll(r);
-                                    });
-
-            if (concatItems.size() == 1) {
-                return concatItems.get(0);
+
+            List<BinaryString> result = new ArrayList<>();
+            result.add(mergeFieldSD);
+            for (BinaryString str :
+                    splitByWholeSeparatorPreserveAllTokens(inFieldSD, 
delimiterBinaryString)) {
+                if (str.getSizeInBytes() == 0 || mergeFieldSD.contains(str)) {
+                    continue;
+                }
+
+                result.add(delimiterBinaryString);
+                result.add(str);
+            }
+
+            if (result.size() == 1) {
+                return result.get(0);
             }
 
-            return BinaryStringUtils.concat(concatItems);
+            return BinaryStringUtils.concat(result);
         }
 
         return BinaryStringUtils.concat(

Reply via email to