]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
More efficient float loading
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 18 Nov 2020 21:56:53 +0000 (21:56 +0000)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Wed, 18 Nov 2020 21:56:53 +0000 (21:56 +0000)
psycopg3_c/psycopg3_c/types/numeric.pyx

index d2e12754c12830ae8229e4b3cca375e97d830eba..144add2c87c5b441acff181dfedc2a83d1cf0ec4 100644 (file)
@@ -13,7 +13,8 @@ from cpython.float cimport PyFloat_FromDouble
 
 # work around https://github.com/cython/cython/issues/3909
 cdef extern from "Python.h":
-    object PyFloat_FromString(object)
+    double PyOS_string_to_double(
+        const char *s, char **endptr, object overflow_exception) except? -1.0
 
 
 cdef class IntLoader(CLoader):
@@ -43,9 +44,8 @@ cdef class OidBinaryLoader(CLoader):
 
 cdef class FloatLoader(CLoader):
     cdef object cload(self, const char *data, size_t length):
-        cdef bytes b = data
-        return PyFloat_FromString(b)
-
+        cdef double d = PyOS_string_to_double(data, NULL, NULL)
+        return PyFloat_FromDouble(d)
 
 cdef class Float4BinaryLoader(CLoader):
     cdef object cload(self, const char *data, size_t length):