public JoinRel(RelOptCluster cluster, RelTraitSet traits, RelNode left, RelNode right, RexNode condition, JoinRelType joinType, List<Integer> leftKeys, List<Integer> rightKeys) throws InvalidRelException { super(cluster, traits, left, right, condition, joinType); assert traits.contains(Rel.LOGICAL); assert (leftKeys != null && rightKeys != null); this.leftKeys = leftKeys; this.rightKeys = rightKeys; }
public DrillJoinRel(RelOptCluster cluster, RelTraitSet traits, RelNode left, RelNode right, RexNode condition, JoinRelType joinType, List<Integer> leftKeys, List<Integer> rightKeys) throws InvalidRelException { super(cluster, traits, left, right, condition, joinType); assert traits.contains(DrillRel.DRILL_LOGICAL); assert (leftKeys != null && rightKeys != null); this.leftKeys = leftKeys; this.rightKeys = rightKeys; }
/** Creates a JoinRel. * We do not throw InvalidRelException in Logical planning phase. It's up to the post-logical planning check or physical planning * to detect the unsupported join type, and throw exception. * */ public JoinRel(RelOptCluster cluster, RelTraitSet traits, RelNode left, RelNode right, RexNode condition, JoinRelType joinType) { super(cluster, traits, left, right, condition, joinType); assert traits.contains(Rel.LOGICAL); RelOptUtil.splitJoinCondition(left, right, condition, leftKeys, rightKeys, filterNulls); }
public DrillJoinRel(RelOptCluster cluster, RelTraitSet traits, RelNode left, RelNode right, RexNode condition, JoinRelType joinType, int joinControl) { super(cluster, traits, left, right, condition, joinType); assert traits.contains(DrillRel.DRILL_LOGICAL); RelOptUtil.splitJoinCondition(left, right, condition, leftKeys, rightKeys, filterNulls); this.joinControl = joinControl; }
public DrillJoinRel(RelOptCluster cluster, RelTraitSet traits, RelNode left, RelNode right, RexNode condition, JoinRelType joinType) { super(cluster, traits, left, right, condition, joinType); assert traits.contains(DrillRel.DRILL_LOGICAL); RelOptUtil.splitJoinCondition(left, right, condition, leftKeys, rightKeys, filterNulls); }
/** * Returns whether a relational expression matches this operand. It must be * of the right class and trait. */ public boolean matches(RelNode rel) { if (!clazz.isInstance(rel)) { return false; } if ((trait != null) && !rel.getTraitSet().contains(trait)) { return false; } return predicate.test(rel); } }
/** * Returns whether a relational expression matches this operand. It must be * of the right class and trait. */ public boolean matches(RelNode rel) { if (!clazz.isInstance(rel)) { return false; } if ((trait != null) && !rel.getTraitSet().contains(trait)) { return false; } return predicate.test(rel); } }
private boolean doesConverterApply( ConverterRule converterRule, HepRelVertex vertex) { RelTrait outTrait = converterRule.getOutTrait(); List<HepRelVertex> parents = Graphs.predecessorListOf(graph, vertex); for (HepRelVertex parent : parents) { RelNode parentRel = parent.getCurrentRel(); if (parentRel instanceof Converter) { // We don't support converter chains. continue; } if (parentRel.getTraitSet().contains(outTrait)) { // This parent wants the traits produced by the converter. return true; } } return (vertex == root) && (requestedRootTraits != null) && requestedRootTraits.contains(outTrait); }
private boolean doesConverterApply( ConverterRule converterRule, HepRelVertex vertex) { RelTrait outTrait = converterRule.getOutTrait(); List<HepRelVertex> parents = Graphs.predecessorListOf(graph, vertex); for (HepRelVertex parent : parents) { RelNode parentRel = parent.getCurrentRel(); if (parentRel instanceof Converter) { // We don't support converter chains. continue; } if (parentRel.getTraitSet().contains(outTrait)) { // This parent wants the traits produced by the converter. return true; } } return (vertex == root) && (requestedRootTraits != null) && requestedRootTraits.contains(outTrait); }
public void onMatch(RelOptRuleCall call) { RelNode input = call.rel(1); if (input.getTraitSet().contains(converter.getOutTrait())) { converter.onMatch(call); } } }
public void onMatch(RelOptRuleCall call) { RelNode rel = call.rel(0); if (rel.getTraitSet().contains(inTrait)) { final RelNode converted = convert(rel); if (converted != null) { call.transformTo(converted); } } }
public void onMatch(RelOptRuleCall call) { RelNode rel = call.rel(0); if (rel.getTraitSet().contains(inTrait)) { final RelNode converted = convert(rel); if (converted != null) { call.transformTo(converted); } } }
public void onMatch(RelOptRuleCall call) { RelNode input = call.rel(1); if (input.getTraitSet().contains(converter.getOutTrait())) { converter.onMatch(call); } } }
if (contains(trait)) { return this;
@Override public RelNode convert(RelNode rel) { assert rel.getTraitSet().contains(Rel.LOGICAL); return new ScreenRel(rel.getCluster(), rel.getTraitSet().replace(getOutConvention()), rel); } }
@Override public RelNode convert(RelNode rel) { assert rel.getTraitSet().contains(DrillRel.DRILL_LOGICAL); return new DrillScreenRel(rel.getCluster(), rel.getTraitSet().replace(getOutConvention()), rel); } }
@Test public void testTraitConversion() { final VolcanoPlanner planner = new VolcanoPlanner(); planner.addRelTraitDef(ConventionTraitDef.INSTANCE); planner.addRelTraitDef(NEW_TRAIT_DEF_INSTANCE); planner.addRule(new RandomSingleTraitRule()); planner.addRule(new SingleLeafTraitRule()); planner.addRule(ExpandConversionRule.INSTANCE); final RelOptCluster cluster = newCluster(planner); final NoneLeafRel leafRel = new NoneLeafRel(cluster, "a"); final NoneSingleRel singleRel = new NoneSingleRel(cluster, leafRel); final RelNode convertedRel = planner.changeTraits(singleRel, cluster.traitSetOf(PHYS_CALLING_CONVENTION)); planner.setRoot(convertedRel); final RelNode result = planner.chooseDelegate().findBestExp(); assertTrue(result instanceof RandomSingleRel); assertTrue(result.getTraitSet().contains(PHYS_CALLING_CONVENTION)); assertTrue(result.getTraitSet().contains(SIMPLE_DISTRIBUTION_RANDOM)); final RelNode input = result.getInput(0); assertTrue(input instanceof BridgeRel); assertTrue(input.getTraitSet().contains(PHYS_CALLING_CONVENTION)); assertTrue(input.getTraitSet().contains(SIMPLE_DISTRIBUTION_RANDOM)); final RelNode input2 = input.getInput(0); assertTrue(input2 instanceof SingletonLeafRel); assertTrue(input2.getTraitSet().contains(PHYS_CALLING_CONVENTION)); assertTrue(input2.getTraitSet().contains(SIMPLE_DISTRIBUTION_SINGLETON)); }
@Test public void testTraitConversion() { final VolcanoPlanner planner = new VolcanoPlanner(); planner.addRelTraitDef(ConventionTraitDef.INSTANCE); planner.addRelTraitDef(NEW_TRAIT_DEF_INSTANCE); planner.addRule(new RandomSingleTraitRule()); planner.addRule(new SingleLeafTraitRule()); planner.addRule(ExpandConversionRule.INSTANCE); final RelOptCluster cluster = newCluster(planner); final NoneLeafRel leafRel = new NoneLeafRel(cluster, "a"); final NoneSingleRel singleRel = new NoneSingleRel(cluster, leafRel); final RelNode convertedRel = planner.changeTraits(singleRel, cluster.traitSetOf(PHYS_CALLING_CONVENTION)); planner.setRoot(convertedRel); final RelNode result = planner.chooseDelegate().findBestExp(); assertTrue(result instanceof RandomSingleRel); assertTrue(result.getTraitSet().contains(PHYS_CALLING_CONVENTION)); assertTrue(result.getTraitSet().contains(SIMPLE_DISTRIBUTION_RANDOM)); final RelNode input = result.getInput(0); assertTrue(input instanceof BridgeRel); assertTrue(input.getTraitSet().contains(PHYS_CALLING_CONVENTION)); assertTrue(input.getTraitSet().contains(SIMPLE_DISTRIBUTION_RANDOM)); final RelNode input2 = input.getInput(0); assertTrue(input2 instanceof SingletonLeafRel); assertTrue(input2.getTraitSet().contains(PHYS_CALLING_CONVENTION)); assertTrue(input2.getTraitSet().contains(SIMPLE_DISTRIBUTION_SINGLETON)); }
@Test public void testCollationConversion() { final VolcanoPlanner planner = new VolcanoPlanner(); planner.addRelTraitDef(ConventionTraitDef.INSTANCE); planner.addRelTraitDef(COLLATION_TRAIT_DEF); planner.addRule(new SingleNodeRule()); planner.addRule(new LeafTraitRule()); planner.addRule(ExpandConversionRule.INSTANCE); final RelOptCluster cluster = newCluster(planner); final NoneLeafRel leafRel = new NoneLeafRel(cluster, "a"); final NoneSingleRel singleRel = new NoneSingleRel(cluster, leafRel); final RelNode convertedRel = planner.changeTraits(singleRel, cluster.traitSetOf(PHYS_CALLING_CONVENTION).plus(ROOT_COLLATION)); planner.setRoot(convertedRel); RelNode result = planner.chooseDelegate().findBestExp(); assertTrue(result instanceof RootSingleRel); assertTrue(result.getTraitSet().contains(ROOT_COLLATION)); assertTrue(result.getTraitSet().contains(PHYS_CALLING_CONVENTION)); final RelNode input = result.getInput(0); assertTrue(input instanceof PhysicalSort); assertTrue(result.getTraitSet().contains(ROOT_COLLATION)); assertTrue(input.getTraitSet().contains(PHYS_CALLING_CONVENTION)); final RelNode input2 = input.getInput(0); assertTrue(input2 instanceof LeafRel); assertTrue(input2.getTraitSet().contains(LEAF_COLLATION)); assertTrue(input.getTraitSet().contains(PHYS_CALLING_CONVENTION)); }
@Test public void testCollationConversion() { final VolcanoPlanner planner = new VolcanoPlanner(); planner.addRelTraitDef(ConventionTraitDef.INSTANCE); planner.addRelTraitDef(COLLATION_TRAIT_DEF); planner.addRule(new SingleNodeRule()); planner.addRule(new LeafTraitRule()); planner.addRule(ExpandConversionRule.INSTANCE); final RelOptCluster cluster = newCluster(planner); final NoneLeafRel leafRel = new NoneLeafRel(cluster, "a"); final NoneSingleRel singleRel = new NoneSingleRel(cluster, leafRel); final RelNode convertedRel = planner.changeTraits(singleRel, cluster.traitSetOf(PHYS_CALLING_CONVENTION).plus(ROOT_COLLATION)); planner.setRoot(convertedRel); RelNode result = planner.chooseDelegate().findBestExp(); assertTrue(result instanceof RootSingleRel); assertTrue(result.getTraitSet().contains(ROOT_COLLATION)); assertTrue(result.getTraitSet().contains(PHYS_CALLING_CONVENTION)); final RelNode input = result.getInput(0); assertTrue(input instanceof PhysicalSort); assertTrue(result.getTraitSet().contains(ROOT_COLLATION)); assertTrue(input.getTraitSet().contains(PHYS_CALLING_CONVENTION)); final RelNode input2 = input.getInput(0); assertTrue(input2 instanceof LeafRel); assertTrue(input2.getTraitSet().contains(LEAF_COLLATION)); assertTrue(input.getTraitSet().contains(PHYS_CALLING_CONVENTION)); }