Skip to content

SqlResolver

6 exports Added in 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

Added in v1.0.0 Source

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

findById

Added in v1.0.0 Source

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>

grouped

Added in v1.0.0 Source

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>

ordered

Added in v1.0.0 Source

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

Added in v1.0.0 Source

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>;
}