diff --git a/packages/pg/lib/native/client.js b/packages/pg/lib/native/client.js index 6a8eb5363..391a671cc 100644 --- a/packages/pg/lib/native/client.js +++ b/packages/pg/lib/native/client.js @@ -35,6 +35,7 @@ var Client = (module.exports = function (config) { // keep these on the object for legacy reasons // for the time being. TODO: deprecate all this jazz var cp = (this.connectionParameters = new ConnectionParameters(config)) + if (config.nativeConnectionString) cp.nativeConnectionString = config.nativeConnectionString this.user = cp.user // "hiding" the password so it doesn't show up in stack traces @@ -88,6 +89,7 @@ Client.prototype._connect = function (cb) { this._connecting = true this.connectionParameters.getLibpqConnectionString(function (err, conString) { + if (self.connectionParameters.nativeConnectionString) conString = self.connectionParameters.nativeConnectionString if (err) return cb(err) self.native.connect(conString, function (err) { if (err) { diff --git a/packages/pg/test/native/native-connection-string-tests.js b/packages/pg/test/native/native-connection-string-tests.js new file mode 100644 index 000000000..fbd6cb9dd --- /dev/null +++ b/packages/pg/test/native/native-connection-string-tests.js @@ -0,0 +1,50 @@ +'use strict' +var helper = require('../test-helper') +var Client = require('../../lib/native') +const suite = new helper.Suite() + +suite.test('respects nativeConnectionString in config', function (done) { + const realPort = helper.config.port + const nativeConnectionString = `host=${helper.config.host} port=${helper.config.port} dbname=${helper.config.database} user=${helper.config.user} password=${helper.config.password}` + + // setting wrong port to make sure config is take from nativeConnectionString and not env + helper.config.port = '90929' + + var client = new Client({ + ...helper.config, + nativeConnectionString, + }) + + client.connect(function (err) { + assert(!err) + client.query( + 'SELECT 1 as num', + assert.calls(function (err, result) { + assert(!err) + assert.equal(result.rows[0].num, 1) + assert.strictEqual(result.rowCount, 1) + // restore post in case helper config will be reused + helper.config.port = realPort + client.end(done) + }) + ) + }) +}) + +suite.test('respects nativeConnectionString in config even when it is corrupted', function (done) { + const nativeConnectionString = `foobar` + + var client = new Client({ + nativeConnectionString, + }) + + client.connect(function (err) { + assert(err) + assert.equal( + err.message, + 'missing "=" after "foobar" in connection info string\n', + 'Connection error should have been thrown' + ) + client.end(done) + }) +})