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 198c376d2d [core] Let CompoundFunction be a separate class
198c376d2d is described below

commit 198c376d2d9f7a32c7edfde07dcc0afe23499be1
Author: JingsongLi <[email protected]>
AuthorDate: Thu Feb 26 10:46:49 2026 +0800

    [core] Let CompoundFunction be a separate class
---
 .../main/java/org/apache/paimon/predicate/And.java |  4 +-
 .../apache/paimon/predicate/CompoundFunction.java  | 91 ++++++++++++++++++++++
 .../apache/paimon/predicate/CompoundPredicate.java | 69 +---------------
 .../main/java/org/apache/paimon/predicate/Or.java  |  4 +-
 .../apache/paimon/predicate/PredicateBuilder.java  |  2 +-
 .../paimon/predicate/RowIdPredicateVisitor.java    |  2 +-
 6 files changed, 100 insertions(+), 72 deletions(-)

diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/And.java 
b/paimon-common/src/main/java/org/apache/paimon/predicate/And.java
index 38e891d76c..ac9c63e9f4 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/And.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/And.java
@@ -27,8 +27,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
-/** A {@link CompoundPredicate.Function} to eval and. */
-public class And extends CompoundPredicate.Function {
+/** A {@link CompoundFunction} to eval and. */
+public class And extends CompoundFunction {
 
     private static final long serialVersionUID = 1L;
 
diff --git 
a/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundFunction.java 
b/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundFunction.java
new file mode 100644
index 0000000000..38933c4519
--- /dev/null
+++ 
b/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundFunction.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.paimon.predicate;
+
+import org.apache.paimon.data.InternalArray;
+import org.apache.paimon.data.InternalRow;
+
+import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonCreator;
+import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonValue;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Optional;
+
+/** Evaluate the predicate result based on multiple {@link Predicate}s. */
+public abstract class CompoundFunction implements Serializable {
+
+    @JsonCreator
+    public static CompoundFunction fromJson(String name) throws IOException {
+        switch (name) {
+            case And.NAME:
+                return And.INSTANCE;
+            case Or.NAME:
+                return Or.INSTANCE;
+            default:
+                throw new IllegalArgumentException(
+                        "Could not resolve compound predicate function '" + 
name + "'");
+        }
+    }
+
+    @JsonValue
+    public String toJson() {
+        if (this instanceof And) {
+            return And.NAME;
+        } else if (this instanceof Or) {
+            return Or.NAME;
+        } else {
+            throw new IllegalArgumentException(
+                    "Unknown compound predicate function class for JSON 
serialization: "
+                            + getClass());
+        }
+    }
+
+    public abstract boolean test(InternalRow row, List<Predicate> children);
+
+    public abstract boolean test(
+            long rowCount,
+            InternalRow minValues,
+            InternalRow maxValues,
+            InternalArray nullCounts,
+            List<Predicate> children);
+
+    public abstract Optional<Predicate> negate(List<Predicate> children);
+
+    public abstract <T> T visit(FunctionVisitor<T> visitor, List<T> children);
+
+    @Override
+    public int hashCode() {
+        return this.getClass().getName().hashCode();
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        return o != null && getClass() == o.getClass();
+    }
+
+    @Override
+    public String toString() {
+        return getClass().getSimpleName();
+    }
+}
diff --git 
a/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
 
b/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
index 1f5094a2f9..5b95b67ee5 100644
--- 
a/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
+++ 
b/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
@@ -23,10 +23,7 @@ import org.apache.paimon.data.InternalRow;
 
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonCreator;
 import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonProperty;
-import 
org.apache.paimon.shade.jackson2.com.fasterxml.jackson.annotation.JsonValue;
 
-import java.io.IOException;
-import java.io.Serializable;
 import java.util.List;
 import java.util.Objects;
 import java.util.Optional;
@@ -43,20 +40,20 @@ public class CompoundPredicate implements Predicate {
     private static final String FIELD_CHILDREN = "children";
 
     @JsonProperty(FIELD_FUNCTION)
-    private final Function function;
+    private final CompoundFunction function;
 
     @JsonProperty(FIELD_CHILDREN)
     private final List<Predicate> children;
 
     @JsonCreator
     public CompoundPredicate(
-            @JsonProperty(FIELD_FUNCTION) Function function,
+            @JsonProperty(FIELD_FUNCTION) CompoundFunction function,
             @JsonProperty(FIELD_CHILDREN) List<Predicate> children) {
         this.function = function;
         this.children = children;
     }
 
-    public Function function() {
+    public CompoundFunction function() {
         return function;
     }
 
@@ -103,64 +100,4 @@ public class CompoundPredicate implements Predicate {
     public String toString() {
         return function + "(" + children + ")";
     }
-
-    /** Evaluate the predicate result based on multiple {@link Predicate}s. */
-    public abstract static class Function implements Serializable {
-        @JsonCreator
-        public static Function fromJson(String name) throws IOException {
-            switch (name) {
-                case And.NAME:
-                    return And.INSTANCE;
-                case Or.NAME:
-                    return Or.INSTANCE;
-                default:
-                    throw new IllegalArgumentException(
-                            "Could not resolve compound predicate function '" 
+ name + "'");
-            }
-        }
-
-        @JsonValue
-        public String toJson() {
-            if (this instanceof And) {
-                return And.NAME;
-            } else if (this instanceof Or) {
-                return Or.NAME;
-            } else {
-                throw new IllegalArgumentException(
-                        "Unknown compound predicate function class for JSON 
serialization: "
-                                + getClass());
-            }
-        }
-
-        public abstract boolean test(InternalRow row, List<Predicate> 
children);
-
-        public abstract boolean test(
-                long rowCount,
-                InternalRow minValues,
-                InternalRow maxValues,
-                InternalArray nullCounts,
-                List<Predicate> children);
-
-        public abstract Optional<Predicate> negate(List<Predicate> children);
-
-        public abstract <T> T visit(FunctionVisitor<T> visitor, List<T> 
children);
-
-        @Override
-        public int hashCode() {
-            return this.getClass().getName().hashCode();
-        }
-
-        @Override
-        public boolean equals(Object o) {
-            if (this == o) {
-                return true;
-            }
-            return o != null && getClass() == o.getClass();
-        }
-
-        @Override
-        public String toString() {
-            return getClass().getSimpleName();
-        }
-    }
 }
diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java 
b/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java
index 20b9a8f339..47f10479e9 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java
@@ -27,8 +27,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
-/** A {@link CompoundPredicate.Function} to eval or. */
-public class Or extends CompoundPredicate.Function {
+/** A {@link CompoundFunction} to eval or. */
+public class Or extends CompoundFunction {
 
     private static final long serialVersionUID = 1L;
 
diff --git 
a/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java 
b/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java
index 79c26fc351..b0d52357ac 100644
--- 
a/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java
+++ 
b/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java
@@ -310,7 +310,7 @@ public class PredicateBuilder {
     }
 
     private static void splitCompound(
-            CompoundPredicate.Function function, Predicate predicate, 
List<Predicate> result) {
+            CompoundFunction function, Predicate predicate, List<Predicate> 
result) {
         if (predicate instanceof CompoundPredicate
                 && ((CompoundPredicate) 
predicate).function().equals(function)) {
             for (Predicate child : ((CompoundPredicate) predicate).children()) 
{
diff --git 
a/paimon-common/src/main/java/org/apache/paimon/predicate/RowIdPredicateVisitor.java
 
b/paimon-common/src/main/java/org/apache/paimon/predicate/RowIdPredicateVisitor.java
index bc5f8ffeb9..d0ccf6600f 100644
--- 
a/paimon-common/src/main/java/org/apache/paimon/predicate/RowIdPredicateVisitor.java
+++ 
b/paimon-common/src/main/java/org/apache/paimon/predicate/RowIdPredicateVisitor.java
@@ -71,7 +71,7 @@ public class RowIdPredicateVisitor implements 
PredicateVisitor<Optional<List<Ran
 
     @Override
     public Optional<List<Range>> visit(CompoundPredicate predicate) {
-        CompoundPredicate.Function function = predicate.function();
+        CompoundFunction function = predicate.function();
         Optional<List<Range>> rowIds = Optional.empty();
         // `And` means we should get the intersection of all children.
         if (function instanceof And) {

Reply via email to