mirror of
https://github.com/brianc/node-postgres.git
synced 2026-01-18 15:55:05 +00:00
Create message in each parsing function
This commit is contained in:
parent
31318c02a2
commit
56b7c4168d
@ -312,6 +312,11 @@ Connection.prototype.readSslResponse = function() {
|
||||
};
|
||||
};
|
||||
|
||||
var Message = function(name, length) {
|
||||
this.name = name;
|
||||
this.length = length;
|
||||
};
|
||||
|
||||
Connection.prototype.parseMessage = function() {
|
||||
var remaining = this.buffer.length - (this.offset);
|
||||
if(remaining < 5) {
|
||||
@ -335,40 +340,32 @@ Connection.prototype.parseMessage = function() {
|
||||
return false;
|
||||
}
|
||||
|
||||
var msg = {
|
||||
length: length
|
||||
};
|
||||
var buffer = this.buffer;
|
||||
switch(id)
|
||||
{
|
||||
|
||||
case 0x52: //R
|
||||
msg.name = 'authenticationOk';
|
||||
msg = this.parseR(msg);
|
||||
msg = this.parseR(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x53: //S
|
||||
msg.name = 'parameterStatus';
|
||||
msg = this.parseS(msg);
|
||||
msg = this.parseS(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x4b: //K
|
||||
msg.name = 'backendKeyData';
|
||||
msg = this.parseK(msg);
|
||||
msg = this.parseK(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x43: //C
|
||||
msg.name = 'commandComplete';
|
||||
msg = this.parseC(msg);
|
||||
msg = this.parseC(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x5a: //Z
|
||||
msg.name = 'readyForQuery';
|
||||
msg = this.parseZ(msg);
|
||||
msg = this.parseZ(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x54: //T
|
||||
msg.name = 'rowDescription';
|
||||
msg = this.parseT(msg);
|
||||
msg = this.parseT(buffer, msg);
|
||||
break;
|
||||
|
||||
case 0x44: //D
|
||||
@ -376,64 +373,58 @@ Connection.prototype.parseMessage = function() {
|
||||
break;
|
||||
|
||||
case 0x45: //E
|
||||
msg.name = 'error';
|
||||
msg = this.parseE(msg);
|
||||
msg = this.parseE(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x4e: //N
|
||||
msg.name = 'notice';
|
||||
msg = this.parseN(msg);
|
||||
msg = this.parseN(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x31: //1
|
||||
msg.name = 'parseComplete';
|
||||
msg = new Message('parseComplete', length);
|
||||
break;
|
||||
|
||||
case 0x32: //2
|
||||
msg.name = 'bindComplete';
|
||||
msg = new Message('bindComplete', length);
|
||||
break;
|
||||
|
||||
case 0x41: //A
|
||||
msg.name = 'notification';
|
||||
msg = this.parseA(msg);
|
||||
msg = this.parseA(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x6e: //n
|
||||
msg.name = 'noData';
|
||||
msg = new Message('noData', length);
|
||||
break;
|
||||
|
||||
case 0x49: //I
|
||||
msg.name = 'emptyQuery';
|
||||
msg = new Message('emptyQuery', length);
|
||||
break;
|
||||
|
||||
case 0x73: //s
|
||||
msg.name = 'portalSuspended';
|
||||
msg = new Message('portalSuspended', length);
|
||||
break;
|
||||
|
||||
case 0x47: //G
|
||||
msg.name = 'copyInResponse';
|
||||
msg = this.parseGH(msg);
|
||||
msg = this.parseG(buffer, length);
|
||||
break;
|
||||
|
||||
case 0x48: //H
|
||||
msg.name = 'copyOutResponse';
|
||||
msg = this.parseGH(msg);
|
||||
msg = this.parseH(buffer, length);
|
||||
break;
|
||||
case 0x63: //c
|
||||
msg.name = 'copyDone';
|
||||
msg = new Message('copyDone', length);
|
||||
break;
|
||||
|
||||
case 0x64: //d
|
||||
msg.name = 'copyData';
|
||||
msg = this.parsed(msg);
|
||||
msg = this.parsed(buffer, length);
|
||||
break;
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseR = function(msg) {
|
||||
Connection.prototype.parseR = function(buffer, length) {
|
||||
var code = 0;
|
||||
var buffer = this.buffer;
|
||||
var msg = new Message('authenticationOk', length);
|
||||
if(msg.length === 8) {
|
||||
code = this.parseInt32(buffer);
|
||||
if(code === 3) {
|
||||
@ -454,34 +445,35 @@ Connection.prototype.parseR = function(msg) {
|
||||
throw new Error("Unknown authenticatinOk message type" + util.inspect(msg));
|
||||
};
|
||||
|
||||
Connection.prototype.parseS = function(msg) {
|
||||
var buffer = this.buffer;
|
||||
Connection.prototype.parseS = function(buffer, length) {
|
||||
var msg = new Message('parameterStatus', length);
|
||||
msg.parameterName = this.parseCString(buffer);
|
||||
msg.parameterValue = this.parseCString(buffer);
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseK = function(msg) {
|
||||
var buffer = this.buffer;
|
||||
Connection.prototype.parseK = function(buffer, length) {
|
||||
var msg = new Message('backendKeyData', length);
|
||||
msg.processID = this.parseInt32(buffer);
|
||||
msg.secretKey = this.parseInt32(buffer);
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseC = function(msg) {
|
||||
var buffer = this.buffer;
|
||||
Connection.prototype.parseC = function(buffer, length) {
|
||||
var msg = new Message('commandComplete', length);
|
||||
msg.text = this.parseCString(buffer);
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseZ = function(msg) {
|
||||
var buffer = this.buffer;
|
||||
Connection.prototype.parseZ = function(buffer, length) {
|
||||
var msg = new Message('readyForQuery', length);
|
||||
msg.name = 'readyForQuery';
|
||||
msg.status = this.readString(buffer, 1);
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseT = function(msg) {
|
||||
var buffer = this.buffer;
|
||||
Connection.prototype.parseT = function(buffer, length) {
|
||||
var msg = new Message('rowDescription', length);
|
||||
msg.fieldCount = this.parseInt16(buffer);
|
||||
var fields = [];
|
||||
for(var i = 0; i < msg.fieldCount; i++){
|
||||
@ -512,11 +504,6 @@ Connection.prototype.parseField = function(buffer) {
|
||||
return field;
|
||||
};
|
||||
|
||||
var Message = function(name, length) {
|
||||
this.name = name;
|
||||
this.length = length;
|
||||
};
|
||||
|
||||
var DataRowMessage = function(name, length, fieldCount) {
|
||||
this.name = name;
|
||||
this.length = length;
|
||||
@ -544,10 +531,11 @@ Connection.prototype._readValue = function(buffer) {
|
||||
};
|
||||
|
||||
//parses error
|
||||
Connection.prototype.parseE = function(input) {
|
||||
Connection.prototype.parseE = function(buffer, length) {
|
||||
var buffer = this.buffer;
|
||||
var fields = {};
|
||||
var msg, item;
|
||||
var input = new Message('error', length);
|
||||
var fieldType = this.readString(buffer, 1);
|
||||
while(fieldType != '\0') {
|
||||
fields[fieldType] = this.parseCString(buffer);
|
||||
@ -582,18 +570,31 @@ Connection.prototype.parseE = function(input) {
|
||||
};
|
||||
|
||||
//same thing, different name
|
||||
Connection.prototype.parseN = Connection.prototype.parseE;
|
||||
Connection.prototype.parseN = function(buffer, length) {
|
||||
var msg = this.parseE(msg);
|
||||
msg.name = 'notice';
|
||||
return msg;
|
||||
}
|
||||
|
||||
Connection.prototype.parseA = function(msg) {
|
||||
var buffer = this.buffer;
|
||||
Connection.prototype.parseA = function(buffer, length) {
|
||||
var msg = new Message('notification', length);
|
||||
msg.processId = this.parseInt32(buffer);
|
||||
msg.channel = this.parseCString(buffer);
|
||||
msg.payload = this.parseCString(buffer);
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseGH = function (msg) {
|
||||
var buffer = this.buffer;
|
||||
Connection.prototype.parseG = function (buffer, length) {
|
||||
var msg = new Message('copyInResponse', length);
|
||||
return this.parseGH(buffer, msg);;
|
||||
};
|
||||
|
||||
Connection.prototype.parseH = function(buffer, length) {
|
||||
var msg = new Message('copyOutResponse', length);
|
||||
return this.parseGH(buffer, msg);;
|
||||
};
|
||||
|
||||
Connection.prototype.parseGH = function (buffer, msg) {
|
||||
var isBinary = this.buffer[this.offset] !== 0;
|
||||
this.offset++;
|
||||
msg.binary = isBinary;
|
||||
@ -605,6 +606,12 @@ Connection.prototype.parseGH = function (msg) {
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parsed = function (buffer, length) {
|
||||
var msg = new Message('copyData', length);
|
||||
msg.chunk = this.readBytes(buffer, msg.length - 4);
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseInt32 = function(buffer) {
|
||||
var value = buffer.readInt32BE(this.offset, true);
|
||||
this.offset += 4;
|
||||
@ -630,12 +637,5 @@ Connection.prototype.parseCString = function(buffer) {
|
||||
while(buffer[this.offset++] !== 0) { }
|
||||
return buffer.toString(this.encoding, start, this.offset - 1);
|
||||
};
|
||||
|
||||
Connection.prototype.parsed = function (msg) {
|
||||
this.buffer = buffer;
|
||||
//exclude length field
|
||||
msg.chunk = this.readBytes(buffer, msg.length - 4);
|
||||
return msg;
|
||||
};
|
||||
//end parsing methods
|
||||
module.exports = Connection;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user