@Override public RelNode convert(RelNode rel) { final SemiJoin semiJoin = (SemiJoin) rel; final List<RelNode> newInputs = new ArrayList<>(); for (RelNode input : semiJoin.getInputs()) { if (!(input.getConvention() instanceof EnumerableConvention)) { input = convert(input, input.getTraitSet().replace(EnumerableConvention.INSTANCE)); } newInputs.add(input); } return EnumerableSemiJoin.create(newInputs.get(0), newInputs.get(1), semiJoin.getCondition(), semiJoin.leftKeys, semiJoin.rightKeys); } }
@Override public RelNode convert(RelNode rel) { final SemiJoin semiJoin = (SemiJoin) rel; final List<RelNode> newInputs = new ArrayList<>(); for (RelNode input : semiJoin.getInputs()) { if (!(input.getConvention() instanceof EnumerableConvention)) { input = convert(input, input.getTraitSet().replace(EnumerableConvention.INSTANCE)); } newInputs.add(input); } return EnumerableSemiJoin.create(newInputs.get(0), newInputs.get(1), semiJoin.getCondition(), semiJoin.leftKeys, semiJoin.rightKeys); } }
SemiJoin.create(factRel, chosenSemiJoins[bestDimIdx], semiJoin.getCondition(), semiJoin.getLeftKeys(), semiJoin.getRightKeys());
SemiJoin.create(factRel, chosenSemiJoins[bestDimIdx], semiJoin.getCondition(), semiJoin.getLeftKeys(), semiJoin.getRightKeys());
private Pair<ImmutableBitSet, ImmutableBitSet> getSemiJoinConditionInputRefs(SemiJoin semiJoin) { final int leftInputFieldCount = semiJoin.getLeft().getRowType().getFieldCount(); final ImmutableBitSet.Builder leftInputBitSet = ImmutableBitSet.builder(); final ImmutableBitSet.Builder rightInputBitSet = ImmutableBitSet.builder(); semiJoin.getCondition().accept(new RexVisitorImpl<Void>(true) { public Void visitInputRef(RexInputRef inputRef) { int index = inputRef.getIndex(); if (index < leftInputFieldCount) { leftInputBitSet.set(index); } else { rightInputBitSet.set(index); } return null; } }); return new Pair<>(leftInputBitSet.build(), rightInputBitSet.build()); } }
public void onMatch(RelOptRuleCall call) { SemiJoin semiJoin = call.rel(0); LogicalFilter filter = call.rel(1); RelNode newSemiJoin = SemiJoin.create(filter.getInput(), semiJoin.getRight(), semiJoin.getCondition(), semiJoin.getLeftKeys(), semiJoin.getRightKeys()); final RelFactories.FilterFactory factory = RelFactories.DEFAULT_FILTER_FACTORY; RelNode newFilter = factory.createFilter(newSemiJoin, filter.getCondition()); call.transformTo(newFilter); } }
public void onMatch(RelOptRuleCall call) { SemiJoin semiJoin = call.rel(0); LogicalFilter filter = call.rel(1); RelNode newSemiJoin = SemiJoin.create(filter.getInput(), semiJoin.getRight(), semiJoin.getCondition(), semiJoin.getLeftKeys(), semiJoin.getRightKeys()); final RelFactories.FilterFactory factory = RelFactories.DEFAULT_FILTER_FACTORY; RelNode newFilter = factory.createFilter(newSemiJoin, filter.getCondition()); call.transformTo(newFilter); } }
OpAttr dispatch(RelNode rn) throws SemanticException { if (rn instanceof HiveTableScan) { return visit((HiveTableScan) rn); } else if (rn instanceof HiveProject) { return visit((HiveProject) rn); } else if (rn instanceof MultiJoin) { return visit((MultiJoin) rn); } else if (rn instanceof HiveJoin) { return visit((HiveJoin) rn); } else if (rn instanceof SemiJoin) { SemiJoin sj = (SemiJoin) rn; HiveJoin hj = HiveJoin.getJoin(sj.getCluster(), sj.getLeft(), sj.getRight(), sj.getCondition(), sj.getJoinType(), true); return visit(hj); } else if (rn instanceof HiveFilter) { return visit((HiveFilter) rn); } else if (rn instanceof HiveSort) { return visit((HiveSort) rn); } else if (rn instanceof HiveUnion) { return visit((HiveUnion) rn); } else if (rn instanceof HiveSortExchange) { return visit((HiveSortExchange) rn); } else if (rn instanceof HiveAggregate) { return visit((HiveAggregate) rn); } LOG.error(rn.getClass().getCanonicalName() + "operator translation not supported" + " yet in return path."); return null; }
-nFieldsY); newSemiJoinFilter = semiJoin.getCondition().accept( new RelOptUtil.RexInputConverter( semiJoin.getCluster().getRexBuilder(), -nFieldsX); newSemiJoinFilter = semiJoin.getCondition().accept( new RelOptUtil.RexInputConverter( semiJoin.getCluster().getRexBuilder(),
-nFieldsY); newSemiJoinFilter = semiJoin.getCondition().accept( new RelOptUtil.RexInputConverter( semiJoin.getCluster().getRexBuilder(), -nFieldsX); newSemiJoinFilter = semiJoin.getCondition().accept( new RelOptUtil.RexInputConverter( semiJoin.getCluster().getRexBuilder(),
-nFieldsY); newSemiJoinFilter = semiJoin.getCondition().accept( new RelOptUtil.RexInputConverter( semiJoin.getCluster().getRexBuilder(), -nFieldsX); newSemiJoinFilter = semiJoin.getCondition().accept( new RelOptUtil.RexInputConverter( semiJoin.getCluster().getRexBuilder(),
rexBuilder); topProgramBuilder.addIdentity(); topProgramBuilder.addCondition(semiJoin.getCondition()); RexProgram topProgram = topProgramBuilder.getProgram();
rexBuilder); topProgramBuilder.addIdentity(); topProgramBuilder.addCondition(semiJoin.getCondition()); RexProgram topProgram = topProgramBuilder.getProgram();
rexBuilder); topProgramBuilder.addIdentity(); topProgramBuilder.addCondition(semiJoin.getCondition()); RexProgram topProgram = topProgramBuilder.getProgram();
final MutableRel right = toMutable(semiJoin.getRight()); return MutableSemiJoin.of(semiJoin.getRowType(), left, right, semiJoin.getCondition(), semiJoin.getLeftKeys(), semiJoin.getRightKeys());
final MutableRel right = toMutable(semiJoin.getRight()); return MutableSemiJoin.of(semiJoin.getRowType(), left, right, semiJoin.getCondition(), semiJoin.getLeftKeys(), semiJoin.getRightKeys());