diff --git a/docs/en_US/release_notes_4_21.rst b/docs/en_US/release_notes_4_21.rst index 86a356ef0..23eb14c7a 100644 --- a/docs/en_US/release_notes_4_21.rst +++ b/docs/en_US/release_notes_4_21.rst @@ -40,6 +40,7 @@ Bug fixes | `Issue #5268 `_ - Fixed generated SQL when any token in FTS Configuration or any option in FTS Dictionary is changed. | `Issue #5270 `_ - Ensure that OID should be shown in properties for Synonyms. | `Issue #5275 `_ - Fixed tab key navigation issue for parameters in table dialog. +| `Issue #5302 `_ - Fixed an issue where difference SQL is not seen in the schema diff tool for Types. | `Issue #5314 `_ - Ensure that switch cell is in sync with switch control for accessibility. | `Issue #5351 `_ - Fixed compilation warnings while building pgAdmin. | `Issue #5361 `_ - Fixes an issue where pgAdmin4 GUI does not display properly in IE 11. 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 cc1c3d1d8..02eb23b02 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 @@ -220,7 +220,7 @@ class TypeView(PGChildNodeView, DataTypeReader, SchemaDiffObjectCompare): }) keys_to_ignore = ['oid', 'typnamespace', 'typrelid', 'typarray', 'alias', - 'schema', 'oid-2'] + 'schema', 'oid-2', 'type_acl'] def check_precondition(f): """ diff --git a/web/pgadmin/tools/schema_diff/directory_compare.py b/web/pgadmin/tools/schema_diff/directory_compare.py index 23d195329..0c085985c 100644 --- a/web/pgadmin/tools/schema_diff/directory_compare.py +++ b/web/pgadmin/tools/schema_diff/directory_compare.py @@ -378,6 +378,16 @@ def directory_diff(source_dict, target_dict, ignore_keys=[], difference={}): difference[key] = source elif len(source_dict[key]) > 0: difference[key] = source_dict[key] + elif key in target_dict and type(target_dict[key]) is list: + # If no element in source dict then check for the element + # is available in target and the type is of list. + # Added such elements as a deleted. + tmp_tar_list = list(filter( + lambda x: type(x) == list or type(x) == dict, + target_dict[key] + )) + if len(tmp_tar_list): + difference[key] = {'deleted': target_dict[key]} if type(source) is dict and tmp_target and key in tmp_target and \ tmp_target[key] and len(tmp_target[key]) > 0: diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql index 477c62b27..04bbad68d 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/source.sql @@ -588,6 +588,12 @@ GRANT USAGE ON TYPE source.typ_comp_diff TO PUBLIC; GRANT USAGE ON TYPE source.typ_comp_diff TO pg_monitor WITH GRANT OPTION; GRANT USAGE ON TYPE source.typ_comp_diff TO postgres; +CREATE TYPE source.typ_comp_diff_no_column AS +( +); +ALTER TYPE source.typ_comp_diff_no_column + OWNER TO postgres; + -- Type Script ENUM type CREATE TYPE source.typ_enum_src AS ENUM ('test_enum'); diff --git a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql index 2e17197ef..17b7a9a78 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/10_plus/target.sql @@ -551,6 +551,14 @@ CREATE TYPE target.typ_comp_diff AS ALTER TYPE target.typ_comp_diff OWNER TO postgres; +CREATE TYPE target.typ_comp_diff_no_column AS +( + a "char", + b "char" +); +ALTER TYPE target.typ_comp_diff_no_column + OWNER TO postgres; + -- Type Script ENUM type CREATE TYPE target.typ_enum_tar AS ENUM ('test_enum'); diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql index f9b4516ca..1de0e621f 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/source.sql @@ -565,6 +565,48 @@ ALTER DOMAIN source.dom_type_diff COMMENT ON DOMAIN source.dom_type_diff IS 'Test comment'; +-- Type Script composite type +CREATE TYPE source.typ_comp_src AS +( + m1 bit(5), + m2 text COLLATE pg_catalog."POSIX" +); +ALTER TYPE source.typ_comp_src + OWNER TO postgres; + +CREATE TYPE source.typ_comp_diff AS +( + m1 numeric(5,2), + m3 character varying(30) COLLATE pg_catalog."C" +); +ALTER TYPE source.typ_comp_diff + OWNER TO postgres; +COMMENT ON TYPE source.typ_comp_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_comp_diff TO PUBLIC; +GRANT USAGE ON TYPE source.typ_comp_diff TO pg_monitor WITH GRANT OPTION; +GRANT USAGE ON TYPE source.typ_comp_diff TO postgres; + +CREATE TYPE source.typ_comp_diff_no_column AS +( +); +ALTER TYPE source.typ_comp_diff_no_column + OWNER TO postgres; + +-- Type Script ENUM type +CREATE TYPE source.typ_enum_src AS ENUM + ('test_enum'); +ALTER TYPE source.typ_enum_src + OWNER TO postgres; + +CREATE TYPE source.typ_enum_diff AS ENUM + ('test_enum', 'test_enum_1'); +ALTER TYPE source.typ_enum_diff + OWNER TO postgres; +COMMENT ON TYPE source.typ_enum_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_enum_src TO pg_monitor WITH GRANT OPTION; + -- Type Script RANGE type CREATE TYPE source.typ_range_src AS RANGE ( diff --git a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql index d4cc8ad4b..a14ddd338 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/11_plus/target.sql @@ -550,6 +550,14 @@ CREATE TYPE target.typ_comp_diff AS ALTER TYPE target.typ_comp_diff OWNER TO postgres; +CREATE TYPE target.typ_comp_diff_no_column AS +( + a "char", + b "char" +); +ALTER TYPE target.typ_comp_diff_no_column + OWNER TO postgres; + -- Type Script ENUM type CREATE TYPE target.typ_enum_tar AS ENUM ('test_enum'); diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql index 699cef8bb..ff2813f98 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/source.sql @@ -566,6 +566,48 @@ ALTER DOMAIN source.dom_type_diff COMMENT ON DOMAIN source.dom_type_diff IS 'Test comment'; +-- Type Script composite type +CREATE TYPE source.typ_comp_src AS +( + m1 bit(5), + m2 text COLLATE pg_catalog."POSIX" +); +ALTER TYPE source.typ_comp_src + OWNER TO postgres; + +CREATE TYPE source.typ_comp_diff AS +( + m1 numeric(5,2), + m3 character varying(30) COLLATE pg_catalog."C" +); +ALTER TYPE source.typ_comp_diff + OWNER TO postgres; +COMMENT ON TYPE source.typ_comp_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_comp_diff TO PUBLIC; +GRANT USAGE ON TYPE source.typ_comp_diff TO pg_monitor WITH GRANT OPTION; +GRANT USAGE ON TYPE source.typ_comp_diff TO postgres; + +CREATE TYPE source.typ_comp_diff_no_column AS +( +); +ALTER TYPE source.typ_comp_diff_no_column + OWNER TO postgres; + +-- Type Script ENUM type +CREATE TYPE source.typ_enum_src AS ENUM + ('test_enum'); +ALTER TYPE source.typ_enum_src + OWNER TO postgres; + +CREATE TYPE source.typ_enum_diff AS ENUM + ('test_enum', 'test_enum_1'); +ALTER TYPE source.typ_enum_diff + OWNER TO postgres; +COMMENT ON TYPE source.typ_enum_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_enum_src TO pg_monitor WITH GRANT OPTION; + -- Type Script RANGE type CREATE TYPE source.typ_range_src AS RANGE ( diff --git a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql index 3a6a21a13..f1a17616b 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/12_plus/target.sql @@ -539,6 +539,14 @@ CREATE TYPE target.typ_comp_diff AS ALTER TYPE target.typ_comp_diff OWNER TO postgres; +CREATE TYPE target.typ_comp_diff_no_column AS +( + a "char", + b "char" +); +ALTER TYPE target.typ_comp_diff_no_column + OWNER TO postgres; + -- Type Script ENUM type CREATE TYPE target.typ_enum_tar AS ENUM ('test_enum'); diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql index 8131645ea..7adb81f53 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/source.sql @@ -435,6 +435,46 @@ ALTER DOMAIN source.dom_type_diff COMMENT ON DOMAIN source.dom_type_diff IS 'Test comment'; +-- Type Script composite type +CREATE TYPE source.typ_comp_src AS +( + m1 bit(5), + m2 text COLLATE pg_catalog."POSIX" +); +ALTER TYPE source.typ_comp_src + OWNER TO postgres; + +CREATE TYPE source.typ_comp_diff AS +( + m1 numeric(5,2), + m3 character varying(30) COLLATE pg_catalog."C" +); +ALTER TYPE source.typ_comp_diff + OWNER TO postgres; +COMMENT ON TYPE source.typ_comp_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_comp_diff TO PUBLIC; +GRANT USAGE ON TYPE source.typ_comp_diff TO postgres; + +CREATE TYPE source.typ_comp_diff_no_column AS +( +); +ALTER TYPE source.typ_comp_diff_no_column + OWNER TO postgres; + +-- Type Script ENUM type +CREATE TYPE source.typ_enum_src AS ENUM + ('test_enum'); +ALTER TYPE source.typ_enum_src + OWNER TO postgres; + +CREATE TYPE source.typ_enum_diff AS ENUM + ('test_enum', 'test_enum_1'); +ALTER TYPE source.typ_enum_diff + OWNER TO postgres; +COMMENT ON TYPE source.typ_enum_diff + IS 'Test Comment'; + -- Type Script RANGE type CREATE TYPE source.typ_range_src AS RANGE ( diff --git a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql index 8ae203045..eb51a08d5 100644 --- a/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/pg/9.2_plus/target.sql @@ -459,6 +459,14 @@ CREATE TYPE target.typ_comp_diff AS ALTER TYPE target.typ_comp_diff OWNER TO postgres; +CREATE TYPE target.typ_comp_diff_no_column AS +( + a "char", + b "char" +); +ALTER TYPE target.typ_comp_diff_no_column + OWNER TO postgres; + -- Type Script ENUM type CREATE TYPE target.typ_enum_tar AS ENUM ('test_enum'); diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql index 65e1c6a7a..4751490d0 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/source.sql @@ -502,6 +502,48 @@ ALTER DOMAIN source.dom_type_diff COMMENT ON DOMAIN source.dom_type_diff IS 'Test comment'; +-- Type Script composite type +CREATE TYPE source.typ_comp_src AS +( + m1 bit(5), + m2 text COLLATE pg_catalog."POSIX" +); +ALTER TYPE source.typ_comp_src + OWNER TO enterprisedb; + +CREATE TYPE source.typ_comp_diff AS +( + m1 numeric(5,2), + m3 character varying(30) COLLATE pg_catalog."C" +); +ALTER TYPE source.typ_comp_diff + OWNER TO enterprisedb; +COMMENT ON TYPE source.typ_comp_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_comp_diff TO PUBLIC; +GRANT USAGE ON TYPE source.typ_comp_diff TO pg_monitor WITH GRANT OPTION; +GRANT USAGE ON TYPE source.typ_comp_diff TO enterprisedb; + +CREATE TYPE source.typ_comp_diff_no_column AS +( +); +ALTER TYPE source.typ_comp_diff_no_column + OWNER TO enterprisedb; + +-- Type Script ENUM type +CREATE TYPE source.typ_enum_src AS ENUM + ('test_enum'); +ALTER TYPE source.typ_enum_src + OWNER TO enterprisedb; + +CREATE TYPE source.typ_enum_diff AS ENUM + ('test_enum', 'test_enum_1'); +ALTER TYPE source.typ_enum_diff + OWNER TO enterprisedb; +COMMENT ON TYPE source.typ_enum_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_enum_src TO pg_monitor WITH GRANT OPTION; + -- Type Script RANGE type CREATE TYPE source.typ_range_src AS RANGE ( diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql index bbc798fd9..70792696b 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/10_plus/target.sql @@ -486,6 +486,14 @@ CREATE TYPE target.typ_comp_diff AS ALTER TYPE target.typ_comp_diff OWNER TO enterprisedb; +CREATE TYPE target.typ_comp_diff_no_column AS +( + a "char", + b "char" +); +ALTER TYPE target.typ_comp_diff_no_column + OWNER TO enterprisedb; + -- Type Script ENUM type CREATE TYPE target.typ_enum_tar AS ENUM ('test_enum'); diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql index 1948eb2e9..31dc60d7c 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/source.sql @@ -436,6 +436,46 @@ ALTER DOMAIN source.dom_type_diff COMMENT ON DOMAIN source.dom_type_diff IS 'Test comment'; +-- Type Script composite type +CREATE TYPE source.typ_comp_src AS +( + m1 bit(5), + m2 text COLLATE pg_catalog."POSIX" +); +ALTER TYPE source.typ_comp_src + OWNER TO enterprisedb; + +CREATE TYPE source.typ_comp_diff AS +( + m1 numeric(5,2), + m3 character varying(30) COLLATE pg_catalog."C" +); +ALTER TYPE source.typ_comp_diff + OWNER TO enterprisedb; +COMMENT ON TYPE source.typ_comp_diff + IS 'Test Comment'; +GRANT USAGE ON TYPE source.typ_comp_diff TO PUBLIC; +GRANT USAGE ON TYPE source.typ_comp_diff TO enterprisedb; + +CREATE TYPE source.typ_comp_diff_no_column AS +( +); +ALTER TYPE source.typ_comp_diff_no_column + OWNER TO enterprisedb; + +-- Type Script ENUM type +CREATE TYPE source.typ_enum_src AS ENUM + ('test_enum'); +ALTER TYPE source.typ_enum_src + OWNER TO enterprisedb; + +CREATE TYPE source.typ_enum_diff AS ENUM + ('test_enum', 'test_enum_1'); +ALTER TYPE source.typ_enum_diff + OWNER TO enterprisedb; +COMMENT ON TYPE source.typ_enum_diff + IS 'Test Comment'; + -- Type Script RANGE type CREATE TYPE source.typ_range_src AS RANGE ( diff --git a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql index 65be2e722..5135c7196 100644 --- a/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql +++ b/web/pgadmin/tools/schema_diff/tests/ppas/9.2_plus/target.sql @@ -459,6 +459,14 @@ CREATE TYPE target.typ_comp_diff AS ALTER TYPE target.typ_comp_diff OWNER TO enterprisedb; +CREATE TYPE target.typ_comp_diff_no_column AS +( + a "char", + b "char" +); +ALTER TYPE target.typ_comp_diff_no_column + OWNER TO enterprisedb; + -- Type Script ENUM type CREATE TYPE target.typ_enum_tar AS ENUM ('test_enum');