code: def _consume_next(self):
          
          response = six.next(self._response_iterator)
          self._counter += 1
  
          if self._metadata is None:  # first response
              metadata = self._metadata = response.metadata
  
              source = self._source
              if source is not None and source._transaction_id is None:
                  source._transaction_id = metadata.transaction.id
  
          if response.HasField("stats"):  # last response
              self._stats = response.stats
  
          values = list(response.values)
          if self._pending_chunk is not None:
              values[0] = self._merge_chunk(values[0])
  
          if response.chunked_value:
              self._pending_chunk = values.pop()
  
          self._merge_values(values)
docs: Consume the next partial result set from the stream.
  
          Parse the result set into new/existing rows in :attr:`_rows`