From: Dylan Young Date: Fri, 12 Jun 2026 04:57:07 +0000 (-0300) Subject: fix(py): dumping non-None values when no NoneType dumper registered X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=550dff4539d6046fc5e2b78c9a8b598ee1f9cf84;p=thirdparty%2Fpsycopg.git fix(py): dumping non-None values when no NoneType dumper registered - in pure python implementation (c was already correct) --- diff --git a/psycopg/psycopg/_py_transformer.py b/psycopg/psycopg/_py_transformer.py index 41ffbbc5b..65426b20f 100644 --- a/psycopg/psycopg/_py_transformer.py +++ b/psycopg/psycopg/_py_transformer.py @@ -65,6 +65,7 @@ class Transformer(AdaptContext): def __init__(self, context: AdaptContext | None = None): self._pgresult = self.types = self.formats = None + self._none_oid = -1 # WARNING: don't store context, or you'll create a loop with the Cursor if context: @@ -187,12 +188,16 @@ class Transformer(AdaptContext): out[i] = self._row_dumpers[i].dump(param) return out - types = [self._get_none_oid()] * nparams + types = [-1] * nparams pqformats = [TEXT] * nparams for i in range(nparams): if (param := params[i]) is None: + if self._none_oid < 0: + self._none_oid = self._get_none_oid() + types[i] = self._none_oid continue + dumper = self.get_dumper(param, formats[i]) out[i] = dumper.dump(param) types[i] = dumper.oid @@ -267,17 +272,10 @@ class Transformer(AdaptContext): def _get_none_oid(self) -> int: try: - return self._none_oid - except AttributeError: - pass - - try: - rv = self._none_oid = self._adapters.get_dumper(NoneType, PY_TEXT).oid + return self._adapters.get_dumper(NoneType, PY_TEXT).oid except KeyError: raise e.InterfaceError("None dumper not found") - return rv - def get_dumper_by_oid(self, oid: int, format: pq.Format) -> abc.Dumper: """ Return a Dumper to dump an object to the type with given oid.