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 2de0eaf5eff8f73175514527df28aa8abb8ec73e
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Sat Jul 18 19:05:15 2026 +0200

    [FLINK-40182][table] Optimize code generated by `CharVarCharTrimPadCastRule`
---
 .../casting/CharVarCharTrimPadCastRule.java        | 61 ++++++++-------------
 .../functions/casting/RowToStringCastRule.java     | 62 +++++++++++-----------
 2 files changed, 52 insertions(+), 71 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CharVarCharTrimPadCastRule.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CharVarCharTrimPadCastRule.java
index b3d0b46b933..1c60f26eac3 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CharVarCharTrimPadCastRule.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CharVarCharTrimPadCastRule.java
@@ -29,9 +29,9 @@ import org.apache.flink.table.types.logical.VarCharType;
 import org.apache.flink.table.types.logical.utils.LogicalTypeChecks;
 
 import static org.apache.flink.table.planner.codegen.CodeGenUtils.newName;
-import static 
org.apache.flink.table.planner.functions.casting.CastRuleUtils.constructorCall;
 import static 
org.apache.flink.table.planner.functions.casting.CastRuleUtils.methodCall;
 import static 
org.apache.flink.table.planner.functions.casting.CastRuleUtils.staticCall;
+import static 
org.apache.flink.table.planner.functions.casting.CastRuleUtils.strLiteral;
 import static org.apache.flink.table.types.logical.VarCharType.STRING_TYPE;
 
 /**
@@ -179,10 +179,6 @@ class CharVarCharTrimPadCastRule
         return methodCall(strTerm, "length") + " > " + targetLength;
     }
 
-    static String stringShouldPad(String strTerm, int targetLength) {
-        return methodCall(strTerm, "length") + " < " + targetLength;
-    }
-
     static boolean couldTrim(int targetLength) {
         return targetLength < VarCharType.MAX_LENGTH;
     }
@@ -199,8 +195,7 @@ class CharVarCharTrimPadCastRule
             String resultStringTerm,
             String builderTerm,
             CodeGeneratorContext codeGeneratorContext) {
-        writer.declStmt(String.class, resultStringTerm)
-                .assignStmt(resultStringTerm, methodCall(builderTerm, 
"toString"));
+        writer.declStmt(String.class, resultStringTerm);
 
         // Trim and Pad if needed
         if (!legacyBehaviour && (couldTrim(length) || couldPad(targetType, 
length))) {
@@ -209,23 +204,21 @@ class CharVarCharTrimPadCastRule
                     thenWriter ->
                             thenWriter.assignStmt(
                                     resultStringTerm,
-                                    methodCall(
-                                            builderTerm,
-                                            "substring",
-                                            0,
-                                            staticCall(
-                                                    Math.class,
-                                                    "min",
-                                                    methodCall(builderTerm, 
"length"),
-                                                    length))),
-                    elseWriter ->
-                            padStringIfNeeded(
-                                    elseWriter,
-                                    targetType,
-                                    legacyBehaviour,
-                                    length,
-                                    resultStringTerm,
-                                    codeGeneratorContext));
+                                    methodCall(builderTerm, "substring", 0, 
length)),
+                    elseWriter -> {
+                        elseWriter.assignStmt(
+                                resultStringTerm, methodCall(builderTerm, 
"toString"));
+                        padStringIfNeeded(
+                                elseWriter,
+                                targetType,
+                                legacyBehaviour,
+                                length,
+                                resultStringTerm,
+                                methodCall(builderTerm, "length"),
+                                codeGeneratorContext);
+                    });
+        } else {
+            writer.assignStmt(resultStringTerm, methodCall(builderTerm, 
"toString"));
         }
         return writer;
     }
@@ -236,34 +229,24 @@ class CharVarCharTrimPadCastRule
             boolean legacyBehaviour,
             int length,
             String returnTerm,
+            String currentLengthTerm,
             CodeGeneratorContext codeGeneratorContext) {
 
         // Pad if needed
         if (!legacyBehaviour && couldPad(targetType, length)) {
             final String padLength = newName(codeGeneratorContext, 
"padLength");
-            final String sbPadding = newName(codeGeneratorContext, 
"sbPadding");
             writer.ifStmt(
-                    stringShouldPad(returnTerm, length),
+                    currentLengthTerm + " < " + length,
                     thenWriter ->
                             thenWriter
                                     .declStmt(int.class, padLength)
-                                    .assignStmt(
-                                            padLength,
-                                            length + " - " + 
methodCall(returnTerm, "length"))
-                                    .declStmt(StringBuilder.class, sbPadding)
-                                    .assignStmt(sbPadding, 
constructorCall(StringBuilder.class))
-                                    .forStmt(
-                                            padLength,
-                                            (idx, loopWriter) ->
-                                                    loopWriter.stmt(
-                                                            methodCall(
-                                                                    sbPadding, 
"append", "\" \"")),
-                                            codeGeneratorContext)
+                                    .assignStmt(padLength, length + " - " + 
currentLengthTerm)
                                     .assignStmt(
                                             returnTerm,
                                             returnTerm
                                                     + " + "
-                                                    + methodCall(sbPadding, 
"toString")));
+                                                    + methodCall(
+                                                            strLiteral(" "), 
"repeat", padLength)));
         }
     }
 }
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RowToStringCastRule.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RowToStringCastRule.java
index 358fdfea7f2..da50c0e550c 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RowToStringCastRule.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/RowToStringCastRule.java
@@ -57,55 +57,53 @@ class RowToStringCastRule extends 
AbstractNullAwareCodeGeneratorCastRule<ArrayDa
 
     isNull$0 = _myInputIsNull;
     if (!isNull$0) {
-        builder$1.setLength(0);
-        builder$1.append("(");
-        int f0Value$3 = -1;
-        boolean f0IsNull$4 = _myInput.isNullAt(0);
-        if (!f0IsNull$4) {
-            f0Value$3 = _myInput.getInt(0);
-            isNull$2 = f0IsNull$4;
+        builder$0.setLength(0);
+        builder$0.append("(");
+        int f0Value$2 = -1;
+        boolean f0IsNull$3 = _myInput.isNullAt(0);
+        if (!f0IsNull$3) {
+            f0Value$2 = _myInput.getInt(0);
+            isNull$2 = false;
             if (!isNull$2) {
-                result$3 = 
org.apache.flink.table.data.binary.BinaryStringData.fromString("" + f0Value$3);
+                result$3 = 
org.apache.flink.table.data.binary.BinaryStringData.fromString("" + f0Value$2);
                 isNull$2 = result$3 == null;
             } else {
                 result$3 = 
org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;
             }
-            builder$1.append(result$3);
+            builder$0.append(result$3);
         } else {
-            builder$1.append("NULL");
+            builder$0.append("NULL");
         }
-        builder$1.append(", ");
-        org.apache.flink.table.data.binary.BinaryStringData f1Value$5 = 
org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;
-        boolean f1IsNull$6 = _myInput.isNullAt(1);
-        if (!f1IsNull$6) {
-            f1Value$5 = ((org.apache.flink.table.data.binary.BinaryStringData) 
_myInput.getString(1));
-            builder$1.append(f1Value$5);
+        builder$0.append(", ");
+        org.apache.flink.table.data.binary.BinaryStringData f1Value$4 = 
org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;
+        boolean f1IsNull$5 = _myInput.isNullAt(1);
+        if (!f1IsNull$5) {
+            f1Value$4 = ((org.apache.flink.table.data.binary.BinaryStringData) 
_myInput.getString(1));
+            builder$0.append(f1Value$4);
         } else {
-            builder$1.append("NULL");
+            builder$0.append("NULL");
         }
-        builder$1.append(")");
-        java.lang.String resultString$2;
-        resultString$2 = builder$1.toString();
-        if (builder$1.length() > 12) {
-            resultString$2 = builder$1.substring(0, 
java.lang.Math.min(builder$1.length(), 12));
+        builder$0.append(")");
+        java.lang.String resultString$1;
+        if (builder$0.length() > 12) {
+            resultString$1 = builder$0.substring(0, 12);
         } else {
-            if (resultString$2.length() < 12) {
-                int padLength$7;
-                padLength$7 = 12 - resultString$2.length();
-                java.lang.StringBuilder sbPadding$8;
-                sbPadding$8 = new java.lang.StringBuilder();
-                for (int i$9 = 0; i$9 < padLength$7; i$9++) {
-                    sbPadding$8.append(" ");
-                }
-                resultString$2 = resultString$2 + sbPadding$8.toString();
+            resultString$1 = builder$0.toString();
+            if (builder$0.length() < 12) {
+                int padLength$6;
+                padLength$6 = 12 - builder$0.length();
+                resultString$1 = resultString$1 + " ".repeat(padLength$6);
             }
         }
-        result$1 = 
org.apache.flink.table.data.binary.BinaryStringData.fromString(resultString$2);
+        result$1 = 
org.apache.flink.table.data.binary.BinaryStringData.fromString(resultString$1);
         isNull$0 = result$1 == null;
     } else {
         result$1 = 
org.apache.flink.table.data.binary.BinaryStringData.EMPTY_UTF8;
     }
 
+    returnTerm = result$1
+    isNullTerm = isNull$0
+
     */
     @Override
     protected String generateCodeBlockInternal(

Reply via email to