001package gudusoft.gsqlparser.ir.semantic.joinanalysis;
002
003/**
004 * Classification of a {@link Predicate} extracted from an ON or WHERE
005 * condition.
006 *
007 * <ul>
008 *   <li>{@link #EQUI} — {@code left = right}.</li>
009 *   <li>{@link #NON_EQUI} — {@code <>}, {@code >}, {@code >=},
010 *       {@code <}, {@code <=}.</li>
011 *   <li>{@link #RANGE} — {@code BETWEEN} (and range-style shapes).</li>
012 *   <li>{@link #NULL_CHECK} — {@code IS NULL} / {@code IS NOT NULL}.</li>
013 *   <li>{@link #CALL} — a function/expression call comparison whose
014 *       operand(s) are not a bare column (e.g.
015 *       {@code lower(a.n) = lower(b.n)}).</li>
016 *   <li>{@link #COMPLEX} — any shape not decomposed into the above; the
017 *       sub-tree is preserved as a {@link PredicateOperand}, never
018 *       dropped.</li>
019 * </ul>
020 *
021 * <p>Provisional in join-analysis slice 162 (S1); re-confirmed against
022 * the real {@code EExpressionType} values in slice 166 (S5).
023 */
024public enum PredicateKind {
025    EQUI,
026    NON_EQUI,
027    RANGE,
028    NULL_CHECK,
029    CALL,
030    COMPLEX
031}