@Override public EnumerableJoin copy(RelTraitSet traitSet, RexNode conditionExpr, RelNode left, RelNode right, // JoinRelType joinType, boolean semiJoinDone) { final JoinInfo joinInfo = JoinInfo.of(left, right, condition); assert joinInfo.isEqui(); try { return new OLAPJoinRel(getCluster(), traitSet, left, right, condition, joinInfo.leftKeys, joinInfo.rightKeys, variablesSet, joinType); } catch (InvalidRelException e) { // Semantic error not possible. Must be a bug. Convert to internal error. throw new AssertionError(e); } }
right = convert(right, right.getTraitSet().replace(OLAPRel.CONVENTION)); final JoinInfo info = JoinInfo.of(left, right, join.getCondition()); if (!info.isEqui() && join.getJoinType() != JoinRelType.INNER) { try { newRel = new OLAPJoinRel(cluster, traitSet, left, right, // info.getEquiCondition(left, right, cluster.getRexBuilder()), // info.leftKeys, info.rightKeys, join.getVariablesSet(), join.getJoinType()); } catch (InvalidRelException e) { if (!info.isEqui()) { newRel = new OLAPFilterRel(cluster, newRel.getTraitSet(), newRel, info.getRemaining(cluster.getRexBuilder()));
@Override public RelNode convert(RelNode rel) { LogicalJoin join = (LogicalJoin) rel; final JoinInfo info = JoinInfo.of(join.getLeft(), join.getRight(), join.getCondition()); if (join.getJoinType() != JoinRelType.INNER) { if (info.pairs().size() == 0) { RelTraitSet traits = ord.e.getTraitSet() .replace(EnumerableConvention.INSTANCE); if (!info.pairs().isEmpty()) { final List<RelFieldCollation> fieldCollations = new ArrayList<>(); for (int key : info.keys().get(ord.i)) { fieldCollations.add( new RelFieldCollation(key, RelFieldCollation.Direction.ASCENDING, left, right, info.getEquiCondition(left, right, cluster.getRexBuilder()), info.leftKeys, info.rightKeys, return null; if (!info.isEqui()) { newRel = new EnumerableFilter(cluster, newRel.getTraitSet(), newRel, info.getRemaining(cluster.getRexBuilder()));
@Override public RelNode createSemiJoin(RelNode left, RelNode right, RexNode condition) { final JoinInfo joinInfo = JoinInfo.of(left, right, condition); final RelOptCluster cluster = left.getCluster(); return HiveSemiJoin.getSemiJoin(cluster, left.getTraitSet(), left, right, condition, joinInfo.leftKeys, joinInfo.rightKeys); } }
boolean shouldTransform = joinInfo.rightSet().equals( ImmutableBitSet.range(rightAggregate.getGroupCount())); if(shouldTransform) {
JoinRelType joinRelType = hashJoinPrel.getJoinType(); JoinInfo joinInfo = hashJoinPrel.analyzeCondition(); boolean allowJoin = (joinInfo.isEqui()) && (joinRelType == JoinRelType.INNER || joinRelType == JoinRelType.RIGHT); if (!allowJoin) { return null;
for (IntPair p : join.analyzeCondition().pairs()) { final ColRef source = left.column(p.source); final ColRef target = right.column(p.target);
right = convert(right, right.getTraitSet().replace(OLAPRel.CONVENTION)); final JoinInfo info = JoinInfo.of(left, right, join.getCondition()); if (!info.isEqui() && join.getJoinType() != JoinRelType.INNER) { try { newRel = new OLAPJoinRel(cluster, traitSet, left, right, // info.getEquiCondition(left, right, cluster.getRexBuilder()), // info.leftKeys, info.rightKeys, join.getVariablesSet(), join.getJoinType()); } catch (InvalidRelException e) { if (!info.isEqui()) { newRel = new OLAPFilterRel(cluster, newRel.getTraitSet(), newRel, info.getRemaining(cluster.getRexBuilder()));
@Override public RelNode convert(RelNode rel) { LogicalJoin join = (LogicalJoin) rel; final JoinInfo info = JoinInfo.of(join.getLeft(), join.getRight(), join.getCondition()); if (join.getJoinType() != JoinRelType.INNER) { if (info.pairs().size() == 0) { RelTraitSet traits = ord.e.getTraitSet() .replace(EnumerableConvention.INSTANCE); if (!info.pairs().isEmpty()) { final List<RelFieldCollation> fieldCollations = new ArrayList<>(); for (int key : info.keys().get(ord.i)) { fieldCollations.add( new RelFieldCollation(key, RelFieldCollation.Direction.ASCENDING, left, right, info.getEquiCondition(left, right, cluster.getRexBuilder()), info.leftKeys, info.rightKeys, return null; if (!info.isEqui()) { newRel = new EnumerableFilter(cluster, newRel.getTraitSet(), newRel, info.getRemaining(cluster.getRexBuilder()));
@Override public RelNode createSemiJoin(RelNode left, RelNode right, RexNode condition) { final JoinInfo joinInfo = JoinInfo.of(left, right, condition); final RelOptCluster cluster = left.getCluster(); return HiveSemiJoin.getSemiJoin(cluster, left.getTraitSet(), left, right, condition, joinInfo.leftKeys, joinInfo.rightKeys); } }
@Override public SemiJoin copy(RelTraitSet traitSet, RexNode condition, RelNode left, RelNode right, JoinRelType joinType, boolean semiJoinDone) { assert joinType == JoinRelType.INNER; final JoinInfo joinInfo = JoinInfo.of(left, right, condition); assert joinInfo.isEqui(); return new SemiJoin(getCluster(), traitSet, left, right, condition, joinInfo.leftKeys, joinInfo.rightKeys); }
final RelNode left = newInputs.get(0); final RelNode right = newInputs.get(1); final JoinInfo info = JoinInfo.of(left, right, join.getCondition()); if (!info.isEqui() && join.getJoinType() != JoinRelType.INNER) { left, right, info.getEquiCondition(left, right, cluster.getRexBuilder()), info.leftKeys, info.rightKeys, return null; if (!info.isEqui()) { newRel = new EnumerableFilter(cluster, newRel.getTraitSet(), newRel, info.getRemaining(cluster.getRexBuilder()));