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();
}