You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "xuekaiqi (Jira)" <ji...@apache.org> on 2020/09/21 06:15:00 UTC

[jira] [Resolved] (KYLIN-4755) Error while compiling generated Java code when using Kylin UDF in "case when"

     [ https://issues.apache.org/jira/browse/KYLIN-4755?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

xuekaiqi resolved KYLIN-4755.
-----------------------------
    Resolution: Fixed

> Error while compiling generated Java code when using Kylin UDF in "case when"
> -----------------------------------------------------------------------------
>
>                 Key: KYLIN-4755
>                 URL: https://issues.apache.org/jira/browse/KYLIN-4755
>             Project: Kylin
>          Issue Type: Bug
>          Components: Query Engine
>    Affects Versions: v3.1.0
>            Reporter: Guangxu Cheng
>            Assignee: Guangxu Cheng
>            Priority: Major
>             Fix For: v3.1.1
>
>
> SQL:
> {code:sql}
> select case when TRANS_ID > 0 then concat('a','b') 
> else version() 
> end
> from KYLIN_SALES
> {code}
> Error message:
> {panel}
> Error while compiling generated Java code:
> org.apache.calcite.DataContext root;
> public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root0) {
>   root = root0;
>   final org.apache.calcite.linq4j.Enumerable _inputEnumerable = ((org.apache.kylin.query.schema.OLAPTable) root.getRootSchema().getSubSchema("DEFAULT").getTable("KYLIN_SALES")).executeOLAPQuery(root, 0);
>   final org.apache.calcite.linq4j.AbstractEnumerable child = new org.apache.calcite.linq4j.AbstractEnumerable(){
>     public org.apache.calcite.linq4j.Enumerator enumerator() {
>       return new org.apache.calcite.linq4j.Enumerator(){
>           public final org.apache.calcite.linq4j.Enumerator inputEnumerator = _inputEnumerable.enumerator();
>           public void reset() {
>             inputEnumerator.reset();
>           }
>           public boolean moveNext() {
>             return inputEnumerator.moveNext();
>           }
>           public void close() {
>             inputEnumerator.close();
>           }
>           public Object current() {
>             final Long inp0_ = (Long) ((Object[]) inputEnumerator.current())[0];
>             {color:red}return inp0_ != null && inp0_.longValue() > 0L ? org.apache.kylin.query.udf.ConcatUDF.eval("a", "b") : org.apache.kylin.query.udf.VersionUDF.eval();{color}
>           }
>         };
>     }
>   };
>   return child.take(5);
> }
> public Class getElementType() {
>   return java.lang.String.class;
> }
>         at org.apache.calcite.avatica.Helper.wrap(Helper.java:37)
>         at org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:108)
>         at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1278)
>         at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:331)
>         at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230)
>         at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:796)
>         at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:655)
>         at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:618)
>         at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:221)
>         at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:603)
>         at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:675)
>         at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:156)
>         ... 83 more
>  {color:red}Caused by: org.codehaus.commons.compiler.CompileException: Line 24, Column 104: Instance method "eval" cannot be invoked in static context {color}
> {panel}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)