Skip to content
Effect 4.0 is here. One ecosystem. Zero dependencies.

SqlResolver

6 exports Since v1.0.0 Source

Other

Signature

declare function void<T extends string, I, II, RI, E, R = never>(tag: T, options: {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<readonly Array<unknown>, E>;
readonly Request: any;
readonly withContext?: false;
} | {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<unknown, E, R>;
readonly Request: any;
readonly withContext: true;
}): Effect<SqlResolver<T, I, void, E, RI>, never, R>

Requests

SqlRequest

interface
Since v1.0.0

Signature

interface SqlRequest<T extends string, A, E> extends Request<A, E | ParseError> {
readonly _tag: T;
readonly encoded: unknown;
readonly input: unknown;
readonly spanLink: SpanLink;
}

Resolvers

Since v1.0.0

Create a resolver that resolves results by id.

Signature

declare function findById<T extends string, I, II, RI, A, IA, Row, E, RA = never, R = never>(tag: T, options: {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<readonly Array<Row>, E>;
readonly Id: any;
readonly Result: any;
readonly ResultId: (result: NoInfer<A>, row: NoInfer<Row>) => I;
readonly withContext?: false;
} | {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<readonly Array<Row>, E, R>;
readonly Id: any;
readonly Result: any;
readonly ResultId: (result: NoInfer<A>, row: NoInfer<Row>) => I;
readonly withContext: true;
}): Effect<SqlResolver<T, I, Option<A>, E, RI>, never, RA | R>
Since v1.0.0

Create a resolver the can return multiple results for a single request.

Results are grouped by a common key extracted from the request and result.

Signature

declare function grouped<T extends string, I, II, K, RI, A, IA, Row, E, RA = never, R = never>(tag: T, options: {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<readonly Array<Row>, E>;
readonly Request: any;
readonly RequestGroupKey: (request: NoInfer<I>) => K;
readonly Result: any;
readonly ResultGroupKey: (result: NoInfer<A>, row: NoInfer<Row>) => K;
readonly withContext?: false;
} | {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<readonly Array<Row>, E, R>;
readonly Request: any;
readonly RequestGroupKey: (request: NoInfer<I>) => K;
readonly Result: any;
readonly ResultGroupKey: (result: NoInfer<A>, row: NoInfer<Row>) => K;
readonly withContext: true;
}): Effect<SqlResolver<T, I, Array<A>, E, RI>, never, RA | R>
Since v1.0.0

Create a resolver for a sql query with a request schema and a result schema.

The request schema is used to validate the input of the query. The result schema is used to validate the output of the query.

Results are mapped to the requests in order, so the length of the results must match the length of the requests.

Signature

declare function ordered<T extends string, I, II, RI, A, IA, _, E, RA = never, R = never>(tag: T, options: {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<readonly Array<_>, E>;
readonly Request: any;
readonly Result: any;
readonly withContext?: false;
} | {
readonly execute: (requests: Array<NoInfer<II>>) => Effect<readonly Array<_>, E, R>;
readonly Request: any;
readonly Result: any;
readonly withContext: true;
}): Effect<SqlResolver<T, I, A, ResultLengthMismatch | E, RI>, never, RA | R>

SqlResolver

interface
Since v1.0.0

Signature

interface SqlResolver<T extends string, I, A, E, R> extends RequestResolver<SqlRequest<T, A, E>> {
readonly cacheInvalidate: (id: I) => Effect<void>;
readonly cachePopulate: (id: I, result: A) => Effect<void>;
readonly execute: (input: I) => Effect<A, any, R>;
readonly makeExecute: (resolver: RequestResolver<SqlRequest<T, A, E>>) => (input: I) => Effect<A, any, R>;
readonly request: (input: I) => Effect<SqlRequest<T, A, E>, ParseError, R>;
}