You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Hequn Cheng (JIRA)" <ji...@apache.org> on 2018/11/22 01:12:00 UTC

[jira] [Commented] (FLINK-10965) suggest that change $resultTypeTerm to Object at org.apache.flink.table.codegen.calls.ScalarFunctionCallGen:104

    [ https://issues.apache.org/jira/browse/FLINK-10965?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16695445#comment-16695445 ] 

Hequn Cheng commented on FLINK-10965:
-------------------------------------

{{getResultType}} has a higher priority than the result type of {{eval}}. Removing the {{getResultType}} method in your udf should solve your problem.

> suggest that change $resultTypeTerm to Object at org.apache.flink.table.codegen.calls.ScalarFunctionCallGen:104
> ---------------------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-10965
>                 URL: https://issues.apache.org/jira/browse/FLINK-10965
>             Project: Flink
>          Issue Type: Bug
>          Components: Table API &amp; SQL
>    Affects Versions: 1.5.5
>         Environment: 1.5.4
>            Reporter: shaomeng.wang
>            Priority: Major
>
> at org.apache.flink.table.codegen.calls.ScalarFunctionCallGen:104
>  
>  
> {code:java}
> val functionCallCode =
>  s"""
>  |${parameters.map(_.code).mkString("\n")}
>  |$resultTypeTerm $resultTerm = $functionReference.eval(
>  | ${parameters.map(_.resultTerm).mkString(", ")});
>  |""".stripMargin{code}
>  
>  
> when wrap a scalar function from another, I use the prototype of "eval" and "getResultType" as
>  
> {code:java}
> public Object eval(Object... objs) throws Exception
> public TypeInformation<?> getResultType(Class<?>[] signature) {
> {code}
>  
> but, in codegen, it is change to
>  
> {code:java}
> String reseult = eval(...){code}
>  
> when getResultType return Types.STRING
> and get error message as:
>  
>  
> {panel:title=error msg}
> Caused by: org.codehaus.commons.compiler.CompileException: Line 121, Column 13: Assignment conversion not possible from type "java.lang.Object" to type "double"
>  at org.codehaus.janino.UnitCompiler.compileError(UnitCompiler.java:11672)
>  at org.codehaus.janino.UnitCompiler.assignmentConversion(UnitCompiler.java:10528)
>  at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:3452)
>  at org.codehaus.janino.UnitCompiler.access$5200(UnitCompiler.java:212)
>  at org.codehaus.janino.UnitCompiler$9.visitAssignment(UnitCompiler.java:3416)
>  at org.codehaus.janino.UnitCompiler$9.visitAssignment(UnitCompiler.java:3396)
>  at org.codehaus.janino.Java$Assignment.accept(Java.java:4300)
>  at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:3396)
>  at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:2316)
>  at org.codehaus.janino.UnitCompiler.access$1700(UnitCompiler.java:212)
>  at org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1450)
>  at org.codehaus.janino.UnitCompiler$6.visitExpressionStatement(UnitCompiler.java:1443)
>  at org.codehaus.janino.Java$ExpressionStatement.accept(Java.java:2848)
>  at org.codehaus.janino.UnitCompiler.compile(UnitCompiler.java:1443)
>  at org.codehaus.janino.UnitCompiler.compileStatements(UnitCompiler.java:1523)
>  at org.codehaus.janino.UnitCompiler.compile2(UnitCompiler.java:1509)
>  at org.codehaus.janino.UnitCompiler.access$1600(UnitCompiler.java:212)
> {panel}
>  
>  
> the gen code is:
>  
>  
> {code:java}
> @Override
>  public void flatMap(Object _in1, org.apache.flink.util.Collector c) throws Exception {
>  org.apache.flink.types.Row in1 = (org.apache.flink.types.Row) _in1;
>  
> boolean isNull$1 = (java.lang.String) in1.getField(0) == null;
> java.lang.String result$0;
> if (isNull$1) {
>  result$0 = "";
> }
> else {
>  result$0 = (java.lang.String) (java.lang.String) in1.getField(0);
> }
>  
>  
>  
> java.lang.String result$2 = function_com$test$Test.eval(
>  isNull$1 ? null : (java.lang.String) result$0);
> boolean isNull$4 = result$2 == null;
> java.lang.String result$3;
> if (isNull$4) {
>  result$3 = "";
> }
> else {
>  result$3 = (java.lang.String) result$2;
> }
> if (isNull$4) {
>  out.setField(0, null);
> }
> else {
>  out.setField(0, result$3);
> }
> c.collect(out);
> }
> {code}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)