From 080ccdda5b293864f752b02b37e5ec9a51a1236b Mon Sep 17 00:00:00 2001 From: Aditya Toshniwal Date: Fri, 1 Nov 2019 15:21:59 +0000 Subject: [PATCH] Remove arbitrary (and incorrect) requirement that composite types must have at least two members. Fixes #4451 --- docs/en_US/release_notes_4_15.rst | 1 + .../databases/schemas/types/__init__.py | 15 ----------- .../create_composite_type_one_field.sql | 11 ++++++++ .../schemas/types/tests/default/tests.json | 26 +++++++++++++++++++ 4 files changed, 38 insertions(+), 15 deletions(-) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/create_composite_type_one_field.sql diff --git a/docs/en_US/release_notes_4_15.rst b/docs/en_US/release_notes_4_15.rst index b8ac1e855..0dfb178df 100644 --- a/docs/en_US/release_notes_4_15.rst +++ b/docs/en_US/release_notes_4_15.rst @@ -27,6 +27,7 @@ Bug fixes | `Issue #4191 `_ - Ensure comments are shown in reverse engineered SQL for table partitions. | `Issue #4242 `_ - Handle NULL values appropriately when sorting backgrid tables. | `Issue #4341 `_ - Give appropriate error messages when the user tries to use an blank master password. +| `Issue #4451 `_ - Remove arbitrary (and incorrect) requirement that composite types must have at least two members. | `Issue #4459 `_ - Don't quote bigints when copying them from the Query Tool results grid. | `Issue #4482 `_ - Ensure compression level is passed to pg_dump when backing up in directory format. | `Issue #4483 `_ - Ensure the number of jobs can be specified when backing up in directory format. diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py index 8d428dc1f..b50e6d7d7 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/__init__.py @@ -929,16 +929,6 @@ class TypeView(PGChildNodeView, DataTypeReader): ) ) # Additional checks goes here - # If type is composite then check if it has two members - if data and data[arg] == 'c': - if len(data['composite']) < 2: - return make_json_response( - status=410, - success=0, - errormsg=gettext( - 'Composite types require at least two members.' - ) - ) # If type is range then check if subtype is defined or not if data and data[arg] == 'r': if 'typname' not in data or data['typname'] is None: @@ -1285,11 +1275,6 @@ class TypeView(PGChildNodeView, DataTypeReader): return "-- definition incomplete" # Additional checks go here - # If type is composite then check if it has two members - if data and data[arg] == 'c': - if len(data['composite']) < 2: - return "-- definition incomplete" - # If type is range then check if subtype is defined or not if data and data[arg] == 'r': if 'typname' not in data or data['typname'] is None: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/create_composite_type_one_field.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/create_composite_type_one_field.sql new file mode 100644 index 000000000..16d5758bb --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/create_composite_type_one_field.sql @@ -0,0 +1,11 @@ +-- Type: composite_type_$%{}[]()&*^!@"'`\/# + +-- DROP TYPE public."composite_type_$%{}[]()&*^!@""'`\/#"; + +CREATE TYPE public."composite_type_$%{}[]()&*^!@""'`\/#" AS +( + mname1 bigint +); + +ALTER TYPE public."composite_type_$%{}[]()&*^!@""'`\/#" + OWNER TO ; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/tests.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/tests.json index caded7697..60a17b5a7 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/tests.json +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/types/tests/default/tests.json @@ -108,6 +108,32 @@ "data": {} }, + { + "type": "create", + "name": "Create Composite type - one field", + "endpoint": "NODE-type.obj", + "sql_endpoint": "NODE-type.sql_id", + "data": { + "name": "composite_type_$%{}[]()&*^!@\"'`\\/#", + "is_sys_type":false, + "typtype":"c", + "schema":"public", + "composite":[ + {"member_name":"mname1","type":"bigint","is_tlength":false,"is_precision":false} + ], + "typacl":[], + "seclabels":[], + "description":"" + }, + "expected_sql_file": "create_composite_type_one_field.sql" + }, + { + "type": "delete", + "name": "Drop Composite type - one field", + "endpoint": "NODE-type.obj_id", + "sql_endpoint": "NODE-type.sql_id", + "data": {} + }, { "type": "create",