[ 
https://issues.apache.org/jira/browse/DRILL-4465?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15177208#comment-15177208
 ] 

ASF GitHub Bot commented on DRILL-4465:
---------------------------------------

Github user jinfengni commented on a diff in the pull request:

    https://github.com/apache/drill/pull/401#discussion_r54837401
  
    --- Diff: 
exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/handlers/DefaultSqlHandler.java
 ---
    @@ -273,12 +282,90 @@ public RelNode visit(RelNode other) {
     
       }
     
    +  /**
    +   * Transform RelNode to a new RelNode without changing any traits. Also 
will log the outcome.
    +   *
    +   * @param plannerType
    +   *          The type of Planner to use.
    +   * @param phase
    +   *          The transformation phase we're running.
    +   * @param input
    +   *          The origianl RelNode
    +   * @return The transformed relnode.
    +   */
    +  private RelNode transform(PlannerType plannerType, PlannerPhase phase, 
RelNode input) {
    +    return transform(plannerType, phase, input, input.getTraitSet());
    +  }
    +
    +  /**
    +   * Transform RelNode to a new RelNode, targeting the provided set of 
traits. Also will log the outcome.
    +   *
    +   * @param plannerType
    +   *          The type of Planner to use.
    +   * @param phase
    +   *          The transformation phase we're running.
    +   * @param input
    +   *          The origianl RelNode
    +   * @param targetTraits
    +   *          The traits we are targeting for output.
    +   * @return The transformed relnode.
    +   */
    +  protected RelNode transform(PlannerType plannerType, PlannerPhase phase, 
RelNode input, RelTraitSet targetTraits) {
    +    final Stopwatch watch = Stopwatch.createStarted();
    +    final RuleSet rules = config.getRules(phase);
    +    final RelTraitSet toTraits = targetTraits.simplify();
    +
    +    final RelNode output;
    +    switch (plannerType) {
    +    case HEP_BOTTOM_UP:
    +    case HEP: {
    +      final HepProgramBuilder hepPgmBldr = new HepProgramBuilder();
    +      if (plannerType == PlannerType.HEP_BOTTOM_UP) {
    +        hepPgmBldr.addMatchOrder(HepMatchOrder.BOTTOM_UP);
    +      }
    +      for (RelOptRule rule : rules) {
    +        hepPgmBldr.addRuleInstance(rule);
    +      }
    +
    +      final HepPlanner planner = new HepPlanner(hepPgmBldr.build(), 
context.getPlannerSettings());
    +
    +      final List<RelMetadataProvider> list = Lists.newArrayList();
    +      list.add(DrillDefaultRelMetadataProvider.INSTANCE);
    +      planner.registerMetadataProviders(list);
    +      final RelMetadataProvider cachingMetaDataProvider = new 
CachingRelMetadataProvider(
    +          ChainedRelMetadataProvider.of(list), planner);
    +
    +      // Modify RelMetaProvider for every RelNode in the SQL operator Rel 
tree.
    +      input.accept(new MetaDataProviderModifier(cachingMetaDataProvider));
    +      planner.setRoot(input);
    +      if (!input.getTraitSet().equals(targetTraits)) {
    +        planner.changeTraits(input, toTraits);
    +      }
    +      output = planner.findBestExp();
    +      break;
    +    }
    +    case VOLCANO:
    +    default: {
    +      // as weird as it seems, the cluster's only planner is the volcano 
planner.
    +      final RelOptPlanner planner = input.getCluster().getPlanner();
    +      final Program program = Programs.of(rules);
    +      output = program.run(planner, input, toTraits);
    +
    +      break;
    +    }
    +    }
    +
    +    log(plannerType.name() + ":" + phase.description, output, logger, 
watch);
    --- End diff --
    
    Found the reason for the performance difference. Under IDE, 
logger.isDebugEnabled() is true, which will make each log() call do extra work, 
in stead of NO_OP. 



> Refactor Parsing and Planning to canonicalize planning and parsing
> ------------------------------------------------------------------
>
>                 Key: DRILL-4465
>                 URL: https://issues.apache.org/jira/browse/DRILL-4465
>             Project: Apache Drill
>          Issue Type: Sub-task
>          Components: Query Planning & Optimization
>            Reporter: Jacques Nadeau
>            Assignee: Jinfeng Ni
>             Fix For: 1.6.0
>
>




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to