From e6acffd4da60ce7974e131afc2736e451a3876fe Mon Sep 17 00:00:00 2001 From: Daniele Varrazzo Date: Wed, 26 Oct 2022 01:25:34 +0200 Subject: [PATCH] perf(c): only use __cinit__ in adaptation classes There is less overhead creating the objects. --- psycopg_c/psycopg_c/_psycopg/adapt.pyx | 4 ++-- psycopg_c/psycopg_c/types/datetime.pyx | 18 ++++++------------ psycopg_c/psycopg_c/types/string.pyx | 6 ++---- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/psycopg_c/psycopg_c/_psycopg/adapt.pyx b/psycopg_c/psycopg_c/_psycopg/adapt.pyx index 8ea7910e9..518363c85 100644 --- a/psycopg_c/psycopg_c/_psycopg/adapt.pyx +++ b/psycopg_c/psycopg_c/_psycopg/adapt.pyx @@ -35,7 +35,7 @@ cdef class CDumper: oid = oids.INVALID_OID - def __init__(self, cls, context: Optional[AdaptContext] = None): + def __cinit__(self, cls, context: Optional[AdaptContext] = None): self.cls = cls conn = context.connection if context is not None else None self._pgconn = conn.pgconn if conn is not None else None @@ -148,7 +148,7 @@ cdef class CLoader: cdef public libpq.Oid oid cdef pq.PGconn _pgconn - def __init__(self, int oid, context: Optional[AdaptContext] = None): + def __cinit__(self, int oid, context: Optional[AdaptContext] = None): self.oid = oid conn = context.connection if context is not None else None self._pgconn = conn.pgconn if conn is not None else None diff --git a/psycopg_c/psycopg_c/types/datetime.pyx b/psycopg_c/psycopg_c/types/datetime.pyx index 50e5e1f28..51e7dcf9b 100644 --- a/psycopg_c/psycopg_c/types/datetime.pyx +++ b/psycopg_c/psycopg_c/types/datetime.pyx @@ -295,8 +295,7 @@ cdef class TimedeltaDumper(CDumper): oid = oids.INTERVAL_OID cdef int _style - def __init__(self, cls, context: Optional[AdaptContext] = None): - super().__init__(cls, context) + def __cinit__(self, cls, context: Optional[AdaptContext] = None): cdef const char *ds = _get_intervalstyle(self._pgconn) if ds[0] == b's': # sql_standard @@ -353,8 +352,7 @@ cdef class DateLoader(CLoader): format = PQ_TEXT cdef int _order - def __init__(self, oid: int, context: Optional[AdaptContext] = None): - super().__init__(oid, context) + def __cinit__(self, oid: int, context: Optional[AdaptContext] = None): cdef const char *ds = _get_datestyle(self._pgconn) if ds[0] == b'I': # ISO @@ -549,8 +547,7 @@ cdef class TimestampLoader(CLoader): format = PQ_TEXT cdef int _order - def __init__(self, oid: int, context: Optional[AdaptContext] = None): - super().__init__(oid, context) + def __cinit__(self, oid: int, context: Optional[AdaptContext] = None): cdef const char *ds = _get_datestyle(self._pgconn) if ds[0] == b'I': # ISO @@ -686,8 +683,7 @@ cdef class TimestampBinaryLoader(CLoader): cdef class _BaseTimestamptzLoader(CLoader): cdef object _time_zone - def __init__(self, oid: int, context: Optional[AdaptContext] = None): - super().__init__(oid, context) + def __cinit__(self, oid: int, context: Optional[AdaptContext] = None): self._time_zone = _timezone_from_connection(self._pgconn) @@ -697,8 +693,7 @@ cdef class TimestamptzLoader(_BaseTimestamptzLoader): format = PQ_TEXT cdef int _order - def __init__(self, oid: int, context: Optional[AdaptContext] = None): - super().__init__(oid, context) + def __cinit__(self, oid: int, context: Optional[AdaptContext] = None): cdef const char *ds = _get_datestyle(self._pgconn) if ds[0] == b'I': # ISO @@ -843,8 +838,7 @@ cdef class IntervalLoader(CLoader): format = PQ_TEXT cdef int _style - def __init__(self, oid: int, context: Optional[AdaptContext] = None): - super().__init__(oid, context) + def __cinit__(self, oid: int, context: Optional[AdaptContext] = None): cdef const char *ds = _get_intervalstyle(self._pgconn) if ds[0] == b'p' and ds[8] == 0: # postgres diff --git a/psycopg_c/psycopg_c/types/string.pyx b/psycopg_c/psycopg_c/types/string.pyx index 53fd30b1b..cae6a4b5f 100644 --- a/psycopg_c/psycopg_c/types/string.pyx +++ b/psycopg_c/psycopg_c/types/string.pyx @@ -30,8 +30,7 @@ cdef class _BaseStrDumper(CDumper): cdef char *encoding cdef bytes _bytes_encoding # needed to keep `encoding` alive - def __init__(self, cls, context: Optional[AdaptContext] = None): - super().__init__(cls, context) + def __cinit__(self, cls, context: Optional[AdaptContext] = None): self.is_utf8 = 0 self.encoding = "utf-8" @@ -111,8 +110,7 @@ cdef class _TextLoader(CLoader): cdef char *encoding cdef bytes _bytes_encoding # needed to keep `encoding` alive - def __init__(self, oid: int, context: Optional[AdaptContext] = None): - super().__init__(oid, context) + def __cinit__(self, oid: int, context: Optional[AdaptContext] = None): self.is_utf8 = 0 self.encoding = "utf-8" -- 2.47.2