diff --git a/dbal/development/package.json b/dbal/development/package.json index 73d23094d..5859882e0 100644 --- a/dbal/development/package.json +++ b/dbal/development/package.json @@ -31,7 +31,9 @@ "@aws-sdk/client-s3": "^3.958.0", "@aws-sdk/lib-storage": "^3.958.0", "@aws-sdk/s3-request-presigner": "^3.958.0", + "@prisma/adapter-better-sqlite3": "^7.2.0", "@prisma/client": "^7.2.0", + "better-sqlite3": "^12.5.0", "prisma": "^7.2.0", "zod": "^4.2.1" }, diff --git a/dbal/development/src/adapters/prisma/context.ts b/dbal/development/src/adapters/prisma/context.ts index d9916b393..e07930d44 100644 --- a/dbal/development/src/adapters/prisma/context.ts +++ b/dbal/development/src/adapters/prisma/context.ts @@ -1,4 +1,6 @@ import { PrismaClient } from '@prisma/client' +import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3' +import Database from 'better-sqlite3' import { PrismaAdapterDialect, type PrismaAdapterOptions, type PrismaContext } from './types' export function createPrismaContext( @@ -6,13 +8,26 @@ export function createPrismaContext( options?: PrismaAdapterOptions ): PrismaContext { const inferredDialect = options?.dialect ?? inferDialectFromUrl(databaseUrl) - const prisma = new PrismaClient( - databaseUrl - ? { - datasources: { db: { url: databaseUrl } }, - } as any - : undefined - ) + + let prisma: PrismaClient + + // For SQLite, we need to use the driver adapter + if (inferredDialect === 'sqlite') { + const dbPath = databaseUrl?.replace('file:', '') || '../../prisma/prisma/dev.db' + const db = new Database(dbPath) + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const adapter = new PrismaBetterSqlite3(db) + prisma = new PrismaClient({ adapter } as any) + } else { + // For other databases, use the URL directly + prisma = new PrismaClient( + databaseUrl + ? { + datasources: { db: { url: databaseUrl } }, + } as any + : undefined + ) + } return { prisma,