]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Added binary results from cursor
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 27 Mar 2020 13:02:10 +0000 (02:02 +1300)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 27 Mar 2020 13:02:10 +0000 (02:02 +1300)
psycopg3/connection.py
psycopg3/cursor.py
tests/test_cursor.py

index eff6503e4f17985c230e553b20125f76ae84138f..21e714ddf4f9c1e30acc3cff6dccf4a250eb9ba8 100644 (file)
@@ -34,8 +34,10 @@ class BaseConnection:
         # name of the postgres encoding (in bytes)
         self.pgenc = None
 
-    def cursor(self, name=None):
-        return self.cursor_factory(self)
+    def cursor(self, name=None, binary=False):
+        if name is not None:
+            raise NotImplementedError
+        return self.cursor_factory(self, binary=binary)
 
     @property
     def codec(self):
index 030948d74b6d33fa6f8451774bd367ce55abd966..d92c16b16acba6231a63cdd8d1bdf0f37431f473 100644 (file)
@@ -42,7 +42,11 @@ class BaseCursor:
                 vars = reorder_params(vars, order)
             params, types = self._transformer.adapt_sequence(vars, formats)
             self.conn.pgconn.send_query_params(
-                query, params, param_formats=formats, param_types=types
+                query,
+                params,
+                param_formats=formats,
+                param_types=types,
+                result_format=int(self.binary),
             )
         else:
             self.conn.pgconn.send_query(query)
index f99c6868ed15acad66df95332e04290a95780480..e81684345b68744b566488953f1f58c566e01057 100644 (file)
@@ -23,9 +23,23 @@ def test_execute_sequence(conn):
 def test_fetchone(conn):
     cur = conn.cursor()
     cur.execute("select %s, %s, %s", [1, "foo", None])
+    assert cur._result.fformat(0) == 0
+
     row = cur.fetchone()
     assert row[0] == 1
     assert row[1] == "foo"
     assert row[2] is None
     row = cur.fetchone()
     assert row is None
+
+
+def test_execute_binary_result(conn):
+    cur = conn.cursor(binary=True)
+    cur.execute("select %s, %s", ["foo", None])
+    assert cur._result.fformat(0) == 1
+
+    row = cur.fetchone()
+    assert row[0] == "foo"
+    assert row[1] is None
+    row = cur.fetchone()
+    assert row is None