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