in backend/columnar.js [300:329]
function decodeValue(sizeTag, bytes) {
if (sizeTag === VALUE_TYPE.NULL) {
return {value: null}
} else if (sizeTag === VALUE_TYPE.FALSE) {
return {value: false}
} else if (sizeTag === VALUE_TYPE.TRUE) {
return {value: true}
} else if (sizeTag % 16 === VALUE_TYPE.UTF8) {
return {value: utf8ToString(bytes)}
} else {
if (sizeTag % 16 === VALUE_TYPE.LEB128_UINT) {
return {value: new Decoder(bytes).readUint53(), datatype: "uint"}
} else if (sizeTag % 16 === VALUE_TYPE.LEB128_INT) {
return {value: new Decoder(bytes).readInt53(), datatype: "int"}
} else if (sizeTag % 16 === VALUE_TYPE.IEEE754) {
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)
if (bytes.byteLength === 8) {
return {value: view.getFloat64(0, true), datatype: "float64"}
} else {
throw new RangeError(`Invalid length for floating point number: ${bytes.byteLength}`)
}
} else if (sizeTag % 16 === VALUE_TYPE.COUNTER) {
return {value: new Decoder(bytes).readInt53(), datatype: 'counter'}
} else if (sizeTag % 16 === VALUE_TYPE.TIMESTAMP) {
return {value: new Decoder(bytes).readInt53(), datatype: 'timestamp'}
} else {
return {value: bytes, datatype: sizeTag % 16}
}
}
}