case UNION: final MutableUnion union = (MutableUnion) node; return LogicalUnion.create(fromMutables(union.inputs), union.all); case JOIN: final MutableJoin join = (MutableJoin) node;
public LogicalUnion copy( RelTraitSet traitSet, List<RelNode> inputs, boolean all) { assert traitSet.containsIfApplicable(Convention.NONE); return new LogicalUnion(getCluster(), traitSet, inputs, all); }
@Override public RelNode visit(LogicalUnion union) { return new LogicalUnion( cluster, copyOf(union.getTraitSet()), visitAll(union.getInputs()), 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()) ; } } }
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); } }
RelOptUtil.createCastRel( newInputs.get(0), union.getRowType(), true)); break; default: builder.push(LogicalUnion.create(newInputs, union.all)); break;
@Override public RelNode visit(LogicalUnion union) { for(RelNode child : union.getInputs()) { for(RelDataTypeField dataField : child.getRowType().getFieldList()) { if(dataField.getName().contains(StarColumnHelper.STAR_COLUMN)) { // see DRILL-2414 unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.RELATIONAL, "Union-All over schema-less tables must specify the columns explicitly"); throw new UnsupportedOperationException(); } } } return visitChildren(union); }
/** Creates a LogicalUnion. */ public static LogicalUnion create(List<RelNode> inputs, boolean all) { final RelOptCluster cluster = inputs.get(0).getCluster(); final RelTraitSet traitSet = cluster.traitSetOf(Convention.NONE); return new LogicalUnion(cluster, traitSet, inputs, all); }
@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()); } } }
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); } }
RelOptUtil.createCastRel( newInputs.get(0), union.getRowType(), true)); break; default: builder.push(LogicalUnion.create(newInputs, union.all)); break;
@Override public RelNode visit(LogicalUnion union) { for (RelNode child : union.getInputs()) { for (RelDataTypeField dataField : child.getRowType().getFieldList()) { if (dataField.getName().contains(SchemaPath.DYNAMIC_STAR)) { unsupportedOperatorCollector.setException(SqlUnsupportedException.ExceptionType.RELATIONAL, "Union-All over schema-less tables must specify the columns explicitly\n" + "See Apache Drill JIRA: DRILL-2414"); throw new UnsupportedOperationException(); } } } return visitChildren(union); }
/** Creates a LogicalUnion. */ public static LogicalUnion create(List<RelNode> inputs, boolean all) { final RelOptCluster cluster = inputs.get(0).getCluster(); final RelTraitSet traitSet = cluster.traitSetOf(Convention.NONE); return new LogicalUnion(cluster, traitSet, inputs, all); }
public RelNode createSetOp(SqlKind kind, List<RelNode> inputs, boolean all) { switch (kind) { case UNION: return LogicalUnion.create(inputs, all); case EXCEPT: return LogicalMinus.create(inputs, all); case INTERSECT: return LogicalIntersect.create(inputs, all); default: throw new AssertionError("not a set op: " + kind); } } }
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 LogicalUnion copy( RelTraitSet traitSet, List<RelNode> inputs, boolean all) { assert traitSet.containsIfApplicable(Convention.NONE); return new LogicalUnion(getCluster(), traitSet, inputs, all); }
public RelNode createSetOp(SqlKind kind, List<RelNode> inputs, boolean all) { switch (kind) { case UNION: return LogicalUnion.create(inputs, all); case EXCEPT: return LogicalMinus.create(inputs, all); case INTERSECT: return LogicalIntersect.create(inputs, all); default: throw new AssertionError("not a set op: " + kind); } } }
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); } }
@Override public void onMatch(RelOptRuleCall call) { final Delta delta = call.rel(0); Util.discard(delta); final Union union = call.rel(1); final List<RelNode> newInputs = new ArrayList<>(); for (RelNode input : union.getInputs()) { final LogicalDelta newDelta = LogicalDelta.create(input); newInputs.add(newDelta); } final LogicalUnion newUnion = LogicalUnion.create(newInputs, union.all); call.transformTo(newUnion); } }
@Override public void onMatch(RelOptRuleCall call) { final Delta delta = call.rel(0); Util.discard(delta); final Union union = call.rel(1); final List<RelNode> newInputs = new ArrayList<>(); for (RelNode input : union.getInputs()) { final LogicalDelta newDelta = LogicalDelta.create(input); newInputs.add(newDelta); } final LogicalUnion newUnion = LogicalUnion.create(newInputs, union.all); call.transformTo(newUnion); } }