protected function doFetch()
{
while ((list($innerKey, $innerValue) = $this->innerValuesIterator->fetch()) === null) {
if ((list($this->outerKey, $this->outerValue) = $this->outerIterator->fetch()) === null) {
return null;
}
$this->innerValuesIterator = $this->getInnerValuesIterator($this->outerKey, $this->outerValue);
$this->innerValuesIterator->rewind();
}
$projectionFunction = $this->projectionFunction;
return [$this->count++, $projectionFunction($this->outerValue, $innerValue, $this->outerKey, $innerKey)];
}