You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Feinauer (JIRA)" <ji...@apache.org> on 2019/04/10 12:14:00 UTC

[jira] [Assigned] (CALCITE-2966) Problem with Code Generation

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

Julian Feinauer reassigned CALCITE-2966:
----------------------------------------

    Assignee: Julian Feinauer  (was: Danny Chan)

> Problem with Code Generation
> ----------------------------
>
>                 Key: CALCITE-2966
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2966
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.20.0
>            Reporter: Danny Chan
>            Assignee: Julian Feinauer
>            Priority: Major
>             Fix For: 1.20.0
>
>
> From the mailing list:
> Hi all,
> I have some problems with the code generation from Linq4j which I'm unable to resolve myself.
> Basically, I want to translate a condition from Rex to a Linq4j expression to use it in generated code.
> In my example the Condition is from Match Recognize and in SQL is: `up."commission" > prev(up."commission")`.
>  
> ```
> RexBuilder rexBuilder = new RexBuilder(implementor.getTypeFactory());
> RexProgramBuilder rexProgramBuilder = new RexProgramBuilder(physType.getRowType(), rexBuilder);
>  
> rexProgramBuilder.addCondition(entry.getValue());
>  
> final Expression condition = RexToLixTranslator.translateCondition(rexProgramBuilder.getProgram(),
>           (JavaTypeFactory) getCluster().getTypeFactory(),
>           builder2,
>           inputGetter1,
>           implementor.allCorrelateVariables,
>           implementor.getConformance());
>  
> builder2.add(Expressions.return_(null, condition));
> ```
>  
> Here, the condition seems okay, it is: ">(PREV(UP.$4, 0), PREV(UP.$4, 1))",  so it should be a comparison of two variables (I rewrite the PREV with a custom Input Getter".
> But, the generated code (for Janino) is:
>  
> ```
> Object p1 = row_.get($L4J$C$0_1);
> org.apache.calcite.test.JdbcTest.Employee p0 = (org.apache.calcite.test.JdbcTest.Employee) p1;
> Object p3 = row_.get($L4J$C$1_1);
> org.apache.calcite.test.JdbcTest.Employee p2 = (org.apache.calcite.test.JdbcTest.Employee) p3;
> Object p5 = row_.get($L4J$C$0_1);
> org.apache.calcite.test.JdbcTest.Employee p4 = (org.apache.calcite.test.JdbcTest.Employee) p5;
> Object p7 = row_.get($L4J$C$1_1);
> org.apache.calcite.test.JdbcTest.Employee p6 = (org.apache.calcite.test.JdbcTest.Employee) p7;
> return p0.commission && p2.commission && p4.commission > p6.commission;
> ```
>  
> This confuses me a lot as I do not know where the check for p0.commission and p2.commission comes from.
> It seems that Linq4j adds them as it expects these variables to be nullable, but I have no idea on how to avoid this.
> These fields are Numeric so I always get a compilation exception.
>  
> Can someone help me with this issue?



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