]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
reset and poll fail too if the connection is gone
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 11 Apr 2020 07:58:39 +0000 (19:58 +1200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 11 Apr 2020 07:58:39 +0000 (19:58 +1200)
psycopg3/pq/pq_ctypes.py
tests/pq/test_pgconn.py

index ce9f5e765d8a2ab2491a9a120c5adee7bfe79259..ae7b8d7b0427fe30991d0813c35c14154175c275 100644 (file)
@@ -65,7 +65,7 @@ class PGconn:
         return cls(pgconn_ptr)
 
     def connect_poll(self) -> PollingStatus:
-        rv = impl.PQconnectPoll(self.pgconn_ptr)
+        rv = self._call_int(impl.PQconnectPoll)
         return PollingStatus(rv)
 
     def finish(self) -> None:
@@ -86,6 +86,8 @@ class PGconn:
             impl.PQconninfoFree(opts)
 
     def reset(self) -> None:
+        if not self.pgconn_ptr:
+            raise PQerror("the connection is no more available")
         impl.PQreset(self.pgconn_ptr)
 
     def reset_start(self) -> None:
@@ -93,7 +95,7 @@ class PGconn:
             raise PQerror("couldn't reset connection")
 
     def reset_poll(self) -> PollingStatus:
-        rv = impl.PQresetPoll(self.pgconn_ptr)
+        rv = self._call_int(impl.PQresetPoll)
         return PollingStatus(rv)
 
     @classmethod
index 881a29cc78b3eec5c79bc865a990ceab5399963d..65b16b4c43d73b8473a9904d72b61502b996f1ae 100644 (file)
@@ -38,6 +38,10 @@ def test_connect_async(pq, dsn):
 
     assert conn.status == pq.ConnStatus.OK
 
+    conn.finish()
+    with pytest.raises(psycopg3.OperationalError):
+        conn.connect_poll()
+
 
 def test_connect_async_bad(pq, dsn):
     conn = pq.PGconn.connect_start(b"dbname=psycopg3_test_not_for_real")
@@ -89,9 +93,10 @@ def test_reset(pq, pgconn):
     pgconn.reset()
     assert pgconn.status == pq.ConnStatus.OK
 
-    # doesn't work after finish, but doesn't die either
     pgconn.finish()
-    pgconn.reset()
+    with pytest.raises(psycopg3.OperationalError):
+        pgconn.reset()
+
     assert pgconn.status == pq.ConnStatus.BAD
 
 
@@ -116,7 +121,8 @@ def test_reset_async(pq, pgconn):
     with pytest.raises(psycopg3.OperationalError):
         pgconn.reset_start()
 
-    assert pgconn.reset_poll() == 0
+    with pytest.raises(psycopg3.OperationalError):
+        pgconn.reset_poll()
 
 
 def test_ping(pq, dsn):