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 d1f08ab3343c741d7668c76a709853d55e589abe
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Sat Jul 18 23:02:53 2026 +0200

    [FLINK-40182][table] Optimize code generated by `RawToStringCastRule`
---
 .../functions/casting/RawToStringCastRule.java     | 36 +++++++++++++---------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RawToStringCastRule.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RawToStringCastRule.java
index c80ddbb5901..58e412fb381 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RawToStringCastRule.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RawToStringCastRule.java
@@ -47,20 +47,16 @@ class RawToStringCastRule extends 
AbstractNullAwareCodeGeneratorCastRule<Object,
     if (!isNull$0) {
         java.lang.Object deserializedObj$0 = 
_myInput.toObject(typeSerializer$2);
         if (deserializedObj$0 != null) {
+            java.lang.String deserializedObjString$2 = 
deserializedObj$0.toString();
             java.lang.String resultString$1;
-            resultString$1 = deserializedObj$0.toString().toString();
-            if (deserializedObj$0.toString().length() > 12) {
-                resultString$1 = deserializedObj$0.toString().substring(0, 
java.lang.Math.min(deserializedObj$0.toString().length(), 12));
+            if (deserializedObjString$2.length() > 12) {
+                resultString$1 = deserializedObjString$2.substring(0, 12);
             } else {
-                if (resultString$1.length() < 12) {
-                    int padLength$2;
-                    padLength$2 = 12 - resultString$1.length();
-                    java.lang.StringBuilder sbPadding$3;
-                    sbPadding$3 = new java.lang.StringBuilder();
-                    for (int i$4 = 0; i$4 < padLength$2; i$4++) {
-                        sbPadding$3.append(" ");
-                    }
-                    resultString$1 = resultString$1 + sbPadding$3.toString();
+                resultString$1 = deserializedObjString$2.toString();
+                if (deserializedObjString$2.length() < 12) {
+                    int padLength$3;
+                    padLength$3 = 12 - deserializedObjString$2.length();
+                    resultString$1 = resultString$1 + " ".repeat(padLength$3);
                 }
             }
             result$1 = 
org.apache.flink.table.data.binary.BinaryStringData.fromString(resultString$1);
@@ -72,6 +68,9 @@ class RawToStringCastRule extends 
AbstractNullAwareCodeGeneratorCastRule<Object,
         result$1 = 
org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;
     }
 
+    returnTerm = result$1
+    isNullTerm = isNull$0
+
      */
     @Override
     protected String generateCodeBlockInternal(
@@ -86,6 +85,8 @@ class RawToStringCastRule extends 
AbstractNullAwareCodeGeneratorCastRule<Object,
                 CodeGenUtils.newName(codeGeneratorContext, "deserializedObj");
 
         final String resultStringTerm = 
CodeGenUtils.newName(codeGeneratorContext, "resultString");
+        final String deserializedObjStringTerm =
+                CodeGenUtils.newName(codeGeneratorContext, 
"deserializedObjString");
         final int length = LogicalTypeChecks.getLength(targetLogicalType);
 
         return new CastRuleUtils.CodeWriter()
@@ -97,12 +98,19 @@ class RawToStringCastRule extends 
AbstractNullAwareCodeGeneratorCastRule<Object,
                         deserializedObjTerm + " != null",
                         thenWriter ->
                                 
CharVarCharTrimPadCastRule.padAndTrimStringIfNeeded(
-                                                thenWriter,
+                                                // toString() on a 
deserialized RAW value is
+                                                // user-defined and can be 
arbitrarily expensive,
+                                                // so it's computed once here.
+                                                thenWriter.declStmt(
+                                                        String.class,
+                                                        
deserializedObjStringTerm,
+                                                        methodCall(
+                                                                
deserializedObjTerm, "toString")),
                                                 targetLogicalType,
                                                 context.legacyBehaviour(),
                                                 length,
                                                 resultStringTerm,
-                                                
methodCall(deserializedObjTerm, "toString"),
+                                                deserializedObjStringTerm,
                                                 
context.getCodeGeneratorContext())
                                         .assignStmt(
                                                 returnVariable,

Reply via email to