postgrejs
Version:
Professional PostgreSQL client NodeJS
36 lines (35 loc) • 1.12 kB
JavaScript
import { BufferReader } from '../protocol/buffer-reader.js';
export function decodeBinaryArray(buf, decoder, options = {}) {
if (!buf.length)
return null;
const io = new BufferReader(buf);
const ndims = io.readInt32BE();
io.readInt32BE(); // hasNulls
const elementOID = io.readInt32BE(); // element oid
if (ndims === 0)
return [];
const dims = [];
const readDim = (level) => {
const elemCount = dims[level];
const target = new Array(elemCount);
for (let i = 0; i < elemCount; i++) {
if (level < dims.length - 1) {
target[i] = readDim(level + 1);
continue;
}
const len = io.readInt32BE();
if (len === -1)
target[i] = null;
else {
const b = io.readBuffer(len);
target[i] = decoder(b, { ...options, elementOID });
}
}
return target;
};
for (let d = 0; d < ndims; d++) {
dims[d] = io.readInt32BE();
io.readInt32BE(); // LBound
}
return readDim(0);
}