All Implemented Interfaces:
NamedWriteable, Writeable, PostAnalysisVerificationAware, Resolvable, SortAgnostic

public class InlineJoin extends Join
Specialized type of join where the source of the left and right plans are the same. The plans themselves can contain different nodes however at the core, both have the same source.

Furthermore, this type of join indicates the right side is performing a subquery identical to the left side - meaning its result is required before joining with the left side.

This helps the model since we want any transformation applied to the source to show up on both sides of the join - due the immutability of the tree (which uses value instead of reference semantics), even if the same node instance would be used, any transformation applied on one side (which would create a new source) would not be reflected on the other side (still use the old source instance). This dedicated instance handles that by replacing the source of the right with a StubRelation that simplifies copies the output of the source, making it easy to serialize/deserialize as well as traversing the plan.