You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by tw...@apache.org on 2021/12/06 08:13:16 UTC
[flink] 02/02: [hotfix][table-planner] Add class header comment to generated code
This is an automated email from the ASF dual-hosted git repository.
twalthr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git
commit 76b47b219dab18ddb41beb29fa8664110bdb891d
Author: Marios Trivyzas <ma...@gmail.com>
AuthorDate: Thu Dec 2 12:25:27 2021 +0100
[hotfix][table-planner] Add class header comment to generated code
Use a class header comment to add useful configuration variables that can
help debugging a generated class code. Added timezone and legacy behaviour
info in this comment on the generated class implementing CAST.
---
.../planner/codegen/CodeGeneratorContext.scala | 25 ++++++++++++++++++++++
.../planner/codegen/FunctionCodeGenerator.scala | 1 +
.../planner/codegen/calls/ScalarOperatorGens.scala | 6 ++++++
3 files changed, 32 insertions(+)
diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGeneratorContext.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGeneratorContext.scala
index 3be8032..6ddcbe7 100644
--- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGeneratorContext.scala
+++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/CodeGeneratorContext.scala
@@ -51,6 +51,10 @@ class CodeGeneratorContext(val tableConfig: TableConfig) {
// holding a list of objects that could be used passed into generated class
val references: mutable.ArrayBuffer[AnyRef] = new mutable.ArrayBuffer[AnyRef]()
+ // set of strings (lines) that will be concatenated into a single class header comment
+ private val reusableHeaderComments: mutable.LinkedHashSet[String] =
+ mutable.LinkedHashSet[String]()
+
// set of member statements that will be added only once
// we use a LinkedHashSet to keep the insertion order
private val reusableMemberStatements: mutable.LinkedHashSet[String] =
@@ -143,6 +147,16 @@ class CodeGeneratorContext(val tableConfig: TableConfig) {
def nullCheck: Boolean = tableConfig.getNullCheck
+
+ /**
+ * Add a line comment to [[reusableHeaderComments]] list which will be concatenated
+ * into a single class header comment.
+ * @param comment The comment to add for class header
+ */
+ def addReusableHeaderComment(comment: String): Unit = {
+ reusableHeaderComments.add(comment)
+ }
+
// ---------------------------------------------------------------------------------
// Local Variables for Code Split
// ---------------------------------------------------------------------------------
@@ -197,6 +211,17 @@ class CodeGeneratorContext(val tableConfig: TableConfig) {
// ---------------------------------------------------------------------------------
/**
+ * @return Comment to be added as a header comment on the generated class
+ */
+ def getClassHeaderComment(): String = {
+ s"""
+ |/*
+ | * ${reusableHeaderComments.mkString("\n * ")}
+ | */
+ """.stripMargin
+ }
+
+ /**
* @return code block of statements that need to be placed in the member area of the class
* (e.g. inner class definition)
*/
diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/FunctionCodeGenerator.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/FunctionCodeGenerator.scala
index 44a4c23..24c286f 100644
--- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/FunctionCodeGenerator.scala
+++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/FunctionCodeGenerator.scala
@@ -125,6 +125,7 @@ object FunctionCodeGenerator {
val funcCode =
j"""
+ ${ctx.getClassHeaderComment()}
public class $funcName
extends ${samHeader._1.getCanonicalName} {
diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala
index 045976c..61252f4 100644
--- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala
+++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/ScalarOperatorGens.scala
@@ -937,6 +937,12 @@ object ScalarOperatorGens {
operand: GeneratedExpression,
targetType: LogicalType)
: GeneratedExpression = {
+
+ ctx.addReusableHeaderComment(
+ s"Using option '${ExecutionConfigOptions.TABLE_EXEC_LEGACY_CAST_BEHAVIOUR.key()}':" +
+ s"'${isLegacyCastBehaviourEnabled(ctx)}'")
+ ctx.addReusableHeaderComment("Timezone: " + ctx.tableConfig.getLocalTimeZone)
+
// Try to use the new cast rules
val rule = CastRuleProvider.resolve(operand.resultType, targetType)
rule match {