Source:
<code>public void scan() throws IOException { if (reader == null) { setupForScan(); } if (!rowGroupOpen) { openRowGroup(); } beginScan(presentStream, null); int initialFieldResults = reader.getNumResults(); <START> int firstRow = inputQualifyingSet.getPositions()[0]; <END> if (inputCopy == null) { inputCopy = new QualifyingSet(); } inputCopy.copyFrom(inputQualifyingSet); makeInnerQualifyingSet(); if (hasNulls) { innerQualifyingSet.setTranslateResultToParentRows(true); innerQualifyingSet.setParent(inputQualifyingSet); } else { if (innerQualifyingSet == null) { innerQualifyingSet = new QualifyingSet(); } innerQualifyingSet.copyFrom(inputQualifyingSet); innerQualifyingSet.setTranslateResultToParentRows(false); } reader.setQualifyingSets(innerQualifyingSet, outputQualifyingSet); if (innerQualifyingSet.getPositionCount() > 0) { reader.advance(); innerPosInRowGroup = innerQualifyingSet.getEnd(); } ensureOutput(numInnerRows + numNullsToAdd); int numStructs = reader.getNumResults() - initialFieldResults; for (int i = 0; i < numStructs; i++) { addStructResult(); } int lastFieldOffset = fieldBlockSize == 0 ? 0 : fieldBlockOffset[fieldBlockSize]; addNullsAfterScan(filter != null ? outputQualifyingSet : inputQualifyingSet, inputQualifyingSet.getEnd()); if (numResults > numInnerResults) { fieldBlockOffset[numValues + numResults] = lastFieldOffset; int nextNonNull = lastFieldOffset; for (int i = numValues + numResults - 1; i >= numValues; i--) { if (fieldBlockOffset[i] == -1) { fieldBlockOffset[i] = nextNonNull; } else { nextNonNull = fieldBlockOffset[i]; } } } fieldBlockSize = numValues + numResults; endScan(presentStream); check(); }</code><technical_language>firstRow variable is</technical_language>

Target:
public void scan() throws IOException { if (reader == null) { setupForScan(); } if (!rowGroupOpen) { openRowGroup(); } beginScan(presentStream, null); int initialFieldResults = reader.getNumResults(); if (inputCopy == null) { inputCopy = new QualifyingSet(); } inputCopy.copyFrom(inputQualifyingSet); makeInnerQualifyingSet(); if (hasNulls) { innerQualifyingSet.setTranslateResultToParentRows(true); innerQualifyingSet.setParent(inputQualifyingSet); } else { if (innerQualifyingSet == null) { innerQualifyingSet = new QualifyingSet(); } innerQualifyingSet.copyFrom(inputQualifyingSet); innerQualifyingSet.setTranslateResultToParentRows(false); } reader.setQualifyingSets(innerQualifyingSet, outputQualifyingSet); if (innerQualifyingSet.getPositionCount() > 0) { reader.advance(); innerPosInRowGroup = innerQualifyingSet.getEnd(); } ensureOutput(numInnerRows + numNullsToAdd); int numStructs = reader.getNumResults() - initialFieldResults; for (int i = 0; i < numStructs; i++) { addStructResult(); } int lastFieldOffset = fieldBlockSize == 0 ? 0 : fieldBlockOffset[fieldBlockSize]; addNullsAfterScan(filter != null ? outputQualifyingSet : inputQualifyingSet, inputQualifyingSet.getEnd()); if (numResults > numInnerResults) { fieldBlockOffset[numValues + numResults] = lastFieldOffset; int nextNonNull = lastFieldOffset; for (int i = numValues + numResults - 1; i >= numValues; i--) { if (fieldBlockOffset[i] == -1) { fieldBlockOffset[i] = nextNonNull; } else { nextNonNull = fieldBlockOffset[i]; } } } fieldBlockSize = numValues + numResults; endScan(presentStream); check(); }