require(__dirname+'/test-helper'); //http://developer.postgresql.org/pgdocs/postgres/protocol-message-formats.html var buffers = {}; buffers.readyForQuery = function() { return new BufferList() .add(Buffer('I')) .join(true,'Z'); }; buffers.authenticationOk = function() { return new BufferList() .addInt32(0) .join(true, 'R'); }; buffers.authenticationCleartextPassword = function() { return new BufferList() .addInt32(3) .join(true, 'R'); }; buffers.authenticationMD5Password = function() { return new BufferList() .addInt32(5) .add(Buffer([1,2,3,4])) .join(true, 'R'); }; buffers.parameterStatus = function(name, value) { return new BufferList() .addCString(name) .addCString(value) .join(true, 'S'); }; buffers.backendKeyData = function(processID, secretKey) { return new BufferList() .addInt32(processID) .addInt32(secretKey) .join(true, 'K'); }; buffers.commandComplete = function(string) { return new BufferList() .addCString(string) .join(true, 'C'); }; buffers.rowDescription = function(fields) { fields = fields || []; var buf = new BufferList(); buf.addInt16(fields.length); fields.forEach(function(field) { buf.addCString(field.name) .addInt32(field.tableID || 0) .addInt16(field.attributeNumber || 0) .addInt32(field.dataTypeID || 0) .addInt16(field.dataTypeSize || 0) .addInt32(field.typeModifier || 0) .addInt16(field.formatCode || 0) }); return buf.join(true, 'T'); }; buffers.dataRow = function(columns) { columns = columns || []; var buf = new BufferList(); buf.addInt16(columns.length); columns.forEach(function(col) { if(col == null) { buf.addInt32(-1); } else { var strBuf = new Buffer(col, 'utf8'); buf.addInt32(strBuf.length); buf.add(strBuf); } }); return buf.join(true, 'D'); }; buffers.error = function(fields) { return errorOrNotice(fields).join(true, 'E'); }; buffers.notice = function(fields) { return errorOrNotice(fields).join(true, 'N'); }; var errorOrNotice = function(fields) { fields = fields || []; var buf = new BufferList(); fields.forEach(function(field) { buf.addChar(field.type); buf.addCString(field.value); }); return buf.add(Buffer([0]));//terminator } buffers.parseComplete = function() { return new BufferList().join(true, '1'); }; buffers.bindComplete = function() { return new BufferList().join(true, '2'); }; buffers.notification = function(id, channel, payload) { return new BufferList() .addInt32(id) .addCString(channel) .addCString(payload) .join(true, 'A') }; buffers.emptyQuery = function() { return new BufferList().join(true, 'I'); }; buffers.portalSuspended = function() { return new BufferList().join(true, 's'); }; module.exports = buffers;