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}