From d9195723570e0b00a26405ca728a59787c172a56 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 8 Jan 2026 04:36:04 +0000 Subject: [PATCH] Add debug logging to Prisma adapters and fix database schema issues Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com> --- .../src/adapters/prisma/context.ts | 25 +++++- frontends/nextjs/src/lib/config/prisma.ts | 32 +++++-- frontends/nextjs/test-prisma-adapter.cjs | 79 ++++++++++++++++++ prisma/prisma/dev.db | Bin 188416 -> 188416 bytes test-prisma-adapter.js | 79 ++++++++++++++++++ 5 files changed, 204 insertions(+), 11 deletions(-) create mode 100644 frontends/nextjs/test-prisma-adapter.cjs create mode 100644 test-prisma-adapter.js diff --git a/dbal/development/src/adapters/prisma/context.ts b/dbal/development/src/adapters/prisma/context.ts index 084ccd4b2..6acf3f3fc 100644 --- a/dbal/development/src/adapters/prisma/context.ts +++ b/dbal/development/src/adapters/prisma/context.ts @@ -7,17 +7,34 @@ export function createPrismaContext( databaseUrl?: string, options?: PrismaAdapterOptions ): PrismaContext { + console.log('[DBAL Prisma] Creating Prisma context') + console.log('[DBAL Prisma] Database URL:', databaseUrl) + console.log('[DBAL Prisma] Options:', options) + const inferredDialect = options?.dialect ?? inferDialectFromUrl(databaseUrl) + console.log('[DBAL Prisma] Inferred dialect:', inferredDialect) let prisma: PrismaClient // For SQLite (or when dialect cannot be inferred), we need to use the driver adapter if (inferredDialect === 'sqlite' || !databaseUrl || inferredDialect === undefined) { const dbPath = databaseUrl?.replace('file:', '').replace('sqlite://', '') || '../../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) + console.log('[DBAL Prisma] Using SQLite with path:', dbPath) + + try { + const db = new Database(dbPath) + console.log('[DBAL Prisma] Database opened successfully') + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const adapter = new PrismaBetterSqlite3(db) + console.log('[DBAL Prisma] Adapter created successfully') + + prisma = new PrismaClient({ adapter } as any) + console.log('[DBAL Prisma] PrismaClient created successfully') + } catch (error) { + console.error('[DBAL Prisma] Error creating Prisma client:', error) + throw error + } } else { // For PostgreSQL/MySQL with explicit connection strings // Note: Prisma 7 removed datasources config, so this may not work diff --git a/frontends/nextjs/src/lib/config/prisma.ts b/frontends/nextjs/src/lib/config/prisma.ts index 45f04821b..8936c7c38 100644 --- a/frontends/nextjs/src/lib/config/prisma.ts +++ b/frontends/nextjs/src/lib/config/prisma.ts @@ -48,14 +48,32 @@ const createIntegrationPrisma = (): PrismaClient => { const createProductionPrisma = (): PrismaClient => { // Use the database file from env or default location const databaseUrl = process.env.DATABASE_URL || 'file:../../prisma/prisma/dev.db' + console.log('[Prisma] Creating production Prisma client') + console.log('[Prisma] DATABASE_URL:', process.env.DATABASE_URL) + console.log('[Prisma] Using database URL:', databaseUrl) + const dbPath = databaseUrl.replace('file:', '') - const db = new Database(dbPath) - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - const adapter = new PrismaBetterSqlite3(db) - return new PrismaClient({ - adapter, - log: process.env.NODE_ENV === 'development' ? ['error', 'warn'] : ['error'], - }) + console.log('[Prisma] Resolved database path:', dbPath) + + try { + const db = new Database(dbPath) + console.log('[Prisma] Database connection opened successfully') + + // eslint-disable-next-line @typescript-eslint/no-unsafe-argument + const adapter = new PrismaBetterSqlite3(db) + console.log('[Prisma] Adapter created successfully') + + const client = new PrismaClient({ + adapter, + log: process.env.NODE_ENV === 'development' ? ['error', 'warn', 'query'] : ['error'], + }) + console.log('[Prisma] PrismaClient created successfully') + + return client + } catch (error) { + console.error('[Prisma] Error creating Prisma client:', error) + throw error + } } export const prisma = diff --git a/frontends/nextjs/test-prisma-adapter.cjs b/frontends/nextjs/test-prisma-adapter.cjs new file mode 100644 index 000000000..f589ada6d --- /dev/null +++ b/frontends/nextjs/test-prisma-adapter.cjs @@ -0,0 +1,79 @@ +// Test script to debug Prisma adapter initialization +const { PrismaClient } = require('@prisma/client'); +const { PrismaBetterSqlite3 } = require('@prisma/adapter-better-sqlite3'); +const Database = require('better-sqlite3'); + +console.log('Testing Prisma adapter initialization...\n'); + +// Test 1: Direct database path +console.log('Test 1: Using direct path'); +try { + const dbPath1 = './prisma/prisma/dev.db'; + console.log(` Database path: ${dbPath1}`); + const db1 = new Database(dbPath1); + console.log(' ✓ Database opened successfully'); + const adapter1 = new PrismaBetterSqlite3(db1); + console.log(' ✓ Adapter created successfully'); + const prisma1 = new PrismaClient({ adapter: adapter1 }); + console.log(' ✓ PrismaClient created successfully'); + + // Try a simple query + prisma1.user.findMany().then(users => { + console.log(` ✓ Query successful, found ${users.length} users`); + prisma1.$disconnect(); + }).catch(err => { + console.log(` ✗ Query failed: ${err.message}`); + prisma1.$disconnect(); + }); +} catch (error) { + console.log(` ✗ Error: ${error.message}`); + console.log(` Stack: ${error.stack}`); +} + +// Test 2: Using environment variable style path +console.log('\nTest 2: Using file: prefix'); +try { + const databaseUrl = 'file:./prisma/prisma/dev.db'; + const dbPath2 = databaseUrl.replace('file:', ''); + console.log(` Database URL: ${databaseUrl}`); + console.log(` Resolved path: ${dbPath2}`); + const db2 = new Database(dbPath2); + console.log(' ✓ Database opened successfully'); + const adapter2 = new PrismaBetterSqlite3(db2); + console.log(' ✓ Adapter created successfully'); + const prisma2 = new PrismaClient({ adapter: adapter2 }); + console.log(' ✓ PrismaClient created successfully'); + + // Try a simple query + prisma2.user.count().then(count => { + console.log(` ✓ Count query successful, ${count} users total`); + prisma2.$disconnect(); + }).catch(err => { + console.log(` ✗ Query failed: ${err.message}`); + prisma2.$disconnect(); + }); +} catch (error) { + console.log(` ✗ Error: ${error.message}`); + console.log(` Stack: ${error.stack}`); +} + +// Test 3: Check what happens with undefined +console.log('\nTest 3: Testing undefined handling'); +try { + const databaseUrl = undefined; + const dbPath3 = databaseUrl?.replace('file:', '') || './prisma/prisma/dev.db'; + console.log(` Database URL: ${databaseUrl}`); + console.log(` Resolved path: ${dbPath3}`); + const db3 = new Database(dbPath3); + console.log(' ✓ Database opened successfully'); + const adapter3 = new PrismaBetterSqlite3(db3); + console.log(' ✓ Adapter created successfully'); + const prisma3 = new PrismaClient({ adapter: adapter3 }); + console.log(' ✓ PrismaClient created successfully'); + prisma3.$disconnect(); +} catch (error) { + console.log(` ✗ Error: ${error.message}`); + console.log(` Stack: ${error.stack}`); +} + +console.log('\nAll tests completed!'); diff --git a/prisma/prisma/dev.db b/prisma/prisma/dev.db index caf6209e4fcc2d34ea7d1c509a96f264a701780e..58cc1178ed57f8a3c283474e0cd45247a719fe46 100644 GIT binary patch delta 339 zcmZoTz};|wdxEr}3IhX!9uUKT%0wMwRuu-lvd+eottpIi*GqCXF$goVF!1iRF+CN|Pf0CKF3Kz@$;{7#s>n=+Gn4ak3-a?)^Ge{Fi-4Sf#F7lCKyiLiiGNW_ zYLSAcUx=%_YmkDAtD9q}Pl$qnjzVT}KzM0VPG)gNYKnrBzrT;GqaR$}5ag7i#N1-2 zNx7*diBM*8QEFmIYKmitf|I8^&|Dpb(t;Ee5zXx%H!)6RW8we7D6v^kK!lOWm}|QH SVMdwu9lIE}@7TrUp$Y(M5@z=R delta 128 zcmZoTz};|wdxEr}1Oo$u9uUKT#6%rqRtW~Zs)ELpttpIi*GuyMU=U{d$iTag|2)rM z-cIgkJZHGhb8qHsnl810@zr$SQ;c)i*srn*`)f{aWRjS?k8v*x`&AZ;=@U;dN==^0 c6tVr|CdP?uo0~Yx*xG;WXWaf{KNE)n03JUn@Bjb+ diff --git a/test-prisma-adapter.js b/test-prisma-adapter.js new file mode 100644 index 000000000..f589ada6d --- /dev/null +++ b/test-prisma-adapter.js @@ -0,0 +1,79 @@ +// Test script to debug Prisma adapter initialization +const { PrismaClient } = require('@prisma/client'); +const { PrismaBetterSqlite3 } = require('@prisma/adapter-better-sqlite3'); +const Database = require('better-sqlite3'); + +console.log('Testing Prisma adapter initialization...\n'); + +// Test 1: Direct database path +console.log('Test 1: Using direct path'); +try { + const dbPath1 = './prisma/prisma/dev.db'; + console.log(` Database path: ${dbPath1}`); + const db1 = new Database(dbPath1); + console.log(' ✓ Database opened successfully'); + const adapter1 = new PrismaBetterSqlite3(db1); + console.log(' ✓ Adapter created successfully'); + const prisma1 = new PrismaClient({ adapter: adapter1 }); + console.log(' ✓ PrismaClient created successfully'); + + // Try a simple query + prisma1.user.findMany().then(users => { + console.log(` ✓ Query successful, found ${users.length} users`); + prisma1.$disconnect(); + }).catch(err => { + console.log(` ✗ Query failed: ${err.message}`); + prisma1.$disconnect(); + }); +} catch (error) { + console.log(` ✗ Error: ${error.message}`); + console.log(` Stack: ${error.stack}`); +} + +// Test 2: Using environment variable style path +console.log('\nTest 2: Using file: prefix'); +try { + const databaseUrl = 'file:./prisma/prisma/dev.db'; + const dbPath2 = databaseUrl.replace('file:', ''); + console.log(` Database URL: ${databaseUrl}`); + console.log(` Resolved path: ${dbPath2}`); + const db2 = new Database(dbPath2); + console.log(' ✓ Database opened successfully'); + const adapter2 = new PrismaBetterSqlite3(db2); + console.log(' ✓ Adapter created successfully'); + const prisma2 = new PrismaClient({ adapter: adapter2 }); + console.log(' ✓ PrismaClient created successfully'); + + // Try a simple query + prisma2.user.count().then(count => { + console.log(` ✓ Count query successful, ${count} users total`); + prisma2.$disconnect(); + }).catch(err => { + console.log(` ✗ Query failed: ${err.message}`); + prisma2.$disconnect(); + }); +} catch (error) { + console.log(` ✗ Error: ${error.message}`); + console.log(` Stack: ${error.stack}`); +} + +// Test 3: Check what happens with undefined +console.log('\nTest 3: Testing undefined handling'); +try { + const databaseUrl = undefined; + const dbPath3 = databaseUrl?.replace('file:', '') || './prisma/prisma/dev.db'; + console.log(` Database URL: ${databaseUrl}`); + console.log(` Resolved path: ${dbPath3}`); + const db3 = new Database(dbPath3); + console.log(' ✓ Database opened successfully'); + const adapter3 = new PrismaBetterSqlite3(db3); + console.log(' ✓ Adapter created successfully'); + const prisma3 = new PrismaClient({ adapter: adapter3 }); + console.log(' ✓ PrismaClient created successfully'); + prisma3.$disconnect(); +} catch (error) { + console.log(` ✗ Error: ${error.message}`); + console.log(` Stack: ${error.stack}`); +} + +console.log('\nAll tests completed!');