@Override public PlanNode replaceChildren(List<PlanNode> newChildren) { return new UnnestNode(getId(), Iterables.getOnlyElement(newChildren), replicateSymbols, unnestSymbols, ordinalitySymbol); } }
@Override public PlanNode replaceChildren(List<PlanNode> newChildren) { return new UnnestNode(getId(), Iterables.getOnlyElement(newChildren), replicateSymbols, unnestSymbols, ordinalitySymbol); } }
@Override public PlanNode visitUnnest(UnnestNode node, RewriteContext<Void> context) { PlanNode source = context.rewrite(node.getSource()); ImmutableMap.Builder<Symbol, List<Symbol>> builder = ImmutableMap.builder(); for (Map.Entry<Symbol, List<Symbol>> entry : node.getUnnestSymbols().entrySet()) { builder.put(canonicalize(entry.getKey()), entry.getValue()); } return new UnnestNode(node.getId(), source, canonicalizeAndDistinct(node.getReplicateSymbols()), builder.build(), node.getOrdinalitySymbol()); }
@Override public PlanNode visitUnnest(UnnestNode node, RewriteContext<Set<Symbol>> context) { List<Symbol> replicateSymbols = node.getReplicateSymbols().stream() .filter(context.get()::contains) .collect(toImmutableList()); Optional<Symbol> ordinalitySymbol = node.getOrdinalitySymbol(); if (ordinalitySymbol.isPresent() && !context.get().contains(ordinalitySymbol.get())) { ordinalitySymbol = Optional.empty(); } Map<Symbol, List<Symbol>> unnestSymbols = node.getUnnestSymbols(); ImmutableSet.Builder<Symbol> expectedInputs = ImmutableSet.<Symbol>builder() .addAll(replicateSymbols) .addAll(unnestSymbols.keySet()); PlanNode source = context.rewrite(node.getSource(), expectedInputs.build()); return new UnnestNode(node.getId(), source, replicateSymbols, unnestSymbols, ordinalitySymbol); }
@Override public PlanNode visitUnnest(UnnestNode node, RewriteContext<Set<Symbol>> context) { List<Symbol> replicateSymbols = node.getReplicateSymbols().stream() .filter(context.get()::contains) .collect(toImmutableList()); Optional<Symbol> ordinalitySymbol = node.getOrdinalitySymbol(); if (ordinalitySymbol.isPresent() && !context.get().contains(ordinalitySymbol.get())) { ordinalitySymbol = Optional.empty(); } Map<Symbol, List<Symbol>> unnestSymbols = node.getUnnestSymbols(); ImmutableSet.Builder<Symbol> expectedInputs = ImmutableSet.<Symbol>builder() .addAll(replicateSymbols) .addAll(unnestSymbols.keySet()); PlanNode source = context.rewrite(node.getSource(), expectedInputs.build()); return new UnnestNode(node.getId(), source, replicateSymbols, unnestSymbols, ordinalitySymbol); }
@Override public PlanNode visitUnnest(UnnestNode node, RewriteContext<Void> context) { PlanNode source = context.rewrite(node.getSource()); ImmutableMap.Builder<Symbol, List<Symbol>> builder = ImmutableMap.builder(); for (Map.Entry<Symbol, List<Symbol>> entry : node.getUnnestSymbols().entrySet()) { builder.put(canonicalize(entry.getKey()), entry.getValue()); } return new UnnestNode(node.getId(), source, canonicalizeAndDistinct(node.getReplicateSymbols()), builder.build(), node.getOrdinalitySymbol()); }
@Override public PlanWithProperties visitUnnest(UnnestNode node, HashComputationSet parentPreference) { PlanWithProperties child = plan(node.getSource(), parentPreference.pruneSymbols(node.getSource().getOutputSymbols())); // only pass through hash symbols requested by the parent Map<HashComputation, Symbol> hashSymbols = new HashMap<>(child.getHashSymbols()); hashSymbols.keySet().retainAll(parentPreference.getHashes()); return new PlanWithProperties( new UnnestNode( node.getId(), child.getNode(), ImmutableList.<Symbol>builder() .addAll(node.getReplicateSymbols()) .addAll(hashSymbols.values()) .build(), node.getUnnestSymbols(), node.getOrdinalitySymbol()), hashSymbols); }
node.getId(), replicateChannels, replicateTypes.build(),
@Override public PlanWithProperties visitUnnest(UnnestNode node, HashComputationSet parentPreference) { PlanWithProperties child = plan(node.getSource(), parentPreference.pruneSymbols(node.getSource().getOutputSymbols())); // only pass through hash symbols requested by the parent Map<HashComputation, Symbol> hashSymbols = new HashMap<>(child.getHashSymbols()); hashSymbols.keySet().retainAll(parentPreference.getHashes()); return new PlanWithProperties( new UnnestNode( node.getId(), child.getNode(), ImmutableList.<Symbol>builder() .addAll(node.getReplicateSymbols()) .addAll(hashSymbols.values()) .build(), node.getUnnestSymbols(), node.getOrdinalitySymbol()), hashSymbols); }
node.getId(), replicateChannels, replicateTypes.build(),
@Override public Void visitUnnest(UnnestNode node, Integer indent) { print(indent, "- Unnest [replicate=%s, unnest=%s] => [%s]", formatOutputs(node.getReplicateSymbols()), formatOutputs(node.getUnnestSymbols().keySet()), formatOutputs(node.getOutputSymbols())); printPlanNodesStatsAndCost(indent + 2, node); printStats(indent + 2, node.getId()); return processChildren(node, indent + 1); }
@Override public Void visitUnnest(UnnestNode node, Integer indent) { print(indent, "- Unnest [replicate=%s, unnest=%s] => [%s]", formatOutputs(node.getReplicateSymbols()), formatOutputs(node.getUnnestSymbols().keySet()), formatOutputs(node.getOutputSymbols())); printPlanNodesStatsAndCost(indent + 2, node); printStats(indent + 2, node.getId()); return processChildren(node, indent + 1); }
output = new UnnestNode(node.getId(), rewrittenSource, node.getReplicateSymbols(), node.getUnnestSymbols(), node.getOrdinalitySymbol());
output = new UnnestNode(node.getId(), rewrittenSource, node.getReplicateSymbols(), node.getUnnestSymbols(), node.getOrdinalitySymbol());