import { EventEmitter } from "events";
import { StateManager } from "../StateManager";
import { Blueprint } from "../Blueprint";
import type { TConstant, TPoolConnected } from "../../types";
export declare abstract class BaseDriver extends EventEmitter {
    private SLOW_QUERY_EXECUTE_TIME;
    private SLOW_QUERY_LIMIT_LENGTH;
    protected pool: any;
    protected poolTrx: any;
    protected options: Record<string, any>;
    protected MESSAGE_TRX_NOT_STARTED: string;
    protected MESSAGE_TRX_CLOSED: string;
    protected abstract connect(): TPoolConnected;
    protected abstract disconnect(pool: any): void;
    protected abstract meta(results: any, sql: string): void;
    protected abstract returning(results: any): any;
    protected import(mod: string): any;
    protected _detectEventQuery({ start, sql }: {
        start: number;
        sql: string;
    }): void;
    protected _messageSlowQuery(duration: number, sql: string): string;
    protected _detectQueryType(query: string): "SELECT" | "UPDATE" | "DELETE" | "INSERT" | "UNKNOWN";
    protected _onPoolConnect(pool: any): void;
    protected _messageConnected(message: string): string;
    protected _messageError(message: string): string;
}
export declare abstract class QueryBuilder {
    protected $constants: (name: keyof TConstant) => any;
    protected $state: StateManager;
    constructor(state: StateManager);
    abstract select(): string;
    abstract insert(): string;
    abstract update(): string;
    abstract remove(): string;
    abstract any(): string;
    abstract getColumns({ database, table, }: {
        database: string;
        table: string;
    }): string;
    abstract getSchema({ database, table, }: {
        database: string;
        table: string;
    }): string;
    abstract getTables(database: string): string;
    abstract hasTable({ database, table, }: {
        database: string;
        table: string;
    }): string;
    abstract createDatabase(database: string): string;
    abstract createTable({ database, table, schema, }: {
        database: string;
        table: string;
        schema: Record<string, Blueprint> | string[];
    }): string;
    abstract addColumn({ table, column, type, attributes, after, }: {
        table: string;
        column: string;
        type: string;
        attributes: string[];
        after: string;
    }): string;
    abstract changeColumn({ table, column, type, attributes, }: {
        table: string;
        column: string;
        type: string;
        attributes: string[];
    }): string;
    abstract getChildFKs({ database, table, }: {
        database: string;
        table: string;
    }): string;
    abstract getFKs({ database, table, }: {
        database: string;
        table: string;
    }): string;
    abstract hasFK({ database, table, constraint, }: {
        database: string;
        table: string;
        constraint: string;
    }): string;
    abstract dropFK({ table, constraint, }: {
        table: string;
        constraint: string;
    }): string;
    abstract addFK({ table, tableRef, key, constraint, foreign, }: {
        table: string;
        tableRef: string;
        key: string;
        constraint: string;
        foreign: {
            references: string;
            onDelete: string;
            onUpdate: string;
        };
    }): string;
    abstract getIndexes({ database, table, }: {
        database: string;
        table: string;
    }): string;
    abstract hasIndex({ database, table, name, }: {
        database: string;
        table: string;
        name: string;
    }): string;
    abstract addIndex({ table, name, columns, }: {
        table: string;
        name: string;
        columns: string[];
    }): string;
    abstract dropIndex({ table, name }: {
        table: string;
        name: string;
    }): string;
    abstract hasUnique({ database, table, name, }: {
        database: string;
        table: string;
        name: string;
    }): string;
    abstract addUnique({ table, name, columns, }: {
        table: string;
        name: string;
        columns: string[];
    }): string;
    abstract dropUnique({ table, name }: {
        table: string;
        name: string;
    }): string;
    abstract hasPrimaryKey({ database, table, }: {
        database: string;
        table: string;
    }): string;
    abstract addPrimaryKey({ table, columns, }: {
        table: string;
        columns: string[];
    }): string;
    abstract dropPrimaryKey({ table }: {
        table: string;
    }): string;
    abstract getDatabase(database: string): string;
    abstract dropDatabase(database: string): string;
    abstract dropView(view: string): string;
    abstract dropTable(table: string): string;
    abstract truncate(table: string): string;
    abstract sleep(second: number): string;
    abstract format(sql: (string | null)[] | string): string;
    abstract getActiveConnections(): string;
    abstract getMaxConnections(): string;
    protected abstract bindJoin(values: string[]): string | null;
    protected abstract bindWhere(values: string[]): string | null;
    protected abstract bindOrderBy(values: string[]): string | null;
    protected abstract bindGroupBy(values: string[]): string | null;
    protected abstract bindSelect(values: string[], opts?: {
        distinct?: string;
    }): string;
    protected abstract bindFrom(args: {
        from: string[];
        alias: string | null;
        rawAlias: string | null;
    }): string;
    protected abstract bindLimit(limit: string | number | null): string;
    protected abstract bindOffset(offset: string | number | null): string;
    protected abstract bindHaving(having: string): string;
}
