public long getRelMetadataTimestamp(RelNode rel) { RelSubset subset = getSubset(rel); if (subset == null) { return 0; } else { return subset.timestamp; } }
public long getRelMetadataTimestamp(RelNode rel) { RelSubset subset = getSubset(rel); if (subset == null) { return 0; } else { return subset.timestamp; } }
/** * Finds an expression's equivalence set. If the expression is not * registered, returns null. * * @param rel Relational expression * @return Equivalence set that expression belongs to, or null if it is not * registered */ public RelSet getSet(RelNode rel) { assert rel != null : "pre: rel != null"; final RelSubset subset = getSubset(rel); if (subset != null) { assert subset.set != null; return subset.set; } return null; }
/** * Finds an expression's equivalence set. If the expression is not * registered, returns null. * * @param rel Relational expression * @pre rel != null * @return Equivalence set that expression belongs to, or null if it is not * registered */ public RelSet getSet(RelNode rel) { assert rel != null : "pre: rel != null"; final RelSubset subset = getSubset(rel); if (subset != null) { assert subset.set != null; return subset.set; } return null; }
/** Returns the collection of distinct subsets that contain a RelNode one * of whose inputs is in this subset. */ Set<RelSubset> getParentSubsets(VolcanoPlanner planner) { final Set<RelSubset> list = new LinkedHashSet<RelSubset>(); for (RelNode parent : getParents()) { list.add(planner.getSubset(parent)); } return list; }
public RelSubset ensureRegistered(RelNode rel, RelNode equivRel) { final RelSubset subset = mapRel2Subset.get(rel); if (subset != null) { if (equivRel != null) { final RelSubset equivSubset = getSubset(equivRel); if (equivSubset != subset) { assert subset.set != equivSubset.set : "Same set, different subsets means rel and equivRel" + " have different traits, and that's an error"; merge(subset.set, equivSubset.set); } } return subset; } else { return register(rel, equivRel); } }
public RelSubset ensureRegistered(RelNode rel, RelNode equivRel) { final RelSubset subset = mapRel2Subset.get(rel); if (subset != null) { if (equivRel != null) { final RelSubset equivSubset = getSubset(equivRel); if (equivSubset != subset) { assert subset.set != equivSubset.set : "Same set, different subsets means rel and equivRel" + " have different traits, and that's an error"; merge(subset.set, equivSubset.set); } } return subset; } else { return register(rel, equivRel); } }
/** * Adds a rule match. The rule-matches are automatically added to all * existing {@link PhaseMatchList per-phase rule-match lists} which allow * the rule referenced by the match. */ void addMatch(VolcanoRuleMatch match) { final String matchName = match.toString(); for (PhaseMatchList matchList : matchListMap.values()) { if (!matchList.names.add(matchName)) { // Identical match has already been added. continue; } String ruleClassName = match.getRule().getClass().getSimpleName(); Set<String> phaseRuleSet = phaseRuleMapping.get(matchList.phase); if (phaseRuleSet != ALL_RULES) { if (!phaseRuleSet.contains(ruleClassName)) { continue; } } if (LOGGER.isLoggable(Level.FINEST)) { LOGGER.finest( matchList.phase.toString() + " Rule-match queued: " + matchName); } matchList.list.add(match); matchList.matchMap.put( planner.getSubset(match.rels[0]), match); } }
planner.getSubset(match.rels[0]), match);
planner.getSubset(match.rels[0]), match);
public void propagateBoostRemoval(VolcanoPlanner planner) { planner.ruleQueue.recompute(this); if (boosted) { boosted = false; for (RelNode parent : getParents()) { final RelSubset parentSubset = planner.getSubset(parent); parentSubset.propagateBoostRemoval(planner); } } }
/** * Returns the collection of distinct subsets that contain a RelNode one * of whose inputs is in this subset. */ Set<RelSubset> getParentSubsets(VolcanoPlanner planner) { final Set<RelSubset> list = new LinkedHashSet<RelSubset>(); for (RelNode parent : set.getParentRels()) { for (RelSubset rel : inputSubsets(parent)) { if (rel.set == set && rel.getTraitSet().equals(traitSet)) { list.add(planner.getSubset(parent)); } } } return list; }
final RelSubset parentSubset = planner.getSubset(parent); parentSubset.propagateCostImprovements( planner, parent, activeSet);
/** * Registers a {@link RelNode}, which has already been registered, in a new * {@link RelSet}. * * @param set Set * @param rel Relational expression */ void reregister( RelSet set, RelNode rel) { // Is there an equivalent relational expression? (This might have // just occurred because the relational expression's child was just // found to be equivalent to another set.) RelNode equivRel = mapDigestToRel.get(rel.getDigest()); if ((equivRel != null) && (equivRel != rel)) { assert (equivRel.getClass() == rel.getClass()); assert (equivRel.getTraitSet().equals(rel.getTraitSet())); RelSubset equivRelSubset = getSubset(equivRel); ruleQueue.recompute(equivRelSubset, true); return; } // Add the relational expression into the correct set and subset. RelSubset subset2 = asd(rel, set); }
/** * Registers a {@link RelNode}, which has already been registered, in a new * {@link RelSet}. * * @param set Set * @param rel Relational expression */ void reregister( RelSet set, RelNode rel) { // Is there an equivalent relational expression? (This might have // just occurred because the relational expression's child was just // found to be equivalent to another set.) final Pair<String, RelDataType> key = key(rel); RelNode equivRel = mapDigestToRel.get(key); if (equivRel != null && equivRel != rel) { assert equivRel.getClass() == rel.getClass(); assert equivRel.getTraitSet().equals(rel.getTraitSet()); RelSubset equivRelSubset = getSubset(equivRel); ruleQueue.recompute(equivRelSubset, true); return; } // Add the relational expression into the correct set and subset. RelSubset subset2 = asd(rel, set); }
/** Recursively checks whether there are any duplicate subsets along any path * from root of the operand tree to one of the leaves. * * <p>It is OK for a match to have duplicate subsets if they are not on the * same path. For example,</p> * * <pre> * Join * / \ * X X * </pre> * * <p>is a valid match.</p> * * @throws org.eigenbase.util.Util.FoundOne on match */ private void checkDuplicateSubsets(List<RelSubset> subsets, RelOptRuleOperand operand, RelNode[] rels) { final RelSubset subset = planner.getSubset(rels[operand.ordinalInRule]); if (subsets.contains(subset)) { throw Util.FoundOne.NULL; } if (!operand.getChildOperands().isEmpty()) { Stacks.push(subsets, subset); for (RelOptRuleOperand childOperand : operand.getChildOperands()) { checkDuplicateSubsets(subsets, childOperand, rels); } Stacks.pop(subsets, subset); } }
RelSubset subset = volcanoPlanner.getSubset(rels[0]); double importance = 0; if (subset != null) {
RelSubset subset = volcanoPlanner.getSubset(rels[0]); double importance = 0; if (subset != null) {
public RelSubset getSubset( RelNode rel, RelTraitSet traits, boolean createIfMissing) { if ((rel instanceof RelSubset) && (rel.getTraitSet().equals(traits))) { return (RelSubset) rel; } RelSet set = getSet(rel); if (set == null) { return null; } if (createIfMissing) { return set.getOrCreateSubset(rel.getCluster(), traits); } return set.getSubset(traits); }
public RelSubset getSubset( RelNode rel, RelTraitSet traits, boolean createIfMissing) { if ((rel instanceof RelSubset) && (rel.getTraitSet().equals(traits))) { return (RelSubset) rel; } RelSet set = getSet(rel); if (set == null) { return null; } if (createIfMissing) { return set.getOrCreateSubset(rel.getCluster(), traits); } return set.getSubset(traits); }