in backend/columnar.js [577:607]
function decodeColumns(columns, actorIds, columnSpec) {
columns = makeDecoders(columns, columnSpec)
let parsedRows = []
while (columns.some(col => !col.decoder.done)) {
let row = {}, col = 0
while (col < columns.length) {
const columnId = columns[col].columnId
let groupId = columnId >> 4, groupCols = 1
while (col + groupCols < columns.length && columns[col + groupCols].columnId >> 4 === groupId) {
groupCols++
}
if (columnId % 8 === COLUMN_TYPE.GROUP_CARD) {
const values = [], count = columns[col].decoder.readValue()
for (let i = 0; i < count; i++) {
let value = {}
for (let colOffset = 1; colOffset < groupCols; colOffset++) {
decodeValueColumns(columns, col + colOffset, actorIds, value)
}
values.push(value)
}
row[columns[col].columnName] = values
col += groupCols
} else {
col += decodeValueColumns(columns, col, actorIds, row)
}
}
parsedRows.push(row)
}
return parsedRows
}