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

    https://github.com/apache/drill/pull/401#discussion_r54836613
  
    --- 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)) {
    --- End diff --
    
    Why do we need Line 341 - 343 here? Originally, when we call HepPlanner, 
seems we do not have to call planner.changeTrait(). 
    
    I comment out these 3 lines of code, and run couple of unit testcases. 
seems things work fine. 



---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to