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/incubator-paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new e713d72be [core] Fix ArrayIndexOutOfBoundsException when sequenceGroup 
repeat defined with no field (#2010)
e713d72be is described below

commit e713d72be2945648336bb03b580793834fcd29a0
Author: pongandnoon <[email protected]>
AuthorDate: Tue Sep 19 10:17:28 2023 +0800

    [core] Fix ArrayIndexOutOfBoundsException when sequenceGroup repeat defined 
with no field (#2010)
---
 .../mergetree/compact/PartialUpdateMergeFunction.java  | 12 +++++++++++-
 .../compact/PartialUpdateMergeFunctionTest.java        | 18 ++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunction.java
 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunction.java
index bf21e5d40..1bc9d36f9 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunction.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunction.java
@@ -205,7 +205,17 @@ public class PartialUpdateMergeFunction implements 
MergeFunction<KeyValue> {
                     SequenceGenerator sequenceGen =
                             new SequenceGenerator(sequenceFieldName, rowType);
                     Arrays.stream(v.split(","))
-                            .map(fieldNames::indexOf)
+                            .map(
+                                    fieldName -> {
+                                        int field = 
fieldNames.indexOf(fieldName);
+                                        if (field == -1) {
+                                            throw new IllegalArgumentException(
+                                                    String.format(
+                                                            "Field %s can not 
be found in table schema",
+                                                            fieldName));
+                                        }
+                                        return field;
+                                    })
                             .forEach(
                                     field -> {
                                         if (fieldSequences.containsKey(field)) 
{
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunctionTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunctionTest.java
index 113aaac10..bfac6f629 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunctionTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/mergetree/compact/PartialUpdateMergeFunctionTest.java
@@ -90,6 +90,24 @@ public class PartialUpdateMergeFunctionTest {
         validate(func, 1, null, null, 6, null, null, 6);
     }
 
+    @Test
+    public void testSequenceGroupDefinedNoField() {
+        Options options = new Options();
+        options.set("fields.f3.sequence-group", "f1,f2,f7");
+        options.set("fields.f6.sequence-group", "f4,f5");
+        RowType rowType =
+                RowType.of(
+                        DataTypes.INT(),
+                        DataTypes.INT(),
+                        DataTypes.INT(),
+                        DataTypes.INT(),
+                        DataTypes.INT(),
+                        DataTypes.INT(),
+                        DataTypes.INT());
+        assertThatThrownBy(() -> PartialUpdateMergeFunction.factory(options, 
rowType))
+                .hasMessageContaining("can not be found in table schema");
+    }
+
     @Test
     public void testSequenceGroupRepeatDefine() {
         Options options = new Options();

Reply via email to