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}