From 6999249dcdc6274131e810155786c7a307d2589d Mon Sep 17 00:00:00 2001 From: Ashesh Vashi Date: Mon, 26 Sep 2016 10:15:23 +0100 Subject: [PATCH] Ensure the default schema is set when creating objects. Fixes #1735 --- .../servers/databases/schemas/__init__.py | 16 +++++++++++-- .../templates/collation/js/collation.js | 15 ++---------- .../domains/templates/domains/js/domains.js | 11 +++++++-- .../foreign_tables/js/foreign_tables.js | 12 +++++----- .../fts_configuration/js/fts_configuration.js | 3 ++- .../templates/fts_parser/js/fts_parser.js | 3 ++- .../fts_template/js/fts_templates.js | 3 ++- .../databases/schemas/packages/__init__.py | 5 ++-- .../packages/templates/package/js/package.js | 22 +++++++++++++++++ .../templates/sequence/js/sequence.js | 2 +- .../synonyms/templates/synonym/js/synonym.js | 7 +++--- .../tables/templates/table/js/table.js | 16 ++++++------- .../schemas/types/templates/type/js/type.js | 15 ++++++------ .../schemas/views/templates/mview/js/mview.js | 23 +++++++----------- .../schemas/views/templates/view/js/view.js | 24 ++++++++----------- 15 files changed, 100 insertions(+), 77 deletions(-) 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 fd779c168..61db48039 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/__init__.py @@ -408,14 +408,26 @@ class SchemaView(PGChildNodeView): if not status: return internal_server_error(errormsg=rset) + icon = 'icon-{0}'.format(self.node_type) + if scid is not None: if len(rset['rows']) == 0: return gone(gettext(""" Could not find the schema in the database. It may have been removed by another user. """)) - - icon = 'icon-{0}'.format(self.node_type) + row = rset['rows'][0] + return make_json_response( + data=self.blueprint.generate_browser_node( + row['oid'], + did, + row['name'], + icon=icon, + can_create=row['can_create'], + has_usage=row['has_usage'] + ), + status=200 + ) for row in rset['rows']: res.append( diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collation/js/collation.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collation/js/collation.js index 05dad554a..e4e3176d8 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collation/js/collation.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/collations/templates/collation/js/collation.js @@ -100,19 +100,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { return false; } return true; - }, - control: Backform.NodeListByNameControl.extend({ - render: function(){ - // Initialize parent's render method - Backform.NodeListByNameControl.prototype.render.apply(this, arguments); - - // Set schema default value to its parent Schema - if(this.model.isNew()){ - this.model.set({'schema': this.model.node_info.schema.label}); - } - return this; - } - }) + }, control: 'node-list-by-name', + cache_node: 'database', cached_level: 'database' },{ id: 'copy_collation', label:'{{ _('Copy collation') }}', cell: 'string', control: 'node-ajax-options', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/js/domains.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/js/domains.js index ebf822ece..7d1e8fe3f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/js/domains.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/domains/templates/domains/js/domains.js @@ -19,8 +19,15 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { var ConstraintModel = pgBrowser.Node.Model.extend({ idAttribute: 'conoid', initialize: function(attrs, args) { - var isNew = (_.size(attrs) === 0); - if (!isNew) { + if (_.size(attrs) === 0) { + var userInfo = pgBrowser.serverInfo[ + args.node_info.server._id + ].user, + schemaInfo = args.node_info.schema; + this.set({ + 'owner': userInfo.name, 'schema': schemaInfo._label + }, {silent: true}); + } else { this.convalidated_default = this.get('convalidated') } pgBrowser.Node.Model.prototype.initialize.apply(this, arguments); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js index 7b75de1db..f0c703637 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/foreign_tables/templates/foreign_tables/js/foreign_tables.js @@ -491,13 +491,13 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { initialize: function(attrs, args) { var isNew = (_.size(attrs) === 0); if (isNew) { - // Set Selected Schema - schema = args.node_info.schema._label - this.set({'basensp': schema}, {silent: true}); + var schema = args.node_info.schema._label, + userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; - // Set Current User - var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; - this.set({'owner': userInfo.name}, {silent: true}); + // Set Selected Schema and Current User + this.set({ + 'basensp': schema, 'owner': userInfo.name + }, {silent: true}); } pgBrowser.Node.Model.prototype.initialize.apply(this, arguments); }, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configuration/js/fts_configuration.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configuration/js/fts_configuration.js index 96f823e60..b04ad1038 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configuration/js/fts_configuration.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_configurations/templates/fts_configuration/js/fts_configuration.js @@ -490,7 +490,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { },{ id: 'schema', label: '{{ _('Schema')}}', cell: 'string', type: 'text', mode: ['create','edit'], node: 'schema', - control: 'node-list-by-id' + control: 'node-list-by-id', cache_node: 'database', + cache_level: 'database' },{ id: 'description', label:'{{ _('Comment') }}', cell: 'string', type: 'multiline', cellHeaderClasses: 'width_percent_50' diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/templates/fts_parser/js/fts_parser.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/templates/fts_parser/js/fts_parser.js index 949be8269..6a12bf709 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/templates/fts_parser/js/fts_parser.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_parser/templates/fts_parser/js/fts_parser.js @@ -89,7 +89,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { },{ id: 'schema', label: '{{ _('Schema')}}', cell: 'string', type: 'text', mode: ['create','edit'], node: 'schema', - control: 'node-list-by-id' + control: 'node-list-by-id', cache_node: 'database', + cache_level: 'database' },{ id: 'description', label:'{{ _('Comment') }}', cell: 'string', type: 'multiline', cellHeaderClasses: 'width_percent_50' diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js index 41adf270b..fba56b694 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/fts_templates/templates/fts_template/js/fts_templates.js @@ -83,7 +83,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { },{ id: 'schema', label: '{{ _('Schema')}}', cell: 'string', type: 'text', mode: ['create','edit'], node: 'schema', - control: 'node-list-by-id' + control: 'node-list-by-id', cache_node: 'database', + cache_level: 'database' },{ id: 'description', label:'{{ _('Comment') }}', cell: 'string', type: 'multiline', cellHeaderClasses: 'width_percent_50' diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py index dfbae1e98..bfb2fe78b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/__init__.py @@ -409,7 +409,7 @@ class PackageView(PGChildNodeView): return make_json_response( success=1, - info=_("Package dropped"), + info=_("Packge dropped"), data={ 'id': pkgid, 'scid': scid, @@ -517,9 +517,8 @@ class PackageView(PGChildNodeView): u'name' ] - data['schema'] = self.schema - if pkgid is not None: + data['schema'] = self.schema SQL = render_template("/".join([self.template_path, 'properties.sql']), scid=scid, pkgid=pkgid) status, res = self.conn.execute_dict(SQL) if not status: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/js/package.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/js/package.js index eeca34971..618326857 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/js/package.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/packages/templates/package/js/package.js @@ -85,6 +85,17 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { acl: undefined, pkgacl: [] }, + initialize: function(attrs, args) { + if (_.size(attrs) === 0) { + var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; + var schemaInfo = args.node_info.schema; + + this.set({ + 'owner': userInfo.name, 'schema': schemaInfo._label + }, {silent: true}); + } + pgAdmin.Browser.Node.Model.prototype.initialize.apply(this, arguments); + }, // Define the schema for package node. schema: [{ id: 'name', label: '{{ _('Name') }}', cell: 'string', @@ -101,6 +112,17 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { disabled: true, editable: false, visible: function(m) { return !m.isNew(); } + },{ + id: 'schema', label:'{{_('Schema')}}', type: 'text', node: 'schema', + control: 'node-list-by-name', + disabled: function(m) { return !m.isNew(); }, filter: function(d) { + // If schema name start with pg_* then we need to exclude them + if(d && d.label.match(/^pg_/)) + { + return false; + } + return true; + }, cache_node: 'database', cache_level: 'database' },{ id: 'is_sys_object', label: '{{ _('System package?') }}', cell:'boolean', type: 'switch',mode: ['properties'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js index c2f6fd1e3..de338f2a8 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/sequences/templates/sequence/js/sequence.js @@ -140,7 +140,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { return false; } return true; - } + }, cache_node: 'database', cache_level: 'database' },{ id: 'comment', label:'{{ _('Comment') }}', type: 'multiline', mode: ['properties', 'create', 'edit'] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonym/js/synonym.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonym/js/synonym.js index fadc95afe..a3ab4ad09 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonym/js/synonym.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/synonyms/templates/synonym/js/synonym.js @@ -83,12 +83,13 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { id: 'owner', label:'{{ _('Owner') }}', cell: 'string', type: 'text', mode: ['properties', 'create', 'edit'], disabled: true , control: 'node-list-by-name', - node: 'role' + node: 'role', visible: false },{ id: 'schema', label:'{{ _('Schema') }}', cell: 'string', type: 'text', mode: ['properties', 'create', 'edit'], - disabled: true , control: 'node-list-by-name', - node: 'schema' + disabled: function(m) { return !m.isNew(); }, node: 'schema', + control: 'node-list-by-name', cache_node: 'database', + cache_level: 'database' },{ id: 'targettype', label:'{{ _('Target type') }}', cell: 'string', disabled: 'inSchema', group: '{{ _('Definition') }}', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js index 44b4521ff..2d0060901 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/js/table.js @@ -276,15 +276,15 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { }, // Default values! initialize: function(attrs, args) { - var self = this, - isNew = (_.size(attrs) === 0); + var self = this; - if (isNew) { - var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; - var schemaInfo = args.node_info.schema; + if (_.size(attrs) === 0) { + var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user, + schemaInfo = args.node_info.schema; - this.set({'relowner': userInfo.name}, {silent: true}); - this.set({'schema': schemaInfo._label}, {silent: true}); + this.set({ + 'relowner': userInfo.name, 'schema': schemaInfo._label + }, {silent: true}); } pgBrowser.Node.Model.prototype.initialize.apply(this, arguments); @@ -308,7 +308,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { return false; } return true; - } + }, cache_node: 'database', cache_level: 'database' },{ id: 'spcname', label:'{{ _('Tablespace') }}', node: 'tablespace', type: 'text', control: 'node-list-by-name', disabled: 'inSchema', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/js/type.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/js/type.js index 08f1a3a48..965826ed2 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/js/type.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/templates/type/js/type.js @@ -304,14 +304,13 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) { // Default values! initialize: function(attrs, args) { - var isNew = (_.size(attrs) === 0); + if (_.size(attrs) === 0) { + var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user, + schemaInfo = args.node_info.schema; - if (isNew) { - var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; - var schemaInfo = args.node_info.schema; - - this.set({'typeowner': userInfo.name}, {silent: true}); - this.set({'schema': schemaInfo._label}, {silent: true}); + this.set({ + 'typeowner': userInfo.name, 'schema': schemaInfo._label + }, {silent: true}); } pgBrowser.Node.Model.prototype.initialize.apply(this, arguments); }, @@ -338,7 +337,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify, Backgrid) { return false; } return true; - }, + }, cache_node: 'database', cache_level: 'database', control: 'node-list-by-name', select2: {allowClear: false} },{ id: 'typtype', label:'{{ _('Type') }}', diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js index 50e49884c..190c661e5 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mview/js/mview.js @@ -115,19 +115,13 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) { */ model: pgBrowser.Node.Model.extend({ initialize: function(attrs, args) { - var isNew = (_.size(attrs) === 0); - if (isNew) { - // Set Selected Schema - var schemaLabel = args.node_info.schema._label; - if (schemaLabel == '') { - this.set({'schema': 'public'}, {silent: true}); - } else { - this.set({'schema': schemaLabel}, {silent: true}); - } - - // Set Current User - var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; - this.set({'owner': userInfo.name}, {silent: true}); + if (_.size(attrs) === 0) { + // Set Selected Schema and Current User + var schemaLabel = args.node_info.schema._label || 'public', + userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; + this.set({ + 'schema': 'public', 'owner': userInfo.name + }, {silent: true}); } pgBrowser.Node.Model.prototype.initialize.apply(this, arguments); }, @@ -149,7 +143,8 @@ function($, _, S, pgAdmin, alertify, pgBrowser, CodeMirror) { },{ id: 'schema', label:'{{ _("Schema") }}', cell: 'string', first_empty: false, control: 'node-list-by-name', type: 'text', cache_level: 'database', - node: 'schema', mode: ['create', 'edit'], disabled: 'inSchema', select2: { allowClear: false } + node: 'schema', mode: ['create', 'edit'], cache_node: 'database', + disabled: 'inSchema', select2: { allowClear: false } },{ id: 'system_view', label:'{{ _("System view?") }}', cell: 'string', type: 'switch', disabled: true, mode: ['properties'], diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/view/js/view.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/view/js/view.js index 7f87044fd..651529a32 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/view/js/view.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/view/js/view.js @@ -89,19 +89,13 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) { */ model: pgBrowser.Node.Model.extend({ initialize: function(attrs, args) { - var isNew = (_.size(attrs) === 0); - if (isNew) { - // Set Selected Schema - var schemaLabel = args.node_info.schema._label; - if (schemaLabel == '') { - this.set({'schema': 'public'}, {silent: true}); - } else { - this.set({'schema': schemaLabel}, {silent: true}); - } - - // Set Current User - var userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; - this.set({'owner': userInfo.name}, {silent: true}); + if (_.size(attrs) === 0) { + // Set Selected Schema and, Current User + var schemaLabel = args.node_info.schema._label || 'public', + userInfo = pgBrowser.serverInfo[args.node_info.server._id].user; + this.set({ + 'schema': schemaLabel, 'owner': userInfo.name + }, {silent: true}); } pgBrowser.Node.Model.prototype.initialize.apply(this, arguments); }, @@ -117,7 +111,9 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) { },{ id: 'schema', label:'{{ _("Schema") }}', cell: 'string', first_empty: false, control: 'node-list-by-name', type: 'text', cache_level: 'database', - node: 'schema', disabled: 'notInSchema', mode: ['create', 'edit'], select2: { allowClear: false } + node: 'schema', disabled: 'notInSchema', mode: ['create', 'edit'], + select2: { allowClear: false }, cache_node: 'database', + cache_level: 'database' },{ id: 'system_view', label:'{{ _("System view?") }}', cell: 'string', type: 'switch', disabled: true, mode: ['properties']