Skip to content

Commit d06dd59

Browse files
authored
Add default connection attributes (#1825)
feat: add default connection attributes
1 parent a401851 commit d06dd59

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

lib/connection_config.js

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
const { URL } = require('url');
1111
const ClientConstants = require('./constants/client');
1212
const Charsets = require('./constants/charsets');
13+
const { version } = require('../package.json')
1314
let SSLProfiles = null;
1415

1516
const validOptions = {
@@ -169,7 +170,13 @@ class ConnectionConfig {
169170
ConnectionConfig.getDefaultFlags(options),
170171
options.flags || ''
171172
);
172-
this.connectAttributes = options.connectAttributes;
173+
// Default connection attributes
174+
// https://dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html
175+
const defaultConnectAttributes = {
176+
_client_name: 'Node-MySQL-2',
177+
_client_version: version
178+
};
179+
this.connectAttributes = { ...defaultConnectAttributes, ...(options.connectAttributes || {})};
173180
this.maxPreparedStatements = options.maxPreparedStatements || 16000;
174181
}
175182

@@ -217,17 +224,15 @@ class ConnectionConfig {
217224
'SECURE_CONNECTION',
218225
'MULTI_RESULTS',
219226
'TRANSACTIONS',
220-
'SESSION_TRACK'
227+
'SESSION_TRACK',
228+
'CONNECT_ATTRS'
221229
];
222230
if (options && options.multipleStatements) {
223231
defaultFlags.push('MULTI_STATEMENTS');
224232
}
225233
defaultFlags.push('PLUGIN_AUTH');
226234
defaultFlags.push('PLUGIN_AUTH_LENENC_CLIENT_DATA');
227235

228-
if (options && options.connectAttributes) {
229-
defaultFlags.push('CONNECT_ATTRS');
230-
}
231236
return defaultFlags;
232237
}
233238

test/integration/test-auth-switch.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,17 @@
33
const mysql = require('../../index.js');
44
const Command = require('../../lib/commands/command.js');
55
const Packets = require('../../lib/packets/index.js');
6+
const {version} = require('../../package.json')
67

78
const assert = require('assert');
89

9-
const connectAttributes = { foo: 'bar', baz: 'foo' };
10+
const connectAttributes = {foo: 'bar', baz: 'foo'};
11+
12+
const defaultConnectAttributes = {
13+
_client_name: 'Node-MySQL-2',
14+
_client_version: version
15+
};
16+
1017
let count = 0;
1118

1219
class TestAuthSwitchHandshake extends Command {
@@ -36,7 +43,8 @@ class TestAuthSwitchHandshake extends Command {
3643
assert.equal(clientHelloReply.user, 'test_user');
3744
assert.equal(clientHelloReply.database, 'test_database');
3845
assert.equal(clientHelloReply.authPluginName, 'mysql_native_password');
39-
assert.deepEqual(clientHelloReply.connectAttributes, connectAttributes);
46+
assert.deepEqual(clientHelloReply.connectAttributes,
47+
{...connectAttributes, ...defaultConnectAttributes});
4048
const asr = new Packets.AuthSwitchRequest(this.args);
4149
connection.writePacket(asr.toPacket());
4250
return TestAuthSwitchHandshake.prototype.readClientAuthSwitchResponse;

0 commit comments

Comments
 (0)