[ https://issues.apache.org/jira/browse/CALCITE-2966?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16807566#comment-16807566 ]
Julian Feinauer commented on CALCITE-2966: ------------------------------------------ First, thanks [~danny0405]... are we sure that this is a bug or could it be due to me doing something wrong with the API? Can I supply you with more informations about my code? > 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 > 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)