Hi, PFA patch for table node (version 8.1). apply this patch on version 7 patch. Not all issue are fixed in this patch. Murtuza will be sending version 8.2 witch will have resolution for remaining issues. Apply version 8.2 patch on version 8.1
-- *Harshal Dhumal* *Software Engineer * EenterpriseDB <http://www.enterprisedb.com> On Tue, May 17, 2016 at 10:12 PM, Sanket Mehta < sanket.me...@enterprisedb.com> wrote: > Hi Harshal, > > > Below are my review comments: > > I got below warning when I tried to apply the patch for table node as > mentioned below: > > Table creation: > > - Trailing white spaces warnings > > $ git apply > /projects/patches/pgadmin4/Table/table_14_May_V6.patch > > /projects/patches/pgadmin4/Table/table_14_May_V6.patch:6008: trailing > whitespace. > return false; > > /projects/patches/pgadmin4/Table/table_14_May_V6.patch:6016: trailing > whitespace. > return false; > warning: 2 lines add whitespace errors. > Fixed (These were introduced due to rules node.) > > - In Table creation dialog, while adding a new primary key, it does > not allow to change the tablespace to empty. (which is not the case in case > of tablespace in table) > > Fixed > > - In Table creation dialog, while adding a new column, data type and > name field must be mandatory. otherwise while clicking on save it gives > below error > > File > "/projects/pgadmin4/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/__init__.py", > line 1319, in _parse_format_columns > c['cltype'] = self._cltype_formatter(c['cltype']) > KeyError: 'cltype > Fixed > > - In Table creation dialog, While adding a new column, in primary > check box is needed to click twice in order to check it. Ideally it should > be checked by only one click. > > This is Backgrid behaviour. > > - In Table creation dialog, While adding a new column, primary key > should not be allowed to added unless user has provided name and data type > for at least one column. > > Fixed > > - currently if user has clicked on add column button and immediately > click on add primary key button, it will add a row in primary key data grid > > Fixed > > - When delete table/drop cascade is apply on any table, i got a > javascript error as mentioned below > > node.js:94 Uncaught TypeError: self.canDrop.apply is not > a function > Already fixed in other commit. > > - Once the above error generated, every time user tries to open a > context menu by right clicking on any existing table, that same error comes > > Already fixed in other commit. > > - In table creation dialog, if table is inherited from another table, > if a new primary key is added manually there, the create sql will not have > an entry for primary key > > Fixed > > - In table creation dialog, if primary key check box is checked while > adding the row, a new row is added in primary key datagrid but unchecking > the primary key checkbox from column datagrid, does not removes that row > from primary key data grid. > > Fixed. > > - In AutoVacuum tab, if user provides any invalid value to any > parameter, then a error message should be prompted, only background color > change would not tell user to change the value. > > Expected behaviour. > > - In table creation dialog, security label are not being added. > javascript error is coming as mentioned below: > {"success": 0, "info": "", "result": null, "data": null, "errormsg": > "can't adapt type 'Undefined'"} > > Fixed > > - In Table creation dialog, while adding foreign key, in action tab. > if user click on 'x' button in "on update" or "on delete" select2 control, > it gives error "Uncaught SyntaxError: Unexpected end of input" > > Fixed > > - In Table creation dialog, while adding a check constraint, > "validated" button does not work properly > > Fixed. > > - After successfully creation of table, "table name cannot be empty" > error is not getting cleared. > > Not reproducible. > > - In Table creation dialog, if user has added an empty column without > entering its name or type and trying to add check constraint, it will add > an empty constraint > > Expected behaviour (Columns are not mandatory for check constrains) > > - In Table creation dialog, while adding an exclude constraint, for > "character varying" column type, no operators are being listed > > There are no operators for character varying data type. > > - In Table creation dialog, while adding an exclude constraint, below > mentioned error comes if user removes operator class by clicking 'x' on > that control Uncaught TypeError: Cannot read property 'id' of undefined > > TODO > > - In Table creation dialog, SQL is not getting generated for exclude > constraint > > Fixed > > - In Table creation dialog, schema should be prefixed with table name > in "of type" control > > Fixed > > - In Table creation dialog, while adding privileges, it always shows > default privileges even if user has selected different privileges. (This > works fine once user edit the privileges in edit table mode and shows only > those privileges which user selects). Ashesh, please confirm the behaviour. > > Privileges are set correctly. Only it shows in incorrect order. > Table edit mode: > > - If in edit mode, any constraint is already having any comment, then > remove it. It will not create the SQL for the same. > > Fixed > > - Changing Schema will give server error > > This is generic issue for each node. > Column Creation: > > - Save button is enabled by default > - Data type validation is not provided. Save button is enabled just > after providing column name > - Length field limitation is not provided. (i.e. for numeric type, > length should be allowed greater than 1000) > > Exclusion constraint creation: > > - Access method should not be allowed to be empty. (currently by > clicking 'x' will remove the selection in it) > > Access method is optional. > Index creation: > > - No error message for name field when empty > - No error message when column name is not provided while adding a > column in index > - While adding a column if no name is provided, "None" appears in SQL > tab which will give error on OK button click > - when comment is provided while creation, it gives error saying index > does not exists. because schema name is not added before it. > > Rule creation: > > - Name is empty error does not come till user enters something in > definition tab > - DO INSTEAD button does not make any difference to SQL (it works in > edit mode) > > Rule edit mode: > > - Add comment in edit mode, check the SQL in sql tab. Now come back to > general tab and removes comment and check the sql tab again. > SQL for comment is still there with empty string as comment > > Trigger Creation: > > - SQL is not proper when creating a trigger. "()" should be appended > to function name in SQL. > It gives error while creating a trigger > - "+" sign is visible in browser tree in front of trigger. either On > expanding trigger, it should show the trigger function name or that "+" > sign should not appear > > Trigger edit node: > > - On removing comment, nothing happens. No sql is being created. > Comment is still there in properties. > > > > Regards, > Sanket Mehta > Sr Software engineer > Enterprisedb >
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 %}
-- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers