@@ -9,6 +9,7 @@ class Result {
99 this . rowCount = undefined
1010 this . fields = [ ]
1111 this . rows = [ ]
12+ this . _prebuiltEmptyResultObject = null
1213 }
1314
1415 consumeCommand ( pq ) {
@@ -18,46 +19,47 @@ class Result {
1819
1920 consumeFields ( pq ) {
2021 const nfields = pq . nfields ( )
22+ this . fields = new Array ( nfields )
23+ var row = { }
2124 for ( var x = 0 ; x < nfields ; x ++ ) {
22- this . fields . push ( {
23- name : pq . fname ( x ) ,
25+ var name = pq . fname ( x )
26+ row [ name ] = null
27+ this . fields [ x ] = {
28+ name : name ,
2429 dataTypeID : pq . ftype ( x ) ,
25- } )
30+ }
2631 }
32+ this . _prebuiltEmptyResultObject = { ...row }
2733 }
2834
2935 consumeRows ( pq ) {
3036 const tupleCount = pq . ntuples ( )
37+ this . rows = new Array ( tupleCount )
3138 for ( var i = 0 ; i < tupleCount ; i ++ ) {
32- const row = this . _arrayMode ? this . consumeRowAsArray ( pq , i ) : this . consumeRowAsObject ( pq , i )
33- this . rows . push ( row )
39+ this . rows [ i ] = this . _arrayMode ? this . consumeRowAsArray ( pq , i ) : this . consumeRowAsObject ( pq , i )
3440 }
3541 }
3642
3743 consumeRowAsObject ( pq , rowIndex ) {
38- const row = { }
44+ const row = { ... this . _prebuiltEmptyResultObject }
3945 for ( var j = 0 ; j < this . fields . length ; j ++ ) {
40- const value = this . readValue ( pq , rowIndex , j )
41- row [ this . fields [ j ] . name ] = value
46+ row [ this . fields [ j ] . name ] = this . readValue ( pq , rowIndex , j )
4247 }
4348 return row
4449 }
4550
4651 consumeRowAsArray ( pq , rowIndex ) {
47- const row = [ ]
52+ const row = new Array ( this . fields . length )
4853 for ( var j = 0 ; j < this . fields . length ; j ++ ) {
49- const value = this . readValue ( pq , rowIndex , j )
50- row . push ( value )
54+ row [ j ] = this . readValue ( pq , rowIndex , j )
5155 }
5256 return row
5357 }
5458
5559 readValue ( pq , rowIndex , colIndex ) {
5660 var rawValue = pq . getvalue ( rowIndex , colIndex )
57- if ( rawValue === '' ) {
58- if ( pq . getisnull ( rowIndex , colIndex ) ) {
59- return null
60- }
61+ if ( rawValue === '' && pq . getisnull ( rowIndex , colIndex ) ) {
62+ return null
6163 }
6264 const dataTypeId = this . fields [ colIndex ] . dataTypeID
6365 return this . _types . getTypeParser ( dataTypeId ) ( rawValue )
0 commit comments