/** * @param factIdx factor for which information will be returned * * @return outer join conditions associated with the specified null * generating factor */ public RexNode getOuterJoinCond(int factIdx) { return multiJoin.getOuterJoinConditions().get(factIdx); }
/** * @param factIdx factor for which information will be returned * * @return outer join conditions associated with the specified null * generating factor */ public RexNode getOuterJoinCond(int factIdx) { return multiJoin.getOuterJoinConditions().get(factIdx); }
List<RexNode> outerJoinFilters = multiJoin.getOuterJoinConditions(); for (int i = 0; i < nJoinFactors; i++) { allJoinFilters.addAll(RelOptUtil.conjunctions(outerJoinFilters.get(i))); List<RexNode> outerJoinConds = this.multiJoin.getOuterJoinConditions(); outerJoinFactors = new ImmutableBitSet[nJoinFactors]; for (int i = 0; i < nJoinFactors; i++) {
List<RexNode> outerJoinFilters = multiJoin.getOuterJoinConditions(); for (int i = 0; i < nJoinFactors; i++) { allJoinFilters.addAll(RelOptUtil.conjunctions(outerJoinFilters.get(i))); List<RexNode> outerJoinConds = this.multiJoin.getOuterJoinConditions(); outerJoinFactors = new ImmutableBitSet[nJoinFactors]; for (int i = 0; i < nJoinFactors; i++) {
Pair.zip( multiJoin.getJoinTypes(), multiJoin.getOuterJoinConditions());
Pair.zip( multiJoin.getJoinTypes(), multiJoin.getOuterJoinConditions());
multiJoin.getRowType(), multiJoin.isFullOuterJoin(), multiJoin.getOuterJoinConditions(), multiJoin.getJoinTypes(), Lists.transform(newProjFields, ImmutableBitSet::fromBitSet),
multiJoin.getRowType(), multiJoin.isFullOuterJoin(), multiJoin.getOuterJoinConditions(), multiJoin.getJoinTypes(), Lists.transform(newProjFields, ImmutableBitSet::fromBitSet),
public Double getRowCount(MultiJoin rel, RelMetadataQuery mq) { if (rel.getJoinFilter().isAlwaysTrue() && RexUtil.composeConjunction(rel.getCluster().getRexBuilder(), rel.getOuterJoinConditions(), false).isAlwaysTrue()) { double rowCount = 1; for (RelNode input : rel.getInputs()) { rowCount *= mq.getRowCount(input); } return rowCount; } else { double max = 1; for (RelNode input : rel.getInputs()) { max = Math.max(max, mq.getRowCount(input)); } return max; } }
final List<RexNode> originalOuterJoinConditions = multiJoin.getOuterJoinConditions(); final RexNode originalPostJoinFilter = multiJoin.getPostJoinFilter();
public void onMatch(RelOptRuleCall call) { LogicalFilter filter = call.rel(0); MultiJoin multiJoin = call.rel(1); MultiJoin newMultiJoin = new MultiJoin( multiJoin.getCluster(), multiJoin.getInputs(), multiJoin.getJoinFilter(), multiJoin.getRowType(), multiJoin.isFullOuterJoin(), multiJoin.getOuterJoinConditions(), multiJoin.getJoinTypes(), multiJoin.getProjFields(), multiJoin.getJoinFieldRefCountsMap(), filter.getCondition()); call.transformTo(newMultiJoin); } }
public void onMatch(RelOptRuleCall call) { LogicalFilter filter = call.rel(0); MultiJoin multiJoin = call.rel(1); MultiJoin newMultiJoin = new MultiJoin( multiJoin.getCluster(), multiJoin.getInputs(), multiJoin.getJoinFilter(), multiJoin.getRowType(), multiJoin.isFullOuterJoin(), multiJoin.getOuterJoinConditions(), multiJoin.getJoinTypes(), multiJoin.getProjFields(), multiJoin.getJoinFieldRefCountsMap(), filter.getCondition()); call.transformTo(newMultiJoin); } }