mirror of
https://github.com/brianc/node-postgres.git
synced 2025-12-08 20:16:25 +00:00
sped up parser ~70% (http://jsperf.com/case-v-method)
This commit is contained in:
parent
75da13a4b9
commit
6764af30eb
@ -189,23 +189,6 @@ p.setBuffer = function(buffer) {
|
||||
this.offset = 0;
|
||||
};
|
||||
|
||||
var messageNames = {
|
||||
R: 'authenticationOk',
|
||||
S: 'parameterStatus',
|
||||
K: 'backendKeyData',
|
||||
C: 'commandComplete',
|
||||
Z: 'readyForQuery',
|
||||
T: 'rowDescription',
|
||||
D: 'dataRow',
|
||||
E: 'error',
|
||||
N: 'notice',
|
||||
1: 'parseComplete',
|
||||
2: 'bindComplete',
|
||||
A: 'notification',
|
||||
n: 'noData',
|
||||
I: 'emptyQuery'
|
||||
};
|
||||
|
||||
p.parseMessage = function() {
|
||||
var remaining = this.buffer.length - (this.offset);
|
||||
if(remaining < 5) {
|
||||
@ -213,13 +196,12 @@ p.parseMessage = function() {
|
||||
//just abort the read now
|
||||
this.lastBuffer = this.buffer;
|
||||
this.lastOffset = this.offset;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
var id = this.readChar();
|
||||
var messageType = this.buffer[this.offset++];
|
||||
|
||||
var message = {
|
||||
name: messageNames[id],
|
||||
length: this.parseInt32()
|
||||
};
|
||||
|
||||
@ -229,8 +211,72 @@ p.parseMessage = function() {
|
||||
this.lastOffset = this.offset-5;
|
||||
return false;
|
||||
}
|
||||
|
||||
return this["parse"+id](message);
|
||||
|
||||
switch(messageType)
|
||||
{
|
||||
|
||||
case 0x52: //R
|
||||
message.name = 'authenticationOk';
|
||||
return this.parseR(message);
|
||||
|
||||
case 0x53: //S
|
||||
message.name = 'parameterStatus';
|
||||
return this.parseS(message);
|
||||
|
||||
case 0x4b: //K
|
||||
message.name = 'backendKeyData';
|
||||
return this.parseK(message);
|
||||
|
||||
case 0x43: //C
|
||||
message.name = 'commandComplete';
|
||||
return this.parseC(message);
|
||||
|
||||
case 0x5a: //Z
|
||||
message.name = 'readyForQuery';
|
||||
return this.parseZ(message);
|
||||
|
||||
case 0x54: //T
|
||||
message.name = 'rowDescription';
|
||||
return this.parseT(message);
|
||||
|
||||
case 0x44: //D
|
||||
message.name = 'dataRow';
|
||||
return this.parseD(message);
|
||||
|
||||
case 0x45: //E
|
||||
message.name = 'error';
|
||||
return this.parseE(message);
|
||||
|
||||
case 0x4e: //N
|
||||
message.name = 'notice';
|
||||
return this.parseN(message);
|
||||
|
||||
case 0x31: //1
|
||||
message.name = 'parseComplete';
|
||||
return this.parse1(message);
|
||||
|
||||
case 0x32: //2
|
||||
message.name = 'bindComplete';
|
||||
return this.parse2(message);
|
||||
|
||||
case 0x41: //A
|
||||
message.name = 'notification';
|
||||
return this.parseA(message);
|
||||
|
||||
case 0x6e: //n
|
||||
message.name = 'noData';
|
||||
return this.parsen(message);
|
||||
|
||||
case 0x49: //I
|
||||
message.name = 'emptyQuery';
|
||||
return this.parseI(message);
|
||||
|
||||
default:
|
||||
throw new Error("Unrecognized message code " + messageType);
|
||||
}
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
p.parseR = function(msg) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user