]> 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:19 +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 2340274485a8bea440cdc0981f429f7fb4d4b80f..e3b54a7a4ec29d629c582882489073575a724e84 100644 (file)
@@ -202,7 +202,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
@@ -730,6 +732,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 448ddd173b73d018cf83ec8607184f3f2b72cbb5..946317c0cf2bc01e0054e93a23f888522f371c26 100644 (file)
@@ -313,7 +313,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