Comparing version 0.5.7 to 0.5.8
@@ -31,3 +31,3 @@ var sys = require('sys'); | ||
p.connect = function() { | ||
p.connect = function(callback) { | ||
var self = this; | ||
@@ -88,7 +88,13 @@ var con = this.connection; | ||
self.emit('connect'); | ||
if (!callback) { | ||
self.emit('connect'); | ||
} else { | ||
callback(null,self); | ||
//remove callback for proper error handling after the connect event | ||
callback = null; | ||
} | ||
con.on('notification', function(msg) { | ||
self.emit('notification', msg); | ||
}) | ||
}); | ||
@@ -108,3 +114,7 @@ }); | ||
if(!self.activeQuery) { | ||
self.emit('error', error); | ||
if(!callback) { | ||
self.emit('error', error); | ||
} else { | ||
callback(error); | ||
} | ||
} else { | ||
@@ -122,3 +132,3 @@ //need to sync after error during a prepared statement | ||
self.emit('notice', msg); | ||
}) | ||
}); | ||
@@ -125,0 +135,0 @@ }; |
@@ -89,7 +89,2 @@ var sys = require('sys'); | ||
var termBuffer = new Buffer([0x58, 0, 0, 0, 4]); | ||
p.end = function() { | ||
var wrote = this.stream.write(termBuffer); | ||
}; | ||
p.query = function(text) { | ||
@@ -96,0 +91,0 @@ //0x51 = Q |
@@ -15,7 +15,24 @@ //require the c++ bindings & export to javascript | ||
p.connect = function() { | ||
p.connect = function(cb) { | ||
var self = this; | ||
utils.buildLibpqConnectionString(this._config, function(err, conString) { | ||
if(err) return self.emit('error', err); | ||
if(err) { | ||
return cb ? cb(err) : self.emit('error', err); | ||
} | ||
nativeConnect.call(self, conString); | ||
if(cb) { | ||
var errCallback; | ||
var connectCallback = function() { | ||
//remove single-fire connection error callback | ||
self.removeListener('error', errCallback); | ||
cb(null); | ||
} | ||
errCallback = function(err) { | ||
//remove singel-fire connection success callback | ||
self.removeListener('connect', connectCallback); | ||
cb(err); | ||
} | ||
self.once('connect', connectCallback); | ||
self.once('error', errCallback); | ||
} | ||
}) | ||
@@ -96,12 +113,21 @@ } | ||
connection._activeQuery.handleRow(row); | ||
}) | ||
}); | ||
//TODO: emit more native error properties (make it match js error) | ||
connection.on('_error', function(err) { | ||
//create Error object from object literal | ||
var error = new Error(err.message || "Unknown native driver error"); | ||
for(var key in err) { | ||
error[key] = err[key]; | ||
} | ||
//give up on trying to wait for named query prepare | ||
this._namedQuery = false; | ||
if(connection._activeQuery) { | ||
connection._activeQuery.handleError(err); | ||
connection._activeQuery.handleError(error); | ||
} else { | ||
connection.emit('error', err); | ||
connection.emit('error', error); | ||
} | ||
}) | ||
}); | ||
connection.on('_readyForQuery', function() { | ||
@@ -119,2 +145,3 @@ var q = this._activeQuery; | ||
}); | ||
return connection; | ||
@@ -121,0 +148,0 @@ }; |
{ "name": "pg", | ||
"version": "0.5.7", | ||
"version": "0.5.8", | ||
"description": "PostgreSQL client - pure javascript & libpq with the same API", | ||
@@ -4,0 +4,0 @@ "keywords" : ["postgres", "pg", "libpq", "postgre", "database", "rdbms"], |
var helper = require(__dirname + '/test-helper'); | ||
var sys = require('sys') | ||
var sys = require('sys'); | ||
@@ -8,3 +8,3 @@ var createErorrClient = function() { | ||
assert.ok(false, "client should not throw query error: " + sys.inspect(err)); | ||
}) | ||
}); | ||
client.on('drain', client.end.bind(client)); | ||
@@ -25,3 +25,3 @@ return client; | ||
assert.equal(error.severity, "ERROR"); | ||
}) | ||
}); | ||
}); | ||
@@ -59,5 +59,5 @@ | ||
}); | ||
}) | ||
}); | ||
test("when a query is binding", function() { | ||
test("when a query is binding", function() { | ||
@@ -82,3 +82,3 @@ var query = client.query({ | ||
}); | ||
}) | ||
}); | ||
}); | ||
@@ -95,6 +95,29 @@ | ||
test('non-query error with callback', function() { | ||
var client = new Client({ | ||
user:'asldkfjsadlfkj' | ||
}); | ||
client.connect(assert.calls(function(error, client) { | ||
assert.ok(error); | ||
})); | ||
}); | ||
}); | ||
test('non-error calls supplied callback', function() { | ||
var client = new Client({ | ||
user: helper.args.user, | ||
password: helper.args.password, | ||
host: helper.args.host, | ||
port: helper.args.port, | ||
database: helper.args.database | ||
}); | ||
client.connect(assert.calls(function(err) { | ||
assert.isNull(err); | ||
client.end(); | ||
})) | ||
}); | ||
test('when connecting to invalid host', function() { | ||
return false; | ||
var client = new Client({ | ||
@@ -104,7 +127,18 @@ user: 'brian', | ||
host: 'asldkfjasdf!!#1308140.com' | ||
}) | ||
}); | ||
assert.emits(client, 'error'); | ||
client.connect(); | ||
}) | ||
}); | ||
test('when connecting to invalid host with callback', function() { | ||
var client = new Client({ | ||
user: 'brian', | ||
password: '1234', | ||
host: 'asldkfjasdf!!#1308140.com' | ||
}); | ||
client.connect(function(error, client) { | ||
assert.ok(error); | ||
}); | ||
}); | ||
test('multiple connection errors (gh#31)', function() { | ||
@@ -120,9 +154,9 @@ return false; | ||
database: helper.args.database | ||
}) | ||
}); | ||
client.connect(); | ||
assert.emits(client, 'error', function(e) { | ||
client.connect(); | ||
assert.emits(client, 'error') | ||
}) | ||
}) | ||
assert.emits(client, 'error'); | ||
}); | ||
}); | ||
@@ -132,5 +166,5 @@ test('with callback method', function() { | ||
return false; | ||
}) | ||
}); | ||
}) | ||
}); | ||
@@ -12,3 +12,3 @@ var helper = require(__dirname+'/../test-helper'); | ||
var client = new Client({connection: connection}); | ||
client.connect(helper.args.port, helper.args.host); | ||
client.connect(); | ||
client.connection.emit('connect'); | ||
@@ -15,0 +15,0 @@ return client; |
195424
5218