diff --git a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/scenario.ts b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/scenario.ts index a47f05203d35..ac1d6421dec8 100644 --- a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/scenario.ts +++ b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/scenario.ts @@ -13,6 +13,12 @@ const connection = mysql.createConnection({ password: 'docker', }); +connection.connect(function (err: unknown) { + if (err) { + return; + } +}); + const transaction = Sentry.startTransaction({ op: 'transaction', name: 'Test Transaction', @@ -22,10 +28,18 @@ Sentry.configureScope(scope => { scope.setSpan(transaction); }); -connection.query('SELECT 1 + 1 AS solution'); -connection.query('SELECT NOW()', ['1', '2']); +const query = connection.query('SELECT 1 + 1 AS solution'); +const query2 = connection.query('SELECT NOW()', ['1', '2']); + +query.on('end', () => { + transaction.setTag('result_done', 'yes'); -// Wait a bit to ensure the queries completed -setTimeout(() => { - transaction.finish(); -}, 500); + query2.on('end', () => { + transaction.setTag('result_done2', 'yes'); + + // Wait a bit to ensure the queries completed + setTimeout(() => { + transaction.finish(); + }, 500); + }); +}); diff --git a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/test.ts b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/test.ts index 9e58b59fecad..ccc5df1c4739 100644 --- a/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/test.ts +++ b/packages/node-integration-tests/suites/tracing-new/auto-instrument/mysql/withoutCallback/test.ts @@ -8,6 +8,10 @@ test('should auto-instrument `mysql` package when using query without callback', assertSentryTransaction(envelope[2], { transaction: 'Test Transaction', + tags: { + result_done: 'yes', + result_done2: 'yes', + }, spans: [ { description: 'SELECT 1 + 1 AS solution', diff --git a/packages/tracing-internal/src/node/integrations/mysql.ts b/packages/tracing-internal/src/node/integrations/mysql.ts index 748c43ec51b2..d176730f5847 100644 --- a/packages/tracing-internal/src/node/integrations/mysql.ts +++ b/packages/tracing-internal/src/node/integrations/mysql.ts @@ -84,7 +84,7 @@ export class Mysql implements LazyLoadedIntegration { } function finishSpan(span: Span | undefined): void { - if (!span) { + if (!span || span.endTimestamp) { return; } @@ -128,9 +128,14 @@ export class Mysql implements LazyLoadedIntegration { }); } - return orig.call(this, options, values, function () { + // streaming, no callback! + const query = orig.call(this, options, values) as { on: (event: string, callback: () => void) => void }; + + query.on('end', () => { finishSpan(span); }); + + return query; }; }); }