Skip to content

Commit 5108161

Browse files
committed
Cleanup & tweak perf a bit
1 parent 306f5dd commit 5108161

File tree

3 files changed

+27
-64
lines changed

3 files changed

+27
-64
lines changed

lib/connection.js

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ Connection.prototype.setBuffer = function(buffer) {
295295
buffer.copy(combinedBuffer, remaining, 0);
296296
buffer = combinedBuffer;
297297
}
298+
this.lastBuffer = false;
298299
this.buffer = buffer;
299300
this.offset = 0;
300301
};
@@ -344,81 +345,62 @@ Connection.prototype.parseMessage = function() {
344345
{
345346

346347
case 0x52: //R
347-
msg = this.parseR(buffer, length);
348-
break;
348+
return this.parseR(buffer, length);
349349

350350
case 0x53: //S
351-
msg = this.parseS(buffer, length);
352-
break;
351+
return this.parseS(buffer, length);
353352

354353
case 0x4b: //K
355-
msg = this.parseK(buffer, length);
356-
break;
354+
return this.parseK(buffer, length);
357355

358356
case 0x43: //C
359-
msg = this.parseC(buffer, length);
360-
break;
357+
return this.parseC(buffer, length);
361358

362359
case 0x5a: //Z
363-
msg = this.parseZ(buffer, length);
364-
break;
360+
return this.parseZ(buffer, length);
365361

366362
case 0x54: //T
367-
msg = this.parseT(buffer, msg);
368-
break;
363+
return this.parseT(buffer, length);
369364

370365
case 0x44: //D
371-
msg = this.parseD(buffer, length);
372-
break;
366+
return this.parseD(buffer, length);
373367

374368
case 0x45: //E
375-
msg = this.parseE(buffer, length);
376-
break;
369+
return this.parseE(buffer, length);
377370

378371
case 0x4e: //N
379-
msg = this.parseN(buffer, length);
380-
break;
372+
return this.parseN(buffer, length);
381373

382374
case 0x31: //1
383-
msg = new Message('parseComplete', length);
384-
break;
375+
return new Message('parseComplete', length);
385376

386377
case 0x32: //2
387-
msg = new Message('bindComplete', length);
388-
break;
378+
return new Message('bindComplete', length);
389379

390380
case 0x41: //A
391-
msg = this.parseA(buffer, length);
392-
break;
381+
return this.parseA(buffer, length);
393382

394383
case 0x6e: //n
395-
msg = new Message('noData', length);
396-
break;
384+
return new Message('noData', length);
397385

398386
case 0x49: //I
399-
msg = new Message('emptyQuery', length);
400-
break;
387+
return new Message('emptyQuery', length);
401388

402389
case 0x73: //s
403-
msg = new Message('portalSuspended', length);
404-
break;
390+
return new Message('portalSuspended', length);
405391

406392
case 0x47: //G
407-
msg = this.parseG(buffer, length);
408-
break;
393+
return this.parseG(buffer, length);
409394

410395
case 0x48: //H
411-
msg = this.parseH(buffer, length);
412-
break;
396+
return this.parseH(buffer, length);
397+
413398
case 0x63: //c
414-
msg = new Message('copyDone', length);
415-
break;
399+
return new Message('copyDone', length);
416400

417401
case 0x64: //d
418-
msg = this.parsed(buffer, length);
419-
break;
402+
return this.parsed(buffer, length);
420403
}
421-
return msg;
422404
};
423405

424406
Connection.prototype.parseR = function(buffer, length) {
@@ -523,7 +505,7 @@ var DataRowMessage = function(name, length, fieldCount) {
523505

524506

525507
//extremely hot-path code
526-
Connection.prototype[0x44] = Connection.prototype.parseD = function(buffer, length) {
508+
Connection.prototype.parseD = function(buffer, length) {
527509
var fieldCount = this.parseInt16(buffer);
528510
var msg = new DataRowMessage(length, fieldCount);
529511
for(var i = 0; i < fieldCount; i++) {

lib/result.js

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,9 @@ Result.prototype.addRow = function(row) {
6464
this.rows.push(row);
6565
};
6666

67-
var inlineParsers = function(dataTypeID, index, format) {
68-
var access = "rowData["+ index + "]";
69-
var accessNotNull = access + ' == null ? null : ';
70-
if(format != 'text') {
71-
return accessNotNull + "parsers["+index+"]("+access+")";
72-
}
73-
switch (dataTypeID) {
74-
case 21: //integers
75-
case 22:
76-
case 23:
77-
return accessNotNull + "parseInt("+access+")";
78-
case 16: //boolean
79-
return accessNotNull + access + "=='t'";
80-
case 25: //string
81-
return access;
82-
default:
83-
return accessNotNull + "parsers["+index+"]("+access+")";
84-
}
67+
var inlineParser = function(fieldName, i) {
68+
return "\nthis['" + fieldName + "'] = " +
69+
"rowData[" + i + "] == null ? null : parsers[" + i + "](rowData[" + i + "]);";
8570
};
8671

8772
Result.prototype.addFields = function(fieldDescriptions) {
@@ -94,15 +79,14 @@ Result.prototype.addFields = function(fieldDescriptions) {
9479
this._parsers = [];
9580
}
9681
var ctorBody = "";
97-
var parse = "";
9882
for(var i = 0; i < fieldDescriptions.length; i++) {
9983
var desc = fieldDescriptions[i];
10084
this.fields.push(desc);
10185
var parser = types.getTypeParser(desc.dataTypeID, desc.format || 'text');
10286
this._parsers.push(parser);
10387
//this is some craziness to compile the row result parsing
10488
//results in ~60% speedup on large query result sets
105-
ctorBody += "\nthis['" + desc.name + "'] = " + inlineParsers(desc.dataTypeID, i, desc.format) + ';';
89+
ctorBody += inlineParser(desc.name, i);
10690
}
10791
this.RowCtor = Function("parsers", "rowData", ctorBody);
10892
};

lib/types/index.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ var getTypeParser = function(oid, format) {
1717
if (!typeParsers[format]) {
1818
return noParse;
1919
}
20-
2120
return typeParsers[format][oid] || noParse;
2221
};
2322

@@ -30,9 +29,7 @@ var setTypeParser = function(oid, format, parseFn) {
3029
};
3130

3231
textParsers.init(function(oid, converter) {
33-
typeParsers.text[oid] = function(value) {
34-
return converter(String(value));
35-
};
32+
typeParsers.text[oid] = converter;
3633
});
3734

3835
binaryParsers.init(function(oid, converter) {

0 commit comments

Comments
 (0)