]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Use the C api to create memoryview objects
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sun, 27 Dec 2020 23:20:47 +0000 (00:20 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Tue, 29 Dec 2020 17:12:53 +0000 (18:12 +0100)
psycopg3_c/psycopg3_c/pq/escaping.pyx

index 97a73db87d0df13c675eff6ebfa4d4441454f19d..1f83cd1fe7f70d552a2552bba1d352c088bf8735 100644 (file)
@@ -7,6 +7,7 @@ psycopg3_c.pq.Escaping object implementation.
 from libc.string cimport strlen
 from cpython.bytearray cimport PyByteArray_FromStringAndSize, PyByteArray_Resize
 from cpython.bytearray cimport PyByteArray_AS_STRING
+from cpython.memoryview cimport PyMemoryView_FromObject
 
 
 cdef class Escaping:
@@ -32,7 +33,9 @@ cdef class Escaping:
                 f"escape_literal failed: {error_message(self.conn)}"
             )
 
-        return memoryview(PQBuffer._from_buffer(<unsigned char *>out, strlen(out)))
+        return PyMemoryView_FromObject(
+            PQBuffer._from_buffer(<unsigned char *>out, strlen(out))
+        )
 
     def escape_identifier(self, data: "Buffer") -> memoryview:
         cdef char *out
@@ -52,7 +55,9 @@ cdef class Escaping:
                 f"escape_identifier failed: {error_message(self.conn)}"
             )
 
-        return memoryview(PQBuffer._from_buffer(<unsigned char *>out, strlen(out)))
+        return PyMemoryView_FromObject(
+            PQBuffer._from_buffer(<unsigned char *>out, strlen(out))
+        )
 
     def escape_string(self, data: "Buffer") -> memoryview:
         cdef int error
@@ -84,7 +89,7 @@ cdef class Escaping:
 
         # shrink back or the length will be reported different
         PyByteArray_Resize(rv, len_out)
-        return memoryview(rv)
+        return PyMemoryView_FromObject(rv)
 
     def escape_bytea(self, data: "Buffer") -> memoryview:
         cdef size_t len_out
@@ -108,7 +113,7 @@ cdef class Escaping:
                 f"couldn't allocate for escape_bytea of {len(data)} bytes"
             )
 
-        return memoryview(
+        return PyMemoryView_FromObject(
             PQBuffer._from_buffer(out, len_out - 1)  # out includes final 0
         )
 
@@ -126,4 +131,4 @@ cdef class Escaping:
                 f"couldn't allocate for unescape_bytea of {len(data)} bytes"
             )
 
-        return memoryview(PQBuffer._from_buffer(out, len_out))
+        return PyMemoryView_FromObject(PQBuffer._from_buffer(out, len_out))