in backend/new.js [603:636]
function appendOperation(outCols, inCols, operation) {
let inIndex = 0, lastGroup = -1, lastCardinality = 0
for (let outCol of outCols) {
while (inIndex < inCols.length && inCols[inIndex].columnId < outCol.columnId) inIndex++
if (inIndex < inCols.length && inCols[inIndex].columnId === outCol.columnId) {
const colValue = operation[inIndex]
if (outCol.columnId % 8 === COLUMN_TYPE.GROUP_CARD) {
lastGroup = outCol.columnId >> 4
lastCardinality = colValue
outCol.encoder.appendValue(colValue)
} else if (outCol.columnId >> 4 === lastGroup) {
if (!Array.isArray(colValue) || colValue.length !== lastCardinality) {
throw new RangeError('bad group value')
}
for (let v of colValue) outCol.encoder.appendValue(v)
} else if (outCol.columnId % 8 === COLUMN_TYPE.VALUE_RAW) {
if (colValue) outCol.encoder.appendRawBytes(colValue)
} else {
outCol.encoder.appendValue(colValue)
}
} else if (outCol.columnId % 8 === COLUMN_TYPE.GROUP_CARD) {
lastGroup = outCol.columnId >> 4
lastCardinality = 0
outCol.encoder.appendValue(0)
} else if (outCol.columnId % 8 !== COLUMN_TYPE.VALUE_RAW) {
const count = (outCol.columnId >> 4 === lastGroup) ? lastCardinality : 1
let blankValue = null
if (outCol.columnId % 8 === COLUMN_TYPE.BOOLEAN) blankValue = false
if (outCol.columnId % 8 === COLUMN_TYPE.VALUE_LEN) blankValue = 0
outCol.encoder.appendValue(blankValue, count)
}
}
}