@Override public RelNode visit(LogicalUnion union) { return new LogicalUnion( cluster, copyOf(union.getTraitSet()), visitAll(union.getInputs()), union.all ); }
public RelNode convert(RelNode rel) { final LogicalUnion union = (LogicalUnion) rel; final EnumerableConvention out = EnumerableConvention.INSTANCE; final RelTraitSet traitSet = union.getTraitSet().replace(out); return new EnumerableUnion(rel.getCluster(), traitSet, convertList(union.getInputs(), out), union.all); } }
public RelNode convert(RelNode rel) { final LogicalUnion union = (LogicalUnion) rel; final BindableConvention out = BindableConvention.INSTANCE; final RelTraitSet traitSet = union.getTraitSet().replace(out); return new BindableUnion(rel.getCluster(), traitSet, convertList(union.getInputs(), out), union.all); } }
public RelNode convert(RelNode rel) { final LogicalUnion union = (LogicalUnion) rel; final EnumerableConvention out = EnumerableConvention.INSTANCE; final RelTraitSet traitSet = union.getTraitSet().replace(out); return new EnumerableUnion(rel.getCluster(), traitSet, convertList(union.getInputs(), out), union.all); } }
public RelNode convert(RelNode rel) { final LogicalUnion union = (LogicalUnion) rel; final BindableConvention out = BindableConvention.INSTANCE; final RelTraitSet traitSet = union.getTraitSet().replace(out); return new BindableUnion(rel.getCluster(), traitSet, convertList(union.getInputs(), out), union.all); } }
@Override public void onMatch(RelOptRuleCall call) { final LogicalUnion union = (LogicalUnion) call.rel(0); // This rule applies to Union-All only if(!union.all) { return; } final RelTraitSet traits = union.getTraitSet().plus(Rel.LOGICAL); final List<RelNode> convertedInputs = new ArrayList<>(); for (RelNode input : union.getInputs()) { final RelNode convertedInput = convert(input, input.getTraitSet().plus(Rel.LOGICAL).simplify()); convertedInputs.add(convertedInput); } try { call.transformTo(new UnionRel(union.getCluster(), traits, convertedInputs, union.all, true /* check compatibility */)); } catch (InvalidRelException e) { tracer.warn(e.toString()) ; } } }
@Override public void onMatch(RelOptRuleCall call) { final LogicalUnion union = call.rel(0); // This rule applies to Union-All only if(!union.all) { return; } final RelTraitSet traits = union.getTraitSet().plus(DrillRel.DRILL_LOGICAL); final List<RelNode> convertedInputs = new ArrayList<>(); for (RelNode input : union.getInputs()) { final RelNode convertedInput = convert(input, input.getTraitSet().plus(DrillRel.DRILL_LOGICAL).simplify()); convertedInputs.add(convertedInput); } try { call.transformTo(new DrillUnionRel(union.getCluster(), traits, convertedInputs, union.all, true /* check compatibility */)); } catch (InvalidRelException e) { tracer.warn(e.toString()); } } }