Hello All, I just want to share one information. We now have Left-Outer-Unnest-Map (LOUM) operator. The difference between LOUM and Unnest-Map (UM) operator is that LOUM is used to represent left-outer semantics of the left-outer-join. That is, LOUM basically propagates all input variables (from the outer branch). It also generates null values for non-match tuples in the inner branch. Unlike this, UM does not propagate input variables by default.
So, when a left-outer-join is transformed as an index-nested-loop-join, LOUM operator will be placed in the inner branch by IntroduceJoinAccessMethodRule and propagates all input variables from the outer branch. For each tuples from the outer branch, it conducts index-search and generates null values if there is no result from that index-search. So, during a logical plan optimization, if you see the LOUM operator, that means that left outer join is transformed into an index-nested-loop join.
