if row >= self._ntuples:
return None
- rv: List[Any] = []
+ rv: List[Any] = [None] * self._nfields
for col in range(self._nfields):
val = res.get_value(row, col)
- if val is None:
- rv.append(None)
- else:
- rv.append(self._row_loaders[col](val))
+ if val is not None:
+ rv[col] = self._row_loaders[col](val)
return tuple(rv)
if not size:
size = self.arraysize
- pos = self._pos
+ assert self.pgresult
load = self._transformer.load_row
- rv: List[Sequence[Any]] = []
+ rv: List[Any] = [None] * (min(size, self.pgresult.ntuples - self._pos))
- for _ in range(size):
- row = load(pos)
- if row is None:
- break
- pos += 1
- rv.append(row)
+ for i in range(len(rv)):
+ rv[i] = load(i + self._pos)
- self._pos = pos
+ self._pos += len(rv)
return rv
def fetchall(self) -> List[Sequence[Any]]:
"""
Return all the remaining records from the current recordset.
"""
- return list(self)
+ self._check_result()
+
+ assert self.pgresult
+ load = self._transformer.load_row
+
+ rv: List[Any] = [None] * (self.pgresult.ntuples - self._pos)
+ for i in range(len(rv)):
+ rv[i] = load(i + self._pos)
+
+ self._pos += len(rv)
+ return rv
def __iter__(self) -> Iterator[Sequence[Any]]:
self._check_result()
if not size:
size = self.arraysize
- pos = self._pos
+ assert self.pgresult
load = self._transformer.load_row
- rv: List[Sequence[Any]] = []
+ rv: List[Any] = [None] * (min(size, self.pgresult.ntuples - self._pos))
- for _ in range(size):
- row = load(pos)
- if row is None:
- break
- pos += 1
- rv.append(row)
+ for i in range(len(rv)):
+ rv[i] = load(i + self._pos)
- self._pos = pos
+ self._pos += len(rv)
return rv
async def fetchall(self) -> List[Sequence[Any]]:
- res = []
- async for rec in self:
- res.append(rec)
+ self._check_result()
- return res
+ assert self.pgresult
+ load = self._transformer.load_row
+
+ rv: List[Any] = [None] * (self.pgresult.ntuples - self._pos)
+ for i in range(len(rv)):
+ rv[i] = load(i + self._pos)
+
+ self._pos += len(rv)
+ return rv
async def __aiter__(self) -> AsyncIterator[Sequence[Any]]:
self._check_result()