UNPKG

rawsql-ts

Version:

[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.

103 lines (102 loc) 3.4 kB
import { TableSource } from "../models/Clause"; import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent"; /** * A visitor that collects all table source names from a SQL query structure. * * When selectableOnly is true (default behavior): * - Includes only table sources from FROM and JOIN clauses * - Excludes inline queries, subqueries, and CTEs * * When selectableOnly is false: * - Scans all parts of the query including WITH clauses, subqueries, etc. * - Collects all table sources from the entire query * - Excludes tables that are managed by CTEs * * For UNION-like queries, it scans both the left and right parts. */ export declare class TableSourceCollector implements SqlComponentVisitor<void> { private handlers; private tableSources; private visitedNodes; private tableNameMap; private selectableOnly; private cteNames; private isRootVisit; constructor(selectableOnly?: boolean); /** * Gets all collected table sources */ getTableSources(): TableSource[]; /** * Reset the collection of table sources */ private reset; /** * Gets a unique identifier for a table source */ private getTableIdentifier; collect(query: SqlComponent): TableSource[]; /** * Main entry point for the visitor pattern. * Implements the shallow visit pattern to distinguish between root and recursive visits. */ visit(arg: SqlComponent): void; /** * Internal visit method used for all nodes. * This separates the visit flag management from the actual node visitation logic. */ private visitNode; /** * Collects all CTE names to exclude them from real table sources */ private collectCTEs; private visitSimpleSelectQuery; private visitBinarySelectQuery; private visitValuesQuery; private visitWithClause; private visitCommonTable; private visitFromClause; private visitSourceExpression; private visitTableSource; private visitFunctionSource; /** * Helper method to visit value components, handling special cases like TupleExpression, ParenExpression, InlineQuery, and ArrayQueryExpression * even in selectableOnly mode when they appear in function arguments */ private visitValueComponent; /** * Checks if a table name is a CTE name */ private isCTETable; private visitParenSource; private visitSubQuerySource; private visitInlineQuery; private visitJoinClause; private visitJoinOnClause; private visitJoinUsingClause; private visitWhereClause; private visitGroupByClause; private visitHavingClause; private visitOrderByClause; private visitWindowFrameClause; private visitLimitClause; private visitOffsetClause; private visitFetchClause; private visitForClause; private visitOrderByItem; private visitSelectClause; private visitSelectItem; private visitParenExpression; private visitBinaryExpression; private visitUnaryExpression; private visitCaseExpression; private visitSwitchCaseArgument; private visitCaseKeyValuePair; private visitBetweenExpression; private visitFunctionCall; private visitArrayExpression; private visitArrayQueryExpression; private visitTupleExpression; private visitCastExpression; private visitValueList; }