in backend/new.js [556:596]
function readOperation(columns, actorTable) {
let operation = [], colValue, lastGroup = -1, lastCardinality = 0, valueColumn = -1, valueBytes = 0
for (let col of columns) {
if (col.columnId % 8 === COLUMN_TYPE.VALUE_RAW) {
if (col.columnId !== valueColumn) throw new RangeError('unexpected VALUE_RAW column')
colValue = col.decoder.readRawBytes(valueBytes)
} else if (col.columnId % 8 === COLUMN_TYPE.GROUP_CARD) {
lastGroup = col.columnId >> 4
lastCardinality = col.decoder.readValue() || 0
colValue = lastCardinality
} else if (col.columnId >> 4 === lastGroup) {
colValue = []
if (col.columnId % 8 === COLUMN_TYPE.VALUE_LEN) {
valueColumn = col.columnId + 1
valueBytes = 0
}
for (let i = 0; i < lastCardinality; i++) {
let value = col.decoder.readValue()
if (col.columnId % 8 === COLUMN_TYPE.ACTOR_ID && actorTable && typeof value === 'number') {
value = actorTable[value]
}
if (col.columnId % 8 === COLUMN_TYPE.VALUE_LEN) {
valueBytes += colValue >>> 4
}
colValue.push(value)
}
} else {
colValue = col.decoder.readValue()
if (col.columnId % 8 === COLUMN_TYPE.ACTOR_ID && actorTable && typeof colValue === 'number') {
colValue = actorTable[colValue]
}
if (col.columnId % 8 === COLUMN_TYPE.VALUE_LEN) {
valueColumn = col.columnId + 1
valueBytes = colValue >>> 4
}
}
operation.push(colValue)
}
return operation
}