/** * Constructs a CalcRelSplitter. * * @param calc CalcRel to split * @param relTypes Array of rel types, e.g. {Java, Fennel}. Must be * distinct. */ CalcRelSplitter(CalcRel 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; }
@Override public RelNode convert( RelNode rel ) { // stolen from JavaRules.EnumerableAggregateRule final CalcRel calc = (CalcRel) rel; final RelNode convertedChild = convert( calc.getChild(), calc.getTraitSet().replace( Cascading.CONVENTION ) ); if( convertedChild == null ) return null; // We can't convert the child, so we can't convert rel. // If there's a multiset, let FarragoMultisetSplitter work on it // first. if( RexMultisetUtil.containsMultiset( calc.getProgram() ) ) return null; return new CascadingCalcRel( rel.getCluster(), rel.getTraitSet(), convertedChild, rel.getRowType(), calc.getProgram(), Collections.<RelCollation>emptyList() ); } }
public void onMatch(RelOptRuleCall call) { CalcRel calc = call.rel(0); RexProgram program = calc.getProgram(); if (!program.isTrivial()) { return; } RelNode child = calc.getInput(0); child = call.getPlanner().register(child, calc); call.transformTo( convert( child, calc.getTraitSet())); } }
public void onMatch(RelOptRuleCall call) { CalcRel calc = call.rel(0); RexProgram program = calc.getProgram(); if (!program.isTrivial()) { return; } RelNode child = calc.getInput(0); child = call.getPlanner().register(child, calc); call.transformTo( convert( child, calc.getTraitSet())); } }
public RelNode convert(RelNode rel) { final CalcRel calc = (CalcRel) rel; // If there's a multiset, let FarragoMultisetSplitter work on it // first. if (RexMultisetUtil.containsMultiset(calc.getProgram())) { return null; } return new JdbcCalcRel(rel.getCluster(), rel.getTraitSet().replace(out), convert(calc.getChild(), calc.getTraitSet().replace(out)), calc.getProgram(), ProjectRelBase.Flags.BOXED); } }
public RelNode convert(RelNode rel) { final CalcRel calc = (CalcRel) rel; // If there's a multiset, let FarragoMultisetSplitter work on it // first. if (RexMultisetUtil.containsMultiset(calc.getProgram())) { return null; } return new JdbcCalcRel(rel.getCluster(), rel.getTraitSet().replace(out), convert(calc.getChild(), calc.getTraitSet().replace(out)), calc.getProgram(), ProjectRelBase.Flags.Boxed); } }
new CalcRel( calc.getCluster(), calc.getTraitSet(), calc.getChild(), calc.getRowType(),
new CalcRel( cluster, rel.getTraitSet(), newChild, newProgram.getOutputRowType(),
new CalcRel( cluster, rel.getTraitSet(), newChild, newProgram.getOutputRowType(),
new CalcRel( calcRel.getCluster(), calcRel.getTraitSet(), calcRel.getChild(), newProgram.getOutputRowType(),
new CalcRel( calc.getCluster(), calc.getTraitSet(), calc.getChild(), filter.getRowType(),
new CalcRel( calcRel.getCluster(), calcRel.getTraitSet(), calcRel.getChild(), newProgram.getOutputRowType(),
new CalcRel( bottomCalc.getCluster(), bottomCalc.getTraitSet(), bottomCalc.getChild(), topCalc.getRowType(),
new CalcRel( calc.getCluster(), calc.getTraitSet(), calc.getChild(), filter.getRowType(),
new CalcRel( calc.getCluster(), calc.getTraitSet(), calc.getChild(), project.getRowType(),