001package gudusoft.gsqlparser.ir.semantic.joinanalysis;
002
003/**
004 * Join classification surfaced on a {@link JoinEntity}. This is the
005 * <em>semantic</em> join taxonomy consumed by SQLFlow's join-analysis
006 * endpoint; it is intentionally independent of the parser's
007 * {@code EJoinType} so the public contract is stable across dialects.
008 *
009 * <p>{@link #IMPLICIT_CROSS} models an admitted comma-FROM cross product
010 * (i.e. {@code FROM a, b}) — see {@link JoinSourceSyntax#COMMA}.
011 * {@link #UNSUPPORTED} is reserved for join shapes the semantic builder
012 * rejects today (e.g. {@code CROSS APPLY}); it is surfaced explicitly
013 * rather than guessed.
014 *
015 * <p>Introduced by join-analysis slice 162 (S1); the {@code EJoinType}
016 * mapping is confirmed and recorded in slice 167 (S6).
017 *
018 * <p>{@link #SEMI} / {@link #ANTI_SEMI} (R8) model a predicate-derived
019 * semi-join: an {@code EXISTS} / {@code IN} subquery is a semi-join
020 * ({@code SEMI}); a {@code NOT EXISTS} / {@code NOT IN} subquery is an
021 * anti-semi-join ({@code ANTI_SEMI}). The right endpoint is a
022 * {@link JoinEndpointKind#SUBQUERY} pointing at the lifted subquery's
023 * statement block; the correlated outer-column ↔ inner-column pairing,
024 * when known, is carried in {@link JoinEntity#getConditions()}.
025 */
026public enum SemanticJoinType {
027    INNER,
028    LEFT,
029    RIGHT,
030    FULL,
031    CROSS,
032    NATURAL,
033    IMPLICIT_CROSS,
034    SEMI,
035    ANTI_SEMI,
036    UNSUPPORTED
037}