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 ] ],
