Skip to content

Commit 19f7df9

Browse files
firecowtrentm
andcommitted
feat: mysql2@3 support (#3301)
mysql2@3 doesn't appear to contain any changes to createConnection, query, or execute -- the exports that are instrumented. Fixes: #3151 Co-authored-by: Trent Mick <[email protected]>
1 parent 4be271e commit 19f7df9

File tree

9 files changed

+96
-45
lines changed

9 files changed

+96
-45
lines changed

.tav.yml

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,16 +41,27 @@ mysql:
4141
# - v1.6.2 is broken: https://github.com/sidorares/node-mysql2/issues/869
4242
# - v2.2.3 has a github dep ("@types/mysql": "types/mysql") that hits
4343
# npm v6 install issue https://github.com/npm/cli/issues/4896
44-
mysql2-old:
44+
# - v3: It isn't clear what the min supported Node.js version is. "engines" says
45+
# 8.0.0, however it uses an lru-cache that supports only node >=16.14! From
46+
# trial and error the effective min supported node is v14.6.0.
47+
# See https://github.com/elastic/apm-agent-nodejs/pull/3301#issuecomment-1530138870
48+
mysql2-v1-v1.6.0:
4549
name: mysql2
4650
versions: '>=1.0.0 <1.6.0'
4751
commands:
4852
- node test/instrumentation/modules/mysql2/mysql.test.js
4953
- node test/instrumentation/modules/mysql2/pool-release-1.test.js
50-
mysql2-new:
54+
mysql2-v1.6.0-v3:
5155
name: mysql2
5256
versions: '>=1.6.0 <1.6.2 || >=1.6.3 <2.2.3 || >=2.2.4 <3'
53-
node: '>=6.0.0'
57+
node: '>=8.0.0'
58+
commands:
59+
- node test/instrumentation/modules/mysql2/mysql.test.js
60+
- node test/instrumentation/modules/mysql2/pool-release-1.test.js
61+
mysql2:
62+
name: mysql2
63+
versions: '>=3.0.0 <4'
64+
node: '>=14.6.0'
5465
commands:
5566
- node test/instrumentation/modules/mysql2/mysql.test.js
5667
- node test/instrumentation/modules/mysql2/pool-release-1.test.js

CHANGELOG.asciidoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ Notes:
4040
[float]
4141
===== Features
4242
43+
* Add support for mysql2@3. Contributed by @firecow. ({pull}3301[#3301])
44+
4345
* Improve error handling with AWS Lambda. When used together with the
4446
https://github.com/elastic/apm-aws-lambda[Elastic AWS Lambda extension]
4547
v1.4.0 or greater, the APM agent will pre-register a partial transaction

docs/supported-technologies.asciidoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ so those should be supported as well.
156156
|https://www.npmjs.com/package/mongojs[mongojs] |>=1.0.0 <2.7.0 |Supported via mongodb-core
157157
|https://www.npmjs.com/package/mongoose[mongoose] |>=4.0.0 <5.7.0 |Supported via mongodb-core
158158
|https://www.npmjs.com/package/mysql[mysql] |^2.0.0 |Will instrument all queries
159-
|https://www.npmjs.com/package/mysql2[mysql2] |>=1.0.0 <3.0.0 |Will instrument all queries
159+
|https://www.npmjs.com/package/mysql2[mysql2] |>=1.0.0 <4.0.0 |Will instrument all queries
160160
|https://www.npmjs.com/package/pg[pg] |>=4.0.0 <9.0.0 |Will instrument all queries
161161
|https://www.npmjs.com/package/redis[redis] |>=2.0.0 <5.0.0 |Will instrument all queries
162162
|https://www.npmjs.com/package/tedious[tedious] |>=1.9 <16.0.0 | (Excluding v4.0.0.) Will instrument all queries

lib/instrumentation/modules/mysql2.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ module.exports = function (mysql2, agent, { version, enabled }) {
1717
if (!enabled) {
1818
return mysql2
1919
}
20-
if (!semver.satisfies(version, '>=1 <3')) {
20+
if (!semver.satisfies(version, '>=1 <4')) {
2121
agent.logger.debug('mysql2 version %s not supported - aborting...', version)
2222
return mysql2
2323
}

package-lock.json

Lines changed: 60 additions & 38 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
"mongodb": "^5.1.0",
181181
"mongodb-core": "^3.2.7",
182182
"mysql": "^2.18.1",
183-
"mysql2": "^2.1.0",
183+
"mysql2": "^3.2.4",
184184
"ndjson": "^1.5.0",
185185
"numeral": "^2.0.6",
186186
"nyc": "^15.0.0",

test/config.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1053,10 +1053,10 @@ test('disableInstrumentations', function (t) {
10531053
modules.delete('@redis/client/dist/lib/client') // redis@4 supports node >=14
10541054
modules.delete('@redis/client/dist/lib/client/commands-queue') // redis@4 supports node >=14
10551055
}
1056-
10571056
// @node-redis only present for redis >4 <4.1 --
10581057
modules.delete('@node-redis/client/dist/lib/client') // redis@4 supports node >=14
10591058
modules.delete('@node-redis/client/dist/lib/client/commands-queue') // redis@4 supports node >=14
1059+
modules.delete('mysql2')
10601060

10611061
function testSlice (t, name, selector) {
10621062
var selection = selector(modules)

test/instrumentation/modules/mysql2/mysql.test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ if (process.env.GITHUB_ACTIONS === 'true' && process.platform === 'win32') {
1111
process.exit(0)
1212
}
1313

14+
const semver = require('semver')
15+
const { safeGetPackageVersion } = require('../../../_utils')
16+
const mysql2Ver = safeGetPackageVersion('mysql2')
17+
if (semver.gte(mysql2Ver, '3.0.0') && semver.lt(process.version, '14.6.0')) {
18+
console.log(`# SKIP mysql2@${mysql2Ver} does not support node ${process.version}`)
19+
process.exit()
20+
}
21+
1422
var agent = require('../../../..').start({
1523
serviceName: 'test',
1624
secretToken: 'test',

test/instrumentation/modules/mysql2/pool-release-1.test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ if (process.env.GITHUB_ACTIONS === 'true' && process.platform === 'win32') {
1111
process.exit(0)
1212
}
1313

14+
const semver = require('semver')
15+
const { safeGetPackageVersion } = require('../../../_utils')
16+
const mysql2Ver = safeGetPackageVersion('mysql2')
17+
if (semver.gte(mysql2Ver, '3.0.0') && semver.lt(process.version, '14.6.0')) {
18+
console.log(`# SKIP mysql2@${mysql2Ver} does not support node ${process.version}`)
19+
process.exit()
20+
}
21+
1422
var agent = require('../../../..').start({
1523
serviceName: 'test',
1624
secretToken: 'test',

0 commit comments

Comments
 (0)