Hi,

Please find attached patch to handle bytea and bytea[] data in datagrid.

Now instead of showing actual data we can show placeholders like <binary
data> and <binary data[]>. Also placeholders will only appear if data
actually exists otherwise null will be shown.


-- 
*Harshal Dhumal*
*Sr. Software Engineer*

EnterpriseDB India: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/feature_tests/pg_datatype_validation_test.py b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
index 26c787b..7bedde8 100644
--- a/web/pgadmin/feature_tests/pg_datatype_validation_test.py
+++ b/web/pgadmin/feature_tests/pg_datatype_validation_test.py
@@ -101,7 +101,7 @@ class PGDataypeFeatureTest(BaseFeatureTest):
             '922337203685.922337203685', '-92233720368547758.08',
             '{1,2,3}', '{NaN,NaN,NaN}',
             'Infinity', '{Infinity}',
-            r'\336\255\276\357', r'{"\\336\\255\\276\\357","\\336\\255\\276\\357"}'
+            r'&lt;binary data&gt;', r'&lt;binary data[]&gt;'
         ]
 
         self.page.open_query_tool()
diff --git a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
index 8a797ab..bf29a39 100644
--- a/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
+++ b/web/pgadmin/tools/sqleditor/templates/sqleditor/js/sqleditor.js
@@ -578,6 +578,7 @@ define([
               name: c.label,
               display_name: c.display_name,
               column_type: c.column_type,
+              column_type_internal: c.column_type_internal,
               not_null: c.not_null,
               has_default_val: c.has_default_val
             };
@@ -744,6 +745,11 @@ define([
         // Listener function which will be called before user updates existing cell
         // This will be used to collect primary key for that row
         grid.onBeforeEditCell.subscribe(function (e, args) {
+            if (args.column.column_type_internal == 'bytea' ||
+                args.column.column_type_internal == 'bytea[]') {
+              return false;
+            }
+
             var before_data = args.item;
 
             // If newly added row is saved but grid is not refreshed,
@@ -2000,9 +2006,9 @@ define([
                            pg_types[pg_types.length - 1][0] : 'unknown';
 
             if (!is_primary_key)
-              col_type += ' ' + type;
+              col_type += type;
             else
-              col_type += ' [PK] ' + type;
+              col_type += '[PK] ' + type;
 
             if (c.precision && c.precision >= 0 && c.precision != 65535) {
               col_type += ' (' + c.precision;
@@ -2051,6 +2057,7 @@ define([
               'name': c.name,
               'display_name': c.display_name,
               'column_type': col_type,
+              'column_type_internal': type,
               'pos': c.pos,
               'label': column_label,
               'cell': col_cell,
diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py
index 8a20521..7510f80 100644
--- a/web/pgadmin/utils/driver/psycopg2/__init__.py
+++ b/web/pgadmin/utils/driver/psycopg2/__init__.py
@@ -60,8 +60,8 @@ psycopg2.extensions.register_type(
 psycopg2.extensions.register_type(
     psycopg2.extensions.new_type(
         (
-            # To cast bytea, bytea[] and interval type
-            17, 1001, 1186,
+            # To cast interval type
+            1186,
 
             # to cast int4range, int8range, numrange tsrange, tstzrange,
             # daterange
@@ -76,6 +76,28 @@ psycopg2.extensions.register_type(
         'TYPECAST_TO_STRING', psycopg2.STRING)
 )
 
+psycopg2.extensions.register_type(
+    psycopg2.extensions.new_type(
+        (
+            # To cast bytea type
+            17,
+         ),
+        'BYTEA_PLACEHOLDER',
+        # Only show placeholder if data actually exists.
+        lambda value, cursor: '<binary data>' if value is not None else None)
+)
+
+psycopg2.extensions.register_type(
+    psycopg2.extensions.new_type(
+        (
+            # To cast bytea[] type
+            1001,
+         ),
+        'BYTEA_ARRAY_PLACEHOLDER',
+        # Only show placeholder if data actually exists.
+        lambda value, cursor: '<binary data[]>' if value is not None else None)
+)
+
 
 def register_string_typecasters(connection):
     if connection.encoding != 'UTF8':

Reply via email to