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