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(
