Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.facebook.presto.sql.planner.plan;
 
 
 
 import java.util.List;
 import java.util.Map;
 
 import static com.facebook.presto.util.ImmutableCollectors.toImmutableList;
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 public class UnionNode
         extends PlanNode
 {
     private final List<PlanNodesources;
     private final ImmutableListMultimap<SymbolSymbolsymbolMapping// Key is output symbol, value is a List of the input symbols supplying that output
 
     @JsonCreator
     public UnionNode(@JsonProperty("id"PlanNodeId id,
             @JsonProperty("sources"List<PlanNodesources,
             @JsonProperty("symbolMapping"ListMultimap<SymbolSymbolsymbolMapping)
     {
         super(id);
 
         checkNotNull(sources"sources is null");
         checkArgument(!sources.isEmpty(), "Must have at least one source");
         checkNotNull(symbolMapping"symbolMapping is null");
 
         this. = ImmutableList.copyOf(sources);
         this. = ImmutableListMultimap.copyOf(symbolMapping);
 
         for (Collection<Symbolsymbols : this..asMap().values()) {
             checkArgument(symbols.size() == this..size(), "Every source needs to map its symbols to an output UNION symbol");
         }
 
         // Make sure each source positionally corresponds to their Symbol values in the Multimap
         for (int i = 0; i < sources.size(); i++) {
             for (Collection<Symbolsymbols : this..asMap().values()) {
                 checkArgument(sources.get(i).getOutputSymbols().contains(Iterables.get(symbolsi)), "Source does not provide required symbols");
             }
         }
     }
 
     @Override
     @JsonProperty("sources")
     public List<PlanNodegetSources()
     {
         return ;
     }
 
     @Override
     public List<SymbolgetOutputSymbols()
     {
         return ImmutableList.copyOf(.keySet());
     }
 
     @JsonProperty("symbolMapping")
     {
         return ;
     }
 
     public List<SymbolsourceOutputLayout(int sourceIndex)
     {
         // Make sure the sourceOutputLayout symbols are listed in the same order as the corresponding output symbols
         return getOutputSymbols().stream()
                 .map(symbol -> .get(symbol).get(sourceIndex))
                 .collect(toImmutableList());
     }

    
Returns the output to input symbol mapping for the given source channel
    public Map<SymbolQualifiedNameReferencesourceSymbolMap(int sourceIndex)
    {
        ImmutableMap.Builder<SymbolQualifiedNameReferencebuilder = ImmutableMap.<SymbolQualifiedNameReference>builder();
        for (Map.Entry<SymbolCollection<Symbol>> entry : .asMap().entrySet()) {
            builder.put(entry.getKey(), Iterables.get(entry.getValue(), sourceIndex).toQualifiedNameReference());
        }
        return builder.build();
    }

    
Returns the input to output symbol mapping for the given source channel. A single input symbol can map to multiple output symbols, thus requiring a Multimap.
    public Multimap<SymbolQualifiedNameReferenceoutputSymbolMap(int sourceIndex)
    {
        return Multimaps.transformValues(FluentIterable.from(getOutputSymbols())
                .toMap(outputToSourceSymbolFunction(sourceIndex))
                .asMultimap()
                .inverse(), Symbol::toQualifiedNameReference);
    }
    private Function<SymbolSymboloutputToSourceSymbolFunction(final int sourceIndex)
    {
        return outputSymbol -> .get(outputSymbol).get(sourceIndex);
    }
    @Override
    public <C, R> R accept(PlanVisitor<C, R> visitor, C context)
    {
        return visitor.visitUnion(thiscontext);
    }
New to GrepCode? Check out our FAQ X