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.optimizations;
 
 
 import java.util.Map;
 
 import static com.facebook.presto.sql.analyzer.ExpressionAnalyzer.getExpressionTypes;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 public class SimplifyExpressions
         extends PlanOptimizer
 {
     private final Metadata metadata;
     private final SqlParser sqlParser;
 
     public SimplifyExpressions(Metadata metadataSqlParser sqlParser)
     {
         this. = checkNotNull(metadata"metadata is null");
         this. = checkNotNull(sqlParser"sqlParser is null");
     }
 
     @Override
     public PlanNode optimize(PlanNode planSession sessionMap<SymbolTypetypesSymbolAllocator symbolAllocatorPlanNodeIdAllocator idAllocator)
     {
         checkNotNull(plan"plan is null");
         checkNotNull(session"session is null");
         checkNotNull(types"types is null");
         checkNotNull(symbolAllocator"symbolAllocator is null");
         checkNotNull(idAllocator"idAllocator is null");
 
         return PlanRewriter.rewriteWith(new Rewriter(sessiontypes), plan);
     }
 
     private static class Rewriter
             extends PlanRewriter<Void>
     {
         private final Metadata metadata;
         private final SqlParser sqlParser;
         private final Session session;
         private final Map<SymbolTypetypes;
 
         public Rewriter(Metadata metadataSqlParser sqlParserSession sessionMap<SymbolTypetypes)
         {
             this. = metadata;
             this. = sqlParser;
             this. = session;
             this. = types;
         }
 
         @Override
         public PlanNode visitProject(ProjectNode nodeRewriteContext<Voidcontext)
         {
             PlanNode source = context.rewrite(node.getSource());
             Map<SymbolExpressionassignments = ImmutableMap.copyOf(Maps.transformValues(node.getAssignments(), this::simplifyExpression));
             return new ProjectNode(node.getId(), sourceassignments);
         }
 
         @Override
         public PlanNode visitFilter(FilterNode nodeRewriteContext<Voidcontext)
         {
             PlanNode source = context.rewrite(node.getSource());
             Expression simplified = simplifyExpression(node.getPredicate());
             if (simplified.equals(.)) {
                 return source;
             }
             return new FilterNode(node.getId(), sourcesimplified);
         }
        @Override
        public PlanNode visitTableScan(TableScanNode nodeRewriteContext<Voidcontext)
        {
            Expression originalConstraint = null;
            if (node.getOriginalConstraint() != null) {
                originalConstraint = simplifyExpression(node.getOriginalConstraint());
            }
            return new TableScanNode(node.getId(), node.getTable(), node.getOutputSymbols(), node.getAssignments(), originalConstraintnode.getSummarizedPartition());
        }
        private Expression simplifyExpression(Expression input)
        {
            IdentityHashMap<ExpressionTypeexpressionTypes = getExpressionTypes(input);
            ExpressionInterpreter interpreter = ExpressionInterpreter.expressionOptimizer(inputexpressionTypes);
            return LiteralInterpreter.toExpression(interpreter.optimize(.), expressionTypes.get(input));
        }
    }
New to GrepCode? Check out our FAQ X