import { DatabaseConnection } from './DatabaseConnection';
import { IDatabasePosition } from './IDatabasePosition';
export declare abstract class Database<TDatabaseConfig, TConnectionAPI> {
    private $clusterConfigMap;
    constructor();
    addMaster(config: TDatabaseConfig): void;
    removeMaster(): void;
    addSlave(slaveID: string, config: TDatabaseConfig): string;
    removeSlave(slaveID: string): void;
    getConnection(requireWriteAccess?: boolean, nodeID?: string, requiredPosition?: IDatabasePosition): Promise<DatabaseConnection<TConnectionAPI>>;
    destroy(): Promise<void>;
    protected abstract _destroy(): Promise<void>;
    protected abstract _addNode(name: string, config: TDatabaseConfig): void;
    protected abstract _removeNode(name: string): void;
    protected abstract _getConnection(query: string, requireWriteAccess: boolean, requiredPosition?: IDatabasePosition): Promise<DatabaseConnection<TConnectionAPI>>;
    abstract escape(query: string): string;
}
