@@ -326,6 +326,72 @@ var parseDate = function(value) {
326
326
return new Date ( ( ( ( sign == 0 ) ? 1 : - 1 ) * rawValue / 1000 ) + 946684800000 ) ;
327
327
}
328
328
329
+ var arrayParser = function ( value ) {
330
+ var dim = parseBits ( value , 32 ) ;
331
+
332
+ var flags = parseBits ( value , 32 , 32 ) ;
333
+ var elementType = parseBits ( value , 32 , 64 ) ;
334
+
335
+ var offset = 96 ;
336
+ var dims = new Array ( ) ;
337
+ for ( var i = 0 ; i < dim ; i ++ ) {
338
+ // parse dimension
339
+ dims [ i ] = parseBits ( value , 32 , offset ) ;
340
+ offset += 32 ;
341
+
342
+ // ignore lower bounds
343
+ offset += 32 ;
344
+ } ;
345
+
346
+
347
+ var parseElement = function ( elementType ) {
348
+ // parse content length
349
+ var length = parseBits ( value , 32 , offset ) ;
350
+ offset += 32 ;
351
+
352
+ // parse null values
353
+ if ( length == 0xffffffff ) {
354
+ return null ;
355
+ }
356
+
357
+ if ( elementType == 0x17 ) {
358
+ // int
359
+ var result = parseBits ( value , length * 8 , offset ) ;
360
+ offset += length * 8 ;
361
+ return result ;
362
+ }
363
+ else if ( elementType == 0x19 ) {
364
+ // string
365
+ var result = value . toString ( 'utf8' , offset >> 3 , ( offset += ( length << 3 ) ) >> 3 ) ;
366
+ return result ;
367
+ }
368
+ else {
369
+ console . log ( "ERROR: ElementType not implemented: " + elementType ) ;
370
+ }
371
+ } ;
372
+
373
+ var parseArray = function ( dimension , elementType ) {
374
+ var array = new Array ( ) ;
375
+
376
+ if ( dimension . length > 1 ) {
377
+ var count = dimension . shift ( ) ;
378
+ for ( var i = 0 ; i < count ; i ++ ) {
379
+ array [ i ] = parseArray ( dimension , elementType ) ;
380
+ }
381
+ dimension . unshift ( count ) ;
382
+ }
383
+ else {
384
+ for ( var i = 0 ; i < dimension [ 0 ] ; i ++ ) {
385
+ array [ i ] = parseElement ( elementType ) ;
386
+ }
387
+ }
388
+
389
+ return array ;
390
+ }
391
+
392
+ return parseArray ( dims , elementType ) ;
393
+ } ;
394
+
329
395
// To help we test dateParser
330
396
Query . dateParser = dateParser ;
331
397
@@ -341,7 +407,8 @@ var dataTypeParsers = {
341
407
26 : parseBinaryInt64 ,
342
408
700 : parseBinaryFloat32 ,
343
409
701 : parseBinaryFloat64 ,
344
- // 1009: arrayParser,
410
+ 1007 : arrayParser ,
411
+ 1009 : arrayParser ,
345
412
1114 : parseDate ,
346
413
//1184: parseBinaryInt64
347
414
// 1700: parseFloat,
0 commit comments