public void onMatch(RelOptRuleCall call) { SingleRel single = call.rel(0); call.transformTo(empty(single)); } }
public void onMatch(RelOptRuleCall call) { final VolcanoPlanner planner = (VolcanoPlanner) call.getPlanner(); AbstractConverter converter = call.rel(0); final RelNode child = converter.getChild(); RelNode converted = planner.changeTraitsUsingConverters( child, converter.traitSet); if (converted != null) { call.transformTo(converted); } } }
/** * @param call RelOptRuleCall * @return true if the rule was invoked with a left project child */ protected boolean hasLeftChild(RelOptRuleCall call) { return call.rel(1) instanceof ProjectRelBase; }
public void onMatch(RelOptRuleCall call) { UnionRel union = call.rel(0); final List<RelNode> childRels = call.getChildRels(union); final List<RelNode> newChildRels = new ArrayList<RelNode>(); for (RelNode childRel : childRels) { break; call.transformTo(newRel);
checkCancel(); assert ruleCall.getRule().matches(ruleCall); if (isRuleExcluded(ruleCall.getRule())) { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine( "call#" + ruleCall.id + ": Rule [" + ruleCall.getRule() + "] not fired" + " due to exclusion filter"); LOGGER.fine( "call#" + ruleCall.id + ": Apply rule [" + ruleCall.getRule() + "] to " + Arrays.toString(ruleCall.rels)); new RelOptListener.RuleAttemptedEvent( this, ruleCall.rel(0), ruleCall, true); ruleCall.getRule().onMatch(ruleCall); new RelOptListener.RuleAttemptedEvent( this, ruleCall.rel(0), ruleCall, false);
setCurrent(call.getPlanner().getRoot(), corRel); aggregateCorrelatorOutput(newCorRel, aggOutputProjRel, isCount); call.transformTo(newOutputRel);
/** * Takes care of tracing and listener notification when a rule's * transformation is applied. * * @param ruleCall description of rule call * @param newRel result of transformation * @param before true before registration of new rel; false after */ protected void notifyTransformation( RelOptRuleCall ruleCall, RelNode newRel, boolean before) { if (before && LOGGER.isLoggable(Level.FINE)) { LOGGER.fine( "call#" + ruleCall.id + ": Rule " + ruleCall.getRule() + " arguments " + Arrays.toString(ruleCall.rels) + " produced " + newRel); } if (listener != null) { RelOptListener.RuleProductionEvent event = new RelOptListener.RuleProductionEvent( this, newRel, ruleCall, before); listener.ruleProductionSucceeded(event); } }
@Override public void onMatch( RelOptRuleCall call ) { List<RelNode> rels = call.getRelList(); final UnionRel union = (UnionRel) rels.get( 0 ); final List<RelNode> inputs = rels.subList( 1, rels.size() ); if( !union.getVariablesStopped().isEmpty() ) { LOG.warn( "variables stopped not supported by this rule" ); return; } call.transformTo( new CascadingUnionRel( union.getCluster(), union.getCluster().traitSetOf( Cascading.CONVENTION ), inputs, union.all ) ); } }
/** * Registers that a rule has produced an equivalent relational expression, * but no other equivalences. * * @param rel Relational expression equivalent to the root relational * expression of the rule call, {@code call.rels(0)} */ public final void transformTo(RelNode rel) { transformTo(rel, ImmutableMap.<RelNode, RelNode>of()); } }
/** * @param call RelOptRuleCall * * @return true if the rule was invoked with a left project child */ protected boolean hasLeftChild(RelOptRuleCall call) { return (call.rel(1) instanceof ProjectRel); }
public void onMatch(RelOptRuleCall call) UnionRel union = call.rel(0); final List<RelNode> childRels = call.getChildRels(union); final List<RelNode> newChildRels = new ArrayList<RelNode>(); for (RelNode childRel : childRels) { break; call.transformTo(newRel);
assert ruleCall.getRule().matches(ruleCall); if (isRuleExcluded(ruleCall.getRule())) { if (tracer.isLoggable(Level.FINE)) { tracer.fine( "Rule [" + ruleCall.getRule() + "] not fired" + " due to exclusion filter"); "Apply rule [" + ruleCall.getRule() + "] to [" + RelOptUtil.toString(ruleCall.rels) + "]"); new RelOptListener.RuleAttemptedEvent( this, ruleCall.rel(0), ruleCall, true); ruleCall.getRule().onMatch(ruleCall); new RelOptListener.RuleAttemptedEvent( this, ruleCall.rel(0), ruleCall, false);
tupleList); call.transformTo(newRel); call.transformTo(values); call.getPlanner().setImportance(filter, 0.0);
/** * Takes care of tracing and listener notification when a rule's * transformation is applied. * * @param ruleCall description of rule call * @param newRel result of transformation * @param before true before registration of new rel; false after */ protected void notifyTransformation( RelOptRuleCall ruleCall, RelNode newRel, boolean before) { if (before && tracer.isLoggable(Level.FINE)) { tracer.fine( "Rule " + ruleCall.getRule() + " arguments " + RelOptUtil.toString(ruleCall.rels) + " produced " + newRel); } if (listener != null) { RelOptListener.RuleProductionEvent event = new RelOptListener.RuleProductionEvent( this, newRel, ruleCall, before); listener.ruleProductionSucceeded(event); } }
public void onMatch(RelOptRuleCall call) { call.transformTo(call.rel(0).getInput(0)); } }
public void onMatch(RelOptRuleCall call) { final VolcanoPlanner planner = (VolcanoPlanner) call.getPlanner(); AbstractConverter converter = call.rel(0); final RelNode child = converter.getChild(); RelNode converted = planner.changeTraitsUsingConverters( child, converter.traitSet); if (converted != null) { call.transformTo(converted); } } }
/** * @param call RelOptRuleCall * * @return ProjectRel corresponding to the right child */ protected ProjectRel getRightChild(RelOptRuleCall call) { return call.rel(2); }
joinTypeHolder.get(), join.isSemiJoinDone()); call.getPlanner().onCopy(join, newJoinRel); if (!leftFilters.isEmpty()) { call.getPlanner().onCopy(filter, leftRel); call.getPlanner().onCopy(filter, rightRel); createFilterOnRel(rexBuilder, newJoinRel, aboveFilters); call.transformTo(newRel);
private void checkEvent( List<RelOptListener.RelEvent> eventList, int iEvent, Class expectedEventClass, RelNode expectedRel, Class<? extends RelOptRule> expectedRuleClass) { assertTrue(iEvent < eventList.size()); RelOptListener.RelEvent event = eventList.get(iEvent); assertSame( expectedEventClass, event.getClass()); if (expectedRel != null) { assertSame( expectedRel, event.getRel()); } if (expectedRuleClass != null) { RelOptListener.RuleEvent ruleEvent = (RelOptListener.RuleEvent) event; assertSame( expectedRuleClass, ruleEvent.getRuleCall().getRule().getClass()); } }
@Override public void onMatch(RelOptRuleCall call) { SortRel sort = call.rel(0); if (sort.fetch != null && RexLiteral.intValue(sort.fetch) == 0) { call.transformTo(empty(sort)); } } };