EdgeAIG's picture
download
raw
6.42 kB
import * as Context from "../../Context.ts";
import * as Effect from "../../Effect.ts";
import type * as Queue from "../../Queue.ts";
import type { ReadonlyRecord } from "../../Record.ts";
import * as Scope from "../../Scope.ts";
import * as Stream from "../../Stream.ts";
import type { NoInfer } from "../../Types.ts";
import { Reactivity } from "../reactivity/Reactivity.ts";
import type * as Connection from "./SqlConnection.ts";
import type { SqlError } from "./SqlError.ts";
import type { Compiler, Constructor } from "./Statement.ts";
declare const TypeId = "~effect/sql/SqlClient";
/**
* SQL client service interface, combining the statement constructor API with
* connection reservation, transaction handling, and reactive query helpers.
*
* @category models
* @since 4.0.0
*/
export interface SqlClient extends Constructor {
readonly [TypeId]: typeof TypeId;
/**
* Copy of the client for safeql etc.
*/
readonly safe: this;
/**
* Copy of the client without transformations.
*/
readonly withoutTransforms: () => this;
readonly reserve: Effect.Effect<Connection.Connection, SqlError, Scope.Scope>;
/**
* With the given effect, ensure all sql queries are run in a transaction.
*/
readonly withTransaction: <R, E, A>(self: Effect.Effect<A, E, R>) => Effect.Effect<A, E | SqlError, R>;
/**
* The transaction service for this client.
*/
readonly transactionService: Context.Service<TransactionConnection, TransactionConnection.Service>;
/**
* Use the Reactivity service from @effect/experimental to create a reactive
* query.
*/
readonly reactive: <A, E, R>(keys: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>>, effect: Effect.Effect<A, E, R>) => Stream.Stream<A, E, R>;
/**
* Use the Reactivity service to create a reactive
* query.
*/
readonly reactiveMailbox: <A, E, R>(keys: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>>, effect: Effect.Effect<A, E, R>) => Effect.Effect<Queue.Dequeue<A, E>, never, R | Scope.Scope>;
}
/**
* Service tag for the active SQL client service.
*
* **When to use**
*
* Use to access or provide the SQL client used to build statements, stream
* rows, reserve connections, and run transactions.
*
* @category services
* @since 4.0.0
*/
export declare const SqlClient: Context.Service<SqlClient, SqlClient>;
/**
* Namespace containing types associated with the `SqlClient` service.
*
* @since 4.0.0
*/
export declare namespace SqlClient {
/**
* Options used to construct a `SqlClient`, including connection acquirers,
* the SQL compiler, transaction SQL, row transformation, tracing attributes,
* and optional reactive query integration.
*
* @category options
* @since 4.0.0
*/
interface MakeOptions {
readonly acquirer: Connection.Acquirer;
readonly compiler: Compiler;
readonly transactionAcquirer?: Connection.Acquirer;
readonly spanAttributes: ReadonlyArray<readonly [string, unknown]>;
readonly transactionService?: Context.Service<TransactionConnection, TransactionConnection.Service>;
readonly beginTransaction?: string | undefined;
readonly rollback?: string | undefined;
readonly commit?: string | undefined;
readonly savepoint?: ((name: string) => string) | undefined;
readonly rollbackSavepoint?: ((name: string) => string) | undefined;
readonly transformRows?: (<A extends object>(row: ReadonlyArray<A>) => ReadonlyArray<A>) | undefined;
readonly reactiveQueue?: <A, E, R>(keys: ReadonlyArray<unknown> | ReadonlyRecord<string, ReadonlyArray<unknown>>, effect: Effect.Effect<A, E, R>) => Effect.Effect<Queue.Dequeue<A, E>, never, R | Scope.Scope>;
}
}
/**
* Constructs a `SqlClient` from connection acquirers, a compiler, transaction
* commands, tracing attributes, optional row transforms, and reactive query
* integration.
*
* @category constructors
* @since 4.0.0
*/
export declare const make: (options: SqlClient.MakeOptions) => Effect.Effect<SqlClient, never, Reactivity>;
/**
* Builds a transaction wrapper that begins top-level transactions, uses
* savepoints for nested transactions, commits on success, and rolls back on
* failure or interruption.
*
* @category transactions
* @since 4.0.0
*/
export declare const makeWithTransaction: <I, S>(options: {
readonly transactionService: Context.Key<I, readonly [conn: S, counter: number]>;
readonly spanAttributes: ReadonlyArray<readonly [string, unknown]>;
readonly acquireConnection: Effect.Effect<readonly [Scope.Closeable | undefined, S], SqlError>;
readonly begin: (conn: NoInfer<S>) => Effect.Effect<void, SqlError>;
readonly savepoint: (conn: NoInfer<S>, id: number) => Effect.Effect<void, SqlError>;
readonly commit: (conn: NoInfer<S>) => Effect.Effect<void, SqlError>;
readonly rollback: (conn: NoInfer<S>) => Effect.Effect<void, SqlError>;
readonly rollbackSavepoint: (conn: NoInfer<S>, id: number) => Effect.Effect<void, SqlError>;
}) => <R, E, A>(effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | SqlError, R>;
/**
* Phantom identifier for the scoped transaction connection service associated
* with a SQL client.
*
* @category models
* @since 4.0.0
*/
export interface TransactionConnection {
readonly _: unique symbol;
}
/**
* Namespace containing types associated with transaction connection services.
*
* @since 4.0.0
*/
export declare namespace TransactionConnection {
/**
* Service payload stored during a transaction, containing the active
* connection and nested transaction depth.
*
* @category services
* @since 4.0.0
*/
type Service = readonly [conn: Connection.Connection, depth: number];
}
/**
* Creates a unique context service tag for the active transaction connection of
* a specific SQL client.
*
* @category services
* @since 4.0.0
*/
export declare const TransactionConnection: (clientId: number) => Context.Service<TransactionConnection, TransactionConnection.Service>;
/**
* Context reference used by SQL integrations to opt in to safe integer
* handling; defaults to `false`.
*
* @category references
* @since 4.0.0
*/
export declare const SafeIntegers: Context.Reference<boolean>;
export {};
//# sourceMappingURL=SqlClient.d.ts.map

Xet Storage Details

Size:
6.42 kB
·
Xet hash:
406134b3229aae6555b577e89647818b61f678fd4fac0ef04fa45bff177f7c60

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.