Index: ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java =================================================================== --- ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (revision 1617893) +++ ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (working copy) @@ -896,9 +896,7 @@ private boolean isJoinToken(ASTNode node) { if ((node.getToken().getType() == HiveParser.TOK_JOIN) || (node.getToken().getType() == HiveParser.TOK_CROSSJOIN) - || (node.getToken().getType() == HiveParser.TOK_LEFTOUTERJOIN) - || (node.getToken().getType() == HiveParser.TOK_RIGHTOUTERJOIN) - || (node.getToken().getType() == HiveParser.TOK_FULLOUTERJOIN) + || isOuterJoinToken(node) || (node.getToken().getType() == HiveParser.TOK_LEFTSEMIJOIN) || (node.getToken().getType() == HiveParser.TOK_UNIQUEJOIN)) { return true; @@ -907,6 +905,12 @@ return false; } + private boolean isOuterJoinToken(ASTNode node) { + return (node.getToken().getType() == HiveParser.TOK_LEFTOUTERJOIN) + || (node.getToken().getType() == HiveParser.TOK_RIGHTOUTERJOIN) + || (node.getToken().getType() == HiveParser.TOK_FULLOUTERJOIN); + } + /** * Given the AST with TOK_JOIN as the root, get all the aliases for the tables * or subqueries in the join. @@ -1092,6 +1096,7 @@ } else if (isJoinToken(frm)) { processJoin(qb, frm); qbp.setJoinExpr(frm); + queryProperties.incrementJoinCount(!isOuterJoinToken(frm)); }else if(frm.getToken().getType() == HiveParser.TOK_PTBLFUNCTION){ queryProperties.setHasPTF(true); processPTF(qb, frm); @@ -6866,7 +6871,6 @@ } desc.setNullSafes(nullsafes); } - queryProperties.incrementJoinCount(joinOp.getConf().getNoOuterJoin()); return putOpInsertMap(joinOp, outputRR); }