import { Builder } from './Builder.js';
import type { Dialect } from './Dialect.js';
import type { Diff } from './Diff.js';
import type { Driver } from './Driver.js';
import { type HasQuery, type HasResolver, type HasSql, type HasTable, internalResolver } from './Internal.js';
import type { Async, Deliver, Either, QueryDialect, QueryMeta, Sync } from './MetaData.js';
import { BatchQuery } from './Queries.js';
import { Resolver } from './Resolver.js';
import { type Sql } from './Sql.js';
import type { Table } from './Table.js';
import type { SelectFirst } from './query/Select.js';
export declare class Database extends Builder implements HasResolver {
driver: Driver;
dialect: Dialect;
diff: Diff;
readonly [internalResolver]: Resolver;
constructor(driver: Driver, dialect: Dialect, diff: Diff);
close(this: Database): Promise;
close(this: Database): void;
[Symbol.dispose](this: Database): void;
[Symbol.asyncDispose](this: Database): Promise;
create(...tables: Array): BatchQuery;
drop(...tables: Array): BatchQuery;
run(input: HasSql): Deliver;
get>(input: HasQuery): Deliver;
get(input: HasSql): Deliver;
all(input: HasSql): Deliver>;
migrate(...tables: Array): Deliver;
batch>(queries: Queries): BatchQuery;
execute(input: HasSql): Deliver;
transaction(this: Database, run: (tx: Transaction) => T, options?: TransactionOptions[Meta['dialect']]): T;
transaction(this: Database, run: (tx: Transaction) => Promise, options?: TransactionOptions[Meta['dialect']]): Promise;
transaction(run: (tx: Transaction) => T | Promise, options?: TransactionOptions[Meta['dialect']]): Deliver;
$count(source: Table | HasSql, condition?: HasSql): SelectFirst, Meta>;
}
export interface TransactionUniversalOptions {
async?: boolean;
}
export interface TransactionOptions {
universal: TransactionUniversalOptions;
sqlite: TransactionUniversalOptions & {
behavior?: 'deferred' | 'immediate' | 'exclusive';
};
postgres: TransactionUniversalOptions & {
isolationLevel?: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
accessMode?: 'read only' | 'read write';
deferrable?: boolean;
};
mysql: TransactionUniversalOptions & {
isolationLevel?: 'read uncommitted' | 'read committed' | 'repeatable read' | 'serializable';
accessMode?: 'read only' | 'read write';
withConsistentSnapshot?: boolean;
};
}
export declare class Rollback extends Error {
data: Data;
constructor(data: Data);
}
export declare class Transaction extends Database {
rollback(data?: Data): never;
}
export declare class SyncDatabase extends Database> {
}
export declare class AsyncDatabase extends Database> {
}