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


The following commit(s) were added to refs/heads/master by this push:
     new 32afcef2ec3 [FLINK-40160][table] Fix casting `NaN` to `FLOAT` or 
`DOUBLE`
32afcef2ec3 is described below

commit 32afcef2ec3cf7bdafb3f409683c475d4dade619
Author: Ramin Gharib <[email protected]>
AuthorDate: Fri Jul 17 15:07:58 2026 +0200

    [FLINK-40160][table] Fix casting `NaN` to `FLOAT` or `DOUBLE`
---
 .../org/apache/flink/table/planner/codegen/CodeGenUtils.scala     | 4 ++++
 .../apache/flink/table/planner/functions/CastFunctionITCase.java  | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git 
a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGenUtils.scala
 
b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGenUtils.scala
index ff924fe0f30..aacb8db5a0d 100644
--- 
a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGenUtils.scala
+++ 
b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGenUtils.scala
@@ -233,12 +233,16 @@ object CodeGenUtils {
       value match {
         case JFloat.NEGATIVE_INFINITY => "java.lang.Float.NEGATIVE_INFINITY"
         case JFloat.POSITIVE_INFINITY => "java.lang.Float.POSITIVE_INFINITY"
+        // NaN is not equal to itself, so it can't be matched by value like 
the infinities above.
+        case f: JFloat if f.isNaN => "java.lang.Float.NaN"
         case _ => value.toString + "f"
       }
     case _: JDouble =>
       value match {
         case JDouble.NEGATIVE_INFINITY => "java.lang.Double.NEGATIVE_INFINITY"
         case JDouble.POSITIVE_INFINITY => "java.lang.Double.POSITIVE_INFINITY"
+        // NaN is not equal to itself, so it can't be matched by value like 
the infinities above.
+        case d: JDouble if d.isNaN => "java.lang.Double.NaN"
         case _ => value.toString + "d"
       }
     case sd: StringData =>
diff --git 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/CastFunctionITCase.java
 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/CastFunctionITCase.java
index cb41ad083c7..6ad3ab7cb11 100644
--- 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/CastFunctionITCase.java
+++ 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/CastFunctionITCase.java
@@ -1415,6 +1415,14 @@ public class CastFunctionITCase extends 
BuiltInFunctionTestBase {
                         .build(),
                 CastTestSpecBuilder.testCastTo(FLOAT())
                         .fromCase(DOUBLE(), -1.7976931348623157E308d, 
Float.NEGATIVE_INFINITY)
+                        .fromCase(STRING(), "NaN", Float.NaN)
+                        .fromCase(STRING(), "Infinity", 
Float.POSITIVE_INFINITY)
+                        .fromCase(STRING(), "-Infinity", 
Float.NEGATIVE_INFINITY)
+                        .build(),
+                CastTestSpecBuilder.testCastTo(DOUBLE())
+                        .fromCase(STRING(), "NaN", Double.NaN)
+                        .fromCase(STRING(), "Infinity", 
Double.POSITIVE_INFINITY)
+                        .fromCase(STRING(), "-Infinity", 
Double.NEGATIVE_INFINITY)
                         .build(),
                 CastTestSpecBuilder.testCastTo(DECIMAL(38, 0))
                         .fromCase(

Reply via email to