@Deprecated // to be removed before 2.0 public static RelNode pushDownJoinConditions(Join originalJoin) { return pushDownJoinConditions(originalJoin, RelFactories.LOGICAL_BUILDER); }
@Deprecated // to be removed before 2.0 public static RelNode pushDownJoinConditions(Join originalJoin) { return pushDownJoinConditions(originalJoin, RelFactories.LOGICAL_BUILDER); }
@Deprecated // to be removed before 2.0 public static RelNode pushDownJoinConditions(Join originalJoin, RelFactories.ProjectFactory projectFactory) { return pushDownJoinConditions( originalJoin, RelBuilder.proto(projectFactory)); }
@Deprecated // to be removed before 2.0 public static RelNode pushDownJoinConditions(Join originalJoin, RelFactories.ProjectFactory projectFactory) { return pushDownJoinConditions( originalJoin, RelBuilder.proto(projectFactory)); }
private static RelNode pushDownJoinConditions(Join originalJoin, RelBuilderFactory relBuilderFactory) { return pushDownJoinConditions(originalJoin, relBuilderFactory.create(originalJoin.getCluster(), null)); }
private static RelNode pushDownJoinConditions(Join originalJoin, RelBuilderFactory relBuilderFactory) { return pushDownJoinConditions(originalJoin, relBuilderFactory.create(originalJoin.getCluster(), null)); }
@Override public void onMatch(RelOptRuleCall call) { Join join = call.rel(0); // Push expression in join condition into Project below Join. RelNode newJoin = RelOptUtil.pushDownJoinConditions(join, call.builder()); // If the join is the same, we bail out if (newJoin instanceof Join) { final RexNode newCondition = ((Join) newJoin).getCondition(); if (join.getCondition().toString().equals(newCondition.toString())) { return; } } call.transformTo(newJoin); } }
protected RelNode createJoin( Blackboard bb, RelNode leftRel, RelNode rightRel, RexNode joinCond, JoinRelType joinType) { assert joinCond != null; final CorrelationUse p = getCorrelationUse(bb, rightRel); if (p != null) { LogicalCorrelate corr = LogicalCorrelate.create(leftRel, p.r, p.id, p.requiredColumns, SemiJoinType.of(joinType)); if (!joinCond.isAlwaysTrue()) { final RelFactories.FilterFactory factory = RelFactories.DEFAULT_FILTER_FACTORY; return factory.createFilter(corr, joinCond); } return corr; } final Join originalJoin = (Join) RelFactories.DEFAULT_JOIN_FACTORY.createJoin(leftRel, rightRel, joinCond, ImmutableSet.of(), joinType, false); return RelOptUtil.pushDownJoinConditions(originalJoin, relBuilder); }
protected RelNode createJoin( Blackboard bb, RelNode leftRel, RelNode rightRel, RexNode joinCond, JoinRelType joinType) { assert joinCond != null; final CorrelationUse p = getCorrelationUse(bb, rightRel); if (p != null) { LogicalCorrelate corr = LogicalCorrelate.create(leftRel, p.r, p.id, p.requiredColumns, SemiJoinType.of(joinType)); if (!joinCond.isAlwaysTrue()) { final RelFactories.FilterFactory factory = RelFactories.DEFAULT_FILTER_FACTORY; return factory.createFilter(corr, joinCond); } return corr; } final Join originalJoin = (Join) RelFactories.DEFAULT_JOIN_FACTORY.createJoin(leftRel, rightRel, joinCond, ImmutableSet.of(), joinType, false); return RelOptUtil.pushDownJoinConditions(originalJoin, relBuilder); }
@Override public void onMatch(RelOptRuleCall call) { Join join = call.rel(0); // Push expression in join condition into Project below Join. RelNode newJoin = RelOptUtil.pushDownJoinConditions(join, call.builder()); // If the join is the same, we bail out if (newJoin instanceof Join) { final RexNode newCondition = ((Join) newJoin).getCondition(); if (join.getCondition().equals(newCondition)) { return; } } call.transformTo(newJoin); } }
protected RelNode createJoin( Blackboard bb, RelNode leftRel, RelNode rightRel, RexNode joinCond, JoinRelType joinType) { assert joinCond != null; final CorrelationUse p = getCorrelationUse(bb, rightRel); if (p != null) { LogicalCorrelate corr = LogicalCorrelate.create(leftRel, p.r, p.id, p.requiredColumns, SemiJoinType.of(joinType)); if (!joinCond.isAlwaysTrue()) { final RelFactories.FilterFactory factory = RelFactories.DEFAULT_FILTER_FACTORY; return factory.createFilter(corr, joinCond); } return corr; } // OVERRIDE POINT if (containOnlyCast(joinCond)) { joinCond = convertCastCondition(joinCond); } final Join originalJoin = (Join) RelFactories.DEFAULT_JOIN_FACTORY.createJoin(leftRel, rightRel, joinCond, ImmutableSet.<CorrelationId>of(), joinType, false); return RelOptUtil.pushDownJoinConditions(originalJoin); }
@Override public void onMatch(RelOptRuleCall call) { final Join join = call.rel(0); final RelBuilder builder = factory.create(join.getCluster(), null); RelNode newJoin = RelOptUtil.pushDownJoinConditions(join, builder); // If the join is the same, reset to the original join so we can bail out later if (newJoin instanceof Join) { final RexNode newCondition = ((Join) newJoin).getCondition(); if (join.getCondition().toString().equals(newCondition.toString())) { newJoin = join; } } // newJoin might be a join, or might be a join below a project. // Need to visit the tree to find the first join and extract the remaining // condition in a separate filter newJoin = newJoin.accept(new RelShuttleImpl() { @Override public RelNode visit(RelNode other) { if (!(other instanceof Join)) { return super.visit(other); } Join join = (Join) other; return getNewJoinCondition(builder, join); } }); if (newJoin != join) { call.transformTo(newJoin); } }
protected RelNode createJoin( Blackboard bb, RelNode leftRel, RelNode rightRel, RexNode joinCond, JoinRelType joinType) { assert joinCond != null; final CorrelationUse p = getCorrelationUse(bb, rightRel); if (p != null) { LogicalCorrelate corr = LogicalCorrelate.create(leftRel, p.r, p.id, p.requiredColumns, SemiJoinType.of(joinType)); if (!joinCond.isAlwaysTrue()) { final RelFactories.FilterFactory factory = RelFactories.DEFAULT_FILTER_FACTORY; return factory.createFilter(corr, joinCond); } return corr; } final Join originalJoin = (Join) RelFactories.DEFAULT_JOIN_FACTORY.createJoin(leftRel, rightRel, joinCond, ImmutableSet.<CorrelationId>of(), joinType, false); return RelOptUtil.pushDownJoinConditions(originalJoin); }