Skip to content

Commit 3e21765

Browse files
jrmdayneffect-bot
authored andcommitted
Add configuration options to the PgDrizzle layer (#4759)
1 parent cf0d661 commit 3e21765

File tree

7 files changed

+94
-20
lines changed

7 files changed

+94
-20
lines changed

.changeset/sharp-mirrors-vanish.md

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@effect/sql-drizzle": minor
3+
---
4+
5+
Export `layerWithConfig` method to build a layer with some Drizzle config

packages/sql-drizzle/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,12 @@
4646
"@effect/sql": "workspace:^",
4747
"@testcontainers/mysql": "^10.18.0",
4848
"@testcontainers/postgresql": "^10.18.0",
49-
"drizzle-orm": "^0.31.0",
49+
"drizzle-orm": "^0.42.0",
5050
"effect": "workspace:^"
5151
},
5252
"peerDependencies": {
5353
"@effect/sql": "workspace:^",
54-
"drizzle-orm": "^0.31",
54+
"drizzle-orm": "^0.42",
5555
"effect": "workspace:^"
5656
}
5757
}

packages/sql-drizzle/src/Mysql.ts

+23
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
import * as Client from "@effect/sql/SqlClient"
55
import type { SqlError } from "@effect/sql/SqlError"
6+
import type { DrizzleConfig } from "drizzle-orm"
67
import { MySqlSelectBase } from "drizzle-orm/mysql-core"
78
import type { MySqlRemoteDatabase } from "drizzle-orm/mysql-proxy"
89
import { drizzle } from "drizzle-orm/mysql-proxy"
@@ -23,6 +24,20 @@ export const make: Effect.Effect<MySqlRemoteDatabase, never, Client.SqlClient> =
2324
return db
2425
})
2526

27+
/**
28+
* @since 1.0.0
29+
* @category constructors
30+
*/
31+
export const makeWithConfig: (config: DrizzleConfig) => Effect.Effect<MySqlRemoteDatabase, never, Client.SqlClient> = (
32+
config
33+
) =>
34+
Effect.gen(function*() {
35+
const client = yield* Client.SqlClient
36+
const db = drizzle(yield* makeRemoteCallback, config)
37+
registerDialect((db as any).dialect, client)
38+
return db
39+
})
40+
2641
/**
2742
* @since 1.0.0
2843
* @category tags
@@ -38,6 +53,14 @@ export class MysqlDrizzle extends Context.Tag("@effect/sql-drizzle/Mysql")<
3853
*/
3954
export const layer: Layer.Layer<MysqlDrizzle, never, Client.SqlClient> = Layer.effect(MysqlDrizzle, make)
4055

56+
/**
57+
* @since 1.0.0
58+
* @category layers
59+
*/
60+
export const layerWithConfig: (config: DrizzleConfig) => Layer.Layer<MysqlDrizzle, never, Client.SqlClient> = (
61+
config
62+
) => Layer.effect(MysqlDrizzle, makeWithConfig(config))
63+
4164
// patch
4265

4366
declare module "drizzle-orm" {

packages/sql-drizzle/src/Pg.ts

+22
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
import * as Client from "@effect/sql/SqlClient"
55
import type { SqlError } from "@effect/sql/SqlError"
6+
import type { DrizzleConfig } from "drizzle-orm"
67
import { PgSelectBase } from "drizzle-orm/pg-core"
78
import { drizzle } from "drizzle-orm/pg-proxy"
89
import type { PgRemoteDatabase } from "drizzle-orm/pg-proxy"
@@ -23,6 +24,20 @@ export const make: Effect.Effect<PgRemoteDatabase, never, Client.SqlClient> = Ef
2324
return db
2425
})
2526

27+
/**
28+
* @since 1.0.0
29+
* @category constructors
30+
*/
31+
export const makeWithConfig: (config: DrizzleConfig) => Effect.Effect<PgRemoteDatabase, never, Client.SqlClient> = (
32+
config
33+
) =>
34+
Effect.gen(function*() {
35+
const client = yield* Client.SqlClient
36+
const db = drizzle(yield* makeRemoteCallback, config)
37+
registerDialect((db as any).dialect, client)
38+
return db
39+
})
40+
2641
/**
2742
* @since 1.0.0
2843
* @category tags
@@ -38,6 +53,13 @@ export class PgDrizzle extends Context.Tag("@effect/sql-drizzle/Pg")<
3853
*/
3954
export const layer: Layer.Layer<PgDrizzle, never, Client.SqlClient> = Layer.effect(PgDrizzle, make)
4055

56+
/**
57+
* @since 1.0.0
58+
* @category layers
59+
*/
60+
export const layerWithConfig: (config: DrizzleConfig) => Layer.Layer<PgDrizzle, never, Client.SqlClient> = (config) =>
61+
Layer.effect(PgDrizzle, makeWithConfig(config))
62+
4163
// patch
4264

4365
declare module "drizzle-orm" {

packages/sql-drizzle/src/Sqlite.ts

+23
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
*/
44
import * as Client from "@effect/sql/SqlClient"
55
import type { SqlError } from "@effect/sql/SqlError"
6+
import type { DrizzleConfig } from "drizzle-orm"
67
import { QueryPromise } from "drizzle-orm/query-promise"
78
import { SQLiteSelectBase } from "drizzle-orm/sqlite-core"
89
import type { SqliteRemoteDatabase } from "drizzle-orm/sqlite-proxy"
@@ -24,6 +25,20 @@ export const make: Effect.Effect<SqliteRemoteDatabase, never, Client.SqlClient |
2425
return db
2526
})
2627

28+
/**
29+
* @since 1.0.0
30+
* @category constructors
31+
*/
32+
export const makeWithConfig: (config: DrizzleConfig) => Effect.Effect<SqliteRemoteDatabase, never, Client.SqlClient> = (
33+
config
34+
) =>
35+
Effect.gen(function*() {
36+
const client = yield* Client.SqlClient
37+
const db = drizzle(yield* makeRemoteCallback, config)
38+
registerDialect((db as any).dialect, client)
39+
return db
40+
})
41+
2742
/**
2843
* @since 1.0.0
2944
* @category tags
@@ -39,6 +54,14 @@ export class SqliteDrizzle extends Context.Tag("@effect/sql-drizzle/Sqlite")<
3954
*/
4055
export const layer: Layer.Layer<SqliteDrizzle, never, Client.SqlClient> = Layer.scoped(SqliteDrizzle, make)
4156

57+
/**
58+
* @since 1.0.0
59+
* @category layers
60+
*/
61+
export const layerWithConfig: (config: DrizzleConfig) => Layer.Layer<SqliteDrizzle, never, Client.SqlClient> = (
62+
config
63+
) => Layer.effect(SqliteDrizzle, makeWithConfig(config))
64+
4265
// patch
4366

4467
declare module "drizzle-orm" {

packages/sql-drizzle/src/internal/patch.ts

+2
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ export const makeRemoteCallback = Effect.gen(function*() {
7373
: statement.withoutTransform
7474
if (method === "get") {
7575
effect = Effect.map(effect, (rows) => rows[0] ?? [])
76+
} else if (method === "execute") {
77+
effect = Effect.map(effect, (rows) => rows.length ? rows : [{}])
7678
}
7779
return runPromise(Effect.map(effect, (rows) => ({ rows })))
7880
}

pnpm-lock.yaml

+17-18
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)