Cleanup & tweak perf a bit

This commit is contained in:
Brian Carlson 2013-08-17 14:21:19 -05:00
parent 306f5dd493
commit 5108161a47
3 changed files with 27 additions and 64 deletions

View File

@ -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++) {

View File

@ -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);
};

View File

@ -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) {