I have bumped into this quite a few times and I think we should really try to improve the design of the join hierarchy.
>From a logical point of view I think it makes sense to have the following operators: InnerJoin, LeftOuterJoin, FullOuterJoin, SemiJoin, AntiJoin, (GroupJoin) Yet I have not thought thoroughly what should become a class, and what a property of the class (e.g., JoinRelType, SemiJoinType). Moreover, Correlate as it is right now, is basically a nested loop join (as its Javadoc also indicates). Nested loop join is most often encountered as a physical operator so I am not sure if it should remain as is (in particular the LogicalCorrelate). As we do not have HashJoin, MergeJoin, etc., operators at the logical level, I think we should not have a NestedLoopJoin (aka., LogicalCorrelate). There are valid reasons why Correlate was introduced in the first place but I think we should rethink a bit the design and the needs. @Julian: I do not know to what extend you would like to rethink the hierarchy but I have the impression that even small changes can easily break backward compatibility. Στις Τετ, 20 Μαρ 2019 στις 8:07 μ.μ., ο/η Julian Hyde <[email protected]> έγραψε: > I just discovered that Correlate, which is neither a Join nor a SemiJoin, > uses SemiJoinType, but SemiJoin does not use SemiJoinType. > > Yuck. The Join/SemiJoin/Correlate type hierarchy needs some thought. > > Julian > > >
