import { DateAsTimestampWithTimeZone } from "@operativa/verse/conventions/database";
import { Driver, DriverInfo, ExecuteResult, ExecuteStatement, IsolationLevel } from "@operativa/verse/db/driver";
import { SqlNode } from "@operativa/verse/db/sql";
import { Model } from "@operativa/verse/model/model";
import { Logger } from "@operativa/verse/utils/logging";
import { List } from "immutable";
import { ConnectionAttributes } from "oracledb";
export declare function oracle(connectionAttributes: ConnectionAttributes, adminAttributes?: ConnectionAttributes): OracleDriver;
export declare class OracleDriver implements Driver, AsyncDisposable {
    #private;
    readonly connectionAttributes: ConnectionAttributes;
    readonly adminAttributes?: ConnectionAttributes | undefined;
    constructor(connectionAttributes: ConnectionAttributes, adminAttributes?: ConnectionAttributes | undefined);
    get info(): DriverInfo;
    get conventions(): List<DateAsTimestampWithTimeZone>;
    validate(model: Model): void;
    set logger(logger: Logger | undefined);
    private pool;
    rows(sql: SqlNode): (args: unknown[]) => AsyncIterable<readonly unknown[]>;
    execute(statements: readonly ExecuteStatement[], isolation?: IsolationLevel, onCommit?: (results: readonly ExecuteResult[]) => void): Promise<ExecuteResult[]>;
    script(statements: readonly ExecuteStatement[]): string[];
    exists(): Promise<boolean>;
    tableExists(name: string): Promise<boolean>;
    create(): Promise<void>;
    drop(): Promise<void>;
    [Symbol.asyncDispose](): Promise<void | undefined>;
}
