Moved buffer list to test directory and replaced w/ slightly cleaner

"writer" for use in the library code.  BufferList was always supposed
to be a test helper and the api is trash
This commit is contained in:
brianc 2010-10-31 18:21:37 -05:00
parent 6969eb6404
commit 0d2d6b5107
5 changed files with 64 additions and 7 deletions

View File

@ -4,7 +4,7 @@ var crypto = require('crypto');
var EventEmitter = require('events').EventEmitter;
var utils = require(__dirname + '/utils');
var BufferList = require(__dirname + '/buffer-list');
var Connection = require(__dirname + '/connection');
var Client = function(config) {

View File

@ -4,7 +4,7 @@ var crypto = require('crypto');
var EventEmitter = require('events').EventEmitter;
var utils = require(__dirname + '/utils');
var BufferList = require(__dirname + '/buffer-list');
var Writer = require(__dirname + '/writer');
var Connection = function(config) {
EventEmitter.call(this);
@ -53,7 +53,7 @@ p.connect = function(port, host) {
};
p.startup = function(config) {
var buffer = new BufferList()
var buffer = new Writer()
.addInt16(3)
.addInt16(0)
.addCString('user')
@ -61,6 +61,7 @@ p.startup = function(config) {
.addCString('database')
.addCString(config.database)
.addCString('');
this.send(false, buffer.join());
};
@ -107,7 +108,7 @@ p.parse = function(query) {
//normalize null type array
query.types = query.types || [];
var len = query.types.length;
var buffer = new BufferList()
var buffer = new Writer()
.addCString(query.name) //name of query
.addCString(query.text) //actual query text
.addInt16(len);
@ -127,7 +128,7 @@ p.bind = function(config) {
config.statement = config.statement || '';
var values = config.values || [];
var len = values.length;
var buffer = new BufferList()
var buffer = new Writer()
.addCString(config.portal)
.addCString(config.statement)
.addInt16(0) //always use default text format
@ -150,7 +151,7 @@ p.execute = function(config) {
config = config || {};
config.portal = config.portal || '';
config.rows = config.rows || '';
var buffer = new BufferList()
var buffer = new Writer()
.addCString(config.portal)
.addInt32(config.rows)
.join();

56
lib/writer.js Normal file
View File

@ -0,0 +1,56 @@
var Writer = function() {
this.buffers = [];
};
var p = Writer.prototype;
p.add = function(buffer) {
this.buffers.push(buffer);
return this;
};
p.addInt16 = function(val, front) {
return this.add(Buffer([
(val >>> 8),
(val >>> 0)
]));
};
p.getByteLength = function(initial) {
return this.buffers.reduce(function(previous, current){
return previous + current.length;
},initial || 0);
};
p.addInt32 = function(val, first) {
return this.add(Buffer([
(val >>> 24 & 0xFF),
(val >>> 16 & 0xFF),
(val >>> 8 & 0xFF),
(val >>> 0 & 0xFF)
]));
};
p.addCString = function(val) {
return this.add(Buffer(val + '\0','utf8'));
};
p.addChar = function(char, first) {
return this.add(Buffer(char,'utf8'), first);
};
p.join = function() {
var result = Buffer(this.getByteLength());
var index = 0;
var buffers = this.buffers;
var length = this.buffers.length;
for(var i = 0; i < length; i ++) {
var buffer = buffers[i];
buffer.copy(result, index, 0);
index += buffer.length;
}
return result;
};
module.exports = Writer;

View File

@ -5,7 +5,7 @@ require.paths.unshift(__dirname + '/../lib/');
Client = require('client');
EventEmitter = require('events').EventEmitter;
BufferList = require('buffer-list')
BufferList = require(__dirname+'/buffer-list')
buffers = require(__dirname + '/test-buffers');
Connection = require('connection');
var args = require(__dirname + '/cli');