import type { Cache } from "drizzle-orm/cache/core/cache";
import type { WithCacheConfig } from "drizzle-orm/cache/core/types";
import { entityKind } from "drizzle-orm/entity";
import { type Logger } from "drizzle-orm/logger";
import { PgAsyncPreparedQuery, PgAsyncSession, PgAsyncTransaction } from "drizzle-orm/pg-core/async/session";
import type { PgDialect } from "drizzle-orm/pg-core/dialect";
import type { PgQueryResultHKT, PgTransactionConfig, PreparedQueryConfig } from "drizzle-orm/pg-core/session";
import type { AnyRelations } from "drizzle-orm/relations";
import { type Query } from "drizzle-orm/sql/sql";
import type { Assume } from "drizzle-orm/utils";
import type { Pgwasm, Results, Row } from "../interface";
/** What a session runs statements on: a database, or a transaction's handle. */
export type PgwasmSessionClient = Pick<Pgwasm, "query"> & Partial<Pick<Pgwasm, "transaction">>;
export interface PgwasmSessionOptions {
    logger?: Logger;
    cache?: Cache;
}
export interface PgwasmQueryResultHKT extends PgQueryResultHKT {
    type: Results<Assume<this["row"], Row>>;
}
type QueryMetadata = {
    type: "select" | "update" | "delete" | "insert";
    tables: string[];
};
export declare class PgwasmSession<TRelations extends AnyRelations> extends PgAsyncSession<PgwasmQueryResultHKT, TRelations> {
    #private;
    static readonly [entityKind]: string;
    constructor(client: PgwasmSessionClient, dialect: PgDialect, relations: TRelations, options?: PgwasmSessionOptions);
    prepareQuery<T extends PreparedQueryConfig = PreparedQueryConfig>(query: Query, mode: "arrays" | "objects" | "raw", _name: string | boolean, mapper: ((rows: unknown[]) => unknown) | undefined, queryMetadata?: QueryMetadata, cacheConfig?: WithCacheConfig): PgAsyncPreparedQuery<T>;
    transaction<T>(transaction: (tx: PgwasmTransaction<TRelations>) => Promise<T>, config?: PgTransactionConfig): Promise<T>;
}
export declare class PgwasmTransaction<TRelations extends AnyRelations> extends PgAsyncTransaction<PgwasmQueryResultHKT, TRelations> {
    #private;
    static readonly [entityKind]: string;
    constructor(dialect: PgDialect, session: PgwasmSession<TRelations>, relations: TRelations, nestedIndex: number | undefined, parseRqbJson: boolean | undefined);
    transaction<T>(transaction: (tx: PgwasmTransaction<TRelations>) => Promise<T>): Promise<T>;
}
export {};
//# sourceMappingURL=session.d.ts.map