diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py index c561159..9fcafe8 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py @@ -581,7 +581,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings): seclabels = [] for seclbls in column['seclabels']: k, v = seclbls.split('=') - seclabels.append({'provider': k, 'security_label': v}) + seclabels.append({'provider': k, 'label': v}) column['seclabels'] = seclabels @@ -945,7 +945,7 @@ class TableView(PGChildNodeView, DataTypeReader, VacuumSettings): seclabels = [] for seclbls in data['seclabels']: k, v = seclbls.split('=') - seclabels.append({'provider': k, 'security_label': v}) + seclabels.append({'provider': k, 'label': v}) data['seclabels'] = seclabels diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/templates/check_constraint/js/check_constraint.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/templates/check_constraint/js/check_constraint.js index 6dbaac6..afc5ba9 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/templates/check_constraint/js/check_constraint.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/templates/check_constraint/js/check_constraint.js @@ -136,7 +136,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) { !_.isUndefined(m.get('oid'))) || (_.isFunction(m.isNew) && !m.isNew())); } },{ - id: 'convalidated', label: "{{ _("Validated?") }}", type: 'switch', cell: + id: 'convalidated', label: "{{ _("Don't validate") }}", type: 'switch', cell: 'boolean', group: '{{ _('Definition') }}', min_version: 90200, disabled: function(m) { if ((_.isFunction(m.isNew) && !m.isNew()) || diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js index d6b6acf..26335df 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/exclusion_constraint/templates/exclusion_constraint/js/exclusion_constraint.js @@ -156,6 +156,8 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) { m = self.model, col_type = self.model.get('col_type'); + self.column.set('options', []); + if (url && !_.isUndefined(col_type) && !_.isNull(col_type) && col_type != '') { var node = this.column.get('schema_node'), eventHandler = m.top || m, @@ -194,25 +196,11 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) { } else { self.column.set('options', data); } - } else { - self.column.set('options', []); } } }) } - ], - validate: function() { - var err = {}, - errmsg = null, - data = this.toJSON(); - - if (_.isUndefined(data.operator) || - _.isNull(data.operator) || - String(data.operator).replace(/^\s+|\s+$/g, '') == '') { - return '{{ _('Please specify value for operator.')}}'; - } - return null; - } + ] }); var ExclusionConstraintColumnControl = Backform.ExclusionConstraintColumnControl = diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js index a47f3ad..06d6b53 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/foreign_key/templates/foreign_key/js/foreign_key.js @@ -879,7 +879,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) { },{ id: 'confupdtype', label:'{{ _('On update') }}', type:"select2", group: '{{ _('Action') }}', mode: ['edit','create'], - select2:{width:"50%"}, + select2:{width:"50%", allowClear: false}, options: [ {label: "NO ACTION", value: "a"}, {label: "RESTRICT", value: "r"}, @@ -899,7 +899,7 @@ function($, _, S, pgAdmin, pgBrowser, Alertify) { },{ id: 'confdeltype', label:'{{ _('On delete') }}', type:"select2", group: '{{ _('Action') }}', mode: ['edit','create'], - select2:{width:"50%"}, + select2:{width:"50%", allowClear: false}, options: [ {label: "NO ACTION", value: "a"}, {label: "RESTRICT", value: "r"}, diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js index d6317ba..c5afe3a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/index_constraint/templates/index_constraint/js/index_constraint.js @@ -149,9 +149,13 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { return Backgrid.StringCell.prototype.render.apply(this, arguments); }, remove: function() { - var tableCols = this.model.top.get('columns'); + var tableCols = this.model.top.get('columns'), + primary_key_col = this.model.get('columns'); + + if (primary_key_col) { + primary_key_col.off('pgadmin:multicolumn:updated'); + } - this.model.get('columns').off('pgadmin:multicolumn:updated'); {% if node_type == 'primary_key' %} this.stopListening(tableCols, 'remove' , self.resetColOptions); this.stopListening(tableCols, 'change:name' , self.resetColOptions); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/js/rules.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/js/rules.js index 715447f..29022a6 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/js/rules.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/rules/templates/rules/js/rules.js @@ -46,7 +46,7 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) { canDrop: function(itemData, item, data){ pgBrowser.Nodes['schema'].canChildDrop.apply(this, [itemData, item, data]); if(itemData.label === '_RETURN') - return false; + return false; else { return true; } @@ -54,7 +54,7 @@ function($, _, S, pgAdmin, pgBrowser, CodeMirror) { canDropCascade: function(itemData, item, data){ pgBrowser.Nodes['schema'].canChildDrop.apply(this, [itemData, item, data]); if(itemData.label === '_RETURN') - return false; + return false; else { return true; } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/update.sql index 608cbf9..57d81c7 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.1_plus/update.sql @@ -1,4 +1,4 @@ -{% if data.comment and data.comment != o_data.comment %} +{% if data.comment is defined and data.comment != o_data.comment %} COMMENT ON CONSTRAINT {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} IS {{ data.comment|qtLiteral }}; {% endif %} \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/update.sql index 000047d..6c27923 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/check_constraint/sql/9.2_plus/update.sql @@ -6,7 +6,7 @@ ALTER TABLE {{ conn|qtIdent(o_data.nspname, o_data.relname) }} ALTER TABLE {{ conn|qtIdent(o_data.nspname, o_data.relname) }} VALIDATE CONSTRAINT {{ conn|qtIdent(data.name) }};{% endif -%} -{% if data.comment and data.comment != o_data.comment %} +{% if data.comment is defined and data.comment != o_data.comment %} COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} IS {{ data.comment|qtLiteral }};{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/create.sql index 2b0d78f..51eea52 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/create.sql @@ -21,7 +21,7 @@ COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, data.name)}} {### Add variables to column ###} {% if data.attoptions %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.SET(conn, 'COLUMN', data.name, data.attoptions) }} + {{ VARIABLE.SET(conn, 'COLUMN', data.name, data.attoptions) }} {% endif %} {### ACL ###} @@ -33,6 +33,6 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} {### Security Lables ###} {% if data.seclabels %} {% for r in data.seclabels %} -{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.security_label) }} +{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.label) }} {% endfor %} {% endif %} \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/update.sql index 4c902c5..a36c6fc 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.1_plus/update.sql @@ -52,15 +52,15 @@ COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, data.name)}} {% set variables = data.attoptions %} {% if 'deleted' in variables and variables.deleted|length > 0 %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.UNSET(conn, 'COLUMN', data.name, variables.deleted) }} + {{ VARIABLE.UNSET(conn, 'COLUMN', data.name, variables.deleted) }} {% endif %} {% if 'added' in variables and variables.added|length > 0 %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.added) }} + {{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.added) }} {% endif %} {% if 'changed' in variables and variables.changed|length > 0 %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.changed) }} + {{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.changed) }} {% endif %} {% endif %} @@ -95,12 +95,12 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} {% endif %} {% if 'added' in seclabels and seclabels.added|length > 0 %} {% for r in seclabels.added %} -{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.security_label) }} +{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.label) }} {% endfor %} {% endif %} {% if 'changed' in seclabels and seclabels.changed|length > 0 %} {% for r in seclabels.changed %} -{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.security_label) }} +{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.label) }} {% endfor %} {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/create.sql index 2b0d78f..51eea52 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/create.sql @@ -21,7 +21,7 @@ COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, data.name)}} {### Add variables to column ###} {% if data.attoptions %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.SET(conn, 'COLUMN', data.name, data.attoptions) }} + {{ VARIABLE.SET(conn, 'COLUMN', data.name, data.attoptions) }} {% endif %} {### ACL ###} @@ -33,6 +33,6 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} {### Security Lables ###} {% if data.seclabels %} {% for r in data.seclabels %} -{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.security_label) }} +{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.label) }} {% endfor %} {% endif %} \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/update.sql index 83f21d4..bcfb90c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/column/sql/9.2_plus/update.sql @@ -52,15 +52,15 @@ COMMENT ON COLUMN {{conn|qtIdent(data.schema, data.table, data.name)}} {% set variables = data.attoptions %} {% if 'deleted' in variables and variables.deleted|length > 0 %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.UNSET(conn, 'COLUMN', data.name, variables.deleted) }} + {{ VARIABLE.UNSET(conn, 'COLUMN', data.name, variables.deleted) }} {% endif %} {% if 'added' in variables and variables.added|length > 0 %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.added) }} + {{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.added) }} {% endif %} {% if 'changed' in variables and variables.changed|length > 0 %} ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} -{{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.changed) }} + {{ VARIABLE.SET(conn, 'COLUMN', data.name, variables.changed) }} {% endif %} {% endif %} {### Update column privileges ###} @@ -94,12 +94,12 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} {% endif %} {% if 'added' in seclabels and seclabels.added|length > 0 %} {% for r in seclabels.added %} -{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.security_label) }} +{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.label) }} {% endfor %} {% endif %} {% if 'changed' in seclabels and seclabels.changed|length > 0 %} {% for r in seclabels.changed %} -{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.security_label) }} +{{ SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.table, data.name, r.provider, r.label) }} {% endfor %} {% endif %} {% endif %} \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/update.sql index d062e8b..4d70f21 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.1_plus/update.sql @@ -15,7 +15,7 @@ ALTER INDEX {{ conn|qtIdent(data.schema, data.name) }} SET (FILLFACTOR={{ data.fillfactor }}); {% endif %} {# ==== To update exclusion constraint comments ==== #} -{% if data.comment and data.comment != o_data.comment %} +{% if data.comment is defined and data.comment != o_data.comment %} COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} IS {{ data.comment|qtLiteral }}; {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/update.sql index d062e8b..4d70f21 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/exclusion_constraint/sql/9.2_plus/update.sql @@ -15,7 +15,7 @@ ALTER INDEX {{ conn|qtIdent(data.schema, data.name) }} SET (FILLFACTOR={{ data.fillfactor }}); {% endif %} {# ==== To update exclusion constraint comments ==== #} -{% if data.comment and data.comment != o_data.comment %} +{% if data.comment is defined and data.comment != o_data.comment %} COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} IS {{ data.comment|qtLiteral }}; {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/update.sql index a72f7e5..ee8f8a9 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/foreign_key/sql/update.sql @@ -11,7 +11,7 @@ ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }} VALIDATE CONSTRAINT {{ conn|qtIdent(data.name) }}; {% endif %} {# ==== To update foreign key comments ==== #} -{% if data.comment and data.comment != o_data.comment %} +{% if data.comment is defined and data.comment != o_data.comment %} COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} IS {{ data.comment|qtLiteral }}; {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/update.sql index af76d8e..6618532 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/index_constraint/sql/update.sql @@ -15,7 +15,7 @@ ALTER INDEX {{ conn|qtIdent(data.schema, data.name) }} SET (FILLFACTOR={{ data.fillfactor }}); {% endif %} {# ==== To update constraint comments ==== #} -{% if data.comment and data.comment != o_data.comment %} +{% if data.comment is defined and data.comment != o_data.comment %} COMMENT ON CONSTRAINT {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} IS {{ data.comment|qtLiteral }}; {% endif %} 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 0258ca7..c1d8c4f 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 @@ -308,7 +308,8 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { },{ id: 'spcname', label:'{{ _('Tablespace') }}', cell: 'string', control: 'node-list-by-name', type: 'text', mode: ['properties', 'create', 'edit'], node: 'tablespace', - disabled: 'inSchema', filter: function(d) { + disabled: 'inSchema', select2:{allowClear:false}, + filter: function(d) { // If tablespace name is not "pg_global" then we need to exclude them if(d && d.label.match(/pg_global/)) { @@ -558,6 +559,20 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { removedCols = primary_key_column_coll.where({column:column_name}); if (removedCols.length > 0) { primary_key_column_coll.remove(removedCols); + _.each(removedCols, function(m) { + m.destroy(); + }) + if (primary_key_column_coll.length == 0) { + setTimeout(function () { + // There will be only on primary key so remove the first one. + primary_key_coll.remove(primary_key_coll.first()); + /* Ideally above line of code should be "primary_key_coll.reset()". + * But our custom DataCollection (extended from Backbone collection in datamodel.js) + * does not respond to reset event, it only supports add, remove, change events. + * And hence no custom event listeners/validators get called for reset event. + */ + }, 10); + } } primary_key_column_coll.trigger('pgadmin:multicolumn:updated', primary_key_column_coll); } @@ -593,10 +608,12 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { columns : ['name', 'columns'], canAdd: true, canAddRow: function(m) { - // Use can only add one primary key + // User can only add one primary key + var columns = m.get('columns'); + return (m.get('primary_key') && m.get('primary_key').length < 1 && - m.get('columns').length > 0); + _.some(columns.pluck('name'))); } },{ id: 'foreign_key', label: '{{ _('Foreign Key') }}', @@ -609,8 +626,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { canAdd: true, columns : ['name', 'columns'], canAddRow: function(m) { - // Use can only add if there are columns present - return m.get('columns').length > 0; + // User can only add if there is at least one column with name. + var columns = m.get('columns'); + return _.some(columns.pluck('name')); } },{ id: 'check_constraint', label: '{{ _('Check Constraint') }}', @@ -621,11 +639,7 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { canEdit: true, canDelete: true, control: 'unique-col-collection', canAdd: true, - columns : ['name', 'consrc'], - canAddRow: function(m) { - // Use can only add if there are columns present - return m.get('columns').length > 0; - } + columns : ['name', 'consrc'] },{ id: 'unique_constraint', label: '{{ _('Unique Constraint') }}', model: pgBrowser.Nodes['unique_constraint'].model, @@ -637,8 +651,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { columns : ['name', 'columns'], canAdd: true, canAddRow: function(m) { - // Use can only add if there are columns present - return m.get('columns').length > 0; + // User can only add if there is at least one column with name. + var columns = m.get('columns'); + return _.some(columns.pluck('name')); } },{ id: 'exclude_constraint', label: '{{ _('Exclude Constraint') }}', @@ -651,8 +666,9 @@ function($, _, S, pgAdmin, pgBrowser, alertify) { columns : ['name', 'columns', 'constraint'], canAdd: true, canAddRow: function(m) { - // Use can only add if there are columns present - return m.get('columns').length > 0; + // User can only add if there is at least one column with name. + var columns = m.get('columns'); + return _.some(columns.pluck('name')); } }] }] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql index 5075404..f45daa4 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/create.sql @@ -17,7 +17,7 @@ {% endif %} CREATE {% if data.relpersistence %}UNLOGGED {% endif %}TABLE {{conn|qtIdent(data.schema, data.name)}}{{empty_bracket}} {% if data.typname %} - OF {{ conn|qtIdent(data.typname) }} + OF {{ data.typname }} {% endif %} {% if data.like_relation or data.coll_inherits or data.columns|length > 0 %} ( @@ -45,16 +45,17 @@ CREATE {% if data.relpersistence %}UNLOGGED {% endif %}TABLE {{conn|qtIdent(data {% endif %} {{conn|qtIdent(c.name)}} {{c.cltype}}{% if c.attlen %} ({{c.attlen}}{% if c.attprecision%}, {{c.attprecision}}{% endif %}){% endif %}{% if c.hasSqrBracket %} -[]{% endif %}{% if c.collspcname %} COLLATE {{c.collspcname}}{% endif %}{% if c.attnotnull %} NOT NULL{% endif %}{% if c.defval %} DEFAULT {{c.defval|qtLiteral}}{% endif %} +[]{% endif %}{% if c.collspcname %} COLLATE {{c.collspcname}}{% endif %}{% if c.attnotnull %} NOT NULL{% endif %}{% if c.defval %} DEFAULT {{c.defval}}{% endif %} {% endif %} {% endfor %} -{# Macro to render for constraints #} -{% if data.primary_key|length > 0 %} -{{CONSTRAINTS.PRIMARY_KEY(conn, data.primary_key[0])}}{% endif %}{% if data.unique_constraint|length > 0 %} -{{CONSTRAINTS.UNIQUE(conn, data.unique_constraint)}}{% endif %}{% if data.foreign_key|length > 0 %} -{{CONSTRAINTS.FOREIGN_KEY(conn, data.foreign_key)}}{% endif %}{% if data.check_constraint|length > 0 %} -{{CONSTRAINTS.CHECK(conn, data.check_constraint)}}{% endif %} {% endif %} +{# Macro to render for constraints #} +{% if data.primary_key|length > 0 %}{% if data.columns|length > 0 %},{% endif %} +{{CONSTRAINTS.PRIMARY_KEY(conn, data.primary_key[0])}}{% endif %}{% if data.unique_constraint|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 %},{% endif %} +{{CONSTRAINTS.UNIQUE(conn, data.unique_constraint)}}{% endif %}{% if data.foreign_key|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 or data.unique_constraint|length > 0 %},{% endif %} +{{CONSTRAINTS.FOREIGN_KEY(conn, data.foreign_key)}}{% endif %}{% if data.check_constraint|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 or data.unique_constraint|length > 0 or data.foreign_key|length > 0 %},{% endif %} +{{CONSTRAINTS.CHECK(conn, data.check_constraint)}}{% endif %}{% if data.exclude_constraint|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 or data.unique_constraint|length > 0 or data.foreign_key|length > 0 or data.check_constraint|length > 0 %},{% endif %} +{{CONSTRAINTS.EXCLUDE(conn, data.exclude_constraint)}}{% endif %} {% if data.like_relation or data.coll_inherits or data.columns|length > 0 %} ) @@ -93,7 +94,7 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.name)}} {% if data.seclabels and data.seclabels|length > 0 %} {% for r in data.seclabels %} -{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.security_label, data.schema) }} +{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.label, data.schema) }} {% endfor %} {% endif %} {### ACL on Table ###} @@ -138,7 +139,7 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.name)}} {% if c.seclabels and c.seclabels|length > 0 %} {% for r in c.seclabels %} -{{ COLUMN_SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.name, c.name, r.provider, r.security_label) }} +{{ COLUMN_SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.name, c.name, r.provider, r.label) }} {% endfor %} {% endif %} {% endfor %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_oftype.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_oftype.sql index bca7f77..aed42f2 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_oftype.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/get_oftype.sql @@ -1,4 +1,5 @@ -SELECT t.oid, t.typname +SELECT t.oid, + quote_ident(n.nspname)||'.'||quote_ident(t.typname) AS typname FROM pg_type t, pg_namespace n WHERE t.typtype='c' AND t.typnamespace=n.oid AND NOT (n.nspname like 'pg_%' OR n.nspname='information_schema') diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/update.sql index 270c6c9..a97ac30 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.1_plus/update.sql @@ -189,12 +189,12 @@ COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}} {% endif %} {% if 'added' in seclabels and seclabels.added|length > 0 %} {% for r in seclabels.added %} -{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.security_label, data.schema) }} +{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.label, data.schema) }} {% endfor %} {% endif %} {% if 'changed' in seclabels and seclabels.changed|length > 0 %} {% for r in seclabels.changed %} -{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.security_label, data.schema) }} +{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.label, data.schema) }} {% endfor %} {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/create.sql index 5075404..f45daa4 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/create.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/create.sql @@ -17,7 +17,7 @@ {% endif %} CREATE {% if data.relpersistence %}UNLOGGED {% endif %}TABLE {{conn|qtIdent(data.schema, data.name)}}{{empty_bracket}} {% if data.typname %} - OF {{ conn|qtIdent(data.typname) }} + OF {{ data.typname }} {% endif %} {% if data.like_relation or data.coll_inherits or data.columns|length > 0 %} ( @@ -45,16 +45,17 @@ CREATE {% if data.relpersistence %}UNLOGGED {% endif %}TABLE {{conn|qtIdent(data {% endif %} {{conn|qtIdent(c.name)}} {{c.cltype}}{% if c.attlen %} ({{c.attlen}}{% if c.attprecision%}, {{c.attprecision}}{% endif %}){% endif %}{% if c.hasSqrBracket %} -[]{% endif %}{% if c.collspcname %} COLLATE {{c.collspcname}}{% endif %}{% if c.attnotnull %} NOT NULL{% endif %}{% if c.defval %} DEFAULT {{c.defval|qtLiteral}}{% endif %} +[]{% endif %}{% if c.collspcname %} COLLATE {{c.collspcname}}{% endif %}{% if c.attnotnull %} NOT NULL{% endif %}{% if c.defval %} DEFAULT {{c.defval}}{% endif %} {% endif %} {% endfor %} -{# Macro to render for constraints #} -{% if data.primary_key|length > 0 %} -{{CONSTRAINTS.PRIMARY_KEY(conn, data.primary_key[0])}}{% endif %}{% if data.unique_constraint|length > 0 %} -{{CONSTRAINTS.UNIQUE(conn, data.unique_constraint)}}{% endif %}{% if data.foreign_key|length > 0 %} -{{CONSTRAINTS.FOREIGN_KEY(conn, data.foreign_key)}}{% endif %}{% if data.check_constraint|length > 0 %} -{{CONSTRAINTS.CHECK(conn, data.check_constraint)}}{% endif %} {% endif %} +{# Macro to render for constraints #} +{% if data.primary_key|length > 0 %}{% if data.columns|length > 0 %},{% endif %} +{{CONSTRAINTS.PRIMARY_KEY(conn, data.primary_key[0])}}{% endif %}{% if data.unique_constraint|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 %},{% endif %} +{{CONSTRAINTS.UNIQUE(conn, data.unique_constraint)}}{% endif %}{% if data.foreign_key|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 or data.unique_constraint|length > 0 %},{% endif %} +{{CONSTRAINTS.FOREIGN_KEY(conn, data.foreign_key)}}{% endif %}{% if data.check_constraint|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 or data.unique_constraint|length > 0 or data.foreign_key|length > 0 %},{% endif %} +{{CONSTRAINTS.CHECK(conn, data.check_constraint)}}{% endif %}{% if data.exclude_constraint|length > 0 %}{% if data.columns|length > 0 or data.primary_key|length > 0 or data.unique_constraint|length > 0 or data.foreign_key|length > 0 or data.check_constraint|length > 0 %},{% endif %} +{{CONSTRAINTS.EXCLUDE(conn, data.exclude_constraint)}}{% endif %} {% if data.like_relation or data.coll_inherits or data.columns|length > 0 %} ) @@ -93,7 +94,7 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.name)}} {% if data.seclabels and data.seclabels|length > 0 %} {% for r in data.seclabels %} -{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.security_label, data.schema) }} +{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.label, data.schema) }} {% endfor %} {% endif %} {### ACL on Table ###} @@ -138,7 +139,7 @@ ALTER TABLE {{conn|qtIdent(data.schema, data.name)}} {% if c.seclabels and c.seclabels|length > 0 %} {% for r in c.seclabels %} -{{ COLUMN_SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.name, c.name, r.provider, r.security_label) }} +{{ COLUMN_SECLABLE.APPLY(conn, 'COLUMN',data.schema, data.name, c.name, r.provider, r.label) }} {% endfor %} {% endif %} {% endfor %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_oftype.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_oftype.sql index bca7f77..aed42f2 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_oftype.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/get_oftype.sql @@ -1,4 +1,5 @@ -SELECT t.oid, t.typname +SELECT t.oid, + quote_ident(n.nspname)||'.'||quote_ident(t.typname) AS typname FROM pg_type t, pg_namespace n WHERE t.typtype='c' AND t.typnamespace=n.oid AND NOT (n.nspname like 'pg_%' OR n.nspname='information_schema') diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/update.sql index 270c6c9..a97ac30 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/9.5_plus/update.sql @@ -189,12 +189,12 @@ COMMENT ON TABLE {{conn|qtIdent(data.schema, data.name)}} {% endif %} {% if 'added' in seclabels and seclabels.added|length > 0 %} {% for r in seclabels.added %} -{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.security_label, data.schema) }} +{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.label, data.schema) }} {% endfor %} {% endif %} {% if 'changed' in seclabels and seclabels.changed|length > 0 %} {% for r in seclabels.changed %} -{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.security_label, data.schema) }} +{{ SECLABLE.SET(conn, 'TABLE', data.name, r.provider, r.label, data.schema) }} {% endfor %} {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/macros/constraints.macro b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/macros/constraints.macro index 2ac429c..fe7389a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/macros/constraints.macro +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/table/sql/macros/constraints.macro @@ -4,7 +4,8 @@ {# CREATE MODE ONLY #} {##########################} {% macro PRIMARY_KEY(conn, data) -%} -{% if data.columns|length > 0 %}, +{% if data.columns|length > 0 %} + {% if data.name %}CONSTRAINT {{conn|qtIdent(data.name)}} {% endif %}PRIMARY KEY ({% for c in data.columns%} {% if loop.index != 1 %}, {% endif %}{{conn|qtIdent(c.column)}}{% endfor %}){% if data.fillfactor %} @@ -19,7 +20,8 @@ {%- endmacro %} {% macro UNIQUE(conn, unique_data) -%} {% for data in unique_data %} -{% if data.columns|length > 0 %}, +{% if data.columns|length > 0 %}{% if loop.index !=1 %},{% endif %} + {% if data.name %}CONSTRAINT {{conn|qtIdent(data.name)}} {% endif %}UNIQUE ({% for c in data.columns%} {% if loop.index != 1 %}, {% endif %}{{conn|qtIdent(c.column)}}{% endfor %}){% if data.fillfactor %} @@ -34,14 +36,15 @@ {% endfor %} {%- endmacro %} {% macro CHECK(conn, check_data) -%} -{% for data in check_data %} -, +{% for data in check_data %}{% if loop.index !=1 %},{% endif %} + {% if data.name %}CONSTRAINT {{ conn|qtIdent(data.name) }} {% endif%}CHECK ({{ data.consrc }}){% if data.convalidated %} NOT VALID{% endif %}{% if data.connoinherit %} NO INHERIT{% endif %} {% endfor %} {%- endmacro %} {% macro FOREIGN_KEY(conn, foreign_key_data) -%} -{% for data in foreign_key_data %}, +{% for data in foreign_key_data %}{% if loop.index != 1 %},{% endif %} + {% if data.name %}CONSTRAINT {{conn|qtIdent(data.name)}} {% endif %}FOREIGN KEY ({% for columnobj in data.columns %}{% if loop.index != 1 %} , {% endif %}{{ conn|qtIdent(columnobj.local_column)}}{% endfor %}) REFERENCES {{ conn|qtIdent(data.remote_schema, data.remote_table) }} ({% for columnobj in data.columns %}{% if loop.index != 1 %} @@ -71,7 +74,8 @@ {% endfor %} {%- endmacro %} {% macro EXCLUDE(conn, exclude_data) -%} -{% for data in exclude_data %}, +{% for data in exclude_data %}{% if loop.index != 1 %},{% endif %} + {% if data.name %}CONSTRAINT {{ conn|qtIdent(data.name) }} {% endif%}EXCLUDE {% if data.amname and data.amname != '' %}USING {{data.amname}}{% endif %} ({% for col in data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(col.column)}} {% if col.oper_class and col.oper_class != '' %}{{col.oper_class}} {% endif%}{% if col.order %}ASC{% else %}DESC{% endif %} NULLS {% if col.nulls_order %}FIRST{% else %}LAST{% endif %} WITH {{col.operator}}{% endfor %}){% if data.fillfactor %}