import { Pool as LightningPool } from 'lightning-pool';
import type { PoolConfiguration } from '../interfaces/database-connection-params.js';
import type { QueryOptions } from '../interfaces/query-options.js';
import type { QueryResult } from '../interfaces/query-result.js';
import type { ScriptExecuteOptions } from '../interfaces/script-execute-options.js';
import type { ScriptResult } from '../interfaces/script-result.js';
import type { StatementPrepareOptions } from '../interfaces/statement-prepare-options.js';
import { SafeEventEmitter } from '../safe-event-emitter.js';
import { Connection, type NotificationCallback } from './connection.js';
import { IntlConnection } from './intl-connection.js';
import type { PreparedStatement } from './prepared-statement.js';
export declare class Pool extends SafeEventEmitter {
    protected readonly _pool: LightningPool<IntlConnection>;
    protected readonly _notificationListeners: SafeEventEmitter;
    protected _notificationConnection?: Connection;
    readonly config: PoolConfiguration;
    constructor(config?: PoolConfiguration | string);
    /**
     * Returns number of connections that are currently acquired
     */
    get acquiredConnections(): number;
    /**
     * Returns number of unused connections in the pool
     */
    get idleConnections(): number;
    /**
     * Returns total number of connections in the pool regardless of whether they are idle or in use
     */
    get totalConnections(): number;
    /**
     * Obtains a connection from the connection pool
     */
    acquire(): Promise<Connection>;
    /**
     * Shuts down the pool and destroys all resources.
     */
    close(terminateWait?: number): Promise<void>;
    /**
     * Executes a script
     */
    execute(sql: string, options?: ScriptExecuteOptions): Promise<ScriptResult>;
    /**
     * Executes a query
     */
    query(sql: string, options?: QueryOptions): Promise<QueryResult>;
    prepare(sql: string, options?: StatementPrepareOptions): Promise<PreparedStatement>;
    release(connection: Connection): Promise<void>;
    listen(channel: string, callback: NotificationCallback): Promise<void>;
    unListen(channel: string): Promise<void>;
    unListenAll(): Promise<void>;
    protected _initNotificationConnection(): Promise<void>;
}
