From ee85c6d79c4bf0ecd068c6cdb24dc7e9e28f411c Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Thu, 2 Apr 2020 18:04:33 +1300 Subject: [PATCH] 'pgresult' is part of the Cursor interface The same way 'pgconn' is a public property of the Connection. --- psycopg3/cursor.py | 12 ++++++------ tests/test_async_cursor.py | 10 +++++----- tests/test_cursor.py | 14 +++++++------- tests/types/test_numeric.py | 9 +++++++++ 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/psycopg3/cursor.py b/psycopg3/cursor.py index 9e360187b..4b7a96bf8 100644 --- a/psycopg3/cursor.py +++ b/psycopg3/cursor.py @@ -33,7 +33,7 @@ class BaseCursor: from .adapt import Transformer self._results: List[PGresult] = [] - self._result: Optional[PGresult] = None + self.pgresult: Optional[PGresult] = None self._pos = 0 self._iresult = 0 self._transformer = Transformer(self) @@ -89,7 +89,7 @@ class BaseCursor: } if not badstats: self._results = results - self._result = results[0] + self.pgresult = results[0] return if results[-1].status == ExecStatus.FATAL_ERROR: @@ -115,7 +115,7 @@ class BaseCursor: def nextset(self) -> Optional[bool]: self._iresult += 1 if self._iresult < len(self._results): - self._result = self._results[self._iresult] + self.pgresult = self._results[self._iresult] self._pos = 0 return True else: @@ -128,12 +128,12 @@ class BaseCursor: return rv def _cast_row(self, n: int) -> Optional[Tuple[Any, ...]]: - if self._result is None: + if self.pgresult is None: return None - if n >= self._result.ntuples: + if n >= self.pgresult.ntuples: return None - return tuple(self._transformer.cast_row(self._result, n)) + return tuple(self._transformer.cast_row(self.pgresult, n)) class Cursor(BaseCursor): diff --git a/tests/test_async_cursor.py b/tests/test_async_cursor.py index 4c0dfd57c..e896be4b6 100644 --- a/tests/test_async_cursor.py +++ b/tests/test_async_cursor.py @@ -3,9 +3,9 @@ def test_execute_many(aconn, loop): rv = loop.run_until_complete(cur.execute("select 'foo'; select 'bar'")) assert rv is cur assert len(cur._results) == 2 - assert cur._result.get_value(0, 0) == b"foo" + assert cur.pgresult.get_value(0, 0) == b"foo" assert cur.nextset() - assert cur._result.get_value(0, 0) == b"bar" + assert cur.pgresult.get_value(0, 0) == b"bar" assert cur.nextset() is None @@ -16,7 +16,7 @@ def test_execute_sequence(aconn, loop): ) assert rv is cur assert len(cur._results) == 1 - assert cur._result.get_value(0, 0) == b"1" - assert cur._result.get_value(0, 1) == b"foo" - assert cur._result.get_value(0, 2) is None + assert cur.pgresult.get_value(0, 0) == b"1" + assert cur.pgresult.get_value(0, 1) == b"foo" + assert cur.pgresult.get_value(0, 2) is None assert cur.nextset() is None diff --git a/tests/test_cursor.py b/tests/test_cursor.py index e81684345..03c87aca8 100644 --- a/tests/test_cursor.py +++ b/tests/test_cursor.py @@ -3,9 +3,9 @@ def test_execute_many(conn): rv = cur.execute("select 'foo'; select 'bar'") assert rv is cur assert len(cur._results) == 2 - assert cur._result.get_value(0, 0) == b"foo" + assert cur.pgresult.get_value(0, 0) == b"foo" assert cur.nextset() - assert cur._result.get_value(0, 0) == b"bar" + assert cur.pgresult.get_value(0, 0) == b"bar" assert cur.nextset() is None @@ -14,16 +14,16 @@ def test_execute_sequence(conn): rv = cur.execute("select %s, %s, %s", [1, "foo", None]) assert rv is cur assert len(cur._results) == 1 - assert cur._result.get_value(0, 0) == b"1" - assert cur._result.get_value(0, 1) == b"foo" - assert cur._result.get_value(0, 2) is None + assert cur.pgresult.get_value(0, 0) == b"1" + assert cur.pgresult.get_value(0, 1) == b"foo" + assert cur.pgresult.get_value(0, 2) is None assert cur.nextset() is None def test_fetchone(conn): cur = conn.cursor() cur.execute("select %s, %s, %s", [1, "foo", None]) - assert cur._result.fformat(0) == 0 + assert cur.pgresult.fformat(0) == 0 row = cur.fetchone() assert row[0] == 1 @@ -36,7 +36,7 @@ def test_fetchone(conn): def test_execute_binary_result(conn): cur = conn.cursor(binary=True) cur.execute("select %s, %s", ["foo", None]) - assert cur._result.fformat(0) == 1 + assert cur.pgresult.fformat(0) == 1 row = cur.fetchone() assert row[0] == "foo" diff --git a/tests/types/test_numeric.py b/tests/types/test_numeric.py index 0cc53a51c..7fed199f4 100644 --- a/tests/types/test_numeric.py +++ b/tests/types/test_numeric.py @@ -52,6 +52,15 @@ def test_adapt_int(conn, val, expr): def test_cast_int(conn, val, pgtype, want): cur = conn.cursor() cur.execute("select %%s::%s" % pgtype, (val,)) + assert cur.pgresult.fformat(0) == 0 + result = cur.fetchone()[0] + assert result == want + assert type(result) is type(want) + + # test binary + cur.binary = True + cur.execute("select %%s::%s" % pgtype, (val,)) + assert cur.pgresult.fformat(0) == 1 result = cur.fetchone()[0] assert result == want assert type(result) is type(want) -- 2.47.3