001package gudusoft.gsqlparser.resolver2.inference;
002
003/**
004 * Types of evidence for column inference.
005 *
006 * <p>Different evidence types have different confidence levels:
007 * - QUALIFIED_REFERENCE: Highest confidence (0.95) - explicit table.column
008 * - JOIN_CONDITION: Very high (0.9) - explicit relationship
009 * - INSERT_COLUMN_LIST: Perfect (1.0) - explicit column definition
010 * - SELECT_LIST: High (0.85) - direct column usage
011 * - UPDATE_SET: Very high (0.95) - explicit assignment
012 * - UNQUALIFIED_REFERENCE: Variable (0.5-0.8) - depends on context
013 * - INFERRED_FROM_USAGE: Lower (0.3-0.7) - pattern-based
014 * - METADATA: Perfect (1.0) - from database schema
015 */
016public enum EvidenceType {
017    /**
018     * Column referenced with table qualifier.
019     * Example: t1.id in "WHERE t1.id = 100"
020     */
021    QUALIFIED_REFERENCE,
022
023    /**
024     * Column referenced without table qualifier.
025     * Example: id in "WHERE id = 100"
026     */
027    UNQUALIFIED_REFERENCE,
028
029    /**
030     * Column appears in JOIN condition.
031     * Example: t1.id in "JOIN t2 ON t1.id = t2.t1_id"
032     */
033    JOIN_CONDITION,
034
035    /**
036     * Column appears in SELECT list.
037     * Example: name in "SELECT t1.name FROM t1"
038     */
039    SELECT_LIST,
040
041    /**
042     * Column appears in INSERT column list.
043     * Example: id, name in "INSERT INTO t1 (id, name) VALUES (...)"
044     */
045    INSERT_COLUMN_LIST,
046
047    /**
048     * Column appears in UPDATE SET clause.
049     * Example: name in "UPDATE t1 SET name = 'value'"
050     */
051    UPDATE_SET,
052
053    /**
054     * Column inferred from usage patterns.
055     * Example: Inferring columns from SELECT * based on WHERE clause usage
056     */
057    INFERRED_FROM_USAGE,
058
059    /**
060     * Column from database metadata.
061     * Example: Schema information from SQLEnv
062     */
063    METADATA,
064
065    /**
066     * Column inferred from subquery result.
067     * Example: Columns propagated from inner SELECT
068     */
069    SUBQUERY_RESULT,
070
071    /**
072     * Column from CTE definition.
073     * Example: Columns in WITH cte(c1, c2) AS (...)
074     */
075    CTE_COLUMN_LIST
076}