@Override public void onValues(final Object[] values) { final int recordNo = recordNumber.incrementAndGet(); final boolean isFirst = recordNo == 1; final TransformedInputRow resultRow; if (isFirst) { // retain the first record's id resultRow = TransformedInputRow.of(row); } else { resultRow = new TransformedInputRow(row, getNextVirtualRowId(row, recordNo)); } addValuesToRow(resultRow, outputColumns, values); final FilterOutcomes clonedOutcomeSink = outcomes.clone(); chain.processNext(resultRow, 1, clonedOutcomeSink); } };