Ensure the default schema is set when creating objects. Fixes #1735

pull/3/head
Ashesh Vashi 2016-09-26 10:15:23 +01:00 committed by Dave Page
parent b80cd43ae6
commit 6999249dcd
15 changed files with 100 additions and 77 deletions

View File

@ -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(

View File

@ -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',

View File

@ -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);

View File

@ -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);
},

View File

@ -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'

View File

@ -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'

View File

@ -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'

View File

@ -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:

View File

@ -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']

View File

@ -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']

View File

@ -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') }}',

View File

@ -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',

View File

@ -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') }}',

View File

@ -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'],

View File

@ -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']