@Override public boolean matches(RelNode rel) { return super.matches(rel) && RexOver.containsOver(((CalcRelBase) rel).getProgram()); } },
public void onMatch(RelOptRuleCall call) { CalcRelBase calc = call.rel(0); assert RexOver.containsOver(calc.getProgram()); CalcRelSplitter transform = new WindowedAggRelSplitter(calc); RelNode newRel = transform.execute(); call.transformTo(newRel); } };
/** * Constructs a CalcRelSplitter. * * @param calc CalcRel to split * @param relTypes Array of rel types, e.g. {Java, Fennel}. Must be * distinct. */ CalcRelSplitter(CalcRelBase calc, RelType[] relTypes) { for (int i = 0; i < relTypes.length; i++) { assert relTypes[i] != null; for (int j = 0; j < i; j++) { assert relTypes[i] != relTypes[j] : "Rel types must be distinct"; } } this.program = calc.getProgram(); this.cluster = calc.getCluster(); this.traits = calc.getTraitSet(); this.typeFactory = calc.getCluster().getTypeFactory(); this.child = calc.getChild(); this.relTypes = relTypes; }
RexProgram topProgram = topCalc.getProgram(); if (RexOver.containsOver(topProgram)) { return; topCalc.getProgram(), bottomCalc.getProgram(), topCalc.getCluster().getRexBuilder()); assert mergedProgram.getOutputRowType()