@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); }
@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); }
@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 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 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()); } } }