From: Daniele Varrazzo Date: Fri, 20 May 2022 13:35:31 +0000 (+0200) Subject: fix: don't emit a comma dumping timedelta objects X-Git-Tag: 3.1~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8736ff45797ed45a200ebc0868242ec450d6f45a;p=thirdparty%2Fpsycopg.git fix: don't emit a comma dumping timedelta objects The format '-1 day, 23:59:59' is understood OK by PostgreSQL but it's not documented so it seems unwise to rely on it. --- diff --git a/psycopg/psycopg/types/datetime.py b/psycopg/psycopg/types/datetime.py index 8ab52b0ed..b11a73522 100644 --- a/psycopg/psycopg/types/datetime.py +++ b/psycopg/psycopg/types/datetime.py @@ -201,7 +201,9 @@ class TimedeltaDumper(Dumper): setattr(self, "dump", self._dump_sql) def dump(self, obj: timedelta) -> bytes: - return str(obj).encode() + # The comma is parsed ok by PostgreSQL but it's not documented + # and it seems brittle to rely on it. CRDB doesn't consume it well. + return str(obj).encode().replace(b",", b"") def _dump_sql(self, obj: timedelta) -> bytes: # sql_standard format needs explicit signs @@ -715,6 +717,7 @@ def register_default_adapters(context: AdaptContext) -> None: adapters.register_dumper("datetime.timedelta", TimedeltaDumper) adapters.register_dumper("datetime.timedelta", TimedeltaBinaryDumper) + adapters.register_loader("date", DateLoader) adapters.register_loader("date", DateBinaryLoader) adapters.register_loader("time", TimeLoader) diff --git a/psycopg_c/psycopg_c/types/datetime.pyx b/psycopg_c/psycopg_c/types/datetime.pyx index ddb7eaf73..6ffa26447 100644 --- a/psycopg_c/psycopg_c/types/datetime.pyx +++ b/psycopg_c/psycopg_c/types/datetime.pyx @@ -307,7 +307,9 @@ cdef class TimedeltaDumper(CDumper): cdef str s if self._style == INTERVALSTYLE_OTHERS: - s = str(obj) + # The comma is parsed ok by PostgreSQL but it's not documented + # and it seems brittle to rely on it. CRDB doesn't consume it well. + s = str(obj).replace(",", "") else: # sql_standard format needs explicit signs # otherwise -1 day 1 sec will mean -1 sec