code: def fetch_next(self, query=None, **kwargs):
          
          if query:
              self.query = query
  
          hash_ = self._hash
          if hash_ in self._data:
              for result in self._data[hash_]:
                  yield result
  
          if self.scraper.current_item is not self:
              self._move_here()
  
          self._data[hash_] = ResultSet()
          self._data[hash_].dialect = self.dialect
          self._data[hash_].dataset = self
          for result in self.scraper._fetch_data(self,
                                                 query=self.query,
                                                 **kwargs):
              self._data[hash_].append(result)
              yield result
docs: Generator to yield data one row at a time.
          Yields a Result, not the entire ResultSet. The containing ResultSet
          can be accessed through `Result.resultset`, but be careful not to
          manipulate the ResultSet until it is populated (when this generator
          is empty), or you may see unexpected results.