rawsql-ts
Version:
[beta]High-performance SQL parser and AST analyzer written in TypeScript. Provides fast parsing and advanced transformation capabilities.
146 lines (145 loc) • 6.05 kB
TypeScript
import { FromClause, JoinClause, JoinOnClause, JoinUsingClause, FunctionSource, SourceAliasExpression, WhereClause, GroupByClause, HavingClause, SubQuerySource, WindowFrameClause, LimitClause, ForClause, OffsetClause, WindowsClause as WindowClause, CommonTable, WithClause, FetchClause, FetchExpression, UpdateClause, SetClause, ReturningClause, SetClauseItem } from "../models/Clause";
import { SimpleSelectQuery, ValuesQuery } from "../models/SelectQuery";
import { SqlComponent, SqlComponentVisitor } from "../models/SqlComponent";
import { SqlPrintToken } from "../models/SqlPrintToken";
import { InlineQuery } from "../models/ValueComponent";
import { IdentifierDecorator } from "./IdentifierDecorator";
import { ParameterDecorator } from "./ParameterDecorator";
import { CreateTableQuery } from "../models/CreateTableQuery";
export declare enum ParameterStyle {
Anonymous = "anonymous",
Indexed = "indexed",
Named = "named"
}
export interface FormatterConfig {
identifierEscape?: {
start: string;
end: string;
};
parameterSymbol?: string | {
start: string;
end: string;
};
/**
* Parameter style: anonymous (?), indexed ($1), or named (:name)
*/
parameterStyle?: ParameterStyle;
}
export declare const PRESETS: Record<string, FormatterConfig>;
export declare class SqlPrintTokenParser implements SqlComponentVisitor<SqlPrintToken> {
private static readonly SPACE_TOKEN;
private static readonly COMMA_TOKEN;
private static readonly ARGUMENT_SPLIT_COMMA_TOKEN;
private static readonly PAREN_OPEN_TOKEN;
private static readonly PAREN_CLOSE_TOKEN;
private static readonly DOT_TOKEN;
private handlers;
parameterDecorator: ParameterDecorator;
identifierDecorator: IdentifierDecorator;
index: number;
constructor(options?: {
preset?: FormatterConfig;
identifierEscape?: {
start: string;
end: string;
};
parameterSymbol?: string | {
start: string;
end: string;
};
parameterStyle?: 'anonymous' | 'indexed' | 'named';
});
/**
* Pretty-prints a BinarySelectQuery (e.g., UNION, INTERSECT, EXCEPT).
* This will recursively print left and right queries, separated by the operator.
* @param arg BinarySelectQuery
*/
private visitBinarySelectQuery;
/**
* Returns an array of tokens representing a comma followed by a space.
* This is a common pattern in SQL pretty-printing.
*/
private static commaSpaceTokens;
private static argumentCommaSpaceTokens;
private visitQualifiedName;
private visitPartitionByClause;
private visitOrderByClause;
/**
* Print an OrderByItem (expression [asc|desc] [nulls first|last])
*/
private visitOrderByItem;
parse(arg: SqlComponent): {
token: SqlPrintToken;
params: any[] | Record<string, any>[] | Record<string, any>;
};
visit(arg: SqlComponent): SqlPrintToken;
private visitValueList;
private visitColumnReference;
private visitFunctionCall;
private visitUnaryExpression;
private visitBinaryExpression;
private visitLiteralValue;
private visitParameterExpression;
private visitSwitchCaseArgument;
private createElseToken;
private visitCaseKeyValuePair;
private visitRawString;
private visitIdentifierString;
private visitParenExpression;
private visitCastExpression;
private visitCaseExpression;
private visitArrayExpression;
private visitArrayQueryExpression;
private visitBetweenExpression;
private visitStringSpecifierExpression;
private visitTypeValue;
private visitTupleExpression;
private visitWindowFrameExpression;
private visitWindowFrameSpec;
/**
* Prints a window frame boundary value, such as "5 preceding" or "3 following".
* @param arg WindowFrameBoundaryValue
*/
private visitWindowFrameBoundaryValue;
/**
* Prints a static window frame bound, such as "unbounded preceding", "current row", or "unbounded following".
* @param arg WindowFrameBoundStatic
*/
private visitWindowFrameBoundStatic;
private visitSelectItem;
private visitSelectClause;
private visitDistinct;
private visitDistinctOn;
private visitTableSource;
private visitSourceExpression;
visitFromClause(arg: FromClause): SqlPrintToken;
visitJoinClause(arg: JoinClause): SqlPrintToken;
visitJoinOnClause(arg: JoinOnClause): SqlPrintToken;
visitJoinUsingClause(arg: JoinUsingClause): SqlPrintToken;
visitFunctionSource(arg: FunctionSource): SqlPrintToken;
visitSourceAliasExpression(arg: SourceAliasExpression): SqlPrintToken;
visitWhereClause(arg: WhereClause): SqlPrintToken;
visitGroupByClause(arg: GroupByClause): SqlPrintToken;
visitHavingClause(arg: HavingClause): SqlPrintToken;
visitWindowClause(arg: WindowClause): SqlPrintToken;
visitWindowFrameClause(arg: WindowFrameClause): SqlPrintToken;
visitLimitClause(arg: LimitClause): SqlPrintToken;
visitOffsetClause(arg: OffsetClause): SqlPrintToken;
visitFetchClause(arg: FetchClause): SqlPrintToken;
visitFetchExpression(arg: FetchExpression): SqlPrintToken;
visitForClause(arg: ForClause): SqlPrintToken;
visitWithClause(arg: WithClause): SqlPrintToken;
visitCommonTable(arg: CommonTable): SqlPrintToken;
visitSimpleQuery(arg: SimpleSelectQuery): SqlPrintToken;
visitSubQuerySource(arg: SubQuerySource): SqlPrintToken;
visitValuesQuery(arg: ValuesQuery): SqlPrintToken;
visitInlineQuery(arg: InlineQuery): SqlPrintToken;
private visitInsertQuery;
private visitInsertClause;
private visitUpdateQuery;
visitUpdateClause(arg: UpdateClause): SqlPrintToken;
visitSetClause(arg: SetClause): SqlPrintToken;
visitSetClauseItem(arg: SetClauseItem): SqlPrintToken;
visitReturningClause(arg: ReturningClause): SqlPrintToken;
visitCreateTableQuery(arg: CreateTableQuery): SqlPrintToken;
}