@@ -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,10 @@ class Result {
82
65
this . rows . push ( row )
83
66
}
84
67
68
+ _p ( i , rowData ) {
69
+ return v === null ? null : this . _parsers [ i ] ( rowData [ i ] )
70
+ }
71
+
85
72
addFields ( fieldDescriptions ) {
86
73
// clears field definitions
87
74
// multiple query statements in 1 action can result in multiple sets
@@ -92,18 +79,27 @@ class Result {
92
79
this . _parsers = new Array ( fieldDescriptions . length )
93
80
}
94
81
95
- var row = { }
82
+ const row = { }
96
83
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 ]
99
89
row [ desc . name ] = null
100
90
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],'
103
94
} else {
104
- this . _parsers [ i ] = types . getTypeParser ( desc . dataTypeID , desc . format || 'text' )
95
+ parseFn += JSON . stringify ( desc . name ) + ': this._p(i,rowData),'
105
96
}
97
+ this . _parsers [ i ] = parser
106
98
}
99
+
100
+ parseFn += '}'
101
+ this . parseRow = new Function ( 'rowData' , parseFn )
102
+
107
103
this . _prebuiltEmptyResultObject = row
108
104
}
109
105
}
0 commit comments