import * as ast from "./astsql";
import { QueryVisitor, QueryContext, ContextBuilder } from "./queryVisitor";
export declare class CompilationContext implements QueryContext {
    currentNode: ast.SqlAstNode;
    parentNode?: ast.SqlAstNode;
    queryString: string;
    constructor(currentNode: ast.SqlAstNode);
}
export interface CompileMethod<TNode extends ast.SqlAstNode = ast.SqlAstNode> {
    (context: CompilationContext, node: TNode): CompilationContext;
}
export declare abstract class QueryCompiler extends QueryVisitor<CompilationContext> {
    dialect: ast.SqlDialect;
    delimiter: string;
    constructor(dialect: ast.SqlDialect, query: ast.SqlRoot, contextBuilder?: ContextBuilder);
    compile(): string;
    protected visitSqlRoot: CompileMethod<ast.SqlRoot>;
    protected visitQueryExpression: CompileMethod<ast.QueryExpression>;
    protected visitConstant: CompileMethod<ast.Constant>;
    protected visitFromClause: CompileMethod<ast.FromClause>;
    protected visitTableSource: CompileMethod<ast.TableSource>;
    protected visitJoinClause: CompileMethod<ast.JoinClause>;
    protected visitTableSpec: CompileMethod<ast.TableSpec>;
    protected visitGroupByClause: CompileMethod<ast.GroupByClause>;
    protected visitAliasedTerm: CompileMethod<ast.AliasedTerm<ast.SqlAstNode>>;
    protected visitSimpleFunctionCall: CompileMethod<ast.SimpleFunctionCall>;
    protected visitBinaryPredicate: CompileMethod<ast.BinaryPredicate>;
    protected visitLikePredicate: CompileMethod<ast.LikePredicate>;
    protected visitColumnName: CompileMethod<ast.ColumnName>;
    protected visitWhereClause: CompileMethod<ast.WhereClause>;
    protected visitOrderByClause: CompileMethod<ast.OrderByClause>;
    protected visitOrderByExpression: CompileMethod<ast.OrderByExpression>;
    protected visitLimitClause: CompileMethod<ast.LimitClause>;
    protected visitBinaryExpression: CompileMethod<ast.BinaryExpression<ast.BinaryOperator>>;
}
export declare class MySQLQueryCompiler extends QueryCompiler {
    constructor(query: ast.SqlRoot);
}
