Skip to content

Commit 0dfcd2d

Browse files
jrmdayneffect-bot
authored andcommitted
Add configuration options to the PgDrizzle layer (#4759)
1 parent 546fdeb commit 0dfcd2d

File tree

7 files changed

+94
-20
lines changed

7 files changed

+94
-20
lines changed

.changeset/sharp-mirrors-vanish.md

Lines changed: 5 additions & 0 deletions
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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@
5959
"@effect/sql-sqlite-node": "workspace:^",
6060
"@testcontainers/mysql": "^10.18.0",
6161
"@testcontainers/postgresql": "^10.18.0",
62-
"drizzle-orm": "^0.31.0",
62+
"drizzle-orm": "^0.42.0",
6363
"effect": "workspace:^"
6464
},
6565
"peerDependencies": {
6666
"@effect/sql": "workspace:^",
67-
"drizzle-orm": "^0.31",
67+
"drizzle-orm": "^0.42",
6868
"effect": "workspace:^"
6969
}
7070
}

packages/sql-drizzle/src/Mysql.ts

Lines changed: 23 additions & 0 deletions
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

Lines changed: 22 additions & 0 deletions
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

Lines changed: 23 additions & 0 deletions
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

Lines changed: 2 additions & 0 deletions
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

Lines changed: 17 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)