]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
Avoid a cython call in bool loaders
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 19 Nov 2020 01:52:04 +0000 (01:52 +0000)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Thu, 19 Nov 2020 01:55:53 +0000 (01:55 +0000)
It's probably inlined, but there is still the exception handler around.

psycopg3_c/psycopg3_c/types/numeric.pyx

index f0a020e852bf095e2ed6cfeb6c1502b63ababdfb..ed82de3d9fef526c3e3e5896e14843683f540232 100644 (file)
@@ -47,6 +47,7 @@ cdef class FloatLoader(CLoader):
         cdef double d = PyOS_string_to_double(data, NULL, OverflowError)
         return PyFloat_FromDouble(d)
 
+
 cdef class Float4BinaryLoader(CLoader):
     cdef object cload(self, const char *data, size_t length):
         cdef uint32_t asint = be32toh((<uint32_t *>data)[0])
@@ -65,12 +66,13 @@ cdef class Float8BinaryLoader(CLoader):
 
 cdef class BoolLoader(CLoader):
     cdef object cload(self, const char *data, size_t length):
-        return data[0] == b't'
+        # this creates better C than `return data[0] == b't'`
+        return True if data[0] == b't' else False
 
 
 cdef class BoolBinaryLoader(CLoader):
     cdef object cload(self, const char *data, size_t length):
-        return data[0] != b'\x00'
+        return True if data[0] else False
 
 
 cdef void register_numeric_c_loaders():