From 1efc4a92ab007dddc73f72d07547241e9aea8d30 Mon Sep 17 00:00:00 2001 From: Khushboo Vashi Date: Thu, 9 Jan 2025 12:26:19 +0530 Subject: [PATCH 1/2] Fix an issue where using the binary cursor, utf-8 decode error comes up. #8199 --- web/pgadmin/utils/driver/psycopg3/typecast.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/web/pgadmin/utils/driver/psycopg3/typecast.py b/web/pgadmin/utils/driver/psycopg3/typecast.py index 7ab4976ae75..f22eda4aa5a 100644 --- a/web/pgadmin/utils/driver/psycopg3/typecast.py +++ b/web/pgadmin/utils/driver/psycopg3/typecast.py @@ -20,6 +20,7 @@ from psycopg.adapt import Loader from ipaddress import ip_address, ip_interface from psycopg._encodings import py_codecs as encodings +from psycopg.pq import Format as _pq_Format configure_driver_encodings(encodings) @@ -176,6 +177,11 @@ def register_binary_typecasters(connection): connection.adapters.register_loader(1001, ByteaLoader) + connection.adapters.register_loader(17, + ByteaBinaryLoader) + + connection.adapters.register_loader(1001, + ByteaBinaryLoader) def register_array_to_string_typecasters(connection=None): type_array = PSYCOPG_SUPPORTED_BUILTIN_ARRAY_DATATYPES +\ @@ -212,6 +218,12 @@ def load(self, data): return 'binary data' if data is not None else None +class ByteaBinaryLoader(Loader): + format = _pq_Format.BINARY + + def load(self, data): + return 'binary data' if data is not None else None + class TextLoaderpgAdmin(TextLoader): def load(self, data): postgres_encoding, python_encoding = get_encoding( From 5cb450cc6a916659164ebc89ba680d5585607c5c Mon Sep 17 00:00:00 2001 From: Khushboo Vashi Date: Thu, 9 Jan 2025 12:45:22 +0530 Subject: [PATCH 2/2] Fix PEP8 issues. --- web/pgadmin/utils/driver/psycopg3/typecast.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/web/pgadmin/utils/driver/psycopg3/typecast.py b/web/pgadmin/utils/driver/psycopg3/typecast.py index f22eda4aa5a..eddcf831325 100644 --- a/web/pgadmin/utils/driver/psycopg3/typecast.py +++ b/web/pgadmin/utils/driver/psycopg3/typecast.py @@ -183,6 +183,7 @@ def register_binary_typecasters(connection): connection.adapters.register_loader(1001, ByteaBinaryLoader) + def register_array_to_string_typecasters(connection=None): type_array = PSYCOPG_SUPPORTED_BUILTIN_ARRAY_DATATYPES +\ PSYCOPG_SUPPORTED_JSON_ARRAY_TYPES +\ @@ -224,6 +225,7 @@ class ByteaBinaryLoader(Loader): def load(self, data): return 'binary data' if data is not None else None + class TextLoaderpgAdmin(TextLoader): def load(self, data): postgres_encoding, python_encoding = get_encoding(