@tdengine/websocket
Version:
The websocket Node.js connector for TDengine. TDengine versions 3.3.2.0 and above are recommended to use this connector.
68 lines (67 loc) • 2.65 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.WsStmtQueryResponse = void 0;
exports.binaryBlockEncode = binaryBlockEncode;
const wsResponse_1 = require("../client/wsResponse");
const constant_1 = require("../common/constant");
class WsStmtQueryResponse extends wsResponse_1.WSQueryResponse {
constructor(resp) {
super(resp);
this.stmt_id = resp.msg.stmt_id;
this.affected = resp.msg.affected;
}
}
exports.WsStmtQueryResponse = WsStmtQueryResponse;
function binaryBlockEncode(bindParams, bindType, stmtId, reqId, row) {
//Computing the length of data
let columns = bindParams.getParams().length;
let length = constant_1.TDengineTypeLength['BIGINT'] * 4;
length += constant_1.TDengineTypeLength['INT'] * 5;
length += columns * 5 + columns * 4;
length += bindParams.getDataTotalLen();
let arrayBuffer = new ArrayBuffer(length);
let arrayView = new DataView(arrayBuffer);
arrayView.setBigUint64(0, reqId, true);
arrayView.setBigUint64(8, BigInt(stmtId), true);
arrayView.setBigUint64(16, BigInt(bindType), true);
//version int32
arrayView.setUint32(24, 1, true);
//data length int32
arrayView.setUint32(28, arrayBuffer.byteLength, true);
//rows int32
arrayView.setUint32(32, row, true);
//columns int32
arrayView.setUint32(36, columns, true);
//flagSegment int32
arrayView.setUint32(40, 0, true);
//groupID uint64
arrayView.setBigUint64(44, BigInt(0), true);
//head length
let offset = 52;
//type data range
let typeView = new DataView(arrayBuffer, offset);
//length data range
let lenView = new DataView(arrayBuffer, offset + columns * 5);
//data range offset
let dataOffset = offset + columns * 5 + columns * 4;
let headOffset = 0;
let columnsData = bindParams.getParams();
for (let i = 0; i < columnsData.length; i++) {
//set column data type
typeView.setUint8(headOffset, columnsData[i].type);
//set column type length
typeView.setUint32(headOffset + 1, columnsData[i].typeLen, true);
//set column data length
lenView.setUint32(i * 4, columnsData[i].length, true);
if (columnsData[i].data) {
//get encode column data
const sourceView = new Uint8Array(columnsData[i].data);
const destView = new Uint8Array(arrayBuffer, dataOffset, columnsData[i].data.byteLength);
//splicing data
destView.set(sourceView);
dataOffset += columnsData[i].data.byteLength;
}
headOffset += 5;
}
return arrayBuffer;
}