@@ -16,10 +16,6 @@ class Result {
16
16
this . fields = [ ]
17
17
this . _parsers = undefined
18
18
this . _types = types
19
- const rowAsArray = rowMode === 'array'
20
- if ( rowAsArray ) {
21
- this . parseRow = this . _parseRowAsArray
22
- }
23
19
this . _prebuiltEmptyResultObject = null
24
20
}
25
21
@@ -55,19 +51,6 @@ class Result {
55
51
}
56
52
}
57
53
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
-
71
54
parseRow ( rowData ) {
72
55
let row = { ...this . _prebuiltEmptyResultObject }
73
56
for ( let i = 0 , len = rowData . length ; i < len ; i ++ ) {
@@ -82,6 +65,11 @@ class Result {
82
65
this . rows . push ( row )
83
66
}
84
67
68
+ _p ( i , rowData ) {
69
+ const v = rowData [ i ]
70
+ return v === null ? null : this . _parsers [ i ] ( v )
71
+ }
72
+
85
73
addFields ( fieldDescriptions ) {
86
74
// clears field definitions
87
75
// multiple query statements in 1 action can result in multiple sets
@@ -92,18 +80,27 @@ class Result {
92
80
this . _parsers = new Array ( fieldDescriptions . length )
93
81
}
94
82
95
- var row = { }
83
+ const row = { }
96
84
97
- for ( var i = 0 ; i < fieldDescriptions . length ; i ++ ) {
98
- var desc = fieldDescriptions [ i ]
85
+ let localTypes = this . _types || types
86
+
87
+ let parseFn = 'return {'
88
+ for ( let i = 0 ; i < fieldDescriptions . length ; i ++ ) {
89
+ let desc = fieldDescriptions [ i ]
99
90
row [ desc . name ] = null
100
91
101
- if ( this . _types ) {
102
- this . _parsers [ i ] = this . _types . getTypeParser ( desc . dataTypeID , desc . format || 'text' )
92
+ const parser = localTypes . getTypeParser ( desc . dataTypeID , desc . format || 'text' )
93
+ if ( parser === String ) {
94
+ parseFn += JSON . stringify ( desc . name ) + ': rowData[i],'
103
95
} else {
104
- this . _parsers [ i ] = types . getTypeParser ( desc . dataTypeID , desc . format || 'text' )
96
+ parseFn += JSON . stringify ( desc . name ) + ': this._p(i,rowData),'
105
97
}
98
+ this . _parsers [ i ] = parser
106
99
}
100
+
101
+ parseFn += '}'
102
+ this . parseRow = new Function ( 'rowData' , parseFn )
103
+
107
104
this . _prebuiltEmptyResultObject = row
108
105
}
109
106
}
0 commit comments