]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Added _oid C attribute to CDumper
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 17 Dec 2020 16:29:48 +0000 (17:29 +0100)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 17 Dec 2020 16:29:48 +0000 (17:29 +0100)
psycopg3_c/psycopg3_c/adapt.pyx
psycopg3_c/psycopg3_c/types/numeric.pyx
psycopg3_c/psycopg3_c/types/singletons.pyx
psycopg3_c/psycopg3_c/types/text.pyx

index 62c9281260dbfc60b6812290e8d8e1134a20c550..c8e3c5cb164fd8c45eac252dc0724e32c3b1c7fa 100644 (file)
@@ -36,6 +36,7 @@ cdef class CDumper:
     cdef object _context
     cdef object _connection
     cdef PGconn _pgconn
+    cdef impl.Oid _oid
 
     def __init__(self, src: type, context: AdaptContext = None):
         self._src = src
@@ -95,7 +96,9 @@ cdef class CDumper:
 
     @property
     def oid(self) -> int:
-        return 0
+        # Implicitly initialised to zero
+        # Subclasses may implement __cinit__ to set a per-class value
+        return self._oid
 
     @classmethod
     def register(
index 4a797d8356d7d016b09111dc3028f4c08a4c9404..aec21dcad66b5fef34d1141638677c4b2a91820f 100644 (file)
@@ -21,7 +21,12 @@ cdef extern from "Python.h":
 
 
 cdef class IntDumper(CDumper):
-    oid = oids.INT8_OID
+
+    def __cinit__(self):
+        self._oid = oids.INT8_OID
+
+    def __init__(self, src: type, context: AdaptContext = None):
+        super().__init__(src, context)
 
     def dump(self, obj) -> bytes:
         cdef char buf[22]
index 70295d898e1e0fc723c43ea8c9890f950e14be6f..8b46f338df95d3e7177e01f88871e9669c8eb2fe 100644 (file)
@@ -9,7 +9,8 @@ from psycopg3_c cimport oids
 
 
 cdef class BoolDumper(CDumper):
-    oid = oids.BOOL_OID
+    def __cinit__(self):
+        self._oid = oids.BOOL_OID
 
     def dump(self, obj) -> bytes:
         # Fast paths, just a pointer comparison
index cf3b73a81c0ddbc8589e7fd21ba27f8e38854471..da80a440d601f74a1d2feecb2fa89d6c1e0347e3 100644 (file)
@@ -98,14 +98,13 @@ cdef class TextLoader(CLoader):
 cdef class BytesDumper(CDumper):
     cdef Escaping esc
 
+    def __cinit__(self):
+        self._oid = oids.BYTEA_OID
+
     def __init__(self, src: type, context: AdaptContext):
         super().__init__(src, context)
         self.esc = Escaping(self._pgconn)
 
-    @property
-    def oid(self) -> int:
-        return oids.BYTEA_OID
-
     def dump(self, obj) -> memoryview:
         return self.esc.escape_bytea(obj)