48 lines
1.2 KiB
JavaScript
48 lines
1.2 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
const Packet = require('../packets/packet');
|
||
|
|
||
|
class TextRow {
|
||
|
constructor(columns) {
|
||
|
this.columns = columns || [];
|
||
|
}
|
||
|
|
||
|
static fromPacket(packet) {
|
||
|
// packet.reset(); // set offset to starting point?
|
||
|
const columns = [];
|
||
|
while (packet.haveMoreData()) {
|
||
|
columns.push(packet.readLengthCodedString());
|
||
|
}
|
||
|
return new TextRow(columns);
|
||
|
}
|
||
|
|
||
|
static toPacket(columns, encoding) {
|
||
|
const sequenceId = 0; // TODO remove, this is calculated now in connecton
|
||
|
let length = 0;
|
||
|
columns.forEach(val => {
|
||
|
if (val === null || typeof val === 'undefined') {
|
||
|
++length;
|
||
|
return;
|
||
|
}
|
||
|
length += Packet.lengthCodedStringLength(val.toString(10), encoding);
|
||
|
});
|
||
|
const buffer = Buffer.allocUnsafe(length + 4);
|
||
|
const packet = new Packet(sequenceId, buffer, 0, length + 4);
|
||
|
packet.offset = 4;
|
||
|
columns.forEach(val => {
|
||
|
if (val === null) {
|
||
|
packet.writeNull();
|
||
|
return;
|
||
|
}
|
||
|
if (typeof val === 'undefined') {
|
||
|
packet.writeInt8(0);
|
||
|
return;
|
||
|
}
|
||
|
packet.writeLengthCodedString(val.toString(10), encoding);
|
||
|
});
|
||
|
return packet;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = TextRow;
|