import * as ast from "./astsql";
export interface QueryContext {
    currentNode: ast.SqlAstNode;
    parentNode?: ast.SqlAstNode;
}
export interface ContextBuilder {
    new (node: ast.SqlAstNode): QueryContext;
}
export declare abstract class QueryVisitor<TContext extends QueryContext = QueryContext> {
    dialect: ast.SqlDialect;
    query: ast.SqlRoot;
    protected visitStarted: boolean;
    private _contextBuilder;
    constructor(dialect: ast.SqlDialect, query: ast.SqlRoot, contextBuilder?: ContextBuilder);
    protected visit(): TContext;
    protected visitNode(context: TContext, node: ast.SqlAstNode): TContext;
    protected visitGenericNode(context: TContext, node: ast.SqlAstNode): TContext;
    protected buildContext(): TContext;
    protected shouldVisitNode(node: any): boolean;
    private doVisitNode(context, node);
}
