Skip to content

Commit ac31232

Browse files
committed
faster row parsing
1 parent 76bf45d commit ac31232

File tree

2 files changed

+22
-28
lines changed

2 files changed

+22
-28
lines changed

packages/pg/lib/query.js

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class Query {
2323

2424
// potential for multiple results
2525
this._results = this._result
26-
this._canceledDueToError = false
26+
this._canceledDueToError = null
2727
}
2828

2929
get text() {
@@ -113,10 +113,8 @@ class Query {
113113
this._canceledDueToError = err
114114
return
115115
}
116-
117-
//if (this.callback) {
118-
this._result.addRow(row)
119-
//}
116+
117+
this._result.addRow(row)
120118
}
121119

122120
handleCommandComplete(msg, connection) {

packages/pg/lib/result.js

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ class Result {
1616
this.fields = []
1717
this._parsers = undefined
1818
this._types = types
19-
const rowAsArray = rowMode === 'array'
20-
if (rowAsArray) {
21-
this.parseRow = this._parseRowAsArray
22-
}
2319
this._prebuiltEmptyResultObject = null
2420
}
2521

@@ -55,19 +51,6 @@ class Result {
5551
}
5652
}
5753

58-
_parseRowAsArray(rowData) {
59-
var row = new Array(rowData.length)
60-
for (var i = 0, len = rowData.length; i < len; i++) {
61-
var rawValue = rowData[i]
62-
if (rawValue !== null) {
63-
row[i] = this._parsers[i](rawValue)
64-
} else {
65-
row[i] = null
66-
}
67-
}
68-
return row
69-
}
70-
7154
parseRow(rowData) {
7255
let row = { ...this._prebuiltEmptyResultObject }
7356
for (let i = 0, len = rowData.length; i < len; i++) {
@@ -82,6 +65,10 @@ class Result {
8265
this.rows.push(row)
8366
}
8467

68+
_p(i, rowData) {
69+
return v === null ? null : this._parsers[i](rowData[i])
70+
}
71+
8572
addFields(fieldDescriptions) {
8673
// clears field definitions
8774
// multiple query statements in 1 action can result in multiple sets
@@ -92,18 +79,27 @@ class Result {
9279
this._parsers = new Array(fieldDescriptions.length)
9380
}
9481

95-
var row = {}
82+
const row = {}
9683

97-
for (var i = 0; i < fieldDescriptions.length; i++) {
98-
var desc = fieldDescriptions[i]
84+
let localTypes = this._types || types
85+
86+
let parseFn = 'return {'
87+
for (let i = 0; i < fieldDescriptions.length; i++) {
88+
let desc = fieldDescriptions[i]
9989
row[desc.name] = null
10090

101-
if (this._types) {
102-
this._parsers[i] = this._types.getTypeParser(desc.dataTypeID, desc.format || 'text')
91+
const parser = localTypes.getTypeParser(desc.dataTypeID, desc.format || 'text')
92+
if(parser === String) {
93+
parseFn += JSON.stringify(desc.name) + ': rowData[i],'
10394
} else {
104-
this._parsers[i] = types.getTypeParser(desc.dataTypeID, desc.format || 'text')
95+
parseFn += JSON.stringify(desc.name) + ': this._p(i,rowData),'
10596
}
97+
this._parsers[i] = parser
10698
}
99+
100+
parseFn += '}'
101+
this.parseRow = new Function('rowData', parseFn)
102+
107103
this._prebuiltEmptyResultObject = row
108104
}
109105
}

0 commit comments

Comments
 (0)