diff --git a/lib/client.js b/lib/client.js index 03404c28..fc68ba81 100644 --- a/lib/client.js +++ b/lib/client.js @@ -88,7 +88,12 @@ p.pulseQueryQueue = function() { this.activeQuery = query; query.submit(this.connection); } else { - this.emit('drain'); + var self = this; + process.nextTick(function() { + if(this.queryQueue.length <= 0) { + this.emit('drain'); + } + }.bind(this)) } } }; diff --git a/test/integration/client/api-tests.js b/test/integration/client/api-tests.js index 41e0533f..4c4d7e76 100644 --- a/test/integration/client/api-tests.js +++ b/test/integration/client/api-tests.js @@ -4,7 +4,7 @@ var pg = require(__dirname + '/../../../lib'); var connected = false var simpleCalled = false var preparedCalled = false - +var nestedCalled = false pg.connect(helper.args, function(err, client) { connected = true assert.equal(err, null, "Failed to connect"); @@ -38,10 +38,19 @@ pg.connect(helper.args, function(err, client) { assert.equal(result.rows.pop().name, 'the beach boys'); }) }) + + test('executing nested queries', function() { + client.query('select * FROM band', function(err, result) { + client.query('select * FROM band', function(err, result2) { + nestedCalled = true + }) + }) + }) }) process.on('exit', function() { assert.ok(connected, 'never connected'); + assert.ok(nestedCalled, 'never called nested query') assert.ok(simpleCalled, 'query result callback was never called'); assert.ok(preparedCalled, 'prepared callback was never called'); }) diff --git a/test/unit/client/query-queue-tests.js b/test/unit/client/query-queue-tests.js index 29600b38..8c231523 100644 --- a/test/unit/client/query-queue-tests.js +++ b/test/unit/client/query-queue-tests.js @@ -43,7 +43,9 @@ test("when all queries are sent", function() { test("after last query finishes", function() { con.emit('readyForQuery'); test("emits drain", function() { - assert.ok(raisedDrain); + process.nextTick(function() { + assert.ok(raisedDrain); + }) }); });