From: Daniele Varrazzo Date: Thu, 14 May 2020 07:49:40 +0000 (+1200) Subject: Optimized dumpers registration moved to own modules X-Git-Tag: 3.0.dev0~527 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=35a8bb44b629d0813b2e5a86bdbe61dd56ede5ec;p=thirdparty%2Fpsycopg.git Optimized dumpers registration moved to own modules Dropped some of the function signatures from the .pyd files as they are not used cross-module. --- diff --git a/psycopg3/adapt.pyx b/psycopg3/adapt.pyx index 4a28a5d8b..d16881b78 100644 --- a/psycopg3/adapt.pyx +++ b/psycopg3/adapt.pyx @@ -1,7 +1,5 @@ from psycopg3.adapt cimport cloader_func, get_context_func, RowLoader -from psycopg3.types cimport numeric, text - import logging logger = logging.getLogger("psycopg3.adapt") @@ -55,24 +53,3 @@ def register_builtin_c_loaders(): logger.debug("registering optimised c loaders") register_numeric_c_loaders() register_text_c_loaders() - - -cdef void register_numeric_c_loaders(): - logger.debug("registering optimised numeric c loaders") - from psycopg3.types import numeric - register_c_loader(numeric.load_int, load_int_text) - register_c_loader(numeric.load_int2_binary, load_int2_binary) - register_c_loader(numeric.load_int4_binary, load_int4_binary) - register_c_loader(numeric.load_int8_binary, load_int8_binary) - register_c_loader(numeric.load_oid_binary, load_oid_binary) - register_c_loader(numeric.load_bool_binary, load_bool_binary) - - -cdef void register_text_c_loaders(): - logger.debug("registering optimised text c loaders") - from psycopg3 import adapt - from psycopg3.types import text - register_c_loader(text.StringLoader.load, load_text, get_context_text) - register_c_loader(text.UnknownLoader.load, load_text, get_context_text) - register_c_loader(text.load_bytea_text, load_bytea_text) - register_c_loader(text.load_bytea_binary, load_bytea_binary) diff --git a/psycopg3/types/numeric.pxd b/psycopg3/types/numeric.pxd deleted file mode 100644 index dce56be9f..000000000 --- a/psycopg3/types/numeric.pxd +++ /dev/null @@ -1,6 +0,0 @@ -cdef object load_int_text(const char *data, size_t length, void *context) -cdef object load_int2_binary(const char *data, size_t length, void *context) -cdef object load_int4_binary(const char *data, size_t length, void *context) -cdef object load_int8_binary(const char *data, size_t length, void *context) -cdef object load_oid_binary(const char *data, size_t length, void *context) -cdef object load_bool_binary(const char *data, size_t length, void *context) diff --git a/psycopg3/types/numeric.pyx b/psycopg3/types/numeric.pyx index 7faa564fd..edab1225e 100644 --- a/psycopg3/types/numeric.pyx +++ b/psycopg3/types/numeric.pyx @@ -1,6 +1,7 @@ from libc.stdint cimport * from psycopg3.types.endian cimport be16toh, be32toh, be64toh + from cpython.long cimport ( PyLong_FromLong, PyLong_FromLongLong, PyLong_FromUnsignedLong) @@ -8,20 +9,36 @@ from cpython.long cimport ( cdef object load_int_text(const char *data, size_t length, void *context): return int(data) + cdef object load_int2_binary(const char *data, size_t length, void *context): return PyLong_FromLong(be16toh((data)[0])) + cdef object load_int4_binary(const char *data, size_t length, void *context): return PyLong_FromLong(be32toh((data)[0])) + cdef object load_int8_binary(const char *data, size_t length, void *context): return PyLong_FromLongLong(be64toh((data)[0])) + cdef object load_oid_binary(const char *data, size_t length, void *context): return PyLong_FromUnsignedLong(be32toh((data)[0])) + cdef object load_bool_binary(const char *data, size_t length, void *context): if data[0]: return True else: return False + + +cdef void register_numeric_c_loaders(): + logger.debug("registering optimised numeric c loaders") + from psycopg3.types import numeric + register_c_loader(numeric.load_int, load_int_text) + register_c_loader(numeric.load_int2_binary, load_int2_binary) + register_c_loader(numeric.load_int4_binary, load_int4_binary) + register_c_loader(numeric.load_int8_binary, load_int8_binary) + register_c_loader(numeric.load_oid_binary, load_oid_binary) + register_c_loader(numeric.load_bool_binary, load_bool_binary) diff --git a/psycopg3/types/text.pxd b/psycopg3/types/text.pxd deleted file mode 100644 index b2693bc64..000000000 --- a/psycopg3/types/text.pxd +++ /dev/null @@ -1,2 +0,0 @@ -cdef object load_text(const char *data, size_t length, void *context) -cdef void *get_context_text(object loader) diff --git a/psycopg3/types/text.pyx b/psycopg3/types/text.pyx index 1b73324e5..d12ed2227 100644 --- a/psycopg3/types/text.pyx +++ b/psycopg3/types/text.pyx @@ -37,3 +37,12 @@ cdef object load_bytea_text(const char *data, size_t length, void *context): cdef object load_bytea_binary(const char *data, size_t length, void *context): return data[:length] + + +cdef void register_text_c_loaders(): + logger.debug("registering optimised text c loaders") + from psycopg3.types import text + register_c_loader(text.StringLoader.load, load_text, get_context_text) + register_c_loader(text.UnknownLoader.load, load_text, get_context_text) + register_c_loader(text.load_bytea_text, load_bytea_text) + register_c_loader(text.load_bytea_binary, load_bytea_binary)