Danny Chan created CALCITE-2966: ----------------------------------- Summary: 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: Danny Chan 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)