From ac3102eea2e4b9f31e628cdd0a68d83ec2765724 Mon Sep 17 00:00:00 2001 From: "Brian M. Carlson" Date: Sun, 16 Jul 2017 14:58:54 -0500 Subject: [PATCH] Add support for pg-native multi-row result --- lib/native/query.js | 24 +++++++++++-------- .../row-description-on-results-tests.js | 2 ++ test/integration/client/simple-query-tests.js | 11 +++++---- 3 files changed, 22 insertions(+), 15 deletions(-) diff --git a/lib/native/query.js b/lib/native/query.js index c1a76915..576495ac 100644 --- a/lib/native/query.js +++ b/lib/native/query.js @@ -91,7 +91,7 @@ NativeQuery.prototype.submit = function (client) { this.native = client.native client.native.arrayMode = this._arrayMode - var after = function (err, rows) { + var after = function (err, rows, results) { client.native.arrayMode = false setImmediate(function () { self.emit('_done') @@ -102,22 +102,26 @@ NativeQuery.prototype.submit = function (client) { return self.handleError(err) } - var result = new NativeResult() - result.addCommandComplete(self.native.pq) - result.rows = rows - // emit row events for each row in the result if (self._emitRowEvents) { - rows.forEach(function (row) { - self.emit('row', row, result) - }) + if (results.length > 1) { + rows.forEach((rowOfRows, i) => { + rowOfRows.forEach(row => { + self.emit('row', row, results[i]) + }) + }) + } else { + rows.forEach(function (row) { + self.emit('row', row, results) + }) + } } // handle successful result self.state = 'end' - self.emit('end', result) + self.emit('end', results) if (self.callback) { - self.callback(null, result) + self.callback(null, results) } } diff --git a/test/integration/client/row-description-on-results-tests.js b/test/integration/client/row-description-on-results-tests.js index 108e5197..babf6912 100644 --- a/test/integration/client/row-description-on-results-tests.js +++ b/test/integration/client/row-description-on-results-tests.js @@ -7,6 +7,8 @@ var conInfo = helper.config var checkResult = function (result) { assert(result.fields) + console.log('YOU ARE HERE') + console.log('result!!', result) assert.equal(result.fields.length, 3) var fields = result.fields assert.equal(fields[0].name, 'now') diff --git a/test/integration/client/simple-query-tests.js b/test/integration/client/simple-query-tests.js index e46958f2..d7f1916a 100644 --- a/test/integration/client/simple-query-tests.js +++ b/test/integration/client/simple-query-tests.js @@ -49,16 +49,17 @@ test('prepared statements do not mutate params', function () { client.on('drain', client.end.bind(client)) + const rows = [] query.on('row', function (row, result) { assert.ok(result) - result.addRow(row) + rows.push(row) }) query.on('end', function (result) { - assert.lengthIs(result.rows, 26, 'result returned wrong number of rows') - assert.lengthIs(result.rows, result.rowCount) - assert.equal(result.rows[0].name, 'Aaron') - assert.equal(result.rows[25].name, 'Zanzabar') + assert.lengthIs(rows, 26, 'result returned wrong number of rows') + assert.lengthIs(rows, result.rowCount) + assert.equal(rows[0].name, 'Aaron') + assert.equal(rows[25].name, 'Zanzabar') }) })