From 4fbfcdfee9a250e479687135159ba55b9f043f81 Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Wed, 3 May 2023 15:18:17 +0530 Subject: [PATCH] Fix multiple object breadcrumbs bugs. #2078 --- .../catalog_object/sql/ppas/default/nodes.sql | 4 +++- .../templates/packages/ppas/12_plus/nodes.sql | 3 ++- .../databases/schemas/sequences/__init__.py | 2 +- .../constraints/foreign_key/__init__.py | 13 +++++++++--- .../constraints/index_constraint/__init__.py | 13 +++++++++--- .../databases/schemas/views/__init__.py | 20 +++++++++++++++---- .../templates/mviews/pg/default/sql/nodes.sql | 4 +++- .../mviews/ppas/default/sql/nodes.sql | 4 +++- .../templates/views/pg/default/sql/nodes.sql | 4 +++- .../views/ppas/default/sql/nodes.sql | 4 +++- .../servers/tablespaces/__init__.py | 17 +++++++++++++--- .../tablespaces/sql/default/nodes.sql | 3 ++- .../js/components/ObjectBreadcrumbs.jsx | 4 ++-- 13 files changed, 72 insertions(+), 23 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/templates/catalog_object/sql/ppas/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/templates/catalog_object/sql/ppas/default/nodes.sql index bf09365a7..d279a478f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/templates/catalog_object/sql/ppas/default/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/catalog_objects/templates/catalog_object/sql/ppas/default/nodes.sql @@ -1,6 +1,8 @@ SELECT - c.oid, c.relname as name + c.oid, c.relname as name, description FROM pg_catalog.pg_class c +LEFT OUTER JOIN pg_catalog.pg_description d + ON d.objoid=c.oid AND d.classoid='pg_class'::regclass {% if scid %} WHERE relnamespace = {{scid}}::oid OR ( diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/12_plus/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/12_plus/nodes.sql index cbb1e37b4..0112d29ea 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/12_plus/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/packages/ppas/12_plus/nodes.sql @@ -1,7 +1,8 @@ SELECT - nsp.oid, nspname AS name + nsp.oid, nspname AS name, des.description FROM pg_catalog.pg_namespace nsp + LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=nsp.oid AND des.classoid='pg_namespace'::regclass) WHERE nspparent = {{scid}}::oid {% if pkgid %} AND nsp.oid = {{pkgid}}::oid diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py index 5fbfa2741..61164a4f5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/__init__.py @@ -243,7 +243,7 @@ class SequenceView(PGChildNodeView, SchemaDiffObjectCompare): scid, row['name'], icon=self.node_icon, - description=row['description'] + description=row['comment'] )) return make_json_response( diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py index 428b3d69f..d9eb3bf19 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/__init__.py @@ -482,7 +482,8 @@ class ForeignKeyConstraintView(PGChildNodeView): tid, row['name'], icon=icon, - valid=valid + valid=valid, + description=row['comment'] )) return res @@ -605,13 +606,18 @@ class ForeignKeyConstraintView(PGChildNodeView): if is_error: return errmsg + other_node_info = {} + if 'comment' in data: + other_node_info['description'] = data['comment'] + return jsonify( node=self.blueprint.generate_browser_node( res['rows'][0]['oid'], tid, data['name'], valid=valid, - icon=icon + icon=icon, + **other_node_info ) ) @@ -713,7 +719,8 @@ class ForeignKeyConstraintView(PGChildNodeView): tid, name, icon=icon, - valid=valid + valid=valid, + **other_node_info ) ) except Exception as e: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py index cb5ecd140..0c46e4a35 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/__init__.py @@ -488,7 +488,8 @@ class IndexConstraintView(PGChildNodeView): row['oid'], tid, row['name'], - icon=self.node_icon + icon=self.node_icon, + description=row['comment'] )) return res @@ -625,12 +626,17 @@ class IndexConstraintView(PGChildNodeView): self.end_transaction() return internal_server_error(errormsg=res) + other_node_info = {} + if 'comment' in data: + other_node_info['description'] = data['comment'] + return jsonify( node=self.blueprint.generate_browser_node( res['rows'][0]['oid'], tid, data['name'], - icon=self.node_icon + icon=self.node_icon, + **other_node_info ) ) @@ -696,7 +702,8 @@ class IndexConstraintView(PGChildNodeView): cid, tid, name, - icon=self.node_icon + icon=self.node_icon, + **other_node_info ) ) except Exception as e: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py index 8104d977d..c97fccdf3 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py @@ -431,7 +431,8 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare): scid, rset['rows'][0]['name'], icon="icon-view" if self.node_type == 'view' - else "icon-mview" + else "icon-mview", + description=rset['rows'][0]['comment'] ) return make_json_response( @@ -459,7 +460,8 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare): scid, row['name'], icon="icon-view" if self.node_type == 'view' - else "icon-mview" + else "icon-mview", + description=row['comment'] )) return make_json_response( @@ -583,13 +585,18 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare): if not status: return internal_server_error(errormsg=new_scid) + other_node_info = {} + if 'comment' in data: + other_node_info['description'] = data['comment'] + return jsonify( node=self.blueprint.generate_browser_node( view_id, new_scid, data['name'], icon="icon-view" if self.node_type == 'view' - else "icon-mview" + else "icon-mview", + **other_node_info ) ) except Exception as e: @@ -631,13 +638,18 @@ class ViewNode(PGChildNodeView, VacuumSettings, SchemaDiffObjectCompare): if not status: return internal_server_error(errormsg=new_scid) + other_node_info = {} + if 'comment' in data: + other_node_info['description'] = data['comment'] + return jsonify( node=self.blueprint.generate_browser_node( view_id, new_scid, new_view_name, icon="icon-view" if self.node_type == 'view' - else "icon-mview" + else "icon-mview", + **other_node_info ) ) except Exception as e: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/nodes.sql index 2244f67b0..6f919f176 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/default/sql/nodes.sql @@ -1,7 +1,9 @@ SELECT c.oid, - c.relname AS name + c.relname AS name, + description AS comment FROM pg_catalog.pg_class c +LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=c.oid and des.objsubid=0 AND des.classoid='pg_class'::regclass) WHERE c.relkind = 'm' {% if (vid and datlastsysoid) %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/nodes.sql index 2244f67b0..6f919f176 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/ppas/default/sql/nodes.sql @@ -1,7 +1,9 @@ SELECT c.oid, - c.relname AS name + c.relname AS name, + description AS comment FROM pg_catalog.pg_class c +LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=c.oid and des.objsubid=0 AND des.classoid='pg_class'::regclass) WHERE c.relkind = 'm' {% if (vid and datlastsysoid) %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/nodes.sql index d0a61515f..87bf34d67 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/pg/default/sql/nodes.sql @@ -1,7 +1,9 @@ SELECT c.oid, - c.relname AS name + c.relname AS name, + description AS comment FROM pg_catalog.pg_class c +LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=c.oid and des.objsubid=0 AND des.classoid='pg_class'::regclass) WHERE c.relkind = 'v' {% if (vid and datlastsysoid) %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/nodes.sql index d0a61515f..87bf34d67 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/views/ppas/default/sql/nodes.sql @@ -1,7 +1,9 @@ SELECT c.oid, - c.relname AS name + c.relname AS name, + description AS comment FROM pg_catalog.pg_class c +LEFT OUTER JOIN pg_catalog.pg_description des ON (des.objoid=c.oid and des.objsubid=0 AND des.classoid='pg_class'::regclass) WHERE c.relkind = 'v' {% if (vid and datlastsysoid) %} diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py b/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py index 2ef26465c..c6d59d207 100644 --- a/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/__init__.py @@ -196,7 +196,8 @@ class TablespaceView(PGChildNodeView): row['oid'], sid, row['name'], - icon="icon-tablespace" + icon="icon-tablespace", + description=row['description'] )) return make_json_response( @@ -357,12 +358,17 @@ class TablespaceView(PGChildNodeView): ) ) + other_node_info = {} + if 'description' in data: + other_node_info['description'] = data['description'] + return jsonify( node=self.blueprint.generate_browser_node( tsid, sid, data['name'], - icon="icon-tablespace" + icon="icon-tablespace", + **other_node_info ) ) except Exception as e: @@ -389,12 +395,17 @@ class TablespaceView(PGChildNodeView): if not status: return internal_server_error(errormsg=res) + other_node_info = {} + if 'description' in data: + other_node_info['description'] = data['description'] + return jsonify( node=self.blueprint.generate_browser_node( tsid, sid, name, - icon="icon-%s" % self.node_type + icon="icon-%s" % self.node_type, + **other_node_info ) ) except Exception as e: diff --git a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql index 3ce452600..0ffb4b047 100644 --- a/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/tablespaces/templates/tablespaces/sql/default/nodes.sql @@ -1,5 +1,6 @@ SELECT - ts.oid AS oid, spcname AS name, spcowner as owner + ts.oid AS oid, spcname AS name, spcowner as owner, + pg_catalog.shobj_description(oid, 'pg_tablespace') AS description FROM pg_catalog.pg_tablespace ts {% if tsid %} diff --git a/web/pgadmin/static/js/components/ObjectBreadcrumbs.jsx b/web/pgadmin/static/js/components/ObjectBreadcrumbs.jsx index 3ffef8292..0212ffb51 100644 --- a/web/pgadmin/static/js/components/ObjectBreadcrumbs.jsx +++ b/web/pgadmin/static/js/components/ObjectBreadcrumbs.jsx @@ -99,8 +99,8 @@ export default function ObjectBreadcrumbs({pgAdmin}) {
{ - objectData.path?.reduce((res, item)=>( - res.concat({item}, ) + objectData.path?.reduce((res, item, i)=>( + res.concat({item}, ) ), []).slice(0, -1) }