diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java index 165cb9efcf..eb6d02cef6 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java @@ -909,7 +909,7 @@ private static JoinOperator genJoin(RelNode join, ExprNodeDesc[][] joinExpressio if (semiJoin) { joinType = JoinType.LEFTSEMI; } else { - joinType = extractJoinType((Join)join); + joinType = transformJoinType(((Join)join).getJoinType()); } joinCondns[0] = new JoinCondDesc(new JoinCond(0, 1, joinType)); noOuterJoin = joinType != JoinType.FULLOUTER && joinType != JoinType.LEFTOUTER @@ -1097,27 +1097,6 @@ private static void updateFilterMap(int[][] filterMap, int inputPos, int joinPos } } - private static JoinType extractJoinType(Join join) { - // OUTER AND INNER JOINS - JoinType resultJoinType; - switch (join.getJoinType()) { - case FULL: - resultJoinType = JoinType.FULLOUTER; - break; - case LEFT: - resultJoinType = JoinType.LEFTOUTER; - break; - case RIGHT: - resultJoinType = JoinType.RIGHTOUTER; - break; - default: - // TODO: UNIQUE JOIN - resultJoinType = JoinType.INNER; - break; - } - return resultJoinType; - } - private static JoinType transformJoinType(JoinRelType type) { JoinType resultJoinType; switch (type) { diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index b514aa187c..91ec00b9c6 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -460,11 +460,14 @@ Operator genOPTree(ASTNode ast, PlannerContext plannerCtx) throws SemanticExcept final boolean materializedView = getQB().isMaterializedView(); try { + // 0. Gen Optimized Plan + RelNode newPlan = logicalPlan(); + if (this.conf.getBoolVar(HiveConf.ConfVars.HIVE_CBO_RETPATH_HIVEOP)) { if (cboCtx.type == PreCboCtx.Type.VIEW && !materializedView) { throw new SemanticException("Create view is not supported in cbo return path."); } - sinkOp = getOptimizedHiveOPDag(); + sinkOp = getOptimizedHiveOPDag(newPlan); if (oldHints.size() > 0) { LOG.debug("Propagating hints to QB: " + oldHints); getQB().getParseInfo().setHintList(oldHints); @@ -473,8 +476,6 @@ Operator genOPTree(ASTNode ast, PlannerContext plannerCtx) throws SemanticExcept this.ctx.setCboInfo("Plan optimized by CBO."); this.ctx.setCboSucceeded(true); } else { - // 0. Gen Optimized Plan - final RelNode newPlan = logicalPlan(); // 1. Convert Plan to AST ASTNode newAST = getOptimizedAST(newPlan); @@ -1559,25 +1560,7 @@ ASTNode getOptimizedAST(RelNode optimizedOptiqPlan) throws SemanticException { * @return Optimized Hive operator tree * @throws SemanticException */ - Operator getOptimizedHiveOPDag() throws SemanticException { - RelNode optimizedOptiqPlan = null; - CalcitePlannerAction calcitePlannerAction = null; - if (this.columnAccessInfo == null) { - this.columnAccessInfo = new ColumnAccessInfo(); - } - calcitePlannerAction = new CalcitePlannerAction( - prunedPartitions, - ctx.getStatsSource(), - this.columnAccessInfo); - - try { - optimizedOptiqPlan = Frameworks.withPlanner(calcitePlannerAction, Frameworks - .newConfigBuilder().typeSystem(new HiveTypeSystemImpl()).build()); - } catch (Exception e) { - rethrowCalciteException(e); - throw new AssertionError("rethrowCalciteException didn't throw for " + e.getMessage()); - } - + Operator getOptimizedHiveOPDag(RelNode optimizedOptiqPlan) throws SemanticException { RelNode modifiedOptimizedOptiqPlan = PlanModifierForReturnPath.convertOpTree( optimizedOptiqPlan, resultSchema, this.getQB().getTableDesc() != null);