import { Mutex } from 'async-mutex';
import { DatabaseAdapter as DatabaseAdapterInterface, RunResult, Transaction as Tx, UncoordinatedDatabaseAdapter } from '../adapter.js';
import { Statement as DbStatement, Row, Statement } from '../util/types.js';
import { Database } from './database.js';
export declare class DatabaseAdapter implements DatabaseAdapterInterface {
    db: Database;
    readonly defaultNamespace = "main";
    protected txMutex: Mutex;
    constructor(db: Database);
    _runInTransaction(...statements: DbStatement[]): Promise<RunResult>;
    _transaction<T>(f: (_tx: Tx, setResult: (res: T) => void) => void): Promise<T>;
    _run({ sql, args }: DbStatement): Promise<RunResult>;
    _query({ sql, args }: DbStatement): Promise<Row[]>;
    _runExclusively<T>(f: (adapter: UncoordinatedDatabaseAdapter) => Promise<T> | T): Promise<T>;
    runInTransaction(...statements: DbStatement[]): Promise<RunResult>;
    transaction<T>(f: (_tx: Tx, setResult: (res: T) => void) => void): Promise<T>;
    run(stmt: Statement): Promise<RunResult>;
    query(stmt: Statement): Promise<Row[]>;
    runExclusively<T>(f: (adapter: UncoordinatedDatabaseAdapter) => Promise<T> | T): Promise<T>;
}
