Skip to content

Commit 07fd762

Browse files
committed
Merge pull request brianc#331 from brianc/postgres-gte-9.2
fix tests on new versions of postgres
2 parents 5418326 + 3f5df0a commit 07fd762

File tree

7 files changed

+77
-49
lines changed

7 files changed

+77
-49
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#node-postgres
22

3-
[![Build Status](https://secure.travis-ci.org/brianc/node-postgres.png)](http://travis-ci.org/brianc/node-postgres)
3+
[![Build Status](https://secure.travis-ci.org/brianc/node-postgres.png?branch=master)](http://travis-ci.org/brianc/node-postgres)
44

55
PostgreSQL client for node.js. Pure JavaScript and native libpq bindings.
66

lib/result.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ var Result = function() {
88
this.rows = [];
99
};
1010

11-
var matchRegexp = /([A-Za-z]+) (\d+ )?(\d+)?/;
11+
var matchRegexp = /([A-Za-z]+) ?(\d+ )?(\d+)?/;
1212

1313
//adds a command complete message
1414
Result.prototype.addCommandComplete = function(msg) {

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
"buffer-writer": "1.0.0"
2323
},
2424
"devDependencies": {
25-
"jshint": "1.1.0"
25+
"jshint": "1.1.0",
26+
"semver": "~1.1.4"
2627
},
2728
"scripts": {
2829
"test": "make test-all connectionString=pg://postgres@localhost:5432/postgres",

test/integration/client/query-error-handling-tests.js

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,26 @@ test('error during query execution', function() {
55
var client = new Client(helper.args);
66
client.connect(assert.success(function() {
77
var sleepQuery = 'select pg_sleep(5)';
8-
client.query(sleepQuery, assert.calls(function(err, result) {
9-
assert(err);
10-
client.end();
11-
}));
12-
var client2 = new Client(helper.args);
13-
client2.connect(assert.success(function() {
14-
var killIdleQuery = "SELECT procpid, (SELECT pg_terminate_backend(procpid)) AS killed FROM pg_stat_activity WHERE current_query = $1";
15-
client2.query(killIdleQuery, [sleepQuery], assert.calls(function(err, res) {
16-
assert.ifError(err);
17-
assert.equal(res.rowCount, 1);
18-
client2.end();
19-
assert.emits(client2, 'end');
8+
var pidColName = 'procpid'
9+
var queryColName = 'current_query';
10+
helper.versionGTE(client, '9.2.0', assert.success(function(isGreater) {
11+
if(isGreater) {
12+
pidColName = 'pid';
13+
queryColName = 'query';
14+
}
15+
client.query(sleepQuery, assert.calls(function(err, result) {
16+
assert(err);
17+
client.end();
18+
}));
19+
var client2 = new Client(helper.args);
20+
client2.connect(assert.success(function() {
21+
var killIdleQuery = "SELECT " + pidColName + ", (SELECT pg_terminate_backend(" + pidColName + ")) AS killed FROM pg_stat_activity WHERE " + queryColName + " = $1";
22+
client2.query(killIdleQuery, [sleepQuery], assert.calls(function(err, res) {
23+
assert.ifError(err);
24+
assert.equal(res.rows.length, 1);
25+
client2.end();
26+
assert.emits(client2, 'end');
27+
}));
2028
}));
2129
}));
2230
}));

test/integration/client/result-metadata-tests.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,31 @@ test('should return insert metadata', function() {
55
pg.connect(helper.config, assert.calls(function(err, client, done) {
66
assert.isNull(err);
77

8-
client.query("CREATE TEMP TABLE zugzug(name varchar(10))", assert.calls(function(err, result) {
9-
assert.isNull(err);
10-
assert.equal(result.oid, null);
11-
assert.equal(result.command, 'CREATE');
8+
helper.versionGTE(client, '9.0.0', assert.success(function(hasRowCount) {
9+
client.query("CREATE TEMP TABLE zugzug(name varchar(10))", assert.calls(function(err, result) {
10+
assert.isNull(err);
11+
assert.equal(result.oid, null);
12+
assert.equal(result.command, 'CREATE');
1213

13-
var q = client.query("INSERT INTO zugzug(name) VALUES('more work?')", assert.calls(function(err, result) {
14-
assert.equal(result.command, "INSERT");
15-
assert.equal(result.rowCount, 1);
16-
17-
client.query('SELECT * FROM zugzug', assert.calls(function(err, result) {
18-
assert.isNull(err);
14+
var q = client.query("INSERT INTO zugzug(name) VALUES('more work?')", assert.calls(function(err, result) {
15+
assert.equal(result.command, "INSERT");
1916
assert.equal(result.rowCount, 1);
20-
assert.equal(result.command, 'SELECT');
21-
process.nextTick(pg.end.bind(pg));
17+
18+
client.query('SELECT * FROM zugzug', assert.calls(function(err, result) {
19+
assert.isNull(err);
20+
if(hasRowCount) assert.equal(result.rowCount, 1);
21+
assert.equal(result.command, 'SELECT');
22+
process.nextTick(pg.end.bind(pg));
23+
}));
2224
}));
23-
}));
2425

25-
assert.emits(q, 'end', function(result) {
26-
assert.equal(result.command, "INSERT");
27-
assert.equal(result.rowCount, 1);
28-
done();
29-
});
26+
assert.emits(q, 'end', function(result) {
27+
assert.equal(result.command, "INSERT");
28+
if(hasRowCount) assert.equal(result.rowCount, 1);
29+
done();
30+
});
3031

32+
}));
3133
}));
3234
}));
3335
});

test/integration/connection-pool/error-tests.js

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,33 @@ pg = pg;
55
//first make pool hold 2 clients
66
pg.defaults.poolSize = 2;
77

8-
var killIdleQuery = 'SELECT procpid, (SELECT pg_terminate_backend(procpid)) AS killed FROM pg_stat_activity WHERE current_query LIKE \'<IDLE>\'';
98

109
//get first client
1110
pg.connect(helper.config, assert.success(function(client, done) {
1211
client.id = 1;
13-
pg.connect(helper.config, assert.success(function(client2, done2) {
14-
client2.id = 2;
15-
done2();
16-
//subscribe to the pg error event
17-
assert.emits(pg, 'error', function(error, brokenClient) {
18-
assert.ok(error);
19-
assert.ok(brokenClient);
20-
assert.equal(client.id, brokenClient.id);
21-
});
22-
//kill the connection from client
23-
client2.query(killIdleQuery, assert.success(function(res) {
24-
//check to make sure client connection actually was killed
25-
assert.lengthIs(res.rows, 1);
26-
pg.end();
12+
pg.connect(helper.config, assert.success(function(client2, done2) {
13+
client2.id = 2;
14+
var pidColName = 'procpid'
15+
helper.versionGTE(client2, '9.2.0', assert.success(function(isGreater) {
16+
var killIdleQuery = 'SELECT pid, (SELECT pg_terminate_backend(pid)) AS killed FROM pg_stat_activity WHERE state = $1';
17+
var params = ['idle'];
18+
if(!isGreater) {
19+
killIdleQuery = 'SELECT procpid, (SELECT pg_terminate_backend(procpid)) AS killed FROM pg_stat_activity WHERE current_query LIKE $1';
20+
params = ['%IDLE%']
21+
}
22+
done2();
23+
//subscribe to the pg error event
24+
assert.emits(pg, 'error', function(error, brokenClient) {
25+
assert.ok(error);
26+
assert.ok(brokenClient);
27+
assert.equal(client.id, brokenClient.id);
28+
});
29+
//kill the connection from client
30+
client2.query(killIdleQuery, params, assert.success(function(res) {
31+
//check to make sure client connection actually was killed
32+
assert.lengthIs(res.rows, 1);
33+
pg.end();
34+
}));
35+
}));
2736
}));
28-
}));
2937
}));

test/integration/test-helper.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,15 @@ helper.client = function() {
1313
return client;
1414
};
1515

16+
var semver = require('semver');
17+
helper.versionGTE = function(client, versionString, callback) {
18+
client.query('SELECT version()', assert.calls(function(err, result) {
19+
if(err) return callback(err);
20+
var version = result.rows[0].version.split(' ')[1];
21+
return callback(null, semver.gte(version, versionString));
22+
}));
23+
};
24+
1625
//export parent helper stuffs
1726
module.exports = helper;
1827

0 commit comments

Comments
 (0)