/// <reference types="node" />
import { EventEmitter } from 'node:events';
import { PdoAttributes } from '../types/pdo-attributes';
import { PdoConnectionI } from '../types/pdo-connection';
import { DriverInstances, PdoDriverI } from '../types/pdo-driver';
import { InternalPdoPoolOptions, PdoPoolOptions, PoolConnection, PoolI, RawPoolConnection } from '../types/pdo-pool';
import { PdoPreparedStatementI } from '../types/pdo-prepared-statement';
import { PdoRawConnectionI } from '../types/pdo-raw-connection';
import { PdoStatementI } from '../types/pdo-statement';
import { PdoTransactionI } from '../types/pdo-transaction';
export declare abstract class PdoDriver extends EventEmitter implements PdoDriverI {
    protected version: string | undefined;
    protected instances: DriverInstances;
    protected defaultAttributes: PdoAttributes;
    protected driverAttributes: PdoAttributes;
    private userAttributes;
    private processedAttributes;
    private userPoolOptions;
    private processedPoolOptions;
    private poolEvents;
    protected hasDebug: boolean;
    private initializedPool;
    protected disconnected: boolean;
    protected forceReconnect: boolean;
    constructor(driver: string, userPoolOptions: PdoPoolOptions, userAttributes: PdoAttributes);
    reconnect(): void;
    disconnect(): Promise<void>;
    protected get poolOptions(): InternalPdoPoolOptions<PoolConnection>;
    protected get attributes(): PdoAttributes;
    protected get pool(): PoolI<PoolConnection>;
    beginTransaction(): Promise<PdoTransactionI>;
    prepare(sql: string): Promise<PdoPreparedStatementI>;
    exec(sql: string): Promise<number>;
    query(sql: string): Promise<PdoStatementI>;
    getAttribute(attribute: string): string | number;
    setAttribute(attribute: string, value: number | string): boolean;
    getVersion(): Promise<string>;
    getRawPoolConnection(): Promise<RawPoolConnection>;
    getRawDriverConnection<T>(): Promise<T>;
    protected assignPoolEvents(): void;
    protected abstract createConnection(unsecure?: boolean): Promise<PoolConnection>;
    protected abstract getRawConnection(): PdoRawConnectionI;
    protected abstract closeConnection(connection: PoolConnection): Promise<void>;
    protected abstract destroyConnection(connection: PoolConnection): Promise<void>;
    protected abstract createPdoConnection(connection: PoolConnection): PdoConnectionI;
    protected abstract validateRawConnection(connection: PoolConnection): boolean;
    protected abstract getVersionFromConnection(connection: PoolConnection): Promise<string>;
    protected throwIfDisconnected(): void;
}
export default PdoDriver;
