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

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

commit 4938de931bc12012f09c0de483f8e8dd97bea915
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Sun Nov 1 11:22:02 2026 +0100

    [hotfix][table] Treat missing predicates in FilterPushDownSpec as empty
---
 .../plan/abilities/source/FilterPushDownSpec.java      |  9 +++++++--
 .../exec/serde/DynamicTableSourceSpecSerdeTest.java    | 18 ++++++++++++++++++
 .../testDeterministicFilterOnUpsertSourceIsAllowed.out |  3 +--
 .../testPythonAsyncFunctionInWhereClause.out           |  3 +--
 .../testPythonFunctionInWhereClause.out                |  3 +--
 5 files changed, 28 insertions(+), 8 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/abilities/source/FilterPushDownSpec.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/abilities/source/FilterPushDownSpec.java
index eab8eb4dbe6..1b54544d011 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/abilities/source/FilterPushDownSpec.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/abilities/source/FilterPushDownSpec.java
@@ -32,12 +32,15 @@ import org.apache.flink.table.types.logical.RowType;
 import 
org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonCreator;
 import 
org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnore;
 import 
org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import 
org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonInclude;
 import 
org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonProperty;
 import 
org.apache.flink.shaded.jackson2.com.fasterxml.jackson.annotation.JsonTypeName;
 
 import org.apache.calcite.rex.RexBuilder;
 import org.apache.calcite.rex.RexNode;
 
+import javax.annotation.Nullable;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
@@ -58,6 +61,7 @@ public final class FilterPushDownSpec extends 
SourceAbilitySpecBase {
     public static final String FIELD_NAME_PREDICATES = "predicates";
 
     @JsonProperty(FIELD_NAME_PREDICATES)
+    @JsonInclude(JsonInclude.Include.NON_EMPTY)
     private final List<RexNode> predicates;
 
     /**
@@ -73,8 +77,9 @@ public final class FilterPushDownSpec extends 
SourceAbilitySpecBase {
     }
 
     @JsonCreator
-    public FilterPushDownSpec(@JsonProperty(FIELD_NAME_PREDICATES) 
List<RexNode> predicates) {
-        this(predicates, true);
+    public FilterPushDownSpec(
+            @Nullable @JsonProperty(FIELD_NAME_PREDICATES) List<RexNode> 
predicates) {
+        this(predicates == null ? List.of() : predicates, true);
     }
 
     @JsonIgnore
diff --git 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/nodes/exec/serde/DynamicTableSourceSpecSerdeTest.java
 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/nodes/exec/serde/DynamicTableSourceSpecSerdeTest.java
index 086b96666c0..b6549434dbc 100644
--- 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/nodes/exec/serde/DynamicTableSourceSpecSerdeTest.java
+++ 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/nodes/exec/serde/DynamicTableSourceSpecSerdeTest.java
@@ -89,6 +89,7 @@ import static 
org.apache.flink.table.factories.FactoryUtil.FORMAT;
 import static 
org.apache.flink.table.factories.TestDynamicTableFactory.PASSWORD;
 import static org.apache.flink.table.factories.TestDynamicTableFactory.TARGET;
 import static org.apache.flink.table.factories.TestFormatFactory.DELIMITER;
+import static 
org.apache.flink.table.planner.plan.abilities.source.FilterPushDownSpec.FIELD_NAME_PREDICATES;
 import static 
org.apache.flink.table.planner.plan.nodes.exec.serde.JsonSerdeTestUtil.configuredSerdeContext;
 import static 
org.apache.flink.table.planner.plan.nodes.exec.serde.JsonSerdeTestUtil.toJson;
 import static 
org.apache.flink.table.planner.plan.nodes.exec.serde.JsonSerdeTestUtil.toObject;
@@ -401,6 +402,23 @@ public class DynamicTableSourceSpecSerdeTest {
         assertThat(toObject(serdeCtx, jsonWithEmpty, 
SourceAbilitySpec.class)).isEqualTo(expected);
     }
 
+    @Test
+    void testFilterPushDownSpecWithEmptyPredicates() throws IOException {
+        SerdeContext serdeCtx = configuredSerdeContext();
+        FilterPushDownSpec expected = new 
FilterPushDownSpec(Collections.emptyList());
+
+        String json = toJson(serdeCtx, expected);
+        assertThat(json).doesNotContain(FIELD_NAME_PREDICATES);
+        assertThat(toObject(serdeCtx, json, 
SourceAbilitySpec.class)).isEqualTo(expected);
+
+        assertThat(
+                        toObject(
+                                serdeCtx,
+                                
"{\"type\":\"FilterPushDown\",\"predicates\":[]}",
+                                SourceAbilitySpec.class))
+                .isEqualTo(expected);
+    }
+
     @Test
     void testDynamicTableSourceSpecSerdeWithEnrichmentOptions() throws 
Exception {
         // Test model
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/analyze/NonDeterministicUpdateAnalyzerTest_jsonplan/testDeterministicFilterOnUpsertSourceIsAllowed.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/analyze/NonDeterministicUpdateAnalyzerTest_jsonplan/testDeterministicFilterOnUpsertSourceIsAllowed.out
index d818ee13db9..a1a52626ef7 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/analyze/NonDeterministicUpdateAnalyzerTest_jsonplan/testDeterministicFilterOnUpsertSourceIsAllowed.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/analyze/NonDeterministicUpdateAnalyzerTest_jsonplan/testDeterministicFilterOnUpsertSourceIsAllowed.out
@@ -8,8 +8,7 @@
         "identifier" : "`default_catalog`.`default_database`.`upsert_src3`"
       },
       "abilities" : [ {
-        "type" : "FilterPushDown",
-        "predicates" : [ ]
+        "type" : "FilterPushDown"
       } ]
     },
     "outputType" : "ROW<`a` INT NOT NULL, `b` BIGINT, `c` 
VARCHAR(2147483647)>",
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonAsyncCalcJsonPlanTest_jsonplan/testPythonAsyncFunctionInWhereClause.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonAsyncCalcJsonPlanTest_jsonplan/testPythonAsyncFunctionInWhereClause.out
index fa06e984135..a7869b0a91b 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonAsyncCalcJsonPlanTest_jsonplan/testPythonAsyncFunctionInWhereClause.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonAsyncCalcJsonPlanTest_jsonplan/testPythonAsyncFunctionInWhereClause.out
@@ -29,8 +29,7 @@
         }
       },
       "abilities" : [ {
-        "type" : "FilterPushDown",
-        "predicates" : [ ]
+        "type" : "FilterPushDown"
       }, {
         "type" : "ProjectPushDown",
         "projectedFields" : [ [ 0 ], [ 1 ] ],
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonCalcJsonPlanTest_jsonplan/testPythonFunctionInWhereClause.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonCalcJsonPlanTest_jsonplan/testPythonFunctionInWhereClause.out
index 3def935ce82..6648b89a5db 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonCalcJsonPlanTest_jsonplan/testPythonFunctionInWhereClause.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonCalcJsonPlanTest_jsonplan/testPythonFunctionInWhereClause.out
@@ -29,8 +29,7 @@
         }
       },
       "abilities" : [ {
-        "type" : "FilterPushDown",
-        "predicates" : [ ]
+        "type" : "FilterPushDown"
       }, {
         "type" : "ProjectPushDown",
         "projectedFields" : [ [ 0 ], [ 1 ] ],

Reply via email to