]> git.ipfire.org Git - thirdparty/psycopg.git/commitdiff
fix(numpy): fix dumpers registration order
authorDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 17 Dec 2022 03:47:18 +0000 (03:47 +0000)
committerDaniele Varrazzo <daniele.varrazzo@gmail.com>
Sat, 5 Aug 2023 14:21:30 +0000 (15:21 +0100)
If numpy dumpers are registered after numeric ones, then NPNumericBinaryDumper
is used instead of NumericBinaryDumper when looking up by oid. This
breaks dumping values with a decimal part.

psycopg/psycopg/postgres.py

index 045491373aa986e0610627a004c26e961015e2df..0b171f4d7fe14f31e733d61407cc49a90245cb48 100644 (file)
@@ -109,7 +109,6 @@ def register_default_adapters(context: AdaptContext) -> None:
     from .types import net, none, numeric, numpy, range, string, uuid
 
     array.register_default_adapters(context)
-    bool.register_default_adapters(context)
     composite.register_default_adapters(context)
     datetime.register_default_adapters(context)
     enum.register_default_adapters(context)
@@ -117,8 +116,12 @@ def register_default_adapters(context: AdaptContext) -> None:
     multirange.register_default_adapters(context)
     net.register_default_adapters(context)
     none.register_default_adapters(context)
-    numeric.register_default_adapters(context)
-    numpy.register_default_adapters(context)
     range.register_default_adapters(context)
     string.register_default_adapters(context)
     uuid.register_default_adapters(context)
+
+    # Make sure to register dumpers to the standard types last, in order to
+    # pick them by default when looking up by oid.
+    numpy.register_default_adapters(context)
+    bool.register_default_adapters(context)
+    numeric.register_default_adapters(context)