async def scroll(self, value, mode='relative'): """Scroll the cursor in the result set to a new position according to mode . Same as :meth:`Cursor.scroll`, but move cursor on server side one by one row. If you want to move 20 rows forward scroll will make 20 queries to move cursor. Currently only forward scrolling is supported. :param int value: move cursor to next position according to mode. :param str mode: scroll mode, possible modes: `relative` and `absolute` """ self._check_executed() if mode == 'relative': if value < 0: raise NotSupportedError("Backwards scrolling not supported " "by this cursor") for _ in range(value): await self._read_next() self._rownumber += value elif mode == 'absolute': if value < self._rownumber: raise NotSupportedError( "Backwards scrolling not supported by this cursor") end = value - self._rownumber for _ in range(end): await self._read_next() self._rownumber = value else: raise ProgrammingError("unknown scroll mode %s" % mode)
def scroll(self, value, mode='relative'): self._check_executed() if mode == 'relative': if value < 0: raise NotSupportedError("Backwards scrolling not supported " "by this cursor") for _ in range(value): yield from self._read_next() self._rownumber += value elif mode == 'absolute': if value < self._rownumber: raise NotSupportedError( "Backwards scrolling not supported by this cursor") end = value - self._rownumber for _ in range(end): yield from self._read_next() self._rownumber = value else: raise ProgrammingError("unknown scroll mode %s" % mode)