import { DatabaseConnection } from './DatabaseConnection';
import * as MySQL from 'mysql2';
import { Readable } from 'stream';
import { IsolationLevel } from './IsolationLevel';
import { IDatabasePosition } from './IDatabasePosition';
import { IQueryable } from './IQueryable';
import { TransactionAccessLevel } from './TransactionAccessLevel';
import { IGetMySQLVersionResult } from './GetMySQLVersion';
import { IMetricGauge } from './MetricStore';
export declare class MySQLConnection extends DatabaseConnection<MySQL.PoolConnection> {
    private $transaction;
    private $opened;
    private $hasReplicationEnabled;
    private $isMasterConnection;
    private $version;
    private $activeConnectionsGauge;
    constructor(connection: MySQL.PoolConnection, instantiationStack: string, isReadOnly?: boolean, activeConnectionsGauge?: IMetricGauge | null);
    /**
     * @internal - Do not use in application code
     */
    __internal_init(): Promise<void>;
    getVersion(): Promise<IGetMySQLVersionResult>;
    formatQuery(query: IQueryable<any>): string;
    /**
     * Returns true if this server is the source.
     * Will also return true if there is no replication detected.
     */
    isMaster(): boolean;
    /**
     * Returns true if this server is part of a replication cluster.
     */
    hasReplicationEnabled(): boolean;
    /**
     * Returns true if this server is a replication server.
     */
    isReplication(): boolean;
    isTransaction(): boolean;
    isOpen(): boolean;
    getCurrentDatabasePosition(): Promise<IDatabasePosition>;
    protected _query(query: string, params?: any): Promise<any>;
    protected _stream(query: string, params?: any, streamOptions?: any): Readable;
    startTransaction(isolationLevel?: IsolationLevel, accessLevel?: TransactionAccessLevel): Promise<void>;
    endTransaction(requiresRollback?: boolean): Promise<void>;
    rollback(): Promise<void>;
    commit(): Promise<void>;
    protected _close(forceClose: boolean): Promise<void>;
}
