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;
        implements Provider<List<PlanOptimizer>>
    private final List<PlanOptimizeroptimizers;
    @Inject
    public PlanOptimizersFactory(Metadata metadataSqlParser sqlParserSplitManager splitManagerIndexManager indexManagerFeaturesConfig featuresConfig)
    {
        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(metadatasqlParsersplitManagerfeaturesConfig.isExperimentalSyntaxEnabled()),
                new PredicatePushDown(metadatasqlParsersplitManagerfeaturesConfig.isExperimentalSyntaxEnabled()), // 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));
        }
        // 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