From 857affbb66d66ad6e8042ab886c39104d79735d4 Mon Sep 17 00:00:00 2001 From: ecyrbe Date: Tue, 16 Jul 2024 23:29:00 +0200 Subject: [PATCH] fix(kysely): whitelist compile mehod from proxy --- packages/sql-kysely/src/internal/kysely.ts | 2 +- packages/sql-kysely/test/Sqlite.test.ts | 33 +++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/packages/sql-kysely/src/internal/kysely.ts b/packages/sql-kysely/src/internal/kysely.ts index d7757b78bb..b275038ae5 100644 --- a/packages/sql-kysely/src/internal/kysely.ts +++ b/packages/sql-kysely/src/internal/kysely.ts @@ -63,7 +63,7 @@ export const makeWithSql = (config: KyselyConfig) => const selectPrototype = Object.getPrototypeOf(db.selectFrom("" as any)) patch(selectPrototype) - return effectifyWithSql(db, client, ["withTransaction"]) + return effectifyWithSql(db, client, ["withTransaction", "compile"]) }) /** diff --git a/packages/sql-kysely/test/Sqlite.test.ts b/packages/sql-kysely/test/Sqlite.test.ts index d1b1005051..59eb3a311f 100644 --- a/packages/sql-kysely/test/Sqlite.test.ts +++ b/packages/sql-kysely/test/Sqlite.test.ts @@ -1,7 +1,9 @@ +import { Schema } from "@effect/schema" +import { SqlResolver } from "@effect/sql" import * as SqliteKysely from "@effect/sql-kysely/Sqlite" import * as Sqlite from "@effect/sql-sqlite-node" import { assert, describe, it } from "@effect/vitest" -import { Config, Context, Effect, Exit, Layer } from "effect" +import { Config, Context, Effect, Exit, Layer, Option } from "effect" import type { Generated } from "kysely" export interface User { @@ -48,4 +50,33 @@ describe("SqliteKysely", () => { const selected = yield* db.selectFrom("users").selectAll() assert.deepStrictEqual(selected, []) }).pipe(Effect.provide(KyselyLive))) + + it.effect("select with resolver", () => + Effect.gen(function*(_) { + const db = yield* SqliteDB + + yield* db.schema + .createTable("users") + .addColumn("id", "integer", (c) => c.primaryKey().autoIncrement()) + .addColumn("name", "text", (c) => c.notNull()) + + yield* db.insertInto("users").values({ name: "Alice" }) + yield* db.insertInto("users").values({ name: "Bob" }) + yield* db.insertInto("users").values({ name: "Charlie" }) + + const GetUserById = yield* SqlResolver.findById("GetUserById", { + Id: Schema.Number, + Result: Schema.Struct({ id: Schema.Number, name: Schema.String }), + ResultId: (data) => data.id, + execute: (ids) => db.selectFrom("users").where("id", "in", ids).selectAll() + }) + + const todoIds = [1, 2, 3].map((_) => GetUserById.execute(_)) + const result = yield* Effect.all(todoIds, { batching: true }) + assert.deepStrictEqual(result, [ + Option.some({ id: 1, name: "Alice" }), + Option.some({ id: 2, name: "Bob" }), + Option.some({ id: 3, name: "Charlie" }) + ]) + }).pipe(Effect.provide(KyselyLive))) })