Skip to content

Commit f0aa7cc

Browse files
committed
Simple bytea support, returning buffers instead of escaped strings.
1 parent 6dd0157 commit f0aa7cc

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

lib/types.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ var parseInterval = function(val) {
122122
return i;
123123
};
124124

125+
var parseByteA = function(val) {
126+
return new Buffer(val.replace(/\\([0-7]{3})/g, function (full_match, code) {
127+
return String.fromCharCode(parseInt(code, 8));
128+
}).replace(/\\\\/g, "\\"), "binary");
129+
}
130+
125131
//default string type parser registrations
126132
registerStringTypeParser(20, parseInt);
127133
registerStringTypeParser(21, parseInt);
@@ -136,6 +142,7 @@ registerStringTypeParser(1184, parseDate);
136142
registerStringTypeParser(1007, parseIntegerArray);
137143
registerStringTypeParser(1009, parseStringArray);
138144
registerStringTypeParser(1186, parseInterval);
145+
registerStringTypeParser(17, parseByteA);
139146

140147
module.exports = {
141148
registerStringTypeParser: registerStringTypeParser,

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,20 @@ test('typed results', function() {
119119
expected: function(val) {
120120
assert.deepEqual(val, {'days':1, 'seconds':-3})
121121
}
122+
},{
123+
name: 'bytea',
124+
dataTypeID: 17,
125+
actual: 'foo\\000\\200\\\\\\377',
126+
expected: function(val) {
127+
assert.deepEqual(val, new Buffer([102, 111, 111, 0, 128, 92, 255]));
128+
}
129+
},{
130+
name: 'empty bytea',
131+
dataTypeID: 17,
132+
actual: '',
133+
expected: function(val) {
134+
assert.deepEqual(val, new Buffer(0));
135+
}
122136
}];
123137

124138

0 commit comments

Comments
 (0)