drizzle-team/drizzle-orm · error · Error
Method not implemented.
Error message
Method not implemented.
What it means
PrismaSQLitePreparedQuery.values() throws 'Method not implemented.' The Prisma SQLite adapter implements all()/run()/get()/execute() through $queryRawUnsafe but does not implement values() (the raw driver-value/typed-value extraction path), because Prisma's raw query API does not expose driver-level typed values.
Source
Thrown at drizzle-orm/src/prisma/sqlite/session.ts:50
override all(placeholderValues?: Record<string, unknown>): Promise<T['all']> {
const params = fillPlaceholders(this.query.params, placeholderValues ?? {});
this.logger.logQuery(this.query.sql, params);
return this.prisma.$queryRawUnsafe(this.query.sql, ...params);
}
override async run(placeholderValues?: Record<string, unknown> | undefined): Promise<[]> {
await this.all(placeholderValues);
return [];
}
override async get(placeholderValues?: Record<string, unknown> | undefined): Promise<T['get']> {
const all = await this.all(placeholderValues) as unknown[];
return all[0];
}
override values(_placeholderValues?: Record<string, unknown> | undefined): Promise<never> {
throw new Error('Method not implemented.');
}
override isResponseInArrayMode(): boolean {
return false;
}
}
export interface PrismaSQLiteSessionOptions {
logger?: Logger;
}
export class PrismaSQLiteSession extends SQLiteSession<'async', unknown, Record<string, never>, Record<string, never>> {
static override readonly [entityKind]: string = 'PrismaSQLiteSession';
private readonly logger: Logger;
constructor(
private readonly prisma: PrismaClient,View on GitHub (pinned to b7862528fd)
Solutions
- Use .all() / .get() / .execute() instead of .values() to obtain row objects.
- Switch to a native Drizzle SQLite driver (better-sqlite3, libSQL, d1) if raw typed values are required.
- Map row object fields to typed values manually if specific driver types are needed.
Example fix
// before (throws) const rows = await preparedQuery.values(); // after const rows = await preparedQuery.all();
Defensive patterns
Strategy: validation
Validate before calling
import { entityKind } from 'drizzle-orm/entity';
function isPrismaSqlitePrepared(q: any): boolean {
return q?.[entityKind] === 'PrismaSQLitePreparedQuery';
}
const rows = isPrismaSqlitePrepared(stmt) ? await stmt.all() : await stmt.values(); Type guard
function isPrismaSqlitePreparedQuery(q: unknown): boolean {
return (q as any)?.[Symbol.for('drizzle:entityKind')] === 'PrismaSQLitePreparedQuery';
} Try / catch
try {
const v = await stmt.values();
} catch (e) {
if (e instanceof Error && e.message === 'Method not implemented.') {
const rows = await stmt.all();
} else throw e;
} Prevention
- Avoid .values() with the Prisma SQLite adapter; use .all()/.get()/.execute().
- If raw typed values are needed, use a native Drizzle SQLite driver.
- Document per-adapter which prepared-query methods are supported.
When it happens
Trigger: Calling .values() on a prepared query from a Prisma-backed SQLite Drizzle instance, or reaching an internal path that uses values() (some low-level typed-result helpers).
Common situations: Using Drizzle over Prisma for SQLite (e.g., Turso/Prisma), then calling typed value extraction. Migrating from better-sqlite3/libsql driver code that used values().
Related errors
- Method not implemented.
- Method not implemented.
- TextDecoder is not available. Please provide either Buffer o
- Method not implemented.
- Method not implemented.
AI-assisted analysis of drizzle-team/drizzle-orm@b7862528fd (2026-08-03).
Data as JSON: /data/errors/d2108d1cca611290.json.
Report an issue: GitHub.