diff --git a/docs/en_US/release_notes_8_7.rst b/docs/en_US/release_notes_8_7.rst index c54dfd69e..757ce71a4 100644 --- a/docs/en_US/release_notes_8_7.rst +++ b/docs/en_US/release_notes_8_7.rst @@ -21,6 +21,7 @@ New features ************ | `Issue #7192 `_ - Changes in Query Tool, Debugger, and ERD Tool shortcuts to remove the use of Accesskey which will allow them to be customized. + | `Issue #7215 `_ - Added support for viewing PGD Clusters. | `Issue #7411 `_ - Enhance the Delete dialog by highlighting the names of the objects to be deleted in bold. Housekeeping @@ -32,6 +33,7 @@ Housekeeping Bug fixes ********* + | `Issue #5762 `_ - Ensure that Schema Diff does not indicate a table as different when the trigger names are the same but the trigger function body is different. | `Issue #5849 `_ - Disable ERD for system catalogs. | `Issue #6060 `_ - Disable Debugger for system catalogs. | `Issue #6086 `_ - Fixed an issue where drag and drop publication and subscription name in SQL editors was not working. diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/schema_diff_table_utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/schema_diff_table_utils.py index 1820c6c49..710d51cec 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/schema_diff_table_utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/schema_diff_table_utils.py @@ -33,8 +33,8 @@ class SchemaDiffTableCompare(SchemaDiffObjectCompare): 'conkey', 'indkey', 'references_table_name', 'refnspoid'] - trigger_keys_to_ignore = ['xmin', 'tgrelid', 'tgfoid', 'tfunction', - 'tgqual', 'tgconstraint'] + trigger_keys_to_ignore = ['xmin', 'tgrelid', 'tgfoid', 'tgqual', + 'tgconstraint'] index_keys_to_ignore = ['indrelid', 'indclass'] keys_to_ignore = table_keys_to_ignore + column_keys_to_ignore + \ diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql index 8b7a9ded0..37962f106 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/11_plus/update.sql @@ -3,7 +3,7 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, RENAME TO {{ conn|qtIdent(data.name) }}; {% endif %} -{% if ((data.prosrc is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.prosrc != data.prosrc or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} +{% if ((data.tfunction is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.tfunction != data.tfunction or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} {% set or_flag = False %} {% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/14_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/14_plus/update.sql index 3b5d87b45..a1d9cb05b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/14_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/14_plus/update.sql @@ -3,7 +3,7 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, RENAME TO {{ conn|qtIdent(data.name) }}; {% endif %} -{% if ((data.prosrc is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.prosrc != data.prosrc or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} +{% if ((data.tfunction is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.tfunction != data.tfunction or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} {% set or_flag = False %} {% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/properties.sql index 48dbeffc1..9c936c578 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/properties.sql @@ -1,5 +1,5 @@ SELECT t.oid,t.tgname AS name, t.xmin, t.tgenabled AS is_enable_trigger, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, - nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, + nspname, des.description, l.lanname, p.proname AS tfunction, COALESCE(pg_catalog.substring(pg_catalog.pg_get_triggerdef(t.oid, true), 'WHEN (.*) EXECUTE (PROCEDURE|FUNCTION)'), pg_catalog.substring(pg_catalog.pg_get_triggerdef(t.oid, true), 'WHEN (.*) \$trigger')) AS whenclause, -- We need to convert tgargs column bytea datatype to array datatype diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql index 4cb6af005..c500c9601 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql @@ -3,7 +3,7 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, RENAME TO {{ conn|qtIdent(data.name) }}; {% endif %} -{% if ((data.prosrc is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.prosrc != data.prosrc or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} +{% if ((data.tfunction is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.tfunction != data.tfunction or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} {% set or_flag = False %} {% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql index e6b1d8624..8f99d632d 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/11_plus/update.sql @@ -3,7 +3,7 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, RENAME TO {{ conn|qtIdent(data.name) }}; {% endif %} -{% if ((data.prosrc is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.prosrc != data.prosrc or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} +{% if ((data.tfunction is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.tfunction != data.tfunction or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} {% set or_flag = False %} {% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/properties.sql index 0631151ef..a04ad8f8f 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/properties.sql @@ -1,5 +1,5 @@ SELECT t.oid,t.tgname AS name, t.xmin, t.tgenabled AS is_enable_trigger, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, - nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, + nspname, des.description, l.lanname, p.proname AS tfunction, COALESCE(pg_catalog.substring(pg_catalog.pg_get_triggerdef(t.oid, true), 'WHEN (.*) EXECUTE (PROCEDURE|FUNCTION)'), pg_catalog.substring(pg_catalog.pg_get_triggerdef(t.oid, true), 'WHEN (.*) \$trigger')) AS whenclause, -- We need to convert tgargs column bytea datatype to array datatype diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/14_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/14_plus/update.sql index 0cfd77793..2d7f08f2a 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/14_plus/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/14_plus/update.sql @@ -3,7 +3,7 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, RENAME TO {{ conn|qtIdent(data.name) }}; {% endif %} -{% if ((data.prosrc is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.prosrc != data.prosrc or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} +{% if ((data.tfunction is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.tfunction != data.tfunction or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} {% set or_flag = False %} {% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/properties.sql index 48dbeffc1..9c936c578 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/properties.sql @@ -1,5 +1,5 @@ SELECT t.oid,t.tgname AS name, t.xmin, t.tgenabled AS is_enable_trigger, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, - nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, + nspname, des.description, l.lanname, p.proname AS tfunction, COALESCE(pg_catalog.substring(pg_catalog.pg_get_triggerdef(t.oid, true), 'WHEN (.*) EXECUTE (PROCEDURE|FUNCTION)'), pg_catalog.substring(pg_catalog.pg_get_triggerdef(t.oid, true), 'WHEN (.*) \$trigger')) AS whenclause, -- We need to convert tgargs column bytea datatype to array datatype diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql index 6341cc0c6..47537a138 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql @@ -3,7 +3,7 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, RENAME TO {{ conn|qtIdent(data.name) }}; {% endif %} -{% if ((data.prosrc is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.prosrc != data.prosrc or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} +{% if ((data.tfunction is defined or data.is_row_trigger is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined or data.fires is defined or data.is_constraint_trigger is defined or data.whenclause is defined) and (o_data.tfunction != data.tfunction or data.is_row_trigger != o_data.is_row_trigger or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update or o_data.fires != data.fires or data.is_constraint_trigger != o_data.is_constraint_trigger or data.whenclause != o_data.whenclause)) %} {% set or_flag = False %} {% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} diff --git a/web/pgadmin/tools/schema_diff/__init__.py b/web/pgadmin/tools/schema_diff/__init__.py index ceaaa6e7e..5860d0a26 100644 --- a/web/pgadmin/tools/schema_diff/__init__.py +++ b/web/pgadmin/tools/schema_diff/__init__.py @@ -457,6 +457,7 @@ def compare_database(params): This function will compare the two databases. """ # Check the pre validation before compare + SchemaDiffRegistry.set_schema_diff_compare_mode('Database Objects') status, error_msg, diff_model_obj, session_obj = \ compare_pre_validation(params['trans_id'], params['source_sid'], params['target_sid']) @@ -606,6 +607,7 @@ def compare_schema(params): This function will compare the two schema. """ # Check the pre validation before compare + SchemaDiffRegistry.set_schema_diff_compare_mode('Schema Objects') status, error_msg, diff_model_obj, session_obj = \ compare_pre_validation(params['trans_id'], params['source_sid'], params['target_sid']) diff --git a/web/pgadmin/tools/schema_diff/node_registry.py b/web/pgadmin/tools/schema_diff/node_registry.py index 06859f3af..795bf3057 100644 --- a/web/pgadmin/tools/schema_diff/node_registry.py +++ b/web/pgadmin/tools/schema_diff/node_registry.py @@ -15,6 +15,7 @@ class SchemaDiffRegistry(): It is more of a registry for different type of nodes for schema diff. """ _registered_nodes = dict() + _schema_diff_compare_mode = None def __init__(self, node_name, node_view, parent_node='schema'): if node_name not in SchemaDiffRegistry._registered_nodes: @@ -59,3 +60,11 @@ class SchemaDiffRegistry(): if not module: return None return module(**cmd) + + @classmethod + def set_schema_diff_compare_mode(cls, mode): + cls._schema_diff_compare_mode = mode + + @classmethod + def get_schema_diff_compare_mode(cls): + return cls._schema_diff_compare_mode