rionmonster commented on code in PR #28437:
URL: https://github.com/apache/flink/pull/28437#discussion_r3707931610


##########
flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/inference/TypeInferenceUtil.java:
##########
@@ -155,11 +158,59 @@ private static CallContext castArgumentsInternal(
                                 "Invalid argument type at position %d. Data 
type %s expected but %s passed.",
                                 pos, expectedType, actualType));
             }
+
+            // Beyond type-level castability, a constant DECIMAL literal must 
also fit the
+            // expected type on the value level.
+            if (throwOnInferInputFailure) {
+                validateDecimalLiteralFitsExpectedType(callContext, pos, 
expectedType);
+            }
         }
 
         return castCallContext;
     }
 
+    /**
+     * Validates that a constant {@code DECIMAL} literal argument fits the 
expected type on the
+     * value level and not only on the type level. For example, {@code 
123.456} is implicitly
+     * castable to a {@code DECIMAL(2, 2)} but would otherwise be silently 
reduced to {@code NULL}
+     * during constant folding instead of raising a type error.
+     *
+     * <p>Only {@code DECIMAL} is covered here; other value-level overflows 
(e.g. {@code CHAR}
+     * overruns or out-of-range integer literals) are out of scope for this 
check.
+     */
+    private static void validateDecimalLiteralFitsExpectedType(
+            CallContext callContext, int pos, DataType expectedType) {
+        if (!expectedType.getLogicalType().is(LogicalTypeRoot.DECIMAL)) {

Review Comment:
   Good catch @Timm0!
   
   I was able to confirm this behavior and swapped out the type-root check with 
an `instanceof DecimalType`. I also went ahead and added in a separate 
regression test to reproduce the `ClassCastException` (and ensure the new guard 
prevents it).



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to