]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Dropped Transformer.pgresult setter, use set_result
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 12 Feb 2021 01:08:18 +0000 (02:08 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 12 Feb 2021 01:22:49 +0000 (02:22 +0100)
Can pass a boolean to tell it to skip setting row loaders

psycopg3/psycopg3/_transform.py
psycopg3/psycopg3/cursor.py
psycopg3/psycopg3/proto.py
psycopg3_c/psycopg3_c/_psycopg3.pyi
psycopg3_c/psycopg3_c/_psycopg3/transform.pyx

index 3663d8ec157924ee34d61554aba5f131f73e39ac..fe688bedb972533239e041c10e46c8d903500405 100644 (file)
@@ -77,31 +77,35 @@ class Transformer(AdaptContext):
     def pgresult(self) -> Optional["PGresult"]:
         return self._pgresult
 
-    @pgresult.setter
-    def pgresult(self, result: Optional["PGresult"]) -> None:
+    def set_pgresult(
+        self, result: Optional["PGresult"], set_loaders: bool = True
+    ) -> None:
         self._pgresult = result
-        rc = self._row_loaders = []
 
         self._ntuples: int
         self._nfields: int
         if not result:
             self._nfields = self._ntuples = 0
+            if set_loaders:
+                self._row_loaders = []
             return
 
         nf = self._nfields = result.nfields
         self._ntuples = result.ntuples
 
-        for i in range(nf):
-            oid = result.ftype(i)
-            fmt = result.fformat(i)
-            rc.append(self.get_loader(oid, fmt).load)  # type: ignore
+        if set_loaders:
+            rc = self._row_loaders = []
+            for i in range(nf):
+                oid = result.ftype(i)
+                fmt = result.fformat(i)
+                rc.append(self.get_loader(oid, fmt).load)  # type: ignore
 
     def set_row_types(
         self, types: Sequence[int], formats: Sequence[pq.Format]
     ) -> None:
-        rc: List[LoadFunc] = [None] * len(types)  # type: ignore[list-item]
-        for i in range(len(rc)):
-            rc[i] = self.get_loader(types[i], formats[i]).load
+        rc: List[LoadFunc] = []
+        for i in range(len(types)):
+            rc.append(self.get_loader(types[i], formats[i]).load)
 
         self._row_loaders = rc
 
index b341f03a68954a40f617322157d6f08230595a3e..585b11cecd46a0618f229e298bd21cc016366f84 100644 (file)
@@ -127,7 +127,7 @@ class BaseCursor(Generic[ConnectionType]):
     def pgresult(self, result: Optional["PGresult"]) -> None:
         self._pgresult = result
         if result and self._tx:
-            self._tx.pgresult = result
+            self._tx.set_pgresult(result)
 
     @property
     def description(self) -> Optional[List[Column]]:
index b1e966cb5d3837d9d70cccfe96124db1fa32eca9..58e610d28f88705822a54ab064f8019aaa60adde 100644 (file)
@@ -85,8 +85,9 @@ class Transformer(Protocol):
     def pgresult(self) -> Optional[pq.proto.PGresult]:
         ...
 
-    @pgresult.setter
-    def pgresult(self, result: Optional[pq.proto.PGresult]) -> None:
+    def set_pgresult(
+        self, result: Optional[pq.proto.PGresult], set_loaders: bool = True
+    ) -> None:
         ...
 
     def set_row_types(
index 6f6c419385e03d845900769c791859158c28e376..5b9adf88a5604671e1305c88ef24d78c34c5a2d7 100644 (file)
@@ -23,8 +23,9 @@ class Transformer(proto.AdaptContext):
     def adapters(self) -> AdaptersMap: ...
     @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: ...
index f92c94d50649c620d7200d01c2242c0beb944096..166873ec3145eab49c3f8e048f105efe90d444d8 100644 (file)
@@ -96,15 +96,13 @@ cdef class Transformer:
     def pgresult(self) -> Optional[PGresult]:
         return self._pgresult
 
-    @pgresult.setter
-    def pgresult(self, result: Optional[PGresult]) -> None:
-        self.set_pgresult(result)
-
-    cdef void set_pgresult(self, pq.PGresult result):
+    cpdef void set_pgresult(self, pq.PGresult result, object set_loaders = True):
         self._pgresult = result
 
         if result is None:
             self._nfields = self._ntuples = 0
+            if set_loaders:
+                self._row_loaders = []
             return
 
         cdef libpq.PGresult *res = self._pgresult.pgresult_ptr
@@ -113,18 +111,21 @@ cdef class Transformer:
 
         cdef int i
         cdef object tmp
-        cdef list types = PyList_New(self._nfields)
-        cdef list formats = PyList_New(self._nfields)
-        for i in range(self._nfields):
-            tmp = libpq.PQftype(res, i)
-            Py_INCREF(tmp)
-            PyList_SET_ITEM(types, i, tmp)
-
-            tmp = libpq.PQfformat(res, i)
-            Py_INCREF(tmp)
-            PyList_SET_ITEM(formats, i, tmp)
-
-        self._c_set_row_types(self._nfields, types, formats)
+        cdef list types
+        cdef list formats
+        if set_loaders:
+            types = PyList_New(self._nfields)
+            formats = PyList_New(self._nfields)
+            for i in range(self._nfields):
+                tmp = libpq.PQftype(res, i)
+                Py_INCREF(tmp)
+                PyList_SET_ITEM(types, i, tmp)
+
+                tmp = libpq.PQfformat(res, i)
+                Py_INCREF(tmp)
+                PyList_SET_ITEM(formats, i, tmp)
+
+            self._c_set_row_types(self._nfields, types, formats)
 
     def set_row_types(self,
             types: Sequence[int], formats: Sequence[Format]) -> None: