How to provide table schemas to Drizzle with Effect
I'm quite new to Effect and I'm trying to set up Drizzle with Effect passing table schemas. In a "traditional" Drizzle project, I define the client like so:
import { drizzle } from 'drizzle-orm/node-postgres';import * as schema from './schema';export const db = drizzle({ connection: process.env.DATABASE_URL!, logger: process.env.NODE_ENV === 'development', schema,});
import { drizzle } from 'drizzle-orm/node-postgres';import * as schema from './schema';export const db = drizzle({ connection: process.env.DATABASE_URL!, logger: process.env.NODE_ENV === 'development', schema,});
I'm trying to set up Drizzle with Effect and so far this is what I've got:
import * as PgDrizzle from '@effect/sql-drizzle/Pg';import { PgClient } from '@effect/sql-pg';import { Effect, Layer, Redacted } from 'effect';import { config } from './Config';const SqlLive = config.pipe( Effect.map((c) => PgClient.layer({ url: Redacted.make(c.dbUrl), }) ), Layer.unwrapEffect);const DrizzleLive = PgDrizzle.layer.pipe(Layer.provide(SqlLive));export const PgDbLive = Layer.mergeAll(SqlLive, DrizzleLive);
import * as PgDrizzle from '@effect/sql-drizzle/Pg';import { PgClient } from '@effect/sql-pg';import { Effect, Layer, Redacted } from 'effect';import { config } from './Config';const SqlLive = config.pipe( Effect.map((c) => PgClient.layer({ url: Redacted.make(c.dbUrl), }) ), Layer.unwrapEffect);const DrizzleLive = PgDrizzle.layer.pipe(Layer.provide(SqlLive));export const PgDbLive = Layer.mergeAll(SqlLive, DrizzleLive);
However, here I can't pass the schema to it and when I try to do
await db.query.users.findFirst()
await db.query.users.findFirst()
I get this error:
Property users does not exist on typeDrizzleTypeError<"Seems like the schema generic is missing - did you forget to add it to your DB type?">
Property users does not exist on typeDrizzleTypeError<"Seems like the schema generic is missing - did you forget to add it to your DB type?">