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;
 
 
 
 import java.util.List;
 
 public class PlanOptimizersFactory
         implements Provider<List<PlanOptimizer>>
 {
     private final List<PlanOptimizeroptimizers;
 
     @Inject
     public PlanOptimizersFactory(Metadata metadataSqlParser sqlParserSplitManager splitManagerIndexManager indexManagerFeaturesConfig featuresConfig)
     {
         this(metadatasqlParsersplitManagerindexManagerfeaturesConfigfalse);
     }
 
     public PlanOptimizersFactory(Metadata metadataSqlParser sqlParserSplitManager splitManagerIndexManager indexManagerFeaturesConfig featuresConfigboolean forceSingleNode)
     {
         ImmutableList.Builder<PlanOptimizerbuilder = ImmutableList.builder();
 
         builder.add(new ImplementSampleAsFilter(),
                 new CanonicalizeExpressions(),
                 new SimplifyExpressions(metadatasqlParser),
                 new UnaliasSymbolReferences(),
                 new PruneRedundantProjections(),
                 new SetFlatteningOptimizer(),
                 new LimitPushDown(), // Run the LimitPushDown after flattening set operators to make it easier to do the set flattening
                 new PredicatePushDown(metadatasqlParsersplitManager),
                 new PredicatePushDown(metadatasqlParsersplitManager), // Run predicate push down one more time in case we can leverage new information from generated partitions
                 new MergeProjections(),
                 new SimplifyExpressions(metadatasqlParser), // Re-run the SimplifyExpressions to simplify any recomposed expressions from other optimizations
                 new UnaliasSymbolReferences(), // Run again because predicate pushdown might add more projections
                 new IndexJoinOptimizer(indexManager), // Run this after projections and filters have been fully simplified and pushed down
                 new CountConstantOptimizer(),
                 new WindowFilterPushDown(), // This must run after PredicatePushDown so that it squashes any successive filter nodes
                 new HashGenerationOptimizer(featuresConfig.isOptimizeHashGeneration()), // This must run after all other optimizers have run to that all the PlanNodes are created
                 new MergeProjections(),
                 new PruneUnreferencedOutputs(), // Make sure to run this at the end to help clean the plan for logging/execution and not remove info that other optimizers might need at an earlier point
                 new PruneRedundantProjections()); // This MUST run after PruneUnreferencedOutputs as it may introduce new redundant projections
 
         if (featuresConfig.isOptimizeMetadataQueries()) {
             builder.add(new MetadataQueryOptimizer(metadatasplitManager));
         }
 
         builder.add(new NormalizeJoinOrder());
         builder.add(new BeginTableWrite(metadata)); // HACK! see comments in BeginTableWrite
 
         if (!forceSingleNode) {
             builder.add(new AddExchanges(metadatafeaturesConfig.isDistributedIndexJoinsEnabled(), featuresConfig.isDistributedJoinsEnabled()));
         }
 
         // TODO: consider adding a formal final plan sanitization optimizer that prepares the plan for transmission/execution/logging
         // TODO: figure out how to improve the set flattening optimizer so that it can run at any point
 
         this. = builder.build();
     }
 
     @Override
    public synchronized List<PlanOptimizerget()
    {
        return ;
    }
New to GrepCode? Check out our FAQ X