def getNextRecord(self):
<EOL>while True:<EOL><INDENT>if self._sourceLastRecordIdx is not None  andself._recordStore.getNextRecordIdx() >= self._sourceLastRecordIdx:<EOL><INDENT>preAggValues = None                             <EOL>bookmark = self._recordStore.getBookmark()<EOL><DEDENT>else:<EOL><INDENT>preAggValues = self._recordStore.getNextRecord()<EOL>bookmark = self._recordStore.getBookmark()<EOL><DEDENT>if preAggValues == ():  <EOL><INDENT>if self._eofOnTimeout:<EOL><INDENT>preAggValues = None  <EOL><DEDENT>else:<EOL><INDENT>return preAggValues  <EOL><DEDENT><DEDENT>self._logger.debug('<STR_LIT>',<EOL>self._recordStore.getNextRecordIdx()-<NUM_LIT:1>, preAggValues)<EOL>(fieldValues, aggBookmark) = self._aggregator.next(preAggValues, bookmark)<EOL>if fieldValues is not None:<EOL><INDENT>self._aggBookmark = aggBookmark<EOL><DEDENT>if preAggValues is None and fieldValues is None:<EOL><INDENT>return None<EOL><DEDENT>if fieldValues is not None:<EOL><INDENT>break<EOL><DEDENT><DEDENT>if self._needFieldsFiltering:<EOL><INDENT>values = []<EOL>srcDict = dict(zip(self._recordStoreFieldNames, fieldValues))<EOL>for name in self._streamFieldNames:<EOL><INDENT>values.append(srcDict[name])<EOL><DEDENT>fieldValues = values<EOL><DEDENT>if self._writer is not None:<EOL><INDENT>self._writer.appendRecord(fieldValues)<EOL><DEDENT>self._recordCount += <NUM_LIT:1><EOL>self._logger.debug('<STR_LIT>'<EOL>'<STR_LIT>',<EOL>self._recordCount-<NUM_LIT:1>, fieldValues, self._aggBookmark)<EOL>return fieldValues<EOL>
Returns combined data from all sources (values only).

        :returns: None on EOF; empty sequence on timeout.