mirror of
https://github.com/brianc/node-postgres.git
synced 2026-01-18 15:55:05 +00:00
Cleanup & tweak perf a bit
This commit is contained in:
parent
306f5dd493
commit
5108161a47
@ -295,6 +295,7 @@ Connection.prototype.setBuffer = function(buffer) {
|
||||
buffer.copy(combinedBuffer, remaining, 0);
|
||||
buffer = combinedBuffer;
|
||||
}
|
||||
this.lastBuffer = false;
|
||||
this.buffer = buffer;
|
||||
this.offset = 0;
|
||||
};
|
||||
@ -344,81 +345,62 @@ Connection.prototype.parseMessage = function() {
|
||||
{
|
||||
|
||||
case 0x52: //R
|
||||
msg = this.parseR(buffer, length);
|
||||
break;
|
||||
return this.parseR(buffer, length);
|
||||
|
||||
case 0x53: //S
|
||||
msg = this.parseS(buffer, length);
|
||||
break;
|
||||
return this.parseS(buffer, length);
|
||||
|
||||
case 0x4b: //K
|
||||
msg = this.parseK(buffer, length);
|
||||
break;
|
||||
return this.parseK(buffer, length);
|
||||
|
||||
case 0x43: //C
|
||||
msg = this.parseC(buffer, length);
|
||||
break;
|
||||
return this.parseC(buffer, length);
|
||||
|
||||
case 0x5a: //Z
|
||||
msg = this.parseZ(buffer, length);
|
||||
break;
|
||||
return this.parseZ(buffer, length);
|
||||
|
||||
case 0x54: //T
|
||||
msg = this.parseT(buffer, msg);
|
||||
break;
|
||||
return this.parseT(buffer, length);
|
||||
|
||||
case 0x44: //D
|
||||
msg = this.parseD(buffer, length);
|
||||
break;
|
||||
return this.parseD(buffer, length);
|
||||
|
||||
case 0x45: //E
|
||||
msg = this.parseE(buffer, length);
|
||||
break;
|
||||
return this.parseE(buffer, length);
|
||||
|
||||
case 0x4e: //N
|
||||
msg = this.parseN(buffer, length);
|
||||
break;
|
||||
return this.parseN(buffer, length);
|
||||
|
||||
case 0x31: //1
|
||||
msg = new Message('parseComplete', length);
|
||||
break;
|
||||
return new Message('parseComplete', length);
|
||||
|
||||
case 0x32: //2
|
||||
msg = new Message('bindComplete', length);
|
||||
break;
|
||||
return new Message('bindComplete', length);
|
||||
|
||||
case 0x41: //A
|
||||
msg = this.parseA(buffer, length);
|
||||
break;
|
||||
return this.parseA(buffer, length);
|
||||
|
||||
case 0x6e: //n
|
||||
msg = new Message('noData', length);
|
||||
break;
|
||||
return new Message('noData', length);
|
||||
|
||||
case 0x49: //I
|
||||
msg = new Message('emptyQuery', length);
|
||||
break;
|
||||
return new Message('emptyQuery', length);
|
||||
|
||||
case 0x73: //s
|
||||
msg = new Message('portalSuspended', length);
|
||||
break;
|
||||
return new Message('portalSuspended', length);
|
||||
|
||||
case 0x47: //G
|
||||
msg = this.parseG(buffer, length);
|
||||
break;
|
||||
return this.parseG(buffer, length);
|
||||
|
||||
case 0x48: //H
|
||||
msg = this.parseH(buffer, length);
|
||||
break;
|
||||
return this.parseH(buffer, length);
|
||||
|
||||
case 0x63: //c
|
||||
msg = new Message('copyDone', length);
|
||||
break;
|
||||
return new Message('copyDone', length);
|
||||
|
||||
case 0x64: //d
|
||||
msg = this.parsed(buffer, length);
|
||||
break;
|
||||
return this.parsed(buffer, length);
|
||||
}
|
||||
return msg;
|
||||
};
|
||||
|
||||
Connection.prototype.parseR = function(buffer, length) {
|
||||
@ -523,7 +505,7 @@ var DataRowMessage = function(name, length, fieldCount) {
|
||||
|
||||
|
||||
//extremely hot-path code
|
||||
Connection.prototype[0x44] = Connection.prototype.parseD = function(buffer, length) {
|
||||
Connection.prototype.parseD = function(buffer, length) {
|
||||
var fieldCount = this.parseInt16(buffer);
|
||||
var msg = new DataRowMessage(length, fieldCount);
|
||||
for(var i = 0; i < fieldCount; i++) {
|
||||
|
||||
@ -64,24 +64,9 @@ Result.prototype.addRow = function(row) {
|
||||
this.rows.push(row);
|
||||
};
|
||||
|
||||
var inlineParsers = function(dataTypeID, index, format) {
|
||||
var access = "rowData["+ index + "]";
|
||||
var accessNotNull = access + ' == null ? null : ';
|
||||
if(format != 'text') {
|
||||
return accessNotNull + "parsers["+index+"]("+access+")";
|
||||
}
|
||||
switch (dataTypeID) {
|
||||
case 21: //integers
|
||||
case 22:
|
||||
case 23:
|
||||
return accessNotNull + "parseInt("+access+")";
|
||||
case 16: //boolean
|
||||
return accessNotNull + access + "=='t'";
|
||||
case 25: //string
|
||||
return access;
|
||||
default:
|
||||
return accessNotNull + "parsers["+index+"]("+access+")";
|
||||
}
|
||||
var inlineParser = function(fieldName, i) {
|
||||
return "\nthis['" + fieldName + "'] = " +
|
||||
"rowData[" + i + "] == null ? null : parsers[" + i + "](rowData[" + i + "]);";
|
||||
};
|
||||
|
||||
Result.prototype.addFields = function(fieldDescriptions) {
|
||||
@ -94,7 +79,6 @@ Result.prototype.addFields = function(fieldDescriptions) {
|
||||
this._parsers = [];
|
||||
}
|
||||
var ctorBody = "";
|
||||
var parse = "";
|
||||
for(var i = 0; i < fieldDescriptions.length; i++) {
|
||||
var desc = fieldDescriptions[i];
|
||||
this.fields.push(desc);
|
||||
@ -102,7 +86,7 @@ Result.prototype.addFields = function(fieldDescriptions) {
|
||||
this._parsers.push(parser);
|
||||
//this is some craziness to compile the row result parsing
|
||||
//results in ~60% speedup on large query result sets
|
||||
ctorBody += "\nthis['" + desc.name + "'] = " + inlineParsers(desc.dataTypeID, i, desc.format) + ';';
|
||||
ctorBody += inlineParser(desc.name, i);
|
||||
}
|
||||
this.RowCtor = Function("parsers", "rowData", ctorBody);
|
||||
};
|
||||
|
||||
@ -17,7 +17,6 @@ var getTypeParser = function(oid, format) {
|
||||
if (!typeParsers[format]) {
|
||||
return noParse;
|
||||
}
|
||||
|
||||
return typeParsers[format][oid] || noParse;
|
||||
};
|
||||
|
||||
@ -30,9 +29,7 @@ var setTypeParser = function(oid, format, parseFn) {
|
||||
};
|
||||
|
||||
textParsers.init(function(oid, converter) {
|
||||
typeParsers.text[oid] = function(value) {
|
||||
return converter(String(value));
|
||||
};
|
||||
typeParsers.text[oid] = converter;
|
||||
});
|
||||
|
||||
binaryParsers.init(function(oid, converter) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user