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 9e2d2b8ed0d90d1c6277d5eb630b47f9a4d5fc54
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Mon Jan 19 09:49:23 2026 +0100

    [FLINK-38938][table] Do not put empty operand list into compiled plan
    
    This closes #27439.
---
 .../table/planner/functions/sql/FlinkSqlOperatorTable.java   |  1 +
 .../plan/nodes/exec/serde/RexNodeJsonDeserializer.java       | 11 ++++++++---
 .../planner/plan/nodes/exec/serde/RexNodeJsonSerializer.java | 12 +++++++-----
 .../testEventTimeHopWindow.out                               |  1 -
 .../testEventTimeSessionWindow.out                           |  1 -
 .../testEventTimeTumbleWindow.out                            |  1 -
 .../testProcTimeHopWindow.out                                |  2 --
 .../testProcTimeSessionWindow.out                            |  2 --
 .../testProcTimeTumbleWindow.out                             |  2 --
 .../testProcTimeBoundedNonPartitionedRangeOver.out           |  2 --
 .../testProcTimeBoundedPartitionedRangeOver.out              |  2 --
 ...ProcTimeBoundedPartitionedRowsOverWithBuiltinProctime.out |  2 --
 .../testProcTimeUnboundedPartitionedRangeOver.out            |  2 --
 .../testRowTimeBoundedPartitionedRowsOver.out                |  1 -
 14 files changed, 16 insertions(+), 26 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
index 53dcf68c5ea..817284846d1 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/sql/FlinkSqlOperatorTable.java
@@ -116,6 +116,7 @@ public class FlinkSqlOperatorTable extends 
ReflectiveSqlOperatorTable {
                         SqlTypeName.TIMESTAMP_WITH_LOCAL_TIME_ZONE,
                         isBatchMode,
                         3) {
+
                     @Override
                     public SqlSyntax getSyntax() {
                         return SqlSyntax.FUNCTION;
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonDeserializer.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonDeserializer.java
index f06d2bfcfd4..109358c9d30 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonDeserializer.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonDeserializer.java
@@ -345,9 +345,14 @@ final class RexNodeJsonDeserializer extends 
StdDeserializer<RexNode> {
             throws IOException {
         final SqlOperator operator = deserializeSqlOperator(jsonNode, 
serdeContext);
         final ArrayNode operandNodes = (ArrayNode) 
jsonNode.get(FIELD_NAME_OPERANDS);
-        final List<RexNode> rexOperands = new ArrayList<>();
-        for (JsonNode node : operandNodes) {
-            rexOperands.add(deserialize(node, serdeContext));
+        final List<RexNode> rexOperands;
+        if (operandNodes == null) {
+            rexOperands = List.of();
+        } else {
+            rexOperands = new ArrayList<>();
+            for (JsonNode node : operandNodes) {
+                rexOperands.add(deserialize(node, serdeContext));
+            }
         }
         final RelDataType callType;
         if (jsonNode.has(FIELD_NAME_TYPE)) {
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonSerializer.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonSerializer.java
index 23b11bd531f..aa4fad24f86 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonSerializer.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/plan/nodes/exec/serde/RexNodeJsonSerializer.java
@@ -359,12 +359,14 @@ final class RexNodeJsonSerializer extends 
StdSerializer<RexNode> {
                 gen,
                 serializerProvider,
                 compilationStrategy == CatalogPlanCompilation.ALL);
-        gen.writeFieldName(FIELD_NAME_OPERANDS);
-        gen.writeStartArray();
-        for (RexNode operand : call.getOperands()) {
-            serializerProvider.defaultSerializeValue(operand, gen);
+        if (!call.getOperands().isEmpty()) {
+            gen.writeFieldName(FIELD_NAME_OPERANDS);
+            gen.writeStartArray();
+            for (RexNode operand : call.getOperands()) {
+                serializerProvider.defaultSerializeValue(operand, gen);
+            }
+            gen.writeEndArray();
         }
-        gen.writeEndArray();
         serializerProvider.defaultSerializeField(FIELD_NAME_TYPE, 
call.getType(), gen);
         gen.writeEndObject();
     }
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeHopWindow.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeHopWindow.out
index 711d77a9810..bc5c9365b82 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeHopWindow.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeHopWindow.out
@@ -40,7 +40,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeSessionWindow.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeSessionWindow.out
index 80528083d31..80201370927 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeSessionWindow.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeSessionWindow.out
@@ -40,7 +40,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeTumbleWindow.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeTumbleWindow.out
index 625404e3afc..fdb06305cb3 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeTumbleWindow.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testEventTimeTumbleWindow.out
@@ -40,7 +40,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeHopWindow.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeHopWindow.out
index e9092e8a395..e0334458a78 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeHopWindow.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeHopWindow.out
@@ -40,7 +40,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
@@ -108,7 +107,6 @@
     }, {
       "kind" : "CALL",
       "internalName" : "$PROCTIME$1",
-      "operands" : [ ],
       "type" : {
         "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
         "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeSessionWindow.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeSessionWindow.out
index ca4a4cbd1a8..cd2e2b67f30 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeSessionWindow.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeSessionWindow.out
@@ -40,7 +40,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
@@ -108,7 +107,6 @@
     }, {
       "kind" : "CALL",
       "internalName" : "$PROCTIME$1",
-      "operands" : [ ],
       "type" : {
         "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
         "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeTumbleWindow.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeTumbleWindow.out
index 1be4cb3d7a4..32b9614edc9 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeTumbleWindow.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonGroupWindowAggregateJsonPlanTest_jsonplan/testProcTimeTumbleWindow.out
@@ -40,7 +40,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
@@ -108,7 +107,6 @@
     }, {
       "kind" : "CALL",
       "internalName" : "$PROCTIME$1",
-      "operands" : [ ],
       "type" : {
         "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
         "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedNonPartitionedRangeOver.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedNonPartitionedRangeOver.out
index 44dae4c0af9..670a374ed8d 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedNonPartitionedRangeOver.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedNonPartitionedRangeOver.out
@@ -31,7 +31,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
@@ -82,7 +81,6 @@
     }, {
       "kind" : "CALL",
       "internalName" : "$PROCTIME$1",
-      "operands" : [ ],
       "type" : {
         "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
         "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRangeOver.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRangeOver.out
index eba924fca5e..6cd81cf7c4b 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRangeOver.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRangeOver.out
@@ -31,7 +31,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
@@ -86,7 +85,6 @@
     }, {
       "kind" : "CALL",
       "internalName" : "$PROCTIME$1",
-      "operands" : [ ],
       "type" : {
         "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
         "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRowsOverWithBuiltinProctime.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRowsOverWithBuiltinProctime.out
index 1d7a1d15ce9..87db9c2ee91 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRowsOverWithBuiltinProctime.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeBoundedPartitionedRowsOverWithBuiltinProctime.out
@@ -31,7 +31,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
@@ -130,7 +129,6 @@
     }, {
       "kind" : "CALL",
       "internalName" : "$PROCTIME$1",
-      "operands" : [ ],
       "type" : {
         "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
         "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeUnboundedPartitionedRangeOver.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeUnboundedPartitionedRangeOver.out
index 3252699022c..52a537df698 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeUnboundedPartitionedRangeOver.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testProcTimeUnboundedPartitionedRangeOver.out
@@ -31,7 +31,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,
@@ -86,7 +85,6 @@
     }, {
       "kind" : "CALL",
       "internalName" : "$PROCTIME$1",
-      "operands" : [ ],
       "type" : {
         "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
         "nullable" : false,
diff --git 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testRowTimeBoundedPartitionedRowsOver.out
 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testRowTimeBoundedPartitionedRowsOver.out
index d44f5a0aac4..b38d92f5b80 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testRowTimeBoundedPartitionedRowsOver.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/org/apache/flink/table/planner/plan/nodes/exec/stream/PythonOverAggregateJsonPlanTest_jsonplan/testRowTimeBoundedPartitionedRowsOver.out
@@ -31,7 +31,6 @@
                 "rexNode" : {
                   "kind" : "CALL",
                   "internalName" : "$PROCTIME$1",
-                  "operands" : [ ],
                   "type" : {
                     "type" : "TIMESTAMP_WITH_LOCAL_TIME_ZONE",
                     "nullable" : false,

Reply via email to