mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
added Row object instead of returning raw dataRow object w/ coerced types
This commit is contained in:
parent
477d0744fa
commit
2efe451ee6
@ -1,5 +1,6 @@
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
var sys = require('sys');var sys = require('sys');
|
||||
var Row = require(__dirname + '/row');
|
||||
|
||||
var Query = function(config) {
|
||||
this.text = config.text;
|
||||
@ -39,12 +40,12 @@ p.submit = function(connection) {
|
||||
});
|
||||
};
|
||||
var handleDatarow = function(msg) {
|
||||
var result = new Row();
|
||||
for(var i = 0; i < msg.fields.length; i++) {
|
||||
if(msg.fields[i] !== null) {
|
||||
msg.fields[i] = converters[i](msg.fields[i]);
|
||||
}
|
||||
var rawValue = msg.fields[i];
|
||||
result.push(rawValue === null ? null : converters[i](rawValue));
|
||||
}
|
||||
self.emit('row', msg);
|
||||
self.emit('row', result);
|
||||
};
|
||||
connection.on('rowDescription', handleRowDescription);
|
||||
connection.on('dataRow', handleDatarow);
|
||||
|
||||
7
lib/row.js
Normal file
7
lib/row.js
Normal file
@ -0,0 +1,7 @@
|
||||
var sys = require('sys');
|
||||
var Row = function() {
|
||||
};
|
||||
sys.inherits(Row, Array);
|
||||
var p = Row.prototype;
|
||||
|
||||
module.exports = Row;
|
||||
@ -27,7 +27,7 @@ test("noData message handling", function() {
|
||||
});
|
||||
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.strictEqual(row.fields[0],100)
|
||||
assert.strictEqual(row[0],100)
|
||||
});
|
||||
|
||||
client.on('drain', client.end.bind(client));
|
||||
|
||||
@ -9,7 +9,7 @@ test("simple, unnamed prepared statement", function(){
|
||||
});
|
||||
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0], 20);
|
||||
assert.equal(row[0], 20);
|
||||
});
|
||||
|
||||
assert.emits(query, 'end', function() {
|
||||
@ -39,7 +39,7 @@ test("named prepared statement", function() {
|
||||
});
|
||||
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0], 'Brian');
|
||||
assert.equal(row[0], 'Brian');
|
||||
});
|
||||
|
||||
assert.emits(query, 'end', function() {
|
||||
@ -57,7 +57,7 @@ test("named prepared statement", function() {
|
||||
});
|
||||
|
||||
assert.emits(cachedQuery, 'row', function(row) {
|
||||
assert.equal(row.fields[0], 'Aaron');
|
||||
assert.equal(row[0], 'Aaron');
|
||||
});
|
||||
|
||||
assert.emits(cachedQuery, 'end', function() {
|
||||
@ -75,11 +75,11 @@ test("named prepared statement", function() {
|
||||
|
||||
test("gets first row", function() {
|
||||
assert.emits(q, 'row', function(row) {
|
||||
assert.equal(row.fields[0], "Aaron");
|
||||
assert.equal(row[0], "Aaron");
|
||||
|
||||
test("gets second row", function() {
|
||||
assert.emits(q, 'row', function(row) {
|
||||
assert.equal(row.fields[0], "Brian");
|
||||
assert.equal(row[0], "Brian");
|
||||
});
|
||||
});
|
||||
|
||||
@ -112,7 +112,7 @@ test("prepared statements on different clients", function() {
|
||||
});
|
||||
test('gets right data back', function() {
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0], 26);
|
||||
assert.equal(row[0], 26);
|
||||
});
|
||||
});
|
||||
|
||||
@ -136,7 +136,7 @@ test("prepared statements on different clients", function() {
|
||||
|
||||
test('gets right data', function() {
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0], 1);
|
||||
assert.equal(row[0], 1);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ test("simple query interface", function() {
|
||||
|
||||
var rows = [];
|
||||
query.on('row', function(row) {
|
||||
rows.push(row.fields[0])
|
||||
rows.push(row[0])
|
||||
});
|
||||
|
||||
assert.emits(query, 'end', function() {
|
||||
@ -30,9 +30,9 @@ test("multiple simple queries", function() {
|
||||
client.query("insert into bang(name) VALUES ('yes');");
|
||||
var query = client.query("select name from bang");
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0], 'boom');
|
||||
assert.equal(row[0], 'boom');
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0],'yes');
|
||||
assert.equal(row[0],'yes');
|
||||
});
|
||||
});
|
||||
client.on('drain', client.end.bind(client));
|
||||
|
||||
@ -21,7 +21,7 @@ var testForTypeCoercion = function(type){
|
||||
});
|
||||
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.strictEqual(row.fields[0], val, "expected " + type.name + " of " + val + " but got " + row.fields[0]);
|
||||
assert.strictEqual(row[0], val, "expected " + type.name + " of " + val + " but got " + row[0]);
|
||||
});
|
||||
|
||||
client.query({
|
||||
@ -97,7 +97,7 @@ test("timestampz round trip", function() {
|
||||
values: ['now']
|
||||
});
|
||||
assert.emits(result, 'row', function(row) {
|
||||
var date = row.fields[1];
|
||||
var date = row[1];
|
||||
assert.equal(date.getYear(),now.getYear());
|
||||
assert.equal(date.getMonth(), now.getMonth());
|
||||
assert.equal(date.getDate(), now.getDate());
|
||||
|
||||
@ -83,13 +83,14 @@ test('executing query', function() {
|
||||
|
||||
test('handles dataRow messages', function() {
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0], "hi");
|
||||
assert.equal(row[0], "hi");
|
||||
assert.equal(row.length, 1);
|
||||
});
|
||||
var handled = con.emit('dataRow', { fields: ["hi"] });
|
||||
assert.ok(handled, "should have handled first data row message");
|
||||
|
||||
assert.emits(query, 'row', function(row) {
|
||||
assert.equal(row.fields[0], "bye");
|
||||
assert.equal(row[0], "bye");
|
||||
});
|
||||
var handledAgain = con.emit('dataRow', { fields: ["bye"] });
|
||||
assert.ok(handledAgain, "should have handled seciond data row message");
|
||||
|
||||
@ -104,9 +104,9 @@ test('typed results', function() {
|
||||
test('parses ' + tests[i].name, function() {
|
||||
var expected = tests[i].expected;
|
||||
if(typeof expected === 'function') {
|
||||
return expected(row.fields[i]);
|
||||
return expected(row[i]);
|
||||
}
|
||||
assert.strictEqual(row.fields[i], expected);
|
||||
assert.strictEqual(row[i], expected);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
20
test/unit/row-tests.js
Normal file
20
test/unit/row-tests.js
Normal file
@ -0,0 +1,20 @@
|
||||
//mostly just testing simple row api
|
||||
require(__dirname + "/test-helper");
|
||||
var Row = require('row');
|
||||
|
||||
test("is Array-like", function() {
|
||||
var row = new Row();
|
||||
test("has length", function() {
|
||||
assert.strictEqual(row.length, 0);
|
||||
});
|
||||
test("can push", function() {
|
||||
row.push(1);
|
||||
assert.length(row, 1);
|
||||
assert.strictEqual(row[0], 1);
|
||||
});
|
||||
test("can unshift", function() {
|
||||
row.unshift(2);
|
||||
assert.length(row, 2);
|
||||
assert.strictEqual(row[0], 2);
|
||||
});
|
||||
});
|
||||
Loading…
x
Reference in New Issue
Block a user