private boolean fixUpInputs(RelNode rel) { List<RelNode> inputs = rel.getInputs(); int i = -1; int changeCount = 0; for (RelNode input : inputs) { ++i; if (input instanceof RelSubset) { final RelSubset subset = (RelSubset) input; RelSubset newSubset = canonize(subset); if (newSubset != subset) { rel.replaceInput(i, newSubset); if (subset.set != newSubset.set) { subset.set.parents.remove(rel); newSubset.set.parents.add(rel); } changeCount++; } } } return changeCount > 0; }
private boolean fixUpInputs(RelNode rel) { List<RelNode> inputs = rel.getInputs(); int i = -1; int changeCount = 0; for (RelNode input : inputs) { ++i; if (input instanceof RelSubset) { final RelSubset subset = (RelSubset) input; RelSubset newSubset = canonize(subset); if (newSubset != subset) { rel.replaceInput(i, newSubset); if (subset.set != newSubset.set) { subset.set.parents.remove(rel); newSubset.set.parents.add(rel); } changeCount++; } } } return changeCount > 0; }
private RelNode buildFinalPlan(HepRelVertex vertex) { RelNode rel = vertex.getCurrentRel(); notifyChosen(rel); // Recursively process children, replacing this rel's inputs // with corresponding child rels. List<RelNode> inputs = rel.getInputs(); for (int i = 0; i < inputs.size(); ++i) { RelNode child = inputs.get(i); if (!(child instanceof HepRelVertex)) { // Already replaced. continue; } child = buildFinalPlan((HepRelVertex) child); rel.replaceInput(i, child); } return rel; }
public void rewriteGeneric(RelNode rel) { RelNode newRel = rel.copy(rel.getTraitSet(), rel.getInputs()); List<RelNode> oldInputs = rel.getInputs(); for (int i = 0; i < oldInputs.size(); ++i) { newRel.replaceInput( i, getNewForOldRel(oldInputs.get(i))); } setNewForOldRel(rel, newRel); }
public void rewriteGeneric(RelNode rel) { RelNode newRel = rel.copy(rel.getTraitSet(), rel.getInputs()); List<RelNode> oldInputs = rel.getInputs(); for (int i = 0; i < oldInputs.size(); ++i) { newRel.replaceInput( i, getNewForOldRel(oldInputs.get(i))); } setNewForOldRel(rel, newRel); }
} else { newInputs.add(newInputRel); newRel.replaceInput(i, newInputRel);
private RelNode buildFinalPlan(HepRelVertex vertex) { RelNode rel = vertex.getCurrentRel(); notifyChosen(rel); // Recursively process children, replacing this rel's inputs // with corresponding child rels. List<RelNode> inputs = rel.getInputs(); for (int i = 0; i < inputs.size(); ++i) { RelNode child = inputs.get(i); if (!(child instanceof HepRelVertex)) { // Already replaced. continue; } child = buildFinalPlan((HepRelVertex) child); rel.replaceInput(i, child); rel.recomputeDigest(); } return rel; }
public void decorrelateRelGeneric(RelNode rel) { RelNode newRel = rel.copy(rel.getTraitSet(), rel.getInputs()); if (rel.getInputs().size() > 0) { List<RelNode> oldInputs = rel.getInputs(); List<RelNode> newInputs = Lists.newArrayList(); for (int i = 0; i < oldInputs.size(); ++i) { RelNode newInputRel = mapOldToNewRel.get(oldInputs.get(i)); if ((newInputRel == null) || mapNewRelToMapCorVarToOutputPos.containsKey(newInputRel)) { // if child is not rewritten, or if it produces correlated // variables, terminate rewrite return; } else { newInputs.add(newInputRel); newRel.replaceInput(i, newInputRel); } } if (!Util.equalShallow(oldInputs, newInputs)) { newRel = rel.copy(rel.getTraitSet(), newInputs); } } // the output position should not change since there are no corVars // coming from below. Map<Integer, Integer> mapOldToNewOutputPos = Maps.newHashMap(); for (int i = 0; i < rel.getRowType().getFieldCount(); i++) { mapOldToNewOutputPos.put(i, i); } mapOldToNewRel.put(rel, newRel); mapNewRelToMapOldToNewOutputPos.put(newRel, mapOldToNewOutputPos); }
continue; parentRel.replaceInput(i, preservedVertex);
continue; parentRel.replaceInput(i, preservedVertex);
root = transformationResult; } else { parent.replaceInput(ordinalInParent, transformationResult);
root = transformationResult; } else { parent.replaceInput(ordinalInParent, transformationResult);