/** * Remove correlated variables from the tree at root corRel. * * @param correlate Correlator */ private void removeCorVarFromTree(LogicalCorrelate correlate) { if (cm.mapCorToCorRel.get(correlate.getCorrelationId()) == correlate) { cm.mapCorToCorRel.remove(correlate.getCorrelationId()); } }
/** * Remove correlated variables from the tree at root corRel * * @param correlate Correlator */ private void removeCorVarFromTree(LogicalCorrelate correlate) { if (cm.mapCorToCorRel.get(correlate.getCorrelationId()) == correlate) { cm.mapCorToCorRel.remove(correlate.getCorrelationId()); } }
@Override public RelNode visit(LogicalCorrelate correlate) { mapCorToCorRel.put(correlate.getCorrelationId(), correlate); return visitJoin(correlate); }
@Override public RelNode visit(LogicalCorrelate correlate) { mapCorToCorRel.put(correlate.getCorrelationId(), correlate); return visitJoin(correlate); }
public Void apply(RelNode oldNode, RelNode newNode) { if (cm.mapRefRelToCorRef.containsKey(oldNode)) { final CorelMap corelMap = new CorelMapBuilder().build(newNode); // since after various rules original relnode could have different // corref (or might not have at all) we need to traverse the new node // to figure out new cor refs and put that into map if(!corelMap.mapRefRelToCorRef.isEmpty()){ cm.mapRefRelToCorRef.putAll(newNode, corelMap.mapRefRelToCorRef.get(newNode)); } } if (oldNode instanceof LogicalCorrelate && newNode instanceof LogicalCorrelate) { LogicalCorrelate oldCor = (LogicalCorrelate) oldNode; CorrelationId c = oldCor.getCorrelationId(); if (cm.mapCorToCorRel.get(c) == oldNode) { cm.mapCorToCorRel.put(c, newNode); } if (generatedCorRels.contains(oldNode)) { generatedCorRels.add((LogicalCorrelate) newNode); } } return null; } };
public Void apply(RelNode oldNode, RelNode newNode) { if (cm.mapRefRelToCorRef.containsKey(oldNode)) { final CorelMap corelMap = new CorelMapBuilder().build(newNode); // since after various rules original relnode could have different // corref (or might not have at all) we need to traverse the new node // to figure out new cor refs and put that into map if(!corelMap.mapRefRelToCorRef.isEmpty()){ cm.mapRefRelToCorRef.putAll(newNode, corelMap.mapRefRelToCorRef.get(newNode)); } } if (oldNode instanceof LogicalCorrelate && newNode instanceof LogicalCorrelate) { LogicalCorrelate oldCor = (LogicalCorrelate) oldNode; CorrelationId c = oldCor.getCorrelationId(); if (cm.mapCorToCorRel.get(c) == oldNode) { cm.mapCorToCorRel.put(c, newNode); } if (generatedCorRels.contains(oldNode)) { generatedCorRels.add((LogicalCorrelate) newNode); } } return null; } };
correlate.getCorrelationId(), correlate.getRequiredColumns(), correlate.getJoinType()); if (cm.mapCorToCorRel.get(correlate.getCorrelationId()) == correlate) { cm.mapCorToCorRel.put(correlate.getCorrelationId(), newCorrelate);
correlate.getCorrelationId(), correlate.getRequiredColumns(), correlate.getJoinType()); if (cm.mapCorToCorRel.get(correlate.getCorrelationId()) == correlate) { cm.mapCorToCorRel.put(correlate.getCorrelationId(), newCorrelate);
: new ArrayList<>(corDefOutputs.entrySet())) { final CorDef corDef = rightOutput.getKey(); if (!corDef.corr.equals(rel.getCorrelationId())) { continue;
: new ArrayList<>(corDefOutputs.entrySet())) { final CorDef corDef = rightOutput.getKey(); if (!corDef.corr.equals(rel.getCorrelationId())) { continue;
/** * Remove correlated variables from the tree at root corRel * * @param correlate Correlate */ private void removeCorVarFromTree(LogicalCorrelate correlate) { if (cm.mapCorToCorRel.get(correlate.getCorrelationId()) == correlate) { cm.mapCorToCorRel.remove(correlate.getCorrelationId()); } }
/** * Remove correlated variables from the tree at root corRel * * @param correlate Correlate */ private void removeCorVarFromTree(LogicalCorrelate correlate) { if (cm.mapCorToCorRel.get(correlate.getCorrelationId()) == correlate) { cm.mapCorToCorRel.remove(correlate.getCorrelationId()); } }
/** * Remove correlated variables from the tree at root corRel * * @param correlate Correlate */ private void removeCorVarFromTree(LogicalCorrelate correlate) { if (cm.mapCorToCorRel.get(correlate.getCorrelationId()) == correlate) { cm.mapCorToCorRel.remove(correlate.getCorrelationId()); } }
@Override public RelNode visit(LogicalCorrelate correlate) { mapCorToCorRel.put(correlate.getCorrelationId(), correlate); return visitJoin(correlate); }
@Override public RelNode visit(LogicalCorrelate correlate) { mapCorToCorRel.put(correlate.getCorrelationId(), correlate); return visitJoin(correlate); }
@Override public RelNode visit(LogicalCorrelate correlate) { mapCorToCorRel.put(correlate.getCorrelationId(), correlate); return visitJoin(correlate); }
@Override public RelNode visit(LogicalCorrelate correlate) { final RelNode left = correlate.getLeft().accept(this); final RelNode right = correlate.getRight().accept(this); return new LogicalCorrelate( cluster, copyOf(correlate.getTraitSet()), left, right, correlate.getCorrelationId(), correlate.getRequiredColumns(), correlate.getJoinType() ); }
public RelNode convert(RelNode rel) { final LogicalCorrelate c = (LogicalCorrelate) rel; final RelTraitSet traitSet = c.getTraitSet().replace(EnumerableConvention.INSTANCE); return new EnumerableCorrelate( rel.getCluster(), traitSet, convert(c.getLeft(), c.getLeft().getTraitSet() .replace(EnumerableConvention.INSTANCE)), convert(c.getRight(), c.getRight().getTraitSet() .replace(EnumerableConvention.INSTANCE)), c.getCorrelationId(), c.getRequiredColumns(), c.getJoinType()); } }
public RelNode convert(RelNode rel) { final LogicalCorrelate c = (LogicalCorrelate) rel; final RelTraitSet traitSet = c.getTraitSet().replace(EnumerableConvention.INSTANCE); return new EnumerableCorrelate( rel.getCluster(), traitSet, convert(c.getLeft(), c.getLeft().getTraitSet() .replace(EnumerableConvention.INSTANCE)), convert(c.getRight(), c.getRight().getTraitSet() .replace(EnumerableConvention.INSTANCE)), c.getCorrelationId(), c.getRequiredColumns(), c.getJoinType()); } }
@Override public void onMatch(RelOptRuleCall call) { final LogicalCorrelate correlate = call.rel(0); final RelNode left = correlate.getLeft(); final RelNode right = correlate.getRight(); final RelNode convertedLeft = convert(left, left.getTraitSet().plus(DrillRel.DRILL_LOGICAL).simplify()); final RelNode convertedRight = convert(right, right.getTraitSet().plus(DrillRel.DRILL_LOGICAL).simplify()); final RelTraitSet traits = correlate.getTraitSet().plus(DrillRel.DRILL_LOGICAL); DrillLateralJoinRel lateralJoinRel = new DrillLateralJoinRel(correlate.getCluster(), traits, convertedLeft, convertedRight, false, correlate.getCorrelationId(), correlate.getRequiredColumns(), correlate.getJoinType()); call.transformTo(lateralJoinRel); } }