Add debug logging to Prisma adapters and fix database schema issues

Co-authored-by: johndoe6345789 <224850594+johndoe6345789@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-01-08 04:36:04 +00:00
parent 2cd0e9c517
commit d919572357
5 changed files with 204 additions and 11 deletions

View File

@@ -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

View File

@@ -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 =

View File

@@ -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!');

Binary file not shown.

79
test-prisma-adapter.js Normal file
View File

@@ -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!');