Author: rhbutani
Date: Fri Jul 25 17:59:32 2014
New Revision: 1613482

URL: http://svn.apache.org/r1613482
Log:
HIVE-7515 Fix NPE in CBO (Laljo John Pullokkaran via Harish Butani)

Modified:
    
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java

Modified: 
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: 
http://svn.apache.org/viewvc/hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1613482&r1=1613481&r2=1613482&view=diff
==============================================================================
--- 
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
 (original)
+++ 
hive/branches/cbo/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
 Fri Jul 25 17:59:32 2014
@@ -11831,6 +11831,7 @@ public class SemanticAnalyzer extends Ba
       optiqPreCboPlan = applyPreCBOTransforms(optiqGenPlan, 
HiveDefaultRelMetadataProvider.INSTANCE);
       List<RelMetadataProvider> list = Lists.newArrayList();
       list.add(HiveDefaultRelMetadataProvider.INSTANCE);
+      RelTraitSet desiredTraits = cluster.traitSetOf(HiveRel.CONVENTION, 
RelCollationImpl.EMPTY);
 
       if (!HiveConf.getBoolVar(conf, 
HiveConf.ConfVars.HIVE_CBO_GREEDY_JOIN_ORDER)) {
         planner.registerMetadataProviders(list);
@@ -11846,18 +11847,15 @@ public class SemanticAnalyzer extends Ba
           planner.addRule(HivePullUpProjectsAboveJoinRule.LEFT_PROJECT);
           planner.addRule(HivePullUpProjectsAboveJoinRule.RIGHT_PROJECT);
           planner.addRule(HiveMergeProjectRule.INSTANCE);
+        }
 
-          RelTraitSet desiredTraits = cluster
-              .traitSetOf(HiveRel.CONVENTION, RelCollationImpl.EMPTY);
-
-          RelNode rootRel = optiqPreCboPlan;
-          if (!optiqPreCboPlan.getTraitSet().equals(desiredTraits)) {
-            rootRel = planner.changeTraits(optiqPreCboPlan, desiredTraits);
-          }
-          planner.setRoot(rootRel);
-
-          optiqOptimizedPlan = planner.findBestExp();
+        RelNode rootRel = optiqPreCboPlan;
+        if (!optiqPreCboPlan.getTraitSet().equals(desiredTraits)) {
+          rootRel = planner.changeTraits(optiqPreCboPlan, desiredTraits);
         }
+        planner.setRoot(rootRel);
+
+        optiqOptimizedPlan = planner.findBestExp();
       } else {
         final HepProgram hepPgm = new 
HepProgramBuilder().addMatchOrder(HepMatchOrder.BOTTOM_UP)
             .addRuleInstance(new ConvertMultiJoinRule(HiveJoinRel.class))
@@ -11869,7 +11867,12 @@ public class SemanticAnalyzer extends Ba
         RelMetadataProvider chainedProvider = 
ChainedRelMetadataProvider.of(list);
         cluster.setMetadataProvider(new 
CachingRelMetadataProvider(chainedProvider, hepPlanner));
 
-        hepPlanner.setRoot(optiqPreCboPlan);
+        RelNode rootRel = optiqPreCboPlan;
+        if (!optiqPreCboPlan.getTraitSet().equals(desiredTraits)) {
+          rootRel = hepPlanner.changeTraits(optiqPreCboPlan, desiredTraits);
+        }
+        hepPlanner.setRoot(rootRel);
+
         optiqOptimizedPlan = hepPlanner.findBestExp();
       }
 


Reply via email to