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
TypeScript
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;
}