001package gudusoft.gsqlparser;
002
003/**
004 * Specifies which SQL resolver to use for name resolution during parsing.
005 *
006 * <p>The resolver is responsible for linking column references to their source tables
007 * and performing semantic analysis after parsing.</p>
008 *
009 * <h3>Usage Example:</h3>
010 * <pre>
011 * TGSqlParser parser = new TGSqlParser(EDbVendor.dbvoracle);
012 * parser.setResolverType(EResolverType.RESOLVER2);  // Use new resolver
013 * parser.sqltext = "SELECT * FROM employees";
014 * parser.parse();
015 *
016 * // Access resolver2 results
017 * TSQLResolver2 resolver = parser.getResolver2();
018 * </pre>
019 *
020 * <h3>Precedence:</h3>
021 * <p>Instance-level setting (setResolverType) takes precedence over global TBaseType settings.
022 * When set to DEFAULT, the behavior is determined by TBaseType.isEnableResolver() and
023 * TBaseType.isEnableResolver2().</p>
024 *
025 * @see TGSqlParser#setResolverType(EResolverType)
026 * @see TBaseType#setEnableResolver(boolean)
027 * @see TBaseType#setEnableResolver2(boolean)
028 */
029public enum EResolverType {
030
031    /**
032     * Use global TBaseType settings to determine which resolver to use.
033     * This is the default behavior for backward compatibility.
034     *
035     * <p>Resolution order:</p>
036     * <ol>
037     *   <li>If TBaseType.isEnableResolver2() is true, use RESOLVER2</li>
038     *   <li>Else if TBaseType.isEnableResolver() is true, use RESOLVER</li>
039     *   <li>Else use NONE (no resolution)</li>
040     * </ol>
041     */
042    DEFAULT,
043
044    /**
045     * Use the original TSQLResolver for name resolution.
046     * This is the legacy resolver that has been available since early versions.
047     */
048    RESOLVER,
049
050    /**
051     * Use the new TSQLResolver2 for name resolution.
052     *
053     * <p>TSQLResolver2 provides improved column-to-table resolution with:</p>
054     * <ul>
055     *   <li>Clear scope-based name resolution</li>
056     *   <li>Full candidate collection for ambiguous cases</li>
057     *   <li>Confidence-scored inference</li>
058     *   <li>Better tracing and debugging</li>
059     *   <li>CTE and subquery support</li>
060     * </ul>
061     *
062     * <p>After parsing, access the resolver via {@link TGSqlParser#getResolver2()}.</p>
063     */
064    RESOLVER2,
065
066    /**
067     * Disable name resolution entirely.
068     * Only parsing will be performed, no semantic analysis.
069     *
070     * <p>Use this when you only need the AST structure and don't need
071     * column-to-table relationships resolved.</p>
072     */
073    NONE
074}