Description
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?
Attachments
Issue Links
- blocks
-
CALCITE-1935 Reference implementation for MATCH_RECOGNIZE
- Closed