From 57731a07ef7fdbc99bd7d3a6ff7f06c3cb31e2d7 Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Thu, 17 Dec 2020 17:29:48 +0100 Subject: [PATCH] Added _oid C attribute to CDumper --- psycopg3_c/psycopg3_c/adapt.pyx | 5 ++++- psycopg3_c/psycopg3_c/types/numeric.pyx | 7 ++++++- psycopg3_c/psycopg3_c/types/singletons.pyx | 3 ++- psycopg3_c/psycopg3_c/types/text.pyx | 7 +++---- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/psycopg3_c/psycopg3_c/adapt.pyx b/psycopg3_c/psycopg3_c/adapt.pyx index 62c928126..c8e3c5cb1 100644 --- a/psycopg3_c/psycopg3_c/adapt.pyx +++ b/psycopg3_c/psycopg3_c/adapt.pyx @@ -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( diff --git a/psycopg3_c/psycopg3_c/types/numeric.pyx b/psycopg3_c/psycopg3_c/types/numeric.pyx index 4a797d835..aec21dcad 100644 --- a/psycopg3_c/psycopg3_c/types/numeric.pyx +++ b/psycopg3_c/psycopg3_c/types/numeric.pyx @@ -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] diff --git a/psycopg3_c/psycopg3_c/types/singletons.pyx b/psycopg3_c/psycopg3_c/types/singletons.pyx index 70295d898..8b46f338d 100644 --- a/psycopg3_c/psycopg3_c/types/singletons.pyx +++ b/psycopg3_c/psycopg3_c/types/singletons.pyx @@ -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 diff --git a/psycopg3_c/psycopg3_c/types/text.pyx b/psycopg3_c/psycopg3_c/types/text.pyx index cf3b73a81..da80a440d 100644 --- a/psycopg3_c/psycopg3_c/types/text.pyx +++ b/psycopg3_c/psycopg3_c/types/text.pyx @@ -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) -- 2.47.2