Interface IResolutionResult
- All Known Implementing Classes:
ResolutionResultImpl
public interface IResolutionResult
TSQLResolver2 解析结果的访问接口
设计原则:
- 语句为中心 - 按语句查询表和列
- 复用现有类型 - 直接返回 TTable、TObjectName、TCTE
- 按需查询 - 不预构建所有数据
使用示例:
TSQLResolver2 resolver = new TSQLResolver2(context, statements);
resolver.resolve();
IResolutionResult result = resolver.getResult();
// 按语句遍历
for (TCustomSqlStatement stmt : resolver.getStatements()) {
// 获取语句中的表
for (TTable table : result.getTables(stmt)) {
System.out.println("Table: " + table.getFullName());
// 获取关联到此表的列
for (TObjectName col : result.getColumnsForTable(stmt, table)) {
System.out.println(" Column: " + col.getColumnNameOnly());
System.out.println(" Resolved: " + (col.getSourceTable() != null));
}
}
// 获取孤儿列(未解析的列)
for (TObjectName orphan : result.getOrphanColumns(stmt)) {
System.out.println(" Orphan: " + orphan.getColumnNameOnly());
}
// 递归处理子语句
for (TCustomSqlStatement subStmt : stmt.getStatements()) {
// 使用相同的 result 对象处理子语句
}
}
// 全局访问(批量处理时有用)
Set<String> allTables = result.getAllTableNames();
Set<String> allFields = result.getAllFieldNames();
-
Method Summary
Modifier and TypeMethodDescription获取所有 CTE 名称获取所有字段名(table.column 格式,全局去重)获取所有已解析的列(sourceTable != null)获取所有表名(全局去重) 适用于批量处理场景获取所有未解析的列(sourceTable == null)获取指定语句中涉及的所有列引用getColumnsForTable(TCustomSqlStatement stmt, TTable table) 获取关联到指定表的列getCTEs(TCustomSqlStatement stmt) 获取指定语句中的 CTE 定义获取指定语句中未解析的列(孤儿列) 即 sourceTable 为 null 的列getScope(TCustomSqlStatement stmt) 获取指定语句的 Scope 仅供高级用户使用,一般不需要直接访问 Scope获取解析统计信息getTables(TCustomSqlStatement stmt) 获取指定语句中涉及的所有表 默认过滤:排除 JOIN 容器,包含物理表getTables(TCustomSqlStatement stmt, TableFilterOptions options) 获取指定语句中涉及的所有表(带过滤选项)
-
Method Details
-
getScope
获取指定语句的 Scope 仅供高级用户使用,一般不需要直接访问 Scope- Parameters:
stmt- SQL语句- Returns:
- 该语句对应的 Scope,如果不存在返回 null
-
getTables
获取指定语句中涉及的所有表 默认过滤:排除 JOIN 容器,包含物理表- Parameters:
stmt- SQL语句- Returns:
- 表列表
-
getTables
获取指定语句中涉及的所有表(带过滤选项)- Parameters:
stmt- SQL语句options- 过滤选项- Returns:
- 表列表
-
getColumns
获取指定语句中涉及的所有列引用- Parameters:
stmt- SQL语句- Returns:
- 列列表
-
getColumnsForTable
获取关联到指定表的列- Parameters:
stmt- SQL语句table- 目标表- Returns:
- 关联到此表的列列表
-
getOrphanColumns
获取指定语句中未解析的列(孤儿列) 即 sourceTable 为 null 的列- Parameters:
stmt- SQL语句- Returns:
- 孤儿列列表
-
getCTEs
获取指定语句中的 CTE 定义- Parameters:
stmt- SQL语句(通常是包含 WITH 子句的 SELECT)- Returns:
- CTE 列表
-
getAllTableNames
获取所有表名(全局去重) 适用于批量处理场景- Returns:
- 所有表名集合
-
getAllFieldNames
获取所有字段名(table.column 格式,全局去重)- Returns:
- 所有字段名集合
-
getAllCTENames
获取所有 CTE 名称- Returns:
- CTE 名称集合
-
getAllResolvedColumns
获取所有已解析的列(sourceTable != null)- Returns:
- 已解析列列表
-
getAllUnresolvedColumns
获取所有未解析的列(sourceTable == null)- Returns:
- 未解析列列表
-
getStatistics
获取解析统计信息- Returns:
- 统计信息 (使用 gudusoft.gsqlparser.resolver2.model.ResolutionStatistics)
-