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(