# Copyright (C) 2021 The Psycopg Team
+from libc.stdint cimport int64_t
from libc.string cimport memset, strchr
from cpython cimport datetime as cdt
from cpython.dict cimport PyDict_GetItem
if length != 10:
self._error_date(data, "unexpected length")
- cdef long vals[3]
+ cdef int64_t vals[3]
memset(vals, 0, sizeof(vals))
cdef const char *ptr
cdef object cload(self, const char *data, size_t length):
- cdef long vals[3]
+ cdef int64_t vals[3]
memset(vals, 0, sizeof(vals))
cdef const char *ptr
cdef const char *end = data + length
cdef object cload(self, const char *data, size_t length):
- cdef long vals[3]
+ cdef int64_t vals[3]
memset(vals, 0, sizeof(vals))
cdef const char *ptr
cdef const char *end = data + length
if self._order == ORDER_PGDM or self._order == ORDER_PGMD:
return self._cload_pg(data, end)
- cdef long vals[6]
+ cdef int64_t vals[6]
memset(vals, 0, sizeof(vals))
cdef const char *ptr
raise _get_timestamp_load_error(self._pgconn, data, ex) from None
cdef object _cload_pg(self, const char *data, const char *end):
- cdef long vals[4]
+ cdef int64_t vals[4]
memset(vals, 0, sizeof(vals))
cdef const char *ptr
if end[-1] == b'C': # ends with BC
raise _get_timestamp_load_error(self._pgconn, data) from None
- cdef long vals[6]
+ cdef int64_t vals[6]
memset(vals, 0, sizeof(vals))
# Parse the first 6 groups of digits (date and time)
return self._cload_notimpl(data, length)
cdef int days = 0, us = 0
- cdef long secs = 0
+ cdef int64_t secs = 0
cdef char sign
- cdef long val
+ cdef int64_t val
cdef const char *ptr = data
cdef const char *sep
cdef const char *end = ptr + length
break
# Parse the time part. An eventual sign was already consumed in the loop
- cdef long vals[3]
+ cdef int64_t vals[3]
memset(vals, 0, sizeof(vals))
if ptr != NULL:
ptr = _parse_date_values(ptr, end, vals, ARRAYSIZE(vals))
# Work only with positive values as the cdivision behaves differently
# with negative values, and cdivision=False adds overhead.
cdef int64_t aval = val if val >= 0 else -val
- cdef long us, ussecs, usdays
+ cdef int64_t us, ussecs, usdays
- # Group the micros in biggers stuff or timedelta_new might overflow
+ # Group the micros in bigger stuff or timedelta_new might overflow
with cython.cdivision(True):
- ussecs = <long>(aval // 1_000_000)
+ ussecs = <int64_t>(aval // 1_000_000)
us = aval % 1_000_000
usdays = ussecs // 86_400
cdef const char *_parse_date_values(
- const char *ptr, const char *end, long *vals, int nvals
+ const char *ptr, const char *end, int64_t *vals, int nvals
):
"""
Parse *nvals* numeric values separated by non-numeric chars.
cdef char sgn = ptr[0]
# Parse at most three groups of digits
- cdef long vals[3]
+ cdef int64_t vals[3]
memset(vals, 0, sizeof(vals))
ptr = _parse_date_values(ptr + 1, end, vals, ARRAYSIZE(vals))