[ https://issues.apache.org/jira/browse/FLINK-17117?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kurt Young updated FLINK-17117: ------------------------------- Component/s: (was: Table SQL / Planner) Table SQL / Runtime > There are an useless cast operation for sql on blink when generate code > ------------------------------------------------------------------------ > > Key: FLINK-17117 > URL: https://issues.apache.org/jira/browse/FLINK-17117 > Project: Flink > Issue Type: Improvement > Components: Table SQL / Runtime > Reporter: hehuiyuan > Assignee: hehuiyuan > Priority: Minor > Labels: pull-request-available, stale-assigned > Attachments: image-2020-04-13-19-44-19-174.png > > > !image-2020-04-13-19-44-19-174.png|width=641,height=305! > > This mehthod `generateOneInputStreamOperator` when OperatorCodeGenerator > generates SourceConversion: > {code:java} > @Override > public void processElement($STREAM_RECORD $ELEMENT) throws Exception { > $inputTypeTerm $inputTerm = ($inputTypeTerm) > ${converter(s"$ELEMENT.getValue()")}; > ${ctx.reusePerRecordCode()} > ${ctx.reuseLocalVariableCode()} > ${if (lazyInputUnboxingCode) "" else ctx.reuseInputUnboxingCode()} > $processCode > } > {code} > > {code:java} > $inputTypeTerm $inputTerm = ($inputTypeTerm) > ${converter(s"$ELEMENT.getValue()")}; > {code} > ScanUtil calls generateOneInputStreamOperator > {code:java} > val generatedOperator = > OperatorCodeGenerator.generateOneInputStreamOperator[Any, BaseRow]( > ctx, > convertName, > processCode, > outputRowType, > converter = inputTermConverter) > //inputTermConverter > val (inputTermConverter, inputRowType) = { > val convertFunc = CodeGenUtils.genToInternal(ctx, inputType) > internalInType match { > case rt: RowType => (convertFunc, rt) > case _ => ((record: String) => s"$GENERIC_ROW.of(${convertFunc(record)})", > RowType.of(internalInType)) > } > } > {code} > CodeGenUtils.scala : genToInternal > {code:java} > def genToInternal(ctx: CodeGeneratorContext, t: DataType): String => String = > { > val iTerm = boxedTypeTermForType(fromDataTypeToLogicalType(t)) > if (isConverterIdentity(t)) { > term => s"($iTerm) $term" > } else { > val eTerm = boxedTypeTermForExternalType(t) > val converter = ctx.addReusableObject( > DataFormatConverters.getConverterForDataType(t), > "converter") > term => s"($iTerm) $converter.toInternal(($eTerm) $term)" > } > } > {code} > > -- This message was sent by Atlassian Jira (v8.3.4#803005)