UNPKG

rawsql-ts

Version:

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

78 lines (77 loc) 4.42 kB
import { ForClause, FromClause, GroupByClause, HavingClause, JoinClause, JoinOnClause, JoinUsingClause, LimitClause, OrderByClause, OrderByItem, ParenSource, SelectClause, SelectItem, SourceExpression, SubQuerySource, TableSource, WhereClause, WindowFrameClause } from "../models/Clause"; import { BinarySelectQuery, SimpleSelectQuery, SelectQuery, ValuesQuery } from "../models/SelectQuery"; import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent"; import { ArrayExpression, BetweenExpression, BinaryExpression, CaseExpression, CaseKeyValuePair, CastExpression, ColumnReference, FunctionCall, InlineQuery, ParenExpression, ParameterExpression, SwitchCaseArgument, TupleExpression, UnaryExpression, ValueComponent, WindowFrameExpression, IdentifierString, RawString, WindowFrameSpec, TypeValue } from "../models/ValueComponent"; /** * A visitor that disables all WITH clauses in a SQL query structure. * This processes and removes WITH clauses from: * - Simple SELECT queries * - Binary queries (UNION, EXCEPT, etc.) * - Subqueries * - Inline queries * * It maintains the CTE queries themselves but restructures the query to not use * the WITH clause syntactical construct. */ export declare class CTEDisabler implements SqlComponentVisitor<SqlComponent> { private handlers; private visitedNodes; private isRootVisit; constructor(); /** * Reset the visited nodes tracking */ private reset; execute(arg: SqlComponent): SelectQuery; /** * Main entry point for the visitor pattern. * Implements the shallow visit pattern to distinguish between root and recursive visits. */ visit(arg: SqlComponent): SqlComponent; /** * Internal visit method used for all nodes. * This separates the visit flag management from the actual node visitation logic. */ private visitNode; visitSimpleSelectQuery(arg: SimpleSelectQuery): SqlComponent; visitBinarySelectQuery(query: BinarySelectQuery): SqlComponent; visitValuesQuery(query: ValuesQuery): SqlComponent; visitSelectClause(clause: SelectClause): SqlComponent; visitFromClause(clause: FromClause): SqlComponent; visitSubQuerySource(subQuery: SubQuerySource): SqlComponent; visitInlineQuery(inlineQuery: InlineQuery): SqlComponent; visitJoinClause(joinClause: JoinClause): SqlComponent; visitJoinOnClause(joinOn: JoinOnClause): SqlComponent; visitJoinUsingClause(joinUsing: JoinUsingClause): SqlComponent; visitWhereClause(whereClause: WhereClause): SqlComponent; visitGroupByClause(clause: GroupByClause): SqlComponent; visitHavingClause(clause: HavingClause): SqlComponent; visitOrderByClause(clause: OrderByClause): SqlComponent; visitWindowFrameClause(clause: WindowFrameClause): SqlComponent; visitLimitClause(clause: LimitClause): SqlComponent; visitForClause(clause: ForClause): SqlComponent; visitParenExpression(expr: ParenExpression): SqlComponent; visitBinaryExpression(expr: BinaryExpression): SqlComponent; visitUnaryExpression(expr: UnaryExpression): SqlComponent; visitCaseExpression(expr: CaseExpression): SqlComponent; visitSwitchCaseArgument(switchCase: SwitchCaseArgument): SqlComponent; visitCaseKeyValuePair(pair: CaseKeyValuePair): SqlComponent; visitBetweenExpression(expr: BetweenExpression): SqlComponent; visitFunctionCall(func: FunctionCall): SqlComponent; visitArrayExpression(expr: ArrayExpression): SqlComponent; visitTupleExpression(expr: TupleExpression): SqlComponent; visitCastExpression(expr: CastExpression): SqlComponent; visitTypeValue(typeValue: TypeValue): SqlComponent; visitSelectItem(item: SelectItem): SqlComponent; visitIdentifierString(ident: IdentifierString): SqlComponent; visitRawString(raw: RawString): SqlComponent; visitColumnReference(column: ColumnReference): SqlComponent; visitSourceExpression(source: SourceExpression): SqlComponent; visitTableSource(source: TableSource): SqlComponent; visitParenSource(source: ParenSource): SqlComponent; visitParameterExpression(param: ParameterExpression): SqlComponent; visitWindowFrameExpression(expr: WindowFrameExpression): SqlComponent; visitWindowFrameSpec(spec: WindowFrameSpec): SqlComponent; visitLiteralValue(value: ValueComponent): SqlComponent; visitOrderByItem(item: OrderByItem): SqlComponent; }