]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix: don't emit a comma dumping timedelta objects
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 20 May 2022 13:35:31 +0000 (15:35 +0200)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Fri, 20 May 2022 13:37:07 +0000 (15:37 +0200)
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.

psycopg/psycopg/types/datetime.py
psycopg_c/psycopg_c/types/datetime.pyx

index 8ab52b0ed661fc5c6b6d2867c35b770fa94a55b7..b11a7352240848e6a337c656a4dc5b069803ffd3 100644 (file)
@@ -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)
index ddb7eaf73e9a9e672419e8d25bf115398bc38c04..6ffa264477ab1cfd9db93af6d99a6a005e3b39c4 100644 (file)
@@ -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