diff --git a/lib/connection_config.js b/lib/connection_config.js index 98fa1d3d1d..6890f72003 100644 --- a/lib/connection_config.js +++ b/lib/connection_config.js @@ -258,6 +258,16 @@ class ConnectionConfig { password: parsedUrl.password }; parsedUrl.searchParams.forEach((value, key) => { + if (key === 'connectAttributes') { + options[key] = value + .split(',') + .map(x => x.split(':').map(y => y.trim())) + .reduce((a, x) => { + a[x[0]] = x[1]; + return a; + }, {}); + return; + } try { // Try to parse this as a JSON expression first options[key] = JSON.parse(value); diff --git a/test/unit/connection/test-connection_config.js b/test/unit/connection/test-connection_config.js index 0e1c0b1ca6..93a5f1316e 100644 --- a/test/unit/connection/test-connection_config.js +++ b/test/unit/connection/test-connection_config.js @@ -49,3 +49,15 @@ assert.strictEqual( ).password, 'pass!%40$%%5E&*()%5Cword%3A' ); + +assert.deepEqual( + ConnectionConfig.parseUrl( + String.raw`mysql://localhost/database?connectAttributes=program_name:testProg,second_attr:example` + ).connectAttributes, + (new ConnectionConfig({ + connectAttributes: { + program_name: 'testProg', + second_attr: 'example' + } + })).connectAttributes +);