[ 
https://issues.apache.org/jira/browse/HIVE-27507?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Zhizhen Hou updated HIVE-27507:
-------------------------------
    Description: 
Now, the hasOuterJoin returns whether the last join condition is outer join. 
If hast join condition is not outer join, it returns false reglardless there is 
outer join.
{code:java}
private boolean hasOuterJoin(JoinOperator joinOp) throws SemanticException {
    boolean hasOuter = false;
    for (JoinCondDesc joinCondDesc : joinOp.getConf().getConds()) {
      switch (joinCondDesc.getType()) {
        case JoinDesc.INNER_JOIN:
        case JoinDesc.LEFT_SEMI_JOIN:
        case JoinDesc.UNIQUE_JOIN:
          hasOuter = false;
          break;
        case JoinDesc.FULL_OUTER_JOIN:
        case JoinDesc.LEFT_OUTER_JOIN:
        case JoinDesc.RIGHT_OUTER_JOIN:
          hasOuter = true;
          break;
        default:
          throw new SemanticException("Unknown join type " + 
joinCondDesc.getType());
      }
    }
    return hasOuter;
  } {code}
There may be two solutions.
1. Short circuit if found outer join and return true;
2. Delete 'hasOuter = false;' if join type is not outer join and loop through 
all join conditions.

> ConvertJoinMapJoin#hasOuterJoin produce incorrect result
> --------------------------------------------------------
>
>                 Key: HIVE-27507
>                 URL: https://issues.apache.org/jira/browse/HIVE-27507
>             Project: Hive
>          Issue Type: Bug
>          Components: Query Planning
>            Reporter: Zhizhen Hou
>            Assignee: Zhizhen Hou
>            Priority: Major
>
> Now, the hasOuterJoin returns whether the last join condition is outer join. 
> If hast join condition is not outer join, it returns false reglardless there 
> is outer join.
> {code:java}
> private boolean hasOuterJoin(JoinOperator joinOp) throws SemanticException {
>     boolean hasOuter = false;
>     for (JoinCondDesc joinCondDesc : joinOp.getConf().getConds()) {
>       switch (joinCondDesc.getType()) {
>         case JoinDesc.INNER_JOIN:
>         case JoinDesc.LEFT_SEMI_JOIN:
>         case JoinDesc.UNIQUE_JOIN:
>           hasOuter = false;
>           break;
>         case JoinDesc.FULL_OUTER_JOIN:
>         case JoinDesc.LEFT_OUTER_JOIN:
>         case JoinDesc.RIGHT_OUTER_JOIN:
>           hasOuter = true;
>           break;
>         default:
>           throw new SemanticException("Unknown join type " + 
> joinCondDesc.getType());
>       }
>     }
>     return hasOuter;
>   } {code}
> There may be two solutions.
> 1. Short circuit if found outer join and return true;
> 2. Delete 'hasOuter = false;' if join type is not outer join and loop through 
> all join conditions.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to