@@ -189,37 +189,19 @@ p.setBuffer = function(buffer) {
189189 this . offset = 0 ;
190190} ;
191191
192- var messageNames = {
193- R : 'authenticationOk' ,
194- S : 'parameterStatus' ,
195- K : 'backendKeyData' ,
196- C : 'commandComplete' ,
197- Z : 'readyForQuery' ,
198- T : 'rowDescription' ,
199- D : 'dataRow' ,
200- E : 'error' ,
201- N : 'notice' ,
202- 1 : 'parseComplete' ,
203- 2 : 'bindComplete' ,
204- A : 'notification' ,
205- n : 'noData' ,
206- I : 'emptyQuery'
207- } ;
208-
209192p . parseMessage = function ( ) {
210193 var remaining = this . buffer . length - ( this . offset ) ;
211194 if ( remaining < 5 ) {
212195 //cannot read id + length without at least 5 bytes
213196 //just abort the read now
214197 this . lastBuffer = this . buffer ;
215198 this . lastOffset = this . offset ;
216- return ;
199+ return false ;
217200 }
218201
219- var id = this . readChar ( ) ;
202+ var messageType = this . buffer [ this . offset ++ ] ;
220203
221204 var message = {
222- name : messageNames [ id ] ,
223205 length : this . parseInt32 ( )
224206 } ;
225207
@@ -229,8 +211,72 @@ p.parseMessage = function() {
229211 this . lastOffset = this . offset - 5 ;
230212 return false ;
231213 }
232-
233- return this [ "parse" + id ] ( message ) ;
214+
215+ switch ( messageType )
216+ {
217+
218+ case 0x52 : //R
219+ message . name = 'authenticationOk' ;
220+ return this . parseR ( message ) ;
221+
222+ case 0x53 : //S
223+ message . name = 'parameterStatus' ;
224+ return this . parseS ( message ) ;
225+
226+ case 0x4b : //K
227+ message . name = 'backendKeyData' ;
228+ return this . parseK ( message ) ;
229+
230+ case 0x43 : //C
231+ message . name = 'commandComplete' ;
232+ return this . parseC ( message ) ;
233+
234+ case 0x5a : //Z
235+ message . name = 'readyForQuery' ;
236+ return this . parseZ ( message ) ;
237+
238+ case 0x54 : //T
239+ message . name = 'rowDescription' ;
240+ return this . parseT ( message ) ;
241+
242+ case 0x44 : //D
243+ message . name = 'dataRow' ;
244+ return this . parseD ( message ) ;
245+
246+ case 0x45 : //E
247+ message . name = 'error' ;
248+ return this . parseE ( message ) ;
249+
250+ case 0x4e : //N
251+ message . name = 'notice' ;
252+ return this . parseN ( message ) ;
253+
254+ case 0x31 : //1
255+ message . name = 'parseComplete' ;
256+ return this . parse1 ( message ) ;
257+
258+ case 0x32 : //2
259+ message . name = 'bindComplete' ;
260+ return this . parse2 ( message ) ;
261+
262+ case 0x41 : //A
263+ message . name = 'notification' ;
264+ return this . parseA ( message ) ;
265+
266+ case 0x6e : //n
267+ message . name = 'noData' ;
268+ return this . parsen ( message ) ;
269+
270+ case 0x49 : //I
271+ message . name = 'emptyQuery' ;
272+ return this . parseI ( message ) ;
273+
274+ default :
275+ throw new Error ( "Unrecognized message code " + messageType ) ;
276+ }
277+
278+
279+
234280} ;
235281
236282p . parseR = function ( msg ) {
0 commit comments