From 08009f8edcef160e9c4ebb4a5e621ca714171cbc Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Tue, 21 Sep 2021 16:56:29 +0530 Subject: [PATCH] 1) Make default values column read-only for inherited columns when creating table. 2) Default values not populated for inherited columns. The existing issue, API changed. 3) Options are not populated for Name in Column > Variable tab. 4) The empty check error message is changed from Label cannot be empty to Label in Collection cannot be empty for collections. Fixes #6763 --- .../schemas/tables/columns/static/js/column.ui.js | 13 +++++++++++-- .../tables/sql/10_plus/get_columns_for_table.sql | 5 ++++- .../tables/sql/default/get_columns_for_table.sql | 3 +++ web/pgadmin/browser/static/js/browser.js | 2 +- web/pgadmin/static/js/SchemaView/index.jsx | 13 ++++++++++--- 5 files changed, 29 insertions(+), 7 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js index 5839a9499..031c79c3f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column.ui.js @@ -379,7 +379,13 @@ export default class ColumnSchema extends BaseUISchema { if (isDisabled && obj.isNew(state)) { return {defval: undefined}; } - } + }, editable: function(state) { + // inheritedfrom has value then we should disable it + if (!isEmptyString(state.inheritedfrom)) { + return false; + } + return true; + }, },{ id: 'attnotnull', label: gettext('Not NULL?'), cell: 'switch', type: 'switch', minWidth: 80, @@ -509,7 +515,10 @@ export default class ColumnSchema extends BaseUISchema { },{ id: 'attoptions', label: gettext('Variables'), type: 'collection', group: gettext('Variables'), - schema: new VariableSchema([], null, null, ['name', 'value']), + schema: new VariableSchema([ + {label: 'n_distinct', value: 'n_distinct', vartype: 'string'}, + {label: 'n_distinct_inherited', value: 'n_distinct_inherited', vartype: 'string'} + ], null, null, ['name', 'value']), uniqueCol : ['name'], mode: ['edit', 'create'], canAdd: true, canEdit: false, canDelete: true, }, { diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/10_plus/get_columns_for_table.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/10_plus/get_columns_for_table.sql index bd4bd8414..2bb034c13 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/10_plus/get_columns_for_table.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/10_plus/get_columns_for_table.sql @@ -1,5 +1,6 @@ SELECT - a.attname AS name, pg_catalog.format_type(a.atttypid, NULL) AS cltype, a.attidentity as clidentity, + a.attname AS name, pg_catalog.format_type(a.atttypid, NULL) AS cltype, + pg_catalog.pg_get_expr(def.adbin, def.adrelid) AS defval, a.attidentity as clidentity, pg_catalog.quote_ident(n.nspname)||'.'||pg_catalog.quote_ident(c.relname) as inheritedfrom, c.oid as inheritedid FROM @@ -8,6 +9,8 @@ JOIN pg_catalog.pg_namespace n ON c.relnamespace=n.oid JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid AND NOT a.attisdropped AND a.attnum > 0 +LEFT OUTER JOIN + pg_catalog.pg_attrdef def ON adrelid=a.attrelid AND adnum=a.attnum WHERE {% if tid %} c.oid = {{tid}}::OID diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql index 8676c09c5..6cad94f31 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/tables/sql/default/get_columns_for_table.sql @@ -1,5 +1,6 @@ SELECT a.attname AS name, pg_catalog.format_type(a.atttypid, NULL) AS cltype, + pg_catalog.pg_get_expr(def.adbin, def.adrelid) AS defval, pg_catalog.quote_ident(n.nspname)||'.'||pg_catalog.quote_ident(c.relname) as inheritedfrom, c.oid as inheritedid FROM @@ -8,6 +9,8 @@ JOIN pg_catalog.pg_namespace n ON c.relnamespace=n.oid JOIN pg_catalog.pg_attribute a ON a.attrelid = c.oid AND NOT a.attisdropped AND a.attnum > 0 +LEFT OUTER JOIN + pg_catalog.pg_attrdef def ON adrelid=a.attrelid AND adnum=a.attnum WHERE {% if tid %} c.oid = {{tid}}::OID diff --git a/web/pgadmin/browser/static/js/browser.js b/web/pgadmin/browser/static/js/browser.js index e866d5c48..bdab52993 100644 --- a/web/pgadmin/browser/static/js/browser.js +++ b/web/pgadmin/browser/static/js/browser.js @@ -246,7 +246,7 @@ define('pgadmin.browser', [ isPrivate: true, elContainer: true, limit: 1, - content: '
' + select_object_msg + '
', + content: '
' + select_object_msg + '
', events: panelEvents, onCreate: function(myPanel, $container) { $container.addClass('pg-no-overflow'); diff --git a/web/pgadmin/static/js/SchemaView/index.jsx b/web/pgadmin/static/js/SchemaView/index.jsx index 2b92c460b..a23f98460 100644 --- a/web/pgadmin/static/js/SchemaView/index.jsx +++ b/web/pgadmin/static/js/SchemaView/index.jsx @@ -233,7 +233,7 @@ function getChangedData(topSchema, viewHelperProps, sessData, stringify=false) { return changedData; } -function validateSchema(schema, sessData, setError, accessPath=[]) { +function validateSchema(schema, sessData, setError, accessPath=[], collLabel=null) { sessData = sessData || {}; for(let field of schema.fields) { /* Skip id validation */ @@ -261,7 +261,7 @@ function validateSchema(schema, sessData, setError, accessPath=[]) { } /* Loop through data */ for(const [rownum, row] of rows.entries()) { - if(validateSchema(field.schema, row, setError, currPath.concat(rownum))) { + if(validateSchema(field.schema, row, setError, currPath.concat(rownum), field.label)) { return true; } } @@ -276,7 +276,14 @@ function validateSchema(schema, sessData, setError, accessPath=[]) { let value = sessData[field.id]; let message = null; if(field.noEmpty) { - message = emptyValidator(field.label, value); + let label = field.label; + if(collLabel) { + label = gettext('%s in %s', field.label, collLabel); + } + if(field.noEmptyLabel) { + label = field.noEmptyLabel; + } + message = emptyValidator(label, value); } if(!message && (field.type == 'int' || field.type == 'numeric')) { message = minMaxValidator(field.label, value, field.min, field.max);