Skip to content

Commit 2efe451

Browse files
committed
added Row object instead of returning raw dataRow object w/ coerced types
1 parent 477d074 commit 2efe451

File tree

9 files changed

+50
-21
lines changed

9 files changed

+50
-21
lines changed

lib/query.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var EventEmitter = require('events').EventEmitter;
22
var sys = require('sys');var sys = require('sys');
3+
var Row = require(__dirname + '/row');
34

45
var Query = function(config) {
56
this.text = config.text;
@@ -39,12 +40,12 @@ p.submit = function(connection) {
3940
});
4041
};
4142
var handleDatarow = function(msg) {
43+
var result = new Row();
4244
for(var i = 0; i < msg.fields.length; i++) {
43-
if(msg.fields[i] !== null) {
44-
msg.fields[i] = converters[i](msg.fields[i]);
45-
}
45+
var rawValue = msg.fields[i];
46+
result.push(rawValue === null ? null : converters[i](rawValue));
4647
}
47-
self.emit('row', msg);
48+
self.emit('row', result);
4849
};
4950
connection.on('rowDescription', handleRowDescription);
5051
connection.on('dataRow', handleDatarow);

lib/row.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
var sys = require('sys');
2+
var Row = function() {
3+
};
4+
sys.inherits(Row, Array);
5+
var p = Row.prototype;
6+
7+
module.exports = Row;

test/integration/client/no-data-tests.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ test("noData message handling", function() {
2727
});
2828

2929
assert.emits(query, 'row', function(row) {
30-
assert.strictEqual(row.fields[0],100)
30+
assert.strictEqual(row[0],100)
3131
});
3232

3333
client.on('drain', client.end.bind(client));

test/integration/client/prepared-statement-tests.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ test("simple, unnamed prepared statement", function(){
99
});
1010

1111
assert.emits(query, 'row', function(row) {
12-
assert.equal(row.fields[0], 20);
12+
assert.equal(row[0], 20);
1313
});
1414

1515
assert.emits(query, 'end', function() {
@@ -39,7 +39,7 @@ test("named prepared statement", function() {
3939
});
4040

4141
assert.emits(query, 'row', function(row) {
42-
assert.equal(row.fields[0], 'Brian');
42+
assert.equal(row[0], 'Brian');
4343
});
4444

4545
assert.emits(query, 'end', function() {
@@ -57,7 +57,7 @@ test("named prepared statement", function() {
5757
});
5858

5959
assert.emits(cachedQuery, 'row', function(row) {
60-
assert.equal(row.fields[0], 'Aaron');
60+
assert.equal(row[0], 'Aaron');
6161
});
6262

6363
assert.emits(cachedQuery, 'end', function() {
@@ -75,11 +75,11 @@ test("named prepared statement", function() {
7575

7676
test("gets first row", function() {
7777
assert.emits(q, 'row', function(row) {
78-
assert.equal(row.fields[0], "Aaron");
78+
assert.equal(row[0], "Aaron");
7979

8080
test("gets second row", function() {
8181
assert.emits(q, 'row', function(row) {
82-
assert.equal(row.fields[0], "Brian");
82+
assert.equal(row[0], "Brian");
8383
});
8484
});
8585

@@ -112,7 +112,7 @@ test("prepared statements on different clients", function() {
112112
});
113113
test('gets right data back', function() {
114114
assert.emits(query, 'row', function(row) {
115-
assert.equal(row.fields[0], 26);
115+
assert.equal(row[0], 26);
116116
});
117117
});
118118

@@ -136,7 +136,7 @@ test("prepared statements on different clients", function() {
136136

137137
test('gets right data', function() {
138138
assert.emits(query, 'row', function(row) {
139-
assert.equal(row.fields[0], 1);
139+
assert.equal(row[0], 1);
140140
});
141141
});
142142

test/integration/client/simple-query-tests.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ test("simple query interface", function() {
1010

1111
var rows = [];
1212
query.on('row', function(row) {
13-
rows.push(row.fields[0])
13+
rows.push(row[0])
1414
});
1515

1616
assert.emits(query, 'end', function() {
@@ -30,9 +30,9 @@ test("multiple simple queries", function() {
3030
client.query("insert into bang(name) VALUES ('yes');");
3131
var query = client.query("select name from bang");
3232
assert.emits(query, 'row', function(row) {
33-
assert.equal(row.fields[0], 'boom');
33+
assert.equal(row[0], 'boom');
3434
assert.emits(query, 'row', function(row) {
35-
assert.equal(row.fields[0],'yes');
35+
assert.equal(row[0],'yes');
3636
});
3737
});
3838
client.on('drain', client.end.bind(client));

test/integration/client/type-coercion-tests.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var testForTypeCoercion = function(type){
2121
});
2222

2323
assert.emits(query, 'row', function(row) {
24-
assert.strictEqual(row.fields[0], val, "expected " + type.name + " of " + val + " but got " + row.fields[0]);
24+
assert.strictEqual(row[0], val, "expected " + type.name + " of " + val + " but got " + row[0]);
2525
});
2626

2727
client.query({
@@ -97,7 +97,7 @@ test("timestampz round trip", function() {
9797
values: ['now']
9898
});
9999
assert.emits(result, 'row', function(row) {
100-
var date = row.fields[1];
100+
var date = row[1];
101101
assert.equal(date.getYear(),now.getYear());
102102
assert.equal(date.getMonth(), now.getMonth());
103103
assert.equal(date.getDate(), now.getDate());

test/unit/client/simple-query-tests.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,13 +83,14 @@ test('executing query', function() {
8383

8484
test('handles dataRow messages', function() {
8585
assert.emits(query, 'row', function(row) {
86-
assert.equal(row.fields[0], "hi");
86+
assert.equal(row[0], "hi");
87+
assert.equal(row.length, 1);
8788
});
8889
var handled = con.emit('dataRow', { fields: ["hi"] });
8990
assert.ok(handled, "should have handled first data row message");
9091

9192
assert.emits(query, 'row', function(row) {
92-
assert.equal(row.fields[0], "bye");
93+
assert.equal(row[0], "bye");
9394
});
9495
var handledAgain = con.emit('dataRow', { fields: ["bye"] });
9596
assert.ok(handledAgain, "should have handled seciond data row message");

test/unit/client/typed-query-results.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,9 @@ test('typed results', function() {
104104
test('parses ' + tests[i].name, function() {
105105
var expected = tests[i].expected;
106106
if(typeof expected === 'function') {
107-
return expected(row.fields[i]);
107+
return expected(row[i]);
108108
}
109-
assert.strictEqual(row.fields[i], expected);
109+
assert.strictEqual(row[i], expected);
110110
});
111111
}
112112
});

test/unit/row-tests.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
//mostly just testing simple row api
2+
require(__dirname + "/test-helper");
3+
var Row = require('row');
4+
5+
test("is Array-like", function() {
6+
var row = new Row();
7+
test("has length", function() {
8+
assert.strictEqual(row.length, 0);
9+
});
10+
test("can push", function() {
11+
row.push(1);
12+
assert.length(row, 1);
13+
assert.strictEqual(row[0], 1);
14+
});
15+
test("can unshift", function() {
16+
row.unshift(2);
17+
assert.length(row, 2);
18+
assert.strictEqual(row[0], 2);
19+
});
20+
});

0 commit comments

Comments
 (0)