From 36f605dcddc9092972737a7d255985a8358a7c7f Mon Sep 17 00:00:00 2001 From: GochoMugo Date: Wed, 26 Nov 2025 10:36:36 +0300 Subject: [PATCH 1/2] fix(pg-instrumentation): capture query props when passed as class instance --- packages/instrumentation-pg/src/instrumentation.ts | 2 ++ packages/instrumentation-pg/test/pg.test.ts | 13 +++++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/instrumentation-pg/src/instrumentation.ts b/packages/instrumentation-pg/src/instrumentation.ts index 69bb080e9e..1134272b19 100644 --- a/packages/instrumentation-pg/src/instrumentation.ts +++ b/packages/instrumentation-pg/src/instrumentation.ts @@ -341,6 +341,8 @@ export class PgInstrumentation extends InstrumentationBase { }); it('should record query and values for prepared statements', done => { - const queryConfig = { - name: 'get_pg_tables', - text: 'SELECT * FROM pg_tables WHERE schemaname = $1', - }; + class Statement { + get name() { + return 'get_pg_tables'; + } + get text() { + return 'SELECT * FROM pg_tables WHERE schemaname = $1'; + } + } + const queryConfig = new Statement(); const values = ['public']; const expectedAttributes = { From b8524b1e4b88d253350740e49fabd392c93d8d08 Mon Sep 17 00:00:00 2001 From: GochoMugo Date: Fri, 28 Nov 2025 08:44:42 +0300 Subject: [PATCH 2/2] test(pg-instrumentation): Add separate test for class-instance query --- packages/instrumentation-pg/test/pg.test.ts | 47 +++++++++++++++++---- 1 file changed, 38 insertions(+), 9 deletions(-) diff --git a/packages/instrumentation-pg/test/pg.test.ts b/packages/instrumentation-pg/test/pg.test.ts index e0ac1553e1..39869f9eee 100644 --- a/packages/instrumentation-pg/test/pg.test.ts +++ b/packages/instrumentation-pg/test/pg.test.ts @@ -583,15 +583,10 @@ describe('pg', () => { }); it('should record query and values for prepared statements', done => { - class Statement { - get name() { - return 'get_pg_tables'; - } - get text() { - return 'SELECT * FROM pg_tables WHERE schemaname = $1'; - } - } - const queryConfig = new Statement(); + const queryConfig = { + name: 'get_pg_tables', + text: 'SELECT * FROM pg_tables WHERE schemaname = $1', + }; const values = ['public']; const expectedAttributes = { @@ -639,6 +634,40 @@ describe('pg', () => { assert.strictEqual(resNoPromise, undefined); }); }); + + it('should record class-instance query', done => { + class Statement { + get name() { + return 'get_pg_tables'; + } + get text() { + return 'SELECT * FROM pg_tables WHERE schemaname = $1'; + } + } + const queryConfig = new Statement(); + const values = ['public']; + + const expectedAttributes = { + ...DEFAULT_ATTRIBUTES, + [ATTR_DB_STATEMENT]: queryConfig.text, + [AttributeNames.PG_PLAN]: queryConfig.name, + [AttributeNames.PG_VALUES]: values, + }; + + const span = tracer.startSpan('test span'); + context.with(trace.setSpan(context.active(), span), () => { + (client.query as any)( + queryConfig, + values, + (err: Error | null, res: any) => { + assert.strictEqual(err, null); + assert.ok(res); + runCallbackTest(span, expectedAttributes, events); + done(); + } + ); + }); + }); }); describe('when specifying a requestHook configuration', () => {