return None
elif res.status == ExecStatus.SINGLE_TUPLE:
- if self._row_factory:
+ self.pgresult = res
+ self._tx.set_pgresult(res, set_loaders=first)
++ if first and self._row_factory:
+ self._tx.make_row = self._row_factory(self)
- self.pgresult = res # will set it on the transformer too
- # TODO: the transformer may do excessive work here: create a
- # path that doesn't clear the loaders every time.
return res
elif res.status in (ExecStatus.TUPLES_OK, ExecStatus.COMMAND_OK):
self._results = list(results)
self.pgresult = results[0]
+ self._tx.set_pgresult(results[0])
+ if self._row_factory:
+ self._tx.make_row = self._row_factory(self)
nrows = self.pgresult.command_tuples
if nrows is not None:
if self._rowcount < 0:
rec = self._tx.load_row(0)
assert rec is not None
yield rec
+ first = False
- def fetchone(self) -> Optional[Sequence[Any]]:
+ def fetchone(self) -> Optional[Row]:
"""
Return the next record from the current recordset.
async def stream(
self, query: Query, params: Optional[Params] = None
- ) -> AsyncIterator[Sequence[Any]]:
+ ) -> AsyncIterator[Row]:
async with self._conn.lock:
await self._conn.wait(self._stream_send_gen(query, params))
- while await self._conn.wait(self._stream_fetchone_gen()):
+ first = True
+ while await self._conn.wait(self._stream_fetchone_gen(first)):
rec = self._tx.load_row(0)
assert rec is not None
yield rec
+ first = False
- async def fetchone(self) -> Optional[Sequence[Any]]:
+ async def fetchone(self) -> Optional[Row]:
self._check_result()
rv = self._tx.load_row(self._pos)
if rv is not None:
@property
def adapters(self) -> AdaptersMap: ...
@property
+ def make_row(self) -> Optional[proto.RowMaker]: ...
+ @make_row.setter
+ def make_row(self, row_maker: proto.RowMaker) -> None: ...
+ @property
def pgresult(self) -> Optional[PGresult]: ...
- @pgresult.setter
- def pgresult(self, result: Optional[PGresult]) -> None: ...
+ def set_pgresult(
+ self, result: Optional["PGresult"], set_loaders: bool = True
+ ) -> None: ...
def set_row_types(
self, types: Sequence[int], formats: Sequence[pq.Format]
) -> None: ...