Skip to content

Commit 37e958f

Browse files
committed
added arrayParser
1 parent d553881 commit 37e958f

File tree

1 file changed

+68
-1
lines changed

1 file changed

+68
-1
lines changed

lib/query.js

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,72 @@ var parseDate = function(value) {
326326
return new Date((((sign == 0) ? 1 : -1) * rawValue / 1000) + 946684800000);
327327
}
328328

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+
329395
// To help we test dateParser
330396
Query.dateParser = dateParser;
331397

@@ -341,7 +407,8 @@ var dataTypeParsers = {
341407
26: parseBinaryInt64,
342408
700: parseBinaryFloat32,
343409
701: parseBinaryFloat64,
344-
// 1009: arrayParser,
410+
1007: arrayParser,
411+
1009: arrayParser,
345412
1114: parseDate,
346413
//1184: parseBinaryInt64
347414
// 1700: parseFloat,

0 commit comments

Comments
 (0)