diff --git a/web/pgadmin/browser/server_groups/servers/databases/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/__init__.py index 63a6e8ac8..96b227216 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/__init__.py @@ -252,9 +252,7 @@ class DatabaseView(PGChildNodeView): def retrieve_last_system_oid(self): last_system_oid = 0 - if self.blueprint.show_system_objects: - last_system_oid = 0 - elif ( + if ( self.manager.db_info is not None and self.manager.did in self.manager.db_info ): @@ -294,6 +292,8 @@ class DatabaseView(PGChildNodeView): for row in rset['rows']: dbname = row['name'] + if row['is_sys_obj'] and not self.blueprint.show_system_objects: + continue if self.manager.db == dbname: connected = True can_drop = can_dis_conn = False @@ -340,9 +340,11 @@ class DatabaseView(PGChildNodeView): :return: """ res = [] + last_system_oid = self.retrieve_last_system_oid() + SQL = render_template( "/".join([self.template_path, self._NODES_SQL]), - last_system_oid=0, + last_system_oid=last_system_oid, show_system_objects=True, ) status, rset = self.conn.execute_dict(SQL) @@ -360,9 +362,11 @@ class DatabaseView(PGChildNodeView): @check_precondition(action="node") def node(self, gid, sid, did): + last_system_oid = self.retrieve_last_system_oid() + SQL = render_template( "/".join([self.template_path, self._NODES_SQL]), - did=did, conn=self.conn, last_system_oid=0, + did=did, conn=self.conn, last_system_oid=last_system_oid, show_system_objects=self.blueprint.show_system_objects, ) status, rset = self.conn.execute_2darray(SQL) @@ -389,7 +393,8 @@ class DatabaseView(PGChildNodeView): connected=connected, spcname=row['spcname'], allowConn=row['datallowconn'], - canCreate=row['cancreate'] + canCreate=row['cancreate'], + isTemplate=row['is_template'] ), status=200 ) @@ -398,10 +403,11 @@ class DatabaseView(PGChildNodeView): @check_precondition(action="properties") def properties(self, gid, sid, did): + last_system_oid = self.retrieve_last_system_oid() SQL = render_template( "/".join([self.template_path, self._PROPERTIES_SQL]), - did=did, conn=self.conn, last_system_oid=0, + did=did, conn=self.conn, last_system_oid=last_system_oid, show_system_objects=self.blueprint.show_system_objects, ) status, res = self.conn.execute_dict(SQL) @@ -626,10 +632,12 @@ class DatabaseView(PGChildNodeView): if not status: return internal_server_error(errormsg=msg) + last_system_oid = self.retrieve_last_system_oid() + # We need oid of newly created database SQL = render_template( "/".join([self.template_path, self._PROPERTIES_SQL]), - name=data['name'], conn=self.conn, last_system_oid=0, + name=data['name'], conn=self.conn, last_system_oid=last_system_oid, show_system_objects=self.blueprint.show_system_objects, ) SQL = SQL.strip('\n').strip(' ') @@ -701,12 +709,14 @@ class DatabaseView(PGChildNodeView): return False, '' def _fetch_db_details(self, data, did): + if did is not None: # Fetch the name of database for comparison + last_system_oid = self.retrieve_last_system_oid() status, rset = self.conn.execute_dict( render_template( "/".join([self.template_path, self._NODES_SQL]), - did=did, conn=self.conn, last_system_oid=0, + did=did, conn=self.conn, last_system_oid=last_system_oid, show_system_objects=self.blueprint.show_system_objects, ) ) @@ -806,12 +816,14 @@ class DatabaseView(PGChildNodeView): # used for offline updates self.manager.release(conn_id="db_offline_update") + last_system_oid = self.retrieve_last_system_oid() + # Fetch the new data again after update for proper node # generation status, rset = self.conn.execute_dict( render_template( "/".join([self.template_path, self._NODES_SQL]), - did=did, conn=self.conn, last_system_oid=0, + did=did, conn=self.conn, last_system_oid=last_system_oid, show_system_objects=self.blueprint.show_system_objects, ) ) @@ -850,7 +862,9 @@ class DatabaseView(PGChildNodeView): canCreate=res['cancreate'], canDisconn=can_dis_conn, canDrop=can_drop, - inode=True if res['datallowconn'] else False + inode=True if res['datallowconn'] else False, + isTemplate=res['is_template'] + ) ) @@ -974,10 +988,12 @@ class DatabaseView(PGChildNodeView): if did is not None: # Fetch the name of database for comparison conn = self.manager.connection() + last_system_oid = self.retrieve_last_system_oid() + status, rset = conn.execute_dict( render_template( "/".join([self.template_path, self._NODES_SQL]), - did=did, conn=conn, last_system_oid=0, + did=did, conn=conn, last_system_oid=last_system_oid, show_system_objects=self.blueprint.show_system_objects, ) ) @@ -1146,9 +1162,11 @@ class DatabaseView(PGChildNodeView): """ conn = self.manager.connection() + last_system_oid = self.retrieve_last_system_oid() + SQL = render_template( "/".join([self.template_path, self._PROPERTIES_SQL]), - did=did, conn=conn, last_system_oid=0, + did=did, conn=conn, last_system_oid=last_system_oid, show_system_objects=False, ) status, res = conn.execute_dict(SQL) diff --git a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js index 871b9db92..bb3893765 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/static/js/database.ui.js @@ -52,7 +52,7 @@ export default class DatabaseSchema extends BaseUISchema { super({ name: undefined, owner: undefined, - is_sys_obj: undefined, + is_sys_obj: false, comment: undefined, encoding: 'UTF8', template: undefined, @@ -141,8 +141,8 @@ export default class DatabaseSchema extends BaseUISchema { min: -1, },{ id: 'is_template', label: gettext('Template?'), - editable: false, type: 'switch', group: gettext('Definition'), - readonly: true, mode: ['properties', 'edit'], + type: 'switch', group: gettext('Definition'), + mode: ['properties', 'edit'], },{ id: 'datallowconn', label: gettext('Allow connections?'), editable: false, type: 'switch', group: gettext('Definition'), diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql index 7e6bb1adf..d97063421 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.1_plus/properties.sql @@ -40,6 +40,4 @@ AND db.datname in ({{db_restrictions}}) {% endif %} -AND db.datistemplate in (false, {{show_system_objects}}) - ORDER BY datname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql index dc6e4ef39..a6f996b8f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.2_plus/properties.sql @@ -47,6 +47,5 @@ AND db.datname in ({{db_restrictions}}) {% endif %} -AND db.datistemplate in (false, {{show_system_objects}}) ORDER BY datname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql index 40ec137ba..65766d546 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/9.3_plus/alter_online.sql @@ -155,3 +155,8 @@ {% endif %} {% endif %} + +{# Change the connection limit #} +{% if data.is_template is defined %} +ALTER DATABASE {{ conn|qtIdent(data.name) }} WITH IS_TEMPLATE = {{ data.is_template }}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql index 9296ee6cb..60cf869b5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/alter_online.sql @@ -136,3 +136,8 @@ {% endif %} {% endif %} {% endif %} + +{# Change the connection limit #} +{% data.is_template is defined %} +ALTER DATABASE {{ conn|qtIdent(data.name) }} WITH IS_TEMPLATE = {{ data.is_template }}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql index d6d33e0d4..64fac38a8 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/nodes.sql @@ -1,12 +1,13 @@ SELECT db.oid as did, db.datname as name, ta.spcname as spcname, db.datallowconn, - pg_catalog.has_database_privilege(db.oid, 'CREATE') as cancreate, datdba as owner + pg_catalog.has_database_privilege(db.oid, 'CREATE') as cancreate, datdba as owner, + db.datistemplate AS is_template, + (CASE WHEN db.oid <= {{ last_system_oid}}::oid THEN true ElSE false END) AS is_sys_obj FROM pg_catalog.pg_database db LEFT OUTER JOIN pg_catalog.pg_tablespace ta ON db.dattablespace = ta.oid -WHERE {% if did %} -db.oid = {{ did|qtLiteral }}::OID{% else %} -db.oid > {{ last_system_oid }}::OID + {% if did %} +WHERE db.oid = {{ did|qtLiteral }}::OID {% endif %} {% if db_restrictions %} @@ -14,10 +15,5 @@ AND db.datname in ({{db_restrictions}}) {% endif %} -{% if show_system_objects %} -AND db.datistemplate in (false, {{show_system_objects}}) -{% else %} -AND db.datistemplate in (false) -{% endif %} ORDER BY datname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql index ac692b0ef..a4eb88170 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/templates/databases/sql/default/properties.sql @@ -31,6 +31,5 @@ AND db.datname in ({{db_restrictions}}) {% endif %} -AND db.datistemplate in (false, {{show_system_objects}}) ORDER BY datname;