rawsql-ts
Version:
[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.
226 lines (225 loc) • 5.78 kB
TypeScript
import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
/**
* Utility class to traverse and remove ParameterExpression nodes from the SQL AST.
* This removes any binary expression containing a ParameterExpression as a whole.
* For compound logical expressions (AND/OR), only the parameterized parts are removed.
* If all conditions are removed from a logical expression, the parent node is removed as well.
*/
export declare class ParameterRemover implements SqlComponentVisitor<SqlComponent | null> {
private handlers;
private visitedNodes;
private isRootVisit;
constructor();
/**
* Reset the visited nodes tracking
*/
private reset;
/**
* Main entry point for the visitor pattern.
* @param arg The SQL component to visit
* @returns The component with parameter expressions removed, or null if the entire component should be removed
*/
visit(arg: SqlComponent): SqlComponent | null;
/**
* Internal visit method used for all nodes.
* This separates the visit flag management from the actual node visitation logic.
*/
private visitNode;
/**
* Visit SimpleSelectQuery node
*/
private visitSimpleSelectQuery;
/**
* Visit BinarySelectQuery node
*/
private visitBinarySelectQuery;
/**
* Visit ValuesQuery node
*/
private visitValuesQuery;
/**
* Visit WithClause node
*/
private visitWithClause;
/**
* Visit CommonTable node
*/
private visitCommonTable;
/**
* Visit SelectClause node
*/
private visitSelectClause;
/**
* Visit SelectItem node
*/
private visitSelectItem;
private visitIdentifierString;
private visitRawString;
private visitColumnReference;
private visitParameterExpression;
private visitLiteralValue;
private visitTableSource;
private visitForClause;
private visitDistinctComponent;
/**
* Visit SourceExpression node
*/
private visitSourceExpression;
/**
* Visit ParenSource node
*/
private visitParenSource;
/**
* Visit SourceAliasExpression node
*/
private visitSourceAliasExpression;
/**
* Visit SubQuerySource node
*/
private visitSubQuerySource;
/**
* Visit InlineQuery node
*/
private visitInlineQuery;
/**
* Visit FromClause node
*/
private visitFromClause;
/**
* Visit JoinClause node
*/
private visitJoinClause;
/**
* Visit JoinOnClause node
*/
private visitJoinOnClause;
/**
* Visit JoinUsingClause node
*/
private visitJoinUsingClause;
/**
* Visit WhereClause node - key method for parameter removal
*/
private visitWhereClause;
/**
* Visit ParenExpression node
*/
private visitParenExpression;
/**
* Visit BinaryExpression node - improved logic for right-associative parser structure
*/
private visitBinaryExpression;
/**
* Handle comparison expressions, accounting for right-associative parser structure
*/
private handleComparisonExpression;
/**
* Restructure expressions like "id = (1 AND ...)" to "(id = 1) AND ..."
*/
private restructureComparisonWithLogical;
/**
* Check if an operator is a logical operator */
/**
* Check if the resulting expression would be nonsensical
* This is a heuristic to detect cases like "name = age > 18"
*/
private wouldCreateNonsensicalExpression;
/**
* Check if a ValueComponent contains a ParameterExpression anywhere in its tree
*/
private containsParameter;
/**
* Visit UnaryExpression node
*/
private visitUnaryExpression;
/**
* Visit CaseExpression node
*/
private visitCaseExpression;
/**
* Visit CaseKeyValuePair node
*/
private visitCaseKeyValuePair;
/**
* Visit SwitchCaseArgument node
*/
private visitSwitchCaseArgument;
/**
* Visit BetweenExpression node
*/
private visitBetweenExpression;
/**
* Visit FunctionCall node
*/
private visitFunctionCall;
/**
* Visit ArrayExpression node
*/
private visitArrayExpression;
/**
* Visit TupleExpression node
*/
private visitTupleExpression;
/**
* Visit CastExpression node
*/
private visitCastExpression;
/**
* Visit WindowFrameExpression node
*/
private visitWindowFrameExpression;
/**
* Visit WindowFrameSpec node
*/
private visitWindowFrameSpec;
/**
* Visit TypeValue node
*/
private visitTypeValue;
/**
* Visit GroupByClause node
*/
private visitGroupByClause;
/**
* Visit HavingClause node
*/
private visitHavingClause;
/**
* Visit OrderByClause node
*/
private visitOrderByClause;
/**
* Visit OrderByItem node
*/
private visitOrderByItem;
/**
* Visit WindowFrameClause node
*/
private visitWindowFrameClause;
/**
* Visit WindowsClause node
*/
private visitWindowsClause;
/**
* Visit LimitClause node
*/
private visitLimitClause;
/**
* Visit OffsetClause node
*/
private visitOffsetClause;
/**
* Visit FetchClause node
*/
private visitFetchClause;
/**
* Visit FetchExpression node
*/
private visitFetchExpression;
/**
* Static method to apply parameter removal transformation on an SQL AST
* @param node The SQL AST node to transform
* @returns The transformed SQL AST with parameter expressions removed
*/
static remove(node: SqlComponent): SqlComponent | null;
}