/** * If a subset has one or more equivalent subsets (owing to a set having * merged with another), returns the subset which is the leader of the * equivalence class. * * @param subset Subset * @return Leader of subset's equivalence class */ private RelSubset canonize(final RelSubset subset) { if (subset.set.equivalentSet == null) { return subset; } RelSet set = subset.set; do { set = set.equivalentSet; } while (set.equivalentSet != null); return set.getOrCreateSubset( subset.getCluster(), subset.getTraitSet()); }
public void explain(RelOptPlanWriter pw) { // Not a typical implementation of "explain". We don't gather terms & // values to be printed later. We actually do the work. String s = getDescription(); pw.item("subset", s); final AbstractRelNode input = (AbstractRelNode) getRels().iterator().next(); input.explainTerms(pw); pw.done(input); }
public void propagateBoostRemoval(VolcanoPlanner planner) { planner.ruleQueue.recompute(this); if (boosted) { boosted = false; for (RelSubset parentSubset : getParentSubsets(planner)) { parentSubset.propagateBoostRemoval(planner); } } }
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); } } }
pw.println("Root: " + root.getDescription()); pw.println("Original rel:"); pw.println(originalRootString); pw.println( "Set#" + set.id + ", type: " + set.subsets.get(0).getRowType()); int j = -1; for (RelSubset subset : set.subsets) { ++j; pw.println( "\t" + subset.getDescription() + ", best=" + ((subset.best == null) ? "null" : ("rel#" + subset.best.getId())) + ", importance=" assert (subset.set == set); for (int k = 0; k < j; k++) { assert !set.subsets.get(k).getTraitSet().equals( subset.getTraitSet()); for (RelNode rel : subset.getRels()) { if (input instanceof RelSubset) { final Iterator<RelNode> rels = inputSubset.getRels().iterator(); assert rels.hasNext(); input = rels.next(); assert inputSubset.getTraitSet().equals( input.getTraitSet());
RelSubset subset = getOrCreateSubset( otherSubset.getCluster(), otherSubset.getTraitSet()); if (otherSubset.bestCost.isLt(subset.bestCost)) { subset.bestCost = otherSubset.bestCost; subset.best = otherSubset.best; for (RelNode otherRel : otherSubset.getRels()) { planner.reregister(this, otherRel); for (RelNode parentRel : getParentRels()) { final RelSubset parentSubset = planner.getSubset(parentRel); parentSubset.propagateCostImprovements( planner, parentRel,
RelSubset subset = getSubset(traits); if (subset == null) { subset = new RelSubset(cluster, this, traits); if (subset1.getConvention() == Convention.NONE) { continue; new AbstractConverter( cluster, subset, ConventionTraitDef.INSTANCE, subset1.getTraitSet()); planner.register(converter, subset1);
for (RelNode parent : getParents()) { final RelSubset parentSubset = planner.getSubset(parent); parentSubset.propagateCostImprovements( planner, parent, activeSet);
private int countChildren(RelSubset subset) { int count = 0; for (RelNode rel : subset.getRels()) { count += rel.getInputs().size(); } return count; } });
final RexBuilder rexBuilder = cluster.getRexBuilder(); if (relC.getConvention() != relA.getConvention()) { final int cCount = relC.getRowType().getFieldCount(); final BitSet aBitSet = BitSets.range(0, aCount); final BitSet bBitSet = BitSets.range(aCount, aCount + bCount);
final PrintWriter pw = new PrintWriter(sw); pw.println( "Node [" + subset.getDescription() + "] could not be implemented; planner state:\n"); planner.dump(pw);
/** * Adds a relational expression to a set, with its results available under a * particular calling convention. An expression may be in the set several * times with different calling conventions (and hence different costs). */ public RelSubset add(RelNode rel) { assert equivalentSet == null : "adding to a dead set"; RelSubset subset = getOrCreateSubset( rel.getCluster(), rel.getTraitSet()); subset.add(rel); return subset; }
for (RelSubset parent : subset.getParentSubsets(planner)) { final double childImportance = computeImportanceOfChild(subset, parent);
LOGGER.finer(sw.toString()); RelNode cheapest = root.buildCheapestPlan(this); if (LOGGER.isLoggable(Level.FINE)) { LOGGER.fine(
/** 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; }
pw.println("Root: " + root.getDescription()); pw.println("Original rel:"); pw.println(originalRootString); pw.println( "Set#" + set.id + ", type: " + set.subsets.get(0).getRowType()); int j = -1; for (RelSubset subset : set.subsets) { ++j; pw.println( "\t" + subset.getDescription() + ", best=" + ((subset.best == null) ? "null" : ("rel#" + subset.best.getId())) + ", importance=" assert subset.set == set; for (int k = 0; k < j; k++) { assert !set.subsets.get(k).getTraitSet().equals( subset.getTraitSet()); for (RelNode rel : subset.getRels()) { if (input instanceof RelSubset) { final Iterator<RelNode> rels = inputSubset.getRels().iterator(); if (rels.hasNext()) { input = rels.next(); assert input.getTraitSet().subsumes( inputSubset.getTraitSet());
RelSubset subset = getOrCreateSubset( otherSubset.getCluster(), otherSubset.getTraitSet()); if (otherSubset.bestCost.isLt(subset.bestCost)) { subset.bestCost = otherSubset.bestCost; subset.best = otherSubset.best; for (RelNode otherRel : otherSubset.getRels()) { planner.reregister(this, otherRel); for (RelNode parentRel : getParentRels()) { final RelSubset parentSubset = planner.getSubset(parentRel); parentSubset.propagateCostImprovements( planner, parentRel,
subset = new RelSubset(cluster, this, traits); if (subset1.getConvention() == Convention.NONE) { continue; new AbstractConverter( cluster, subset, ConventionTraitDef.instance, subset1.getTraitSet()); planner.register(converter, subset1);
for (RelNode parent : getParents()) { final RelSubset parentSubset = planner.getSubset(parent); parentSubset.propagateCostImprovements( planner, parent, activeSet);