@ultipa-graph/ultipa-driver
Version:
NodeJS SDK for ultipa-server 5.1
166 lines • 6.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DESERIALIZE = void 0;
const ultipa_pb_1 = require("../../proto/ultipa_pb");
const ultipa_datetime_1 = require("../ultipa.datetime");
const commont_1 = require("./commont");
const null_1 = require("./null");
const types_1 = require("../../types/types");
const GlobalTextDecoder = new TextDecoder("utf-8");
var DESERIALIZE;
(function (DESERIALIZE) {
function deserialize(v, type, subTypes, timezone) {
// console.log(`type: ${PropertyUtils.propertyGet(<any>type)}:`, v)
const { STRING, FLOAT, DOUBLE, UINT32, INT64, UINT64, DATETIME, TIMESTAMP, TEXT, BLOB, POINT, DECIMAL, LIST, SET, MAP, } = types_1.UltipaPropertyType;
switch (type) {
case LIST:
if (commont_1.TypeSupport.list) {
return list(v, subTypes, timezone);
}
commont_1.TypeSupport.NotSupport(type);
return;
case MAP:
if (commont_1.TypeSupport.map) {
return map(v, subTypes, timezone);
}
commont_1.TypeSupport.NotSupport(type);
return;
case SET:
return set(v, subTypes, timezone);
}
return base(v, type, timezone);
}
DESERIALIZE.deserialize = deserialize;
;
function base(v, type, timezone) {
if (null_1.NullUtils.isNullValueByBytes(v, type)) {
return null;
}
const { INT32, BOOL, STRING, FLOAT, DOUBLE, UINT32, INT64, UINT64, DATETIME, TIMESTAMP, TEXT, BLOB, POINT, DECIMAL, LIST, SET, MAP, } = types_1.UltipaPropertyType;
let convertV;
switch (type) {
case INT32:
convertV = new DataView(v.buffer).getInt32(v.byteOffset);
break;
case BOOL:
let b = v.toString();
if (b == "48") {
convertV = 0;
}
else {
convertV = 1;
}
break;
case STRING:
case TEXT:
case DECIMAL:
convertV = GlobalTextDecoder.decode(v);
break;
case POINT:
if (16 != v.byteLength) {
convertV = GlobalTextDecoder.decode(v);
break;
}
let latitude_v = v.slice(0, 8);
let latitude = new DataView(latitude_v.buffer).getFloat64(latitude_v.byteOffset).toString();
let longitude_v = v.slice(8, 16);
let longitude = new DataView(longitude_v.buffer).getFloat64(longitude_v.byteOffset).toString();
convertV = `POINT(${latitude} ${longitude})`;
break;
case BLOB:
convertV = Buffer.from(v);
break;
case FLOAT:
convertV = Number(new DataView(v.buffer).getFloat32(v.byteOffset).toPrecision(7)).toString();
break;
case DOUBLE:
convertV = new DataView(v.buffer).getFloat64(v.byteOffset).toString();
break;
case TIMESTAMP:
convertV = new DataView(v.buffer).getUint32(v.byteOffset);
break;
case UINT32:
convertV = new DataView(v.buffer).getUint32(v.byteOffset);
break;
case INT64:
convertV = new DataView(v.buffer).getBigInt64(v.byteOffset).toString();
break;
case UINT64:
case DATETIME:
convertV = new DataView(v.buffer).getBigUint64(v.byteOffset).toString();
break;
}
if (type == TIMESTAMP && timezone.timestampToString) {
convertV = ultipa_datetime_1.UltipaDatetime.timestamp2Str(convertV, timezone);
}
if (type == DATETIME) {
convertV = ultipa_datetime_1.UltipaDatetime.datetimeInt2datetimeStr(convertV);
}
return convertV;
}
DESERIALIZE.base = base;
function list(v, types, timezone) {
try {
let data = ultipa_pb_1.ListData.deserializeBinary(v);
if (data.getIsNull()) {
return null;
}
let values = data.getValuesList_asU8();
let type = types[0];
let results = [];
values.forEach((v, i) => {
results.push(base(v, type, timezone));
});
return results;
}
catch (e) {
console.log("deserialize>list", v, e);
return [];
}
}
DESERIALIZE.list = list;
function map(v, types, timezone) {
try {
let data = ultipa_pb_1.MapData.deserializeBinary(v);
if (data.getIsNull()) {
return null;
}
let values = data.getValuesList();
let keyType = types[0];
let valueType = types[1];
let obj = {};
values.forEach((m) => {
let key = base(m.getKey_asU8(), keyType, timezone);
let value = base(m.getValue_asU8(), valueType, timezone);
obj[key] = value;
});
return obj;
}
catch (e) {
console.log("deserialize>list", v, e);
return [];
}
}
DESERIALIZE.map = map;
function set(v, types, timezone) {
try {
let data = ultipa_pb_1.SetData.deserializeBinary(v);
if (data.getIsNull()) {
return null;
}
let values = data.getValuesList_asU8();
let type = types[0];
let results = [];
values.forEach((v, i) => {
results.push(base(v, type, timezone));
});
return results;
}
catch (e) {
console.log("deserialize>set", v, e);
return [];
}
}
DESERIALIZE.set = set;
})(DESERIALIZE = exports.DESERIALIZE || (exports.DESERIALIZE = {}));
//# sourceMappingURL=deserialize.js.map