From 72794f9524016b4fc3d1906ae1bbb09c72daefaa Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Fri, 26 May 2023 18:07:51 +0530 Subject: [PATCH] Fix issues related to show/hide empty nodes feature. #5048 --- .../templates/languages/sql/default/count.sql | 4 ++++ .../servers/databases/schemas/__init__.py | 24 ++++++++++++------- .../schemas/tables/columns/__init__.py | 3 +-- .../tables/compound_triggers/__init__.py | 4 ++-- .../schemas/tables/indexes/__init__.py | 3 +-- .../tables/row_security_policies/__init__.py | 4 ++-- .../schemas/tables/rules/__init__.py | 3 +-- .../schemas/tables/triggers/__init__.py | 3 +-- .../schemas/pg/default/sql/count.sql | 11 +++++++++ .../schemas/ppas/default/sql/count.sql | 21 ++++++++++++++++ 10 files changed, 59 insertions(+), 21 deletions(-) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/count.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/count.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/count.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/count.sql b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/count.sql new file mode 100644 index 000000000..281f99a8e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/languages/templates/languages/sql/default/count.sql @@ -0,0 +1,4 @@ +SELECT COUNT(*) +FROM + pg_catalog.pg_language lan JOIN pg_catalog.pg_proc hp ON hp.oid=lanplcallfoid +WHERE lanispl IS TRUE diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py index dd1626392..986e7b5ba 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py @@ -85,7 +85,11 @@ class SchemaModule(CollectionNodeModule): """ Generate the collection node """ - yield self.generate_browser_collection_node(did) + if self.has_nodes( + sid, did, + base_template_path=SchemaView.BASE_TEMPLATE_PATH + + '/' + SchemaView._SQL_PREFIX): + yield self.generate_browser_collection_node(did) @property def script_load(self): @@ -188,6 +192,12 @@ class CatalogModule(SchemaModule): """ super().register(app, options) + def get_nodes(self, gid, sid, did): + """ + Generate the collection node + """ + yield self.generate_browser_collection_node(did) + schema_blueprint = SchemaModule(__name__) catalog_blueprint = CatalogModule(__name__) @@ -224,11 +234,8 @@ def check_precondition(f): kwargs['did']]['datistemplate'] # Set the template path for the SQL scripts - if self.manager.server_type == 'ppas': - _temp = self.ppas_template_path(self.manager.version) - else: - _temp = self.pg_template_path(self.manager.version) - self.template_path = self.template_initial + '/' + _temp + self.template_path = self.BASE_TEMPLATE_PATH.format( + self.manager.server_type, self.manager.version) return f(*args, **kwargs) @@ -286,6 +293,7 @@ class SchemaView(PGChildNodeView): node_type = schema_blueprint.node_type _SQL_PREFIX = 'sql/' node_icon = 'icon-%s' % node_type + BASE_TEMPLATE_PATH = 'schemas/{0}/#{1}#' parent_ids = [ {'type': 'int', 'id': 'gid'}, @@ -322,7 +330,6 @@ class SchemaView(PGChildNodeView): self.manager = None self.conn = None self.template_path = None - self.template_initial = 'schemas' @staticmethod def ppas_template_path(ver): @@ -1071,6 +1078,7 @@ class CatalogView(SchemaView): """ node_type = catalog_blueprint.node_type + BASE_TEMPLATE_PATH = 'catalog/{0}/#{1}#' def __init__(self, *args, **kwargs): """ @@ -1079,8 +1087,6 @@ class CatalogView(SchemaView): super().__init__(*args, **kwargs) - self.template_initial = 'catalog' - def _formatter(self, data, scid=None): """ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py index 3bbd36914..8e766d499 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/__init__.py @@ -73,8 +73,7 @@ class ColumnsModule(CollectionNodeModule): """ assert ('tid' in kwargs or 'vid' in kwargs) if self.has_nodes(sid, did, scid=scid, - tid=kwargs.get('tid', None), - vid=kwargs.get('vid', None), + tid=kwargs.get('tid', kwargs.get('vid', None)), base_template_path=ColumnsView.BASE_TEMPLATE_PATH): yield self.generate_browser_collection_node( kwargs['tid'] if 'tid' in kwargs else kwargs['vid'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py index 997116f62..f87c2d671 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py @@ -106,8 +106,8 @@ class CompoundTriggerModule(CollectionNodeModule): """ assert ('tid' in kwargs or 'vid' in kwargs) if self.has_nodes( - sid, did, scid=scid, tid=kwargs.get('tid', None), - vid=kwargs.get('vid', None), + sid, did, scid=scid, + tid=kwargs.get('tid', kwargs.get('vid', None)), base_template_path=CompoundTriggerView.BASE_TEMPLATE_PATH): yield self.generate_browser_collection_node( kwargs['tid'] if 'tid' in kwargs else kwargs['vid'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py index 04117f4fb..25dc8650c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/indexes/__init__.py @@ -104,8 +104,7 @@ class IndexesModule(CollectionNodeModule): """ assert ('tid' in kwargs or 'vid' in kwargs) if self.has_nodes(sid, did, scid=scid, - tid=kwargs.get('tid', None), - vid=kwargs.get('vid', None), + tid=kwargs.get('tid', kwargs.get('vid', None)), base_template_path=IndexesView.BASE_TEMPLATE_PATH): yield self.generate_browser_collection_node( kwargs['tid'] if 'tid' in kwargs else kwargs['vid'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py index 43ddb8c7f..f938dab04 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/row_security_policies/__init__.py @@ -66,8 +66,8 @@ class RowSecurityModule(CollectionNodeModule): """ assert ('tid' in kwargs or 'vid' in kwargs) if self.has_nodes( - sid, did, scid=scid, tid=kwargs.get('tid', None), - vid=kwargs.get('vid', None), + sid, did, scid=scid, + tid=kwargs.get('tid', kwargs.get('vid', None)), base_template_path=RowSecurityView.BASE_TEMPLATE_PATH): yield self.generate_browser_collection_node( kwargs['tid'] if 'tid' in kwargs else kwargs['vid'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py index 0a080e656..e23a87981 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/__init__.py @@ -81,8 +81,7 @@ class RuleModule(CollectionNodeModule): """ assert ('tid' in kwargs or 'vid' in kwargs) if self.has_nodes(sid, did, scid=scid, - tid=kwargs.get('tid', None), - vid=kwargs.get('vid', None), + tid=kwargs.get('tid', kwargs.get('vid', None)), base_template_path=RuleView.BASE_TEMPLATE_PATH): yield self.generate_browser_collection_node( kwargs['tid'] if 'tid' in kwargs else kwargs['vid'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py index 025958035..aac16fcda 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py @@ -102,8 +102,7 @@ class TriggerModule(CollectionNodeModule): """ assert ('tid' in kwargs or 'vid' in kwargs) if self.has_nodes(sid, did, scid=scid, - tid=kwargs.get('tid', None), - vid=kwargs.get('vid', None), + tid=kwargs.get('tid', kwargs.get('vid', None)), base_template_path=TriggerView.BASE_TEMPLATE_PATH): yield self.generate_browser_collection_node( kwargs['tid'] if 'tid' in kwargs else kwargs['vid'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/count.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/count.sql new file mode 100644 index 000000000..7b33a512f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/pg/default/sql/count.sql @@ -0,0 +1,11 @@ +{% import 'catalog/pg/macros/catalogs.sql' as CATALOGS %} +SELECT COUNT(*) +FROM + pg_catalog.pg_namespace nsp +WHERE + {% if not showsysobj %} + nspname NOT LIKE E'pg\\_%' AND + {% endif %} + NOT ( +{{ CATALOGS.LIST('nsp') }} + ) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/count.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/count.sql new file mode 100644 index 000000000..0f967b706 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/templates/schemas/ppas/default/sql/count.sql @@ -0,0 +1,21 @@ +{% import 'catalog/ppas/macros/catalogs.sql' as CATALOGS %} +SELECT COUNT(*) +FROM + pg_catalog.pg_namespace nsp +WHERE + nsp.nspparent = 0 AND + {% if scid %} + nsp.oid={{scid}}::oid AND + {% else %} + {% if not show_sysobj %} + nspname NOT LIKE 'pg!_%' escape '!' AND + {% endif %} + {% endif %} + NOT ( +{{ CATALOGS.LIST('nsp') }} + ) + {% if schema_restrictions %} + AND + nsp.nspname in ({{schema_restrictions}}) + {% endif %} +ORDER BY nspname;