.. autoattribute:: rowcount
:annotation: int
+ .. autoattribute:: rownumber
+ :annotation: int
+
.. autoattribute:: query
:annotation: Optional[bytes]
"""Number of records affected by the precedent operation."""
return self._rowcount
+ @property
+ def rownumber(self) -> Optional[int]:
+ """Index of the next row to fetch in the current result.
+
+ `!None` if there is no result to fetch.
+ """
+ return self._pos if self._pgresult else None
+
def setinputsizes(self, sizes: Sequence[Any]) -> None:
# no-op
pass
self._check_result()
assert self.pgresult
records = self._tx.load_rows(self._pos, self.pgresult.ntuples)
- self._pos += self.pgresult.ntuples
+ self._pos = self.pgresult.ntuples
return records
def __iter__(self) -> Iterator[Sequence[Any]]:
self._check_result()
assert self.pgresult
records = self._tx.load_rows(self._pos, self.pgresult.ntuples)
- self._pos += self.pgresult.ntuples
+ self._pos = self.pgresult.ntuples
return records
async def __aiter__(self) -> AsyncIterator[Sequence[Any]]:
assert cur.rowcount == -1
+def test_rownumber(conn):
+ cur = conn.cursor()
+ assert cur.rownumber is None
+
+ cur.execute("select 1 from generate_series(1, 42)")
+ assert cur.rownumber == 0
+
+ cur.fetchone()
+ assert cur.rownumber == 1
+ cur.fetchone()
+ assert cur.rownumber == 2
+ cur.fetchmany(10)
+ assert cur.rownumber == 12
+ rns = []
+ for i in cur:
+ rns.append(cur.rownumber)
+ if len(rns) >= 3:
+ break
+ assert rns == [13, 14, 15]
+ assert len(cur.fetchall()) == 42 - rns[-1]
+ assert cur.rownumber == 42
+
+
def test_iter(conn):
cur = conn.cursor()
cur.execute("select generate_series(1, 3)")
assert cur.rowcount == -1
+async def test_rownumber(aconn):
+ cur = await aconn.cursor()
+ assert cur.rownumber is None
+
+ await cur.execute("select 1 from generate_series(1, 42)")
+ assert cur.rownumber == 0
+
+ await cur.fetchone()
+ assert cur.rownumber == 1
+ await cur.fetchone()
+ assert cur.rownumber == 2
+ await cur.fetchmany(10)
+ assert cur.rownumber == 12
+ rns = []
+ async for i in cur:
+ rns.append(cur.rownumber)
+ if len(rns) >= 3:
+ break
+ assert rns == [13, 14, 15]
+ assert len(await cur.fetchall()) == 42 - rns[-1]
+ assert cur.rownumber == 42
+
+
async def test_iter(aconn):
cur = await aconn.cursor()
await cur.execute("select generate_series(1, 3)")