/** * 对解析树进行遍历获取出select的 相关属性 * * 1、获取所有字段,表,命名空间 * 2、 * */ import { StatementNode, NodeType, CurrorPosition } from '../parser/ast'; interface ReadyStatementClause { type: 'clause'; start: number; stmno: number; position?: CurrorPosition; clause: string; } interface ReadyStatementBase { clause?: string; stmno: number; text: string; type: NodeType; start: number; position?: CurrorPosition; } interface ReadyStatementTableColumn extends ReadyStatementBase { as: string; namespace?: ReadyStatementBase; } interface ReadyStatementColumn extends ReadyStatementTableColumn { table: ReadyStatementBase; } /** * * 光标定位 * 1、光标位于关键字后面: * 1.1、如果是select关键字: 推字段/表/ * 1.2、如果是from 关键字后面 * */ interface PositionClause { clause: string; grammar: string; place?: string; position: CurrorPosition; start: number; type: 'keyword' | 'parenthesis' | 'property_access' | ''; target: any; stmno: number; } interface ReadyStatement { stmno: number; position: PositionClause; functions: any[]; clause: ReadyStatementClause[]; namespaces: ReadyStatementBase[]; tables: ReadyStatementTableColumn[]; columns: ReadyStatementColumn[]; } declare class SelectStatementReader { private noColumnTypeMap; private pushStatement; private markPosition; private markCommaPosition; /** * 遍历语法树children * @param clause * @param result * @param stmno * @param clauseType * @param as */ private walkStatementChildren; /** * * @param clause * @param result * @param stmno * @param clauseType * @param as */ private walkDealPropertyIdentifier; private walkStatementWhere; /** * 遍历字段或则表子句 * @param clause * @param result * @param stmno * @param clauseType */ private walkColumnTableClause; private groupStatementByComma; private walkSelectStatement; private walkStatementSelectWhere; /** * 简单判断是否是where子句 * @param statement */ private isWhereStatement; /** * * @param statements * @param result */ private walkStatement; private readSelectStatement; /** * 读取表字段信息,获取格式如下 * { * // 所有命名空间 * namespaces: [], * // 所有表 * tables: [], * // 所有字段 * fields: [] * } * * @param ast */ readStatement(asts: StatementNode[]): ReadyStatement; } declare const _default: SelectStatementReader; export default _default;