From 350ffcce7c6ce7eb13f813f343944585aef23717 Mon Sep 17 00:00:00 2001 From: Akshay Joshi Date: Thu, 8 Aug 2019 16:48:46 +0530 Subject: [PATCH] 1) Add support of Compound Triggers for EPAS 12+. Fixes #4144. 2) Ensure enable trigger menu should be visible when trigger is disabled. Fixes #4578. --- docs/en_US/compound_trigger_dialog.rst | 75 ++ docs/en_US/images/compound_trigger_code.png | Bin 0 -> 144267 bytes docs/en_US/images/compound_trigger_events.png | Bin 0 -> 56064 bytes .../en_US/images/compound_trigger_general.png | Bin 0 -> 38321 bytes docs/en_US/images/compound_trigger_sql.png | Bin 0 -> 93775 bytes docs/en_US/modifying_tables.rst | 1 + docs/en_US/release_notes_4_12.rst | 2 + .../tables/compound_triggers/__init__.py | 1017 +++++++++++++++++ .../static/img/coll-compound_trigger.svg | 1 + .../static/img/compound_trigger-bad.svg | 1 + .../static/img/compound_trigger.svg | 1 + .../static/js/compound_trigger.js | 412 +++++++ .../css/compound_trigger.css | 23 + .../compound_triggers/tests/__init__.py | 16 + .../ppas/12_plus/alter_event_comment_code.sql | 26 + .../ppas/12_plus/create_for_insert_delete.sql | 13 + .../create_for_insert_update_on_columns.sql | 22 + .../12_plus/create_for_insert_with_when.sql | 23 + .../tests/ppas/12_plus/test.json | 99 ++ .../tests/test_compound_triggers_add.py | 134 +++ .../tests/test_compound_triggers_delete.py | 98 ++ .../test_compound_triggers_delete_multiple.py | 112 ++ .../tests/test_compound_triggers_put.py | 134 +++ .../tables/compound_triggers/tests/utils.py | 137 +++ .../sql/ppas/12_plus}/backend_support.sql | 0 .../sql/ppas/12_plus/create.sql | 26 + .../sql/ppas/12_plus}/delete.sql | 0 .../ppas/12_plus}/enable_disable_trigger.sql | 0 .../sql/ppas/12_plus}/get_columns.sql | 0 .../sql/ppas/12_plus}/get_oid.sql | 0 .../sql/ppas/12_plus}/get_parent.sql | 0 .../sql/ppas/12_plus/nodes.sql | 10 + .../sql/ppas/12_plus/properties.sql | 22 + .../sql/ppas/12_plus/update.sql | 40 + .../sql/{ => gpdb}/9.1_plus/get_oid.sql | 0 .../sql/{ => gpdb}/9.1_plus/nodes.sql | 0 .../sql/{ => gpdb}/9.1_plus/properties.sql | 2 +- .../triggers/sql/{ => gpdb}/default/alter.sql | 0 .../sql/gpdb/default/backend_support.sql | 9 + .../sql/{ => gpdb}/default/create.sql | 0 .../triggers/sql/gpdb/default/delete.sql | 1 + .../gpdb/default/enable_disable_trigger.sql | 2 + .../triggers/sql/gpdb/default/get_columns.sql | 6 + .../triggers/sql/gpdb/default/get_oid.sql | 4 + .../triggers/sql/gpdb/default/get_parent.sql | 5 + .../default/get_triggerfunctions.sql | 0 .../triggers/sql/{ => gpdb}/default/nodes.sql | 0 .../sql/{ => gpdb}/default/properties.sql | 0 .../sql/{ => gpdb}/default/update.sql | 12 +- .../triggers/sql/{ => pg}/10_plus/create.sql | 0 .../sql/{ => pg}/10_plus/properties.sql | 2 +- .../triggers/sql/pg/9.1_plus/get_oid.sql | 5 + .../triggers/sql/pg/9.1_plus/nodes.sql | 9 + .../triggers/sql/pg/9.1_plus/properties.sql | 23 + .../triggers/sql/pg/default/alter.sql | 9 + .../sql/pg/default/backend_support.sql | 9 + .../triggers/sql/pg/default/create.sql | 32 + .../triggers/sql/pg/default/delete.sql | 1 + .../sql/pg/default/enable_disable_trigger.sql | 2 + .../triggers/sql/pg/default/get_columns.sql | 6 + .../triggers/sql/pg/default/get_oid.sql | 4 + .../triggers/sql/pg/default/get_parent.sql | 5 + .../sql/pg/default/get_triggerfunctions.sql | 15 + .../triggers/sql/pg/default/nodes.sql | 7 + .../triggers/sql/pg/default/properties.sql | 1 + .../triggers/sql/pg/default/update.sql | 50 + .../triggers/sql/ppas/10_plus/create.sql | 36 + .../triggers/sql/ppas/10_plus/properties.sql | 25 + .../triggers/sql/ppas/12_plus/nodes.sql | 10 + .../triggers/sql/ppas/12_plus/properties.sql | 26 + .../triggers/sql/ppas/9.1_plus/get_oid.sql | 5 + .../triggers/sql/ppas/9.1_plus/nodes.sql | 9 + .../triggers/sql/ppas/9.1_plus/properties.sql | 23 + .../triggers/sql/ppas/default/alter.sql | 9 + .../sql/ppas/default/backend_support.sql | 9 + .../triggers/sql/ppas/default/create.sql | 32 + .../triggers/sql/ppas/default/delete.sql | 1 + .../ppas/default/enable_disable_trigger.sql | 2 + .../triggers/sql/ppas/default/get_columns.sql | 6 + .../triggers/sql/ppas/default/get_oid.sql | 4 + .../triggers/sql/ppas/default/get_parent.sql | 5 + .../sql/ppas/default/get_triggerfunctions.sql | 15 + .../triggers/sql/ppas/default/nodes.sql | 7 + .../triggers/sql/ppas/default/properties.sql | 1 + .../triggers/sql/ppas/default/update.sql | 50 + .../tables/tests/test_trigger_get_oid_sql.py | 4 + .../tables/tests/test_trigger_nodes_sql.py | 4 + .../schemas/tables/tests/test_utils.py | 2 +- .../schemas/tables/triggers/__init__.py | 7 +- .../tests/test_triggers_delete_multiple.py | 6 +- .../triggers/tests/test_triggers_put.py | 4 +- .../servers/databases/schemas/tables/utils.py | 95 +- .../databases/schemas/views/__init__.py | 13 +- web/pgadmin/browser/static/js/menu.js | 7 +- web/webpack.config.js | 3 +- web/webpack.shim.js | 1 + 96 files changed, 3052 insertions(+), 35 deletions(-) create mode 100644 docs/en_US/compound_trigger_dialog.rst create mode 100644 docs/en_US/images/compound_trigger_code.png create mode 100644 docs/en_US/images/compound_trigger_events.png create mode 100644 docs/en_US/images/compound_trigger_general.png create mode 100644 docs/en_US/images/compound_trigger_sql.png create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/coll-compound_trigger.svg create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger-bad.svg create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger.svg create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/templates/compound_triggers/css/compound_trigger.css create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/__init__.py create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/alter_event_comment_code.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_delete.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_update_on_columns.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_with_when.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/test.json create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_add.py create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete.py create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete_multiple.py create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/{triggers/sql/default => compound_triggers/sql/ppas/12_plus}/backend_support.sql (100%) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/{triggers/sql/default => compound_triggers/sql/ppas/12_plus}/delete.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/{triggers/sql/default => compound_triggers/sql/ppas/12_plus}/enable_disable_trigger.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/{triggers/sql/default => compound_triggers/sql/ppas/12_plus}/get_columns.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/{triggers/sql/default => compound_triggers/sql/ppas/12_plus}/get_oid.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/{triggers/sql/default => compound_triggers/sql/ppas/12_plus}/get_parent.sql (100%) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/nodes.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/9.1_plus/get_oid.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/9.1_plus/nodes.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/9.1_plus/properties.sql (93%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/default/alter.sql (100%) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/backend_support.sql rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/default/create.sql (100%) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/delete.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/enable_disable_trigger.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_columns.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_oid.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_parent.sql rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/default/get_triggerfunctions.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/default/nodes.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/default/properties.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => gpdb}/default/update.sql (81%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => pg}/10_plus/create.sql (100%) rename web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/{ => pg}/10_plus/properties.sql (93%) create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/get_oid.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/nodes.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/backend_support.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/delete.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/enable_disable_trigger.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_columns.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_parent.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/nodes.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/create.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/nodes.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/get_oid.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/nodes.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/backend_support.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/delete.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/enable_disable_trigger.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_columns.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_parent.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/nodes.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql diff --git a/docs/en_US/compound_trigger_dialog.rst b/docs/en_US/compound_trigger_dialog.rst new file mode 100644 index 000000000..f50dbfd9b --- /dev/null +++ b/docs/en_US/compound_trigger_dialog.rst @@ -0,0 +1,75 @@ +.. _compound_trigger_dialog: + +******************************** +`Compound Trigger Dialog`:index: +******************************** + +Use the *Compound Trigger* dialog to create a compound trigger or modify an +existing compound trigger. *Compound Trigger* is supported only for EPAS server +12 and above. A compound trigger executes a specified code when certain events +occur. + +The *Compound Trigger* dialog organizes the development of a compound trigger +through the following dialog tabs: *General*, *Events*, and *Code*. The *SQL* +tab displays the SQL code generated by dialog selections. + +.. image:: images/compound_trigger_general.png + :alt: Compound Trigger dialog general tab + :align: center + +Use the fields in the *General* tab to identify the compound trigger: + +* Use the *Name* field to add a descriptive name for the compound trigger. This + must be distinct from the name of any other compound trigger for the same table. + The name will be displayed in the *pgAdmin* tree control. +* Store notes about the compound trigger in the *Comment* field. + +Click the *Events* tab to continue. + +.. image:: images/compound_trigger_events.png + :alt: Compound Trigger dialog events tab + :align: center + +Use the fields in the *Events* tab to specify how and when the compound trigger fires: + +* Select the type of event(s) that will invoke the compound trigger; to select + an event type, move the switch next to the event to the *YES* position. + The supported event types are *INSERT*, *UPDATE*, *DELETE*. +* Use the *When* field to provide a boolean condition that will invoke the + compound trigger. +* If defining a column-specific compound trigger, use the *Columns* field to + specify the columns or columns that are the target of the compound trigger. + +Click the *Code* tab to continue. + +.. image:: images/compound_trigger_code.png + :alt: Compound Trigger dialog code tab + :align: center + +Use the *Code* field to specify the code for the four timing events +*BEFORE STATEMENT*, *AFTER STATEMENT*, *BEFORE EACH ROW*, *AFTER EACH ROW* +that will be invoked when the compound trigger fires. Basic template is provided +with place holders. + +Click the *SQL* tab to continue. + +Your entries in the *Compound Trigger* dialog generate a SQL command (see an example +below). Use the *SQL* tab for review; revisit or switch tabs to make any changes +to the SQL command. + +Example +******* + +The following is an example of the sql command generated by user selections in +the *Compound Trigger* dialog: + +.. image:: images/compound_trigger_sql.png + :alt: Compound Trigger dialog sql tab + :align: center + +The example demonstrates creating a compound trigger named *test_ct*. + +* Click the *Info* button (i) to access online help. +* Click the *Save* button to save work. +* Click the *Cancel* button to exit without saving work. +* Click the *Reset* button to restore configuration parameters. \ No newline at end of file diff --git a/docs/en_US/images/compound_trigger_code.png b/docs/en_US/images/compound_trigger_code.png new file mode 100644 index 0000000000000000000000000000000000000000..819a86e9728c5f07d0dc53349ef7380ab6c42a1b GIT binary patch literal 144267 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Ψ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

T>1qrN%Xx;e`^jW(AllA? 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 - Add support of Compound Triggers for EPAS 12+. | `Issue #4333 `_ - Add support for planner support functions in PostgreSQL 12+ functions. | `Issue #4334 `_ - Add support for generated columns in Postgres 12+. | `Issue #4540 `_ - Use the full tab space for CodeMirror instances on dialogues where appropriate. @@ -43,4 +44,5 @@ Bug fixes | `Issue #4552 `_ - Fix some errors thrown on the JS console when dragging text in the Query Tool. | `Issue #4559 `_ - Ensure triggers should be updated properly for EPAS server. | `Issue #4565 `_ - Fix the reverse engineered SQL for trigger functions with the WINDOW option selected. +| `Issue #4578 `_ - Ensure enable trigger menu should be visible when trigger is disabled. | `Issue #4581 `_ - Ensure the comment on a Primary Key constraint can be edited under the Table node. \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py new file mode 100644 index 000000000..9f4476850 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/__init__.py @@ -0,0 +1,1017 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2019, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +""" Implements Compound Trigger Node """ + +import simplejson as json +from functools import wraps + +import pgadmin.browser.server_groups.servers.databases as database +from flask import render_template, request, jsonify +from flask_babelex import gettext +from pgadmin.browser.collection import CollectionNodeModule +from pgadmin.browser.utils import PGChildNodeView +from pgadmin.utils.ajax import make_json_response, internal_server_error, \ + make_response as ajax_response, gone +from pgadmin.utils.driver import get_driver +from config import PG_DEFAULT_DRIVER +from pgadmin.utils import IS_PY2 +# If we are in Python3 +if not IS_PY2: + unicode = str + + +class CompoundTriggerModule(CollectionNodeModule): + """ + class CompoundTriggerModule(CollectionNodeModule) + + A module class for Compound Trigger node derived from + CollectionNodeModule. + + Methods: + ------- + * __init__(*args, **kwargs) + - Method is used to initialize the Trigger and it's base module. + + * get_nodes(gid, sid, did, scid, tid) + - Method is used to generate the browser collection node. + + * node_inode() + - Method is overridden from its base class to make the node as leaf node. + + * script_load() + - Load the module script for compound trigger, when any of the server + node is initialized. + """ + + NODE_TYPE = 'compound_trigger' + COLLECTION_LABEL = gettext("Compound Triggers") + + def __init__(self, *args, **kwargs): + """ + Method is used to initialize the CompoundTriggerModule and + it's base module. + + Args: + *args: + **kwargs: + """ + super(CompoundTriggerModule, self).__init__(*args, **kwargs) + self.min_ver = self.min_ppasver = 120000 + self.max_ver = None + self.min_gpdbver = 1000000000 + self.server_type = ['ppas'] + + def BackendSupported(self, manager, **kwargs): + """ + Load this module if vid is view, we will not load it under + material view + """ + if manager.server_type == 'gpdb': + return False + if super(CompoundTriggerModule, self).BackendSupported( + manager, **kwargs): + conn = manager.connection(did=kwargs['did']) + + if 'vid' not in kwargs: + return True + + template_path = 'compound_triggers/sql/{0}/#{1}#'.format( + manager.server_type, manager.version) + SQL = render_template("/".join( + [template_path, 'backend_support.sql']), vid=kwargs['vid'] + ) + + status, res = conn.execute_scalar(SQL) + + # check if any errors + if not status: + return internal_server_error(errormsg=res) + + # Check vid is view not material view + # then true, othewise false + return res + + def get_nodes(self, gid, sid, did, scid, **kwargs): + """ + Generate the collection node + """ + assert ('tid' in kwargs or 'vid' in kwargs) + yield self.generate_browser_collection_node( + kwargs['tid'] if 'tid' in kwargs else kwargs['vid'] + ) + + @property + def script_load(self): + """ + Load the module script for server, when any of the server-group node is + initialized. + """ + return database.DatabaseModule.NODE_TYPE + + @property + def node_inode(self): + """ + Load the module node as a leaf node + """ + return False + + @property + def module_use_template_javascript(self): + """ + Returns whether Jinja2 template is used for generating the javascript + module. + """ + return False + + @property + def csssnippets(self): + """ + Returns a snippet of css to include in the page + """ + snippets = [ + render_template( + "compound_triggers/css/compound_trigger.css", + node_type=self.node_type + ) + ] + + for submodule in self.submodules: + snippets.extend(submodule.csssnippets) + + return snippets + + +blueprint = CompoundTriggerModule(__name__) + + +class CompoundTriggerView(PGChildNodeView): + """ + This class is responsible for generating routes for Compound Trigger node + + Methods: + ------- + * __init__(**kwargs) + - Method is used to initialize the CompoundTriggerView and it's + base view. + + * check_precondition() + - This function will behave as a decorator which will checks + database connection before running view, it will also attaches + manager,conn & template_path properties to self + + * list() + - This function is used to list all the Compound Trigger nodes + within that collection. + + * nodes() + - This function will used to create all the child node within that + collection, Here it will create all the Compound Trigger node. + + * node() + - This function will used to create child node within that + collection, Here it will create specific the Compound Trigger node. + + * properties(gid, sid, did, scid, tid, trid) + - This function will show the properties of the selected + Compound Trigger node + + * create(gid, sid, did, scid, tid) + - This function will create the new Compound Trigger object + + * update(gid, sid, did, scid, tid, trid) + - This function will update the data for the selected + Compound Trigger node + + * delete(self, gid, sid, scid, tid, trid): + - This function will drop the Compound Trigger object + + * enable(self, gid, sid, scid, tid, trid): + - This function will enable/disable Compound Trigger object + + * msql(gid, sid, did, scid, tid, trid) + - This function is used to return modified SQL for the selected + Compound Trigger node + + * get_sql(data, scid, tid, trid) + - This function will generate sql from model data + + * sql(gid, sid, did, scid, tid, trid): + - This function will generate sql to show it in sql pane for the + selected Compound Trigger node. + + * dependency(gid, sid, did, scid, tid, trid): + - This function will generate dependency list show it in dependency + pane for the selected Compound Trigger node. + + * dependent(gid, sid, did, scid, tid, trid): + - This function will generate dependent list to show it in dependent + pane for the selected Compound Trigger node. + + * _column_details(tid, clist):: + - This function will fetch the columns for compound trigger + + * _trigger_definition(data): + - This function will set additional compound trigger definitions in + AJAX response + """ + + node_type = blueprint.node_type + + parent_ids = [ + {'type': 'int', 'id': 'gid'}, + {'type': 'int', 'id': 'sid'}, + {'type': 'int', 'id': 'did'}, + {'type': 'int', 'id': 'scid'}, + {'type': 'int', 'id': 'tid'} + ] + ids = [ + {'type': 'int', 'id': 'trid'} + ] + + operations = dict({ + 'obj': [ + {'get': 'properties', 'delete': 'delete', 'put': 'update'}, + {'get': 'list', 'post': 'create', 'delete': 'delete'} + ], + 'delete': [{'delete': 'delete'}, {'delete': 'delete'}], + 'children': [{'get': 'children'}], + 'nodes': [{'get': 'node'}, {'get': 'nodes'}], + 'sql': [{'get': 'sql'}], + 'msql': [{'get': 'msql'}, {'get': 'msql'}], + 'stats': [{'get': 'statistics'}], + 'dependency': [{'get': 'dependencies'}], + 'dependent': [{'get': 'dependents'}], + 'enable': [{'put': 'enable_disable_trigger'}] + }) + + def check_precondition(f): + """ + This function will behave as a decorator which will checks + database connection before running view, it will also attaches + manager,conn & template_path properties to self + """ + + @wraps(f) + def wrap(*args, **kwargs): + # Here args[0] will hold self & kwargs will hold gid,sid,did + self = args[0] + self.manager = get_driver(PG_DEFAULT_DRIVER).connection_manager( + kwargs['sid'] + ) + self.conn = self.manager.connection(did=kwargs['did']) + # We need datlastsysoid to check if current compound trigger + # is system trigger + self.datlastsysoid = self.manager.db_info[ + kwargs['did'] + ]['datlastsysoid'] if self.manager.db_info is not None and \ + kwargs['did'] in self.manager.db_info else 0 + + # we will set template path for sql scripts + self.template_path = 'compound_triggers/sql/{0}/#{1}#'.format( + self.manager.server_type, self.manager.version) + # Store server type + self.server_type = self.manager.server_type + # We need parent's name eg table name and schema name + # when we create new compound trigger in update we can fetch + # it using property sql + SQL = render_template("/".join([self.template_path, + 'get_parent.sql']), + tid=kwargs['tid']) + status, rset = self.conn.execute_2darray(SQL) + if not status: + return internal_server_error(errormsg=rset) + + for row in rset['rows']: + self.schema = row['schema'] + self.table = row['table'] + + # Here we are storing compound trigger definition + # We will use it to check compound trigger type definition + self.trigger_definition = { + 'TRIGGER_TYPE_ROW': (1 << 0), + 'TRIGGER_TYPE_BEFORE': (1 << 1), + 'TRIGGER_TYPE_INSERT': (1 << 2), + 'TRIGGER_TYPE_DELETE': (1 << 3), + 'TRIGGER_TYPE_UPDATE': (1 << 4), + 'TRIGGER_TYPE_TRUNCATE': (1 << 5), + 'TRIGGER_TYPE_INSTEAD': (1 << 6) + } + + return f(*args, **kwargs) + + return wrap + + @check_precondition + def list(self, gid, sid, did, scid, tid): + """ + This function is used to list all the compound trigger nodes + within that collection. + + Args: + gid: Server group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + + Returns: + JSON of available compound trigger nodes + """ + + SQL = render_template("/".join([self.template_path, + 'properties.sql']), tid=tid) + status, res = self.conn.execute_dict(SQL) + + if not status: + return internal_server_error(errormsg=res) + return ajax_response( + response=res['rows'], + status=200 + ) + + @check_precondition + def node(self, gid, sid, did, scid, tid, trid): + """ + This function will used to create the child node within that + collection. + Here it will create specific the compound trigger node. + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + + Returns: + JSON of available compound trigger child nodes + """ + res = [] + SQL = render_template("/".join([self.template_path, + 'nodes.sql']), + tid=tid, + trid=trid) + status, rset = self.conn.execute_2darray(SQL) + if not status: + return internal_server_error(errormsg=rset) + + if len(rset['rows']) == 0: + return gone(gettext( + """Could not find the compound trigger in the table.""") + ) + + res = self.blueprint.generate_browser_node( + rset['rows'][0]['oid'], + tid, + rset['rows'][0]['name'], + icon="icon-compound_trigger" if + rset['rows'][0]['is_enable_trigger'] else + "icon-compound_trigger-bad" + ) + + return make_json_response( + data=res, + status=200 + ) + + @check_precondition + def nodes(self, gid, sid, did, scid, tid): + """ + This function will used to create all the child node within that + collection. + Here it will create all the compound trigger node. + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + + Returns: + JSON of available trigger child nodes + """ + res = [] + SQL = render_template("/".join([self.template_path, + 'nodes.sql']), tid=tid) + status, rset = self.conn.execute_2darray(SQL) + if not status: + return internal_server_error(errormsg=rset) + + for row in rset['rows']: + res.append( + self.blueprint.generate_browser_node( + row['oid'], + tid, + row['name'], + icon="icon-compound_trigger" if row['is_enable_trigger'] + else "icon-compound_trigger-bad" + )) + + return make_json_response( + data=res, + status=200 + ) + + def _column_details(self, tid, clist): + """ + This functional will fetch list of column for compound trigger + + Args: + tid: Table OID + clist: List of columns + + Returns: + Updated properties data with column + """ + + SQL = render_template("/".join([self.template_path, + 'get_columns.sql']), + tid=tid, clist=clist) + status, rset = self.conn.execute_2darray(SQL) + if not status: + return internal_server_error(errormsg=rset) + # 'tgattr' contains list of columns from table used in + # compound trigger + columns = [] + + for row in rset['rows']: + columns.append(row['name']) + + return columns + + def _trigger_definition(self, data): + """ + This functional will set the compound trigger definition + + Args: + data: Properties data + + Returns: + Updated properties data with compound trigger definition + """ + + # Event definition + if data['tgtype'] & self.trigger_definition['TRIGGER_TYPE_INSERT']: + data['evnt_insert'] = True + else: + data['evnt_insert'] = False + + if data['tgtype'] & self.trigger_definition['TRIGGER_TYPE_DELETE']: + data['evnt_delete'] = True + else: + data['evnt_delete'] = False + + if data['tgtype'] & self.trigger_definition['TRIGGER_TYPE_UPDATE']: + data['evnt_update'] = True + else: + data['evnt_update'] = False + + if data['tgtype'] & self.trigger_definition['TRIGGER_TYPE_TRUNCATE']: + data['evnt_truncate'] = True + else: + data['evnt_truncate'] = False + + return data + + @check_precondition + def properties(self, gid, sid, did, scid, tid, trid): + """ + This function will show the properties of the selected + compound trigger node. + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + + Returns: + JSON of selected compound trigger node + """ + + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + tid=tid, trid=trid, + datlastsysoid=self.datlastsysoid) + + status, res = self.conn.execute_dict(SQL) + + if not status: + return internal_server_error(errormsg=res) + + if len(res['rows']) == 0: + return gone(gettext( + """Could not find the compound trigger in the table.""")) + + # Making copy of output for future use + data = dict(res['rows'][0]) + if len(data['tgattr']) >= 1: + columns = ', '.join(data['tgattr'].split(' ')) + data['columns'] = self._column_details(tid, columns) + + data = self._trigger_definition(data) + + return ajax_response( + response=data, + status=200 + ) + + @check_precondition + def create(self, gid, sid, did, scid, tid): + """ + This function will creates new the compound trigger object + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + """ + data = request.form if request.form else json.loads( + request.data, encoding='utf-8' + ) + + for k, v in data.items(): + try: + # comments should be taken as is because if user enters a + # json comment it is parsed by loads which should not happen + if k in ('description',): + data[k] = v + else: + data[k] = json.loads(v, encoding='utf-8') + except (ValueError, TypeError, KeyError): + data[k] = v + + required_args = { + 'name': 'Name' + } + + for arg in required_args: + if arg not in data: + return make_json_response( + status=410, + success=0, + errormsg=gettext( + "Could not find the required parameter (%s)." % + required_args[arg] + ) + ) + + # Adding parent into data dict, will be using it while creating sql + data['schema'] = self.schema + data['table'] = self.table + + try: + SQL = render_template("/".join([self.template_path, + 'create.sql']), + data=data, conn=self.conn) + status, res = self.conn.execute_scalar(SQL) + if not status: + return internal_server_error(errormsg=res) + + # we need oid to to add object in tree at browser + SQL = render_template("/".join([self.template_path, + 'get_oid.sql']), + tid=tid, data=data) + status, trid = self.conn.execute_scalar(SQL) + if not status: + return internal_server_error(errormsg=tid) + + return jsonify( + node=self.blueprint.generate_browser_node( + trid, + tid, + data['name'], + icon="icon-compound_trigger" + ) + ) + except Exception as e: + return internal_server_error(errormsg=str(e)) + + @check_precondition + def delete(self, gid, sid, did, scid, tid, trid=None): + """ + This function will updates existing the compound trigger object + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + """ + if trid is None: + data = request.form if request.form else json.loads( + request.data, encoding='utf-8' + ) + else: + data = {'ids': [trid]} + + # Below will decide if it's simple drop or drop with cascade call + if self.cmd == 'delete': + # This is a cascade operation + cascade = True + else: + cascade = False + + try: + for trid in data['ids']: + # We will first fetch the compound trigger name for + # current request so that we create template for + # dropping compound trigger + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + tid=tid, trid=trid, + datlastsysoid=self.datlastsysoid) + + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + + if not res['rows']: + return make_json_response( + success=0, + errormsg=gettext( + 'Error: Object not found.' + ), + info=gettext( + 'The specified compound trigger could not be ' + 'found.\n' + ) + ) + + data = dict(res['rows'][0]) + + SQL = render_template("/".join([self.template_path, + 'delete.sql']), + data=data, + conn=self.conn, + cascade=cascade + ) + status, res = self.conn.execute_scalar(SQL) + if not status: + return internal_server_error(errormsg=res) + + return make_json_response( + success=1, + info=gettext("Compound Trigger is dropped") + ) + + except Exception as e: + return internal_server_error(errormsg=str(e)) + + @check_precondition + def update(self, gid, sid, did, scid, tid, trid): + """ + This function will updates existing the compound trigger object + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + """ + data = request.form if request.form else json.loads( + request.data, encoding='utf-8' + ) + + try: + data['schema'] = self.schema + data['table'] = self.table + + SQL, name = self.get_sql(scid, tid, trid, data) + if not isinstance(SQL, (str, unicode)): + return SQL + SQL = SQL.strip('\n').strip(' ') + status, res = self.conn.execute_scalar(SQL) + if not status: + return internal_server_error(errormsg=res) + + # We need oid to add object in browser tree and if user + # update the compound trigger then new OID is getting generated + # so we need to return new OID of compound trigger. + SQL = render_template( + "/".join([self.template_path, 'get_oid.sql']), + tid=tid, data=data + ) + status, new_trid = self.conn.execute_scalar(SQL) + if not status: + return internal_server_error(errormsg=new_trid) + # Fetch updated properties + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + tid=tid, trid=new_trid, + datlastsysoid=self.datlastsysoid) + + status, res = self.conn.execute_dict(SQL) + + if not status: + return internal_server_error(errormsg=res) + + if len(res['rows']) == 0: + return gone(gettext( + """Could not find the compound trigger in the table.""")) + + # Making copy of output for future use + data = dict(res['rows'][0]) + + return jsonify( + node=self.blueprint.generate_browser_node( + new_trid, + tid, + name, + icon="icon-%s" % self.node_type if + data['is_enable_trigger'] else + "icon-%s-bad" % self.node_type + ) + ) + except Exception as e: + return internal_server_error(errormsg=str(e)) + + @check_precondition + def msql(self, gid, sid, did, scid, tid, trid=None): + """ + This function will generates modified sql for compound trigger object + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID (When working with existing compound trigger) + """ + data = dict() + for k, v in request.args.items(): + try: + # comments should be taken as is because if user enters a + # json comment it is parsed by loads which should not happen + if k in ('description',): + data[k] = v + else: + data[k] = json.loads(v, encoding='utf-8') + except ValueError: + data[k] = v + + # Adding parent into data dict, will be using it while creating sql + data['schema'] = self.schema + data['table'] = self.table + + try: + sql, name = self.get_sql(scid, tid, trid, data) + if not isinstance(sql, (str, unicode)): + return sql + sql = sql.strip('\n').strip(' ') + + if sql == '': + sql = "--modified SQL" + return make_json_response( + data=sql, + status=200 + ) + except Exception as e: + return internal_server_error(errormsg=str(e)) + + def get_sql(self, scid, tid, trid, data): + """ + This function will genrate sql from model data + """ + if trid is not None: + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + tid=tid, trid=trid, + datlastsysoid=self.datlastsysoid) + + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + if len(res['rows']) == 0: + return gone(gettext( + """Could not find the compound trigger in the table.""") + ) + + old_data = dict(res['rows'][0]) + + # If name is not present in data then + # we will fetch it from old data, we also need schema & table name + if 'name' not in data: + data['name'] = old_data['name'] + + self.trigger_name = data['name'] + self.is_trigger_enabled = old_data['is_enable_trigger'] + + if len(old_data['tgattr']) > 1: + columns = ', '.join(old_data['tgattr'].split(' ')) + old_data['columns'] = self._column_details(tid, columns) + + old_data = self._trigger_definition(old_data) + + SQL = render_template( + "/".join([self.template_path, 'update.sql']), + data=data, o_data=old_data, conn=self.conn + ) + else: + required_args = { + 'name': 'Name' + } + + for arg in required_args: + if arg not in data: + return gettext('-- definition incomplete') + + # If the request for new object which do not have did + SQL = render_template("/".join([self.template_path, 'create.sql']), + data=data, conn=self.conn) + return SQL, data['name'] if 'name' in data else old_data['name'] + + @check_precondition + def sql(self, gid, sid, did, scid, tid, trid): + """ + This function will generates reverse engineered sql for + compound trigger object + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + """ + + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + tid=tid, trid=trid, + datlastsysoid=self.datlastsysoid) + + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + if len(res['rows']) == 0: + return gone(gettext( + """Could not find the compound trigger in the table.""")) + + data = dict(res['rows'][0]) + # Adding parent into data dict, will be using it while creating sql + data['schema'] = self.schema + data['table'] = self.table + + if len(data['tgattr']) >= 1: + columns = ', '.join(data['tgattr'].split(' ')) + data['columns'] = self._column_details(tid, columns) + + data = self._trigger_definition(data) + + SQL, name = self.get_sql(scid, tid, None, data) + + sql_header = u"-- Compound Trigger: {0}\n\n-- ".format(data['name']) + + sql_header += render_template("/".join([self.template_path, + 'delete.sql']), + data=data, conn=self.conn) + + SQL = sql_header + '\n\n' + SQL.strip('\n') + + # If compound trigger is disbaled then add sql code for the same + if not data['is_enable_trigger']: + SQL += '\n\n' + SQL += render_template("/".join([self.template_path, + 'enable_disable_trigger.sql']), + data=data, conn=self.conn) + + return ajax_response(response=SQL) + + @check_precondition + def enable_disable_trigger(self, gid, sid, did, scid, tid, trid): + """ + This function will enable OR disable the current + compound trigger object + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + """ + + data = request.form if request.form else json.loads( + request.data, encoding='utf-8' + ) + + # Convert str 'true' to boolean type + is_enable_flag = json.loads(data['enable']) + + try: + + SQL = render_template("/".join([self.template_path, + 'properties.sql']), + tid=tid, trid=trid, + datlastsysoid=self.datlastsysoid) + + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + if len(res['rows']) == 0: + return gone(gettext( + """Could not find the compound trigger in the table.""") + ) + + o_data = dict(res['rows'][0]) + + # If enable is set to true means we need SQL to enable + # current compound trigger which is disabled already so we need to + # alter the 'is_enable_trigger' flag so that we can render + # correct SQL for operation + o_data['is_enable_trigger'] = is_enable_flag + + # Adding parent into data dict, will be using it while creating sql + o_data['schema'] = self.schema + o_data['table'] = self.table + + SQL = render_template("/".join([self.template_path, + 'enable_disable_trigger.sql']), + data=o_data, conn=self.conn) + status, res = self.conn.execute_scalar(SQL) + + if not status: + return internal_server_error(errormsg=res) + + return make_json_response( + success=1, + info="Compound Trigger updated", + data={ + 'id': trid, + 'tid': tid, + 'scid': scid + } + ) + except Exception as e: + return internal_server_error(errormsg=str(e)) + + @check_precondition + def dependents(self, gid, sid, did, scid, tid, trid): + """ + This function get the dependents and return ajax response + for the compound trigger node. + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + """ + dependents_result = self.get_dependents( + self.conn, trid + ) + + return ajax_response( + response=dependents_result, + status=200 + ) + + @check_precondition + def dependencies(self, gid, sid, did, scid, tid, trid): + """ + This function get the dependencies and return ajax response + for the compound trigger node. + + Args: + gid: Server Group ID + sid: Server ID + did: Database ID + scid: Schema ID + tid: Table ID + trid: Trigger ID + + """ + dependencies_result = self.get_dependencies( + self.conn, trid + ) + + return ajax_response( + response=dependencies_result, + status=200 + ) + + +CompoundTriggerView.register_node_view(blueprint) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/coll-compound_trigger.svg b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/coll-compound_trigger.svg new file mode 100644 index 000000000..24a290208 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/coll-compound_trigger.svg @@ -0,0 +1 @@ +coll_compound_trigger \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger-bad.svg b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger-bad.svg new file mode 100644 index 000000000..ec0f8f455 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger-bad.svg @@ -0,0 +1 @@ +compud_trigger_disable \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger.svg b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger.svg new file mode 100644 index 000000000..837cfe010 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/img/compound_trigger.svg @@ -0,0 +1 @@ +compund_trigger \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js new file mode 100644 index 000000000..109c33f24 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger.js @@ -0,0 +1,412 @@ +///////////////////////////////////////////////////////////// +// +// pgAdmin 4 - PostgreSQL Tools +// +// Copyright (C) 2013 - 2019, The pgAdmin Development Team +// This software is released under the PostgreSQL Licence +// +////////////////////////////////////////////////////////////// + +define('pgadmin.node.compound_trigger', [ + 'sources/gettext', 'sources/url_for', 'jquery', 'underscore', + 'underscore.string', 'sources/pgadmin', 'pgadmin.browser', + 'pgadmin.backform', 'pgadmin.alertifyjs', + 'pgadmin.node.schema.dir/schema_child_tree_node', + 'pgadmin.browser.collection', +], function( + gettext, url_for, $, _, S, pgAdmin, pgBrowser, Backform, alertify, + SchemaChildTreeNode +) { + + if (!pgBrowser.Nodes['coll-compound_trigger']) { + pgAdmin.Browser.Nodes['coll-compound_trigger'] = + pgAdmin.Browser.Collection.extend({ + node: 'compound_trigger', + label: gettext('Compound Triggers'), + type: 'coll-compound_trigger', + columns: ['name', 'description'], + canDrop: SchemaChildTreeNode.isTreeItemOfChildOfSchema, + canDropCascade: SchemaChildTreeNode.isTreeItemOfChildOfSchema, + }); + } + + if (!pgBrowser.Nodes['compound_trigger']) { + pgAdmin.Browser.Nodes['compound_trigger'] = pgBrowser.Node.extend({ + parent_type: ['table', 'view', 'partition'], + collection_type: ['coll-table', 'coll-view'], + type: 'compound_trigger', + label: gettext('Compound Trigger'), + hasSQL: true, + hasDepends: true, + width: pgBrowser.stdW.sm + 'px', + sqlAlterHelp: 'sql-altertcompoundtrigger.html', + sqlCreateHelp: 'sql-createcompoundtrigger.html', + dialogHelp: url_for('help.static', {'filename': 'compound_trigger_dialog.html'}), + Init: function() { + /* Avoid mulitple registration of menus */ + if (this.initialized) + return; + + this.initialized = true; + + pgBrowser.add_menus([{ + name: 'create_compound_trigger_on_coll', node: 'coll-compound_trigger', module: this, + applies: ['object', 'context'], callback: 'show_obj_properties', + category: 'create', priority: 4, label: gettext('Compound Trigger...'), + icon: 'wcTabIcon icon-compound_trigger', data: {action: 'create', check: true}, + enable: 'canCreate', + },{ + name: 'create_compound_trigger', node: 'compound_trigger', module: this, + applies: ['object', 'context'], callback: 'show_obj_properties', + category: 'create', priority: 4, label: gettext('Compound Trigger...'), + icon: 'wcTabIcon icon-compound_trigger', data: {action: 'create', check: true}, + enable: 'canCreate', + },{ + name: 'create_compound_trigger_onTable', node: 'table', module: this, + applies: ['object', 'context'], callback: 'show_obj_properties', + category: 'create', priority: 4, label: gettext('Compound Trigger...'), + icon: 'wcTabIcon icon-compound_trigger', data: {action: 'create', check: true}, + enable: 'canCreate', + },{ + name: 'create_compound_trigger_onPartition', node: 'partition', module: this, + applies: ['object', 'context'], callback: 'show_obj_properties', + category: 'create', priority: 4, label: gettext('Compound Trigger...'), + icon: 'wcTabIcon icon-compound_trigger', data: {action: 'create', check: true}, + enable: 'canCreate', + },{ + name: 'enable_compound_trigger', node: 'compound_trigger', module: this, + applies: ['object', 'context'], callback: 'enable_compound_trigger', + category: 'connect', priority: 3, label: gettext('Enable compound trigger'), + icon: 'fa fa-check', enable : 'canCreate_with_compound_trigger_enable', + },{ + name: 'disable_compound_trigger', node: 'compound_trigger', module: this, + applies: ['object', 'context'], callback: 'disable_compound_trigger', + category: 'drop', priority: 3, label: gettext('Disable compound trigger'), + icon: 'fa fa-times', enable : 'canCreate_with_compound_trigger_disable', + },{ + name: 'create_compound_trigger_onView', node: 'view', module: this, + applies: ['object', 'context'], callback: 'show_obj_properties', + category: 'create', priority: 4, label: gettext('Compound Trigger...'), + icon: 'wcTabIcon icon-compound_trigger', data: {action: 'create', check: true}, + enable: 'canCreate', + }, + ]); + }, + callbacks: { + /* Enable compound trigger */ + enable_compound_trigger: function(args) { + var input = args || {}, + obj = this, + t = pgBrowser.tree, + i = input.item || t.selected(), + d = i && i.length == 1 ? t.itemData(i) : undefined; + + if (!d) + return false; + + var data = d; + $.ajax({ + url: obj.generate_url(i, 'enable' , d, true), + type:'PUT', + data: {'enable' : true}, + dataType: 'json', + }) + .done(function(res) { + if (res.success == 1) { + alertify.success(res.info); + t.removeIcon(i); + data.icon = 'icon-compound_trigger'; + t.addIcon(i, {icon: data.icon}); + t.unload(i); + t.setInode(false); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + } + }) + .fail(function(xhr, status, error) { + alertify.pgRespErrorNotify(xhr, error); + t.unload(i); + }); + }, + /* Disable compound trigger */ + disable_compound_trigger: function(args) { + var input = args || {}, + obj = this, + t = pgBrowser.tree, + i = input.item || t.selected(), + d = i && i.length == 1 ? t.itemData(i) : undefined; + + if (!d) + return false; + + var data = d; + $.ajax({ + url: obj.generate_url(i, 'enable' , d, true), + type:'PUT', + data: {'enable' : false}, + dataType: 'json', + }) + .done(function(res) { + if (res.success == 1) { + alertify.success(res.info); + t.removeIcon(i); + data.icon = 'icon-compound_trigger-bad'; + t.addIcon(i, {icon: data.icon}); + t.unload(i); + t.setInode(false); + t.deselect(i); + // Fetch updated data from server + setTimeout(function() { + t.select(i); + }, 10); + } + }) + .fail(function(xhr, status, error) { + alertify.pgRespErrorNotify(xhr, error, gettext('Disable compound trigger failed')); + t.unload(i); + }); + }, + }, + canDrop: SchemaChildTreeNode.isTreeItemOfChildOfSchema, + canDropCascade: SchemaChildTreeNode.isTreeItemOfChildOfSchema, + model: pgAdmin.Browser.Node.Model.extend({ + idAttribute: 'oid', + defaults: { + name: undefined, + }, + schema: [{ + id: 'name', label: gettext('Name'), cell: 'string', + type: 'text', disabled: 'inSchema', + },{ + id: 'oid', label: gettext('OID'), cell: 'string', + type: 'int', disabled: true, mode: ['properties'], + },{ + id: 'is_enable_trigger', label: gettext('Trigger enabled?'), + type: 'switch', disabled: 'inSchema', mode: ['edit', 'properties'], + },{ + type: 'nested', control: 'fieldset', mode: ['create','edit', 'properties'], + label: gettext('FOR Events'), group: gettext('Events'), contentClass: 'row', + schema:[{ + id: 'evnt_insert', label: gettext('INSERT'), + type: 'switch', mode: ['create','edit', 'properties'], + group: gettext('FOR Events'), + extraToggleClasses: 'pg-el-sm-6', + controlLabelClassName: 'control-label pg-el-sm-5 pg-el-12', + controlsClassName: 'pgadmin-controls pg-el-sm-7 pg-el-12', + disabled: function(m) { + var evn_insert = m.get('evnt_insert'); + if (!_.isUndefined(evn_insert) && m.node_info['server']['server_type'] == 'ppas') + return false; + return m.inSchemaWithModelCheck.apply(this, [m]); + }, + },{ + id: 'evnt_update', label: gettext('UPDATE'), + type: 'switch', mode: ['create','edit', 'properties'], + group: gettext('FOR Events'), + extraToggleClasses: 'pg-el-sm-6', + controlLabelClassName: 'control-label pg-el-sm-5 pg-el-12', + controlsClassName: 'pgadmin-controls pg-el-sm-7 pg-el-12', + disabled: function(m) { + var evn_update = m.get('evnt_update'); + if (!_.isUndefined(evn_update) && m.node_info['server']['server_type'] == 'ppas') + return false; + return m.inSchemaWithModelCheck.apply(this, [m]); + }, + },{ + id: 'evnt_delete', label: gettext('DELETE'), + type: 'switch', mode: ['create','edit', 'properties'], + group: gettext('FOR Events'), + extraToggleClasses: 'pg-el-sm-6', + controlLabelClassName: 'control-label pg-el-sm-5 pg-el-12', + controlsClassName: 'pgadmin-controls pg-el-sm-7 pg-el-12', + disabled: function(m) { + var evn_delete = m.get('evnt_delete'); + if (!_.isUndefined(evn_delete) && m.node_info['server']['server_type'] == 'ppas') + return false; + return m.inSchemaWithModelCheck.apply(this, [m]); + }, + }], + },{ + id: 'whenclause', label: gettext('When'), + type: 'text', disabled: 'inSchemaWithModelCheck', + mode: ['create', 'edit', 'properties'], + control: 'sql-field', visible: true, group: gettext('Events'), + },{ + id: 'columns', label: gettext('Columns'), url: 'nodes', + control: 'node-list-by-name', cache_node: 'column', type: 'array', + select2: {'multiple': true}, + deps: ['evnt_update'], node: 'column', group: gettext('Events'), + disabled: function(m) { + if(this.node_info && 'catalog' in this.node_info) { + return true; + } + //Disable in edit mode + if (!m.isNew()) { + return true; + } + // Enable column only if update event is set true + var isUpdate = m.get('evnt_update'); + if(!_.isUndefined(isUpdate) && isUpdate) { + return false; + } + return true; + }, + },{ + id: 'prosrc', label: gettext('Code'), group: gettext('Code'), + type: 'text', mode: ['create', 'edit'], + tabPanelCodeClass: 'sql-code-control', + control: Backform.SqlCodeControl, + disabled: function(m) { + if(m.isNew()) { + var code = m.getCodeTemplate(); + setTimeout(function() { + m.set('prosrc', code); + }, 10); + } + return false; + }, + },{ + id: 'is_sys_trigger', label: gettext('System trigger?'), cell: 'string', + type: 'switch', disabled: 'inSchemaWithModelCheck', mode: ['properties'], + },{ + id: 'description', label: gettext('Comment'), cell: 'string', + type: 'multiline', mode: ['properties', 'create', 'edit'], + disabled: 'inSchema', + }], + validate: function(keys) { + var msg; + this.errorModel.clear(); + + // If nothing to validate + if (keys && keys.length == 0) { + return null; + } + + if(_.isUndefined(this.get('name')) + || String(this.get('name')).replace(/^\s+|\s+$/g, '') == '') { + msg = gettext('Name cannot be empty.'); + this.errorModel.set('name', msg); + return msg; + } + + if(!this.get('evnt_truncate') && !this.get('evnt_delete') && + !this.get('evnt_update') && !this.get('evnt_insert')) { + msg = gettext('Specify at least one event.'); + this.errorModel.set('evnt_truncate', ' '); + this.errorModel.set('evnt_delete', ' '); + this.errorModel.set('evnt_update', ' '); + this.errorModel.set('evnt_insert', msg); + return msg; + } + + if(_.isUndefined(this.get('prosrc')) + || String(this.get('prosrc')).replace(/^\s+|\s+$/g, '') == '') { + msg = gettext('Code cannot be empty.'); + this.errorModel.set('prosrc', msg); + return msg; + } + + return null; + }, + // This function returns the code template for compound trigger + getCodeTemplate: function () { + return gettext('-- Enter any global declarations below:\n\n' + + '-- BEFORE STATEMENT block. Delete if not required.\n' + + 'BEFORE STATEMENT IS\n' + + ' -- Enter any local declarations here\n' + + 'BEGIN\n' + + ' -- Enter any required code here\n' + + 'END;\n\n' + + '-- AFTER STATEMENT block. Delete if not required.\n' + + 'AFTER STATEMENT IS\n' + + ' -- Enter any local declarations here\n' + + 'BEGIN\n' + + ' -- Enter any required code here\n' + + 'END;\n\n' + + '-- BEFORE EACH ROW block. Delete if not required.\n' + + 'BEFORE EACH ROW IS\n' + + ' -- Enter any local declarations here\n' + + 'BEGIN\n' + + ' -- Enter any required code here\n' + + 'END;\n\n' + + '-- AFTER EACH ROW block. Delete if not required.\n' + + 'AFTER EACH ROW IS\n' + + ' -- Enter any local declarations here\n' + + 'BEGIN\n' + + ' -- Enter any required code here\n' + + 'END;'); + }, + // We will check if we are under schema node & in 'create' mode + inSchema: function() { + if(this.node_info && 'catalog' in this.node_info) { + return true; + } + return false; + }, + // We will check if we are under schema node & in 'create' mode + inSchemaWithModelCheck: function(m) { + if(this.node_info && 'schema' in this.node_info) { + // We will disable control if it's in 'edit' mode + if (m.isNew()) { + return false; + } else { + return true; + } + } + return true; + }, + // Checks weather to enable/disable control + inSchemaWithColumnCheck: function(m) { + if(this.node_info && 'schema' in this.node_info) { + // We will disable control if it's system columns + // ie: it's position is less then 1 + if (m.isNew()) { + return false; + } else { + // if we are in edit mode + if (!_.isUndefined(m.get('attnum')) && m.get('attnum') >= 1 ) { + return false; + } else { + return true; + } + } + } + return true; + }, + }), + canCreate: function(itemData, item, data) { + //If check is false then , we will allow create menu + if (data && data.check == false) + return true; + + var treeData = this.getTreeNodeHierarchy(item), + server = treeData['server']; + + if (server && (server.server_type === 'pg' || server.version < 120000)) + return false; + + // If it is catalog then don't allow user to create package + if (treeData['catalog'] != undefined) + return false; + + // by default we want to allow create menu + return true; + }, + // Check to whether trigger is disable ? + canCreate_with_compound_trigger_enable: function(itemData, item, data) { + return itemData.icon === 'icon-compound_trigger-bad' && + this.canCreate.apply(this, [itemData, item, data]); + }, + // Check to whether trigger is enable ? + canCreate_with_compound_trigger_disable: function(itemData, item, data) { + return itemData.icon === 'icon-compound_trigger' && + this.canCreate.apply(this, [itemData, item, data]); + }, + }); + } + + return pgBrowser.Nodes['compound_trigger']; +}); diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/templates/compound_triggers/css/compound_trigger.css b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/templates/compound_triggers/css/compound_trigger.css new file mode 100644 index 000000000..198a1845a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/templates/compound_triggers/css/compound_trigger.css @@ -0,0 +1,23 @@ +.icon-coll-compound_trigger { + background-image: url('{{ url_for('NODE-compound_trigger.static', filename='img/coll-compound_trigger.svg' )}}') !important; + background-repeat: no-repeat; + background-size: 20px !important; + align-content: center; + vertical-align: middle; + height: 1.3em; +} + +.icon-compound_trigger { + background-image: url('{{ url_for('NODE-compound_trigger.static', filename='img/compound_trigger.svg') }}') !important; + background-repeat: no-repeat; + background-size: 20px !important; + align-content: center; + vertical-align: middle; + height: 1.3em; +} + +.icon-compound_trigger-bad { + background-image: url('{{ url_for('NODE-compound_trigger.static', filename='img/compound_trigger-bad.svg') }}') !important; + background-size: 20px !important; + border-radius: 10px +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/__init__.py new file mode 100644 index 000000000..e9206708f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/__init__.py @@ -0,0 +1,16 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2019, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from pgadmin.utils.route import BaseTestGenerator + + +class CompoundTriggersTestGenerator(BaseTestGenerator): + + def runTest(self): + return [] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/alter_event_comment_code.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/alter_event_comment_code.sql new file mode 100644 index 000000000..f40affcf8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/alter_event_comment_code.sql @@ -0,0 +1,26 @@ +-- Compound Trigger: test_compound_trigger_$%{}[]()&*^!@"'`\/# + +-- DROP TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" ON testschema.table_for_compound_trigger; + +CREATE OR REPLACE TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" + FOR INSERT OR UPDATE + ON testschema.table_for_compound_trigger + WHEN ((new.id < 100)) + COMPOUND TRIGGER +var character varying(20) DEFAULT 'Global_var'; + +AFTER STATEMENT IS +BEGIN + DBMS_OUTPUT.PUT_LINE('After Statement: ' || var); + var := 'AFTER STATEMENT'; +END; + +AFTER EACH ROW IS +BEGIN + DBMS_OUTPUT.PUT_LINE('After each row: ' || var); + var := 'AFTER EACH ROW'; +END; +END "test_compound_trigger_$%{}[]()&*^!@""'`\/#"; + +COMMENT ON TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" ON testschema.table_for_compound_trigger + IS 'This is test comment.'; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_delete.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_delete.sql new file mode 100644 index 000000000..4b60e7c21 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_delete.sql @@ -0,0 +1,13 @@ +-- Compound Trigger: test_compound_trigger_$%{}[]()&*^!@"'`\/# + +-- DROP TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" ON testschema.table_for_compound_trigger; + +CREATE OR REPLACE TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" + FOR INSERT OR DELETE + ON testschema.table_for_compound_trigger + COMPOUND TRIGGER +BEFORE STATEMENT IS +BEGIN + SELECT 1; +END; +END "test_compound_trigger_$%{}[]()&*^!@""'`\/#"; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_update_on_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_update_on_columns.sql new file mode 100644 index 000000000..874bbf154 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_update_on_columns.sql @@ -0,0 +1,22 @@ +-- Compound Trigger: test_compound_trigger_$%{}[]()&*^!@"'`\/# + +-- DROP TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" ON testschema.table_for_compound_trigger; + +CREATE OR REPLACE TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" + FOR INSERT OR UPDATE OF id, name + ON testschema.table_for_compound_trigger + COMPOUND TRIGGER +var character varying(20) DEFAULT 'Global_var'; + +BEFORE STATEMENT IS +BEGIN + DBMS_OUTPUT.PUT_LINE('Before Statement: ' || var); + var := 'BEFORE STATEMENT'; +END; + +BEFORE EACH ROW IS +BEGIN + DBMS_OUTPUT.PUT_LINE('Before each row: ' || var); + var := 'BEFORE EACH ROW'; +END; +END "test_compound_trigger_$%{}[]()&*^!@""'`\/#"; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_with_when.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_with_when.sql new file mode 100644 index 000000000..773f82fff --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/create_for_insert_with_when.sql @@ -0,0 +1,23 @@ +-- Compound Trigger: test_compound_trigger_$%{}[]()&*^!@"'`\/# + +-- DROP TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" ON testschema.table_for_compound_trigger; + +CREATE OR REPLACE TRIGGER "test_compound_trigger_$%{}[]()&*^!@""'`\/#" + FOR INSERT + ON testschema.table_for_compound_trigger + WHEN ((new.id < 100)) + COMPOUND TRIGGER +var character varying(20) DEFAULT 'Global_var'; + +BEFORE STATEMENT IS +BEGIN + DBMS_OUTPUT.PUT_LINE('Before Statement: ' || var); + var := 'BEFORE STATEMENT'; +END; + +BEFORE EACH ROW IS +BEGIN + DBMS_OUTPUT.PUT_LINE('Before each row: ' || var); + var := 'BEFORE EACH ROW'; +END; +END "test_compound_trigger_$%{}[]()&*^!@""'`\/#"; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/test.json b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/test.json new file mode 100644 index 000000000..9037c195f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/ppas/12_plus/test.json @@ -0,0 +1,99 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create Table", + "endpoint": "NODE-table.obj", + "sql_endpoint": "NODE-table.sql_id", + "data": { + "name": "table_for_compound_trigger", + "columns": [{ + "name": "id", + "cltype": "integer", + "is_primary_key": true + }, { + "name": "name", + "cltype": "text" + }], + "is_partitioned": false, + "schema": "testschema", + "spcname": "pg_default" + }, + "store_table_id": true + }, { + "type": "create", + "name": "Create compound trigger for insert or delete", + "endpoint": "NODE-compound_trigger.obj", + "sql_endpoint": "NODE-compound_trigger.sql_id", + "data": { + "name": "test_compound_trigger_$%{}[]()&*^!@\"'`\\/#", + "prosrc": "BEFORE STATEMENT IS\nBEGIN\n\tSELECT 1;\nEND;", + "evnt_insert": true, + "evnt_update": false, + "evnt_delete": true, + "columns": ["id", "name"] + }, + "expected_sql_file": "create_for_insert_delete.sql" + }, { + "type": "delete", + "name": "Drop Compound Trigger", + "endpoint": "NODE-compound_trigger.delete_id", + "data": { + "name": "test_compound_trigger_$%{}[]()&*^!@\"'`\\/#" + } + }, { + "type": "create", + "name": "Create compound trigger for insert with when condition", + "endpoint": "NODE-compound_trigger.obj", + "sql_endpoint": "NODE-compound_trigger.sql_id", + "data": { + "name": "test_compound_trigger_$%{}[]()&*^!@\"'`\\/#", + "prosrc": "var varchar2(20) := 'Global_var';\n\nBEFORE STATEMENT IS\nBEGIN\n\tDBMS_OUTPUT.PUT_LINE('Before Statement: ' || var);\n\tvar := 'BEFORE STATEMENT';\nEND;\n\nBEFORE EACH ROW IS\nBEGIN\n\tDBMS_OUTPUT.PUT_LINE('Before each row: ' || var);\n\tvar := 'BEFORE EACH ROW';\nEND;", + "evnt_insert": true, + "evnt_update": false, + "evnt_delete": false, + "whenclause": "NEW.id < 100" + }, + "expected_sql_file": "create_for_insert_with_when.sql" + }, { + "type": "alter", + "name": "Alter event, comment and code", + "endpoint": "NODE-compound_trigger.obj_id", + "sql_endpoint": "NODE-compound_trigger.sql_id", + "data": { + "prosrc": "var varchar2(20) := 'Global_var';\n\nAFTER STATEMENT IS\nBEGIN\n\tDBMS_OUTPUT.PUT_LINE('After Statement: ' || var);\n\tvar := 'AFTER STATEMENT';\nEND;\n\nAFTER EACH ROW IS\nBEGIN\n\tDBMS_OUTPUT.PUT_LINE('After each row: ' || var);\n\tvar := 'AFTER EACH ROW';\nEND;", + "evnt_update": true, + "description": "This is test comment." + }, + "expected_sql_file": "alter_event_comment_code.sql" + }, { + "type": "delete", + "name": "Drop Compound Trigger", + "endpoint": "NODE-compound_trigger.delete_id", + "data": { + "name": "test_compound_trigger_$%{}[]()&*^!@\"'`\\/#" + } + }, { + "type": "create", + "name": "Create compound trigger for insert or update on columns", + "endpoint": "NODE-compound_trigger.obj", + "sql_endpoint": "NODE-compound_trigger.sql_id", + "data": { + "name": "test_compound_trigger_$%{}[]()&*^!@\"'`\\/#", + "prosrc": "var varchar2(20) := 'Global_var';\n\nBEFORE STATEMENT IS\nBEGIN\n\tDBMS_OUTPUT.PUT_LINE('Before Statement: ' || var);\n\tvar := 'BEFORE STATEMENT';\nEND;\n\nBEFORE EACH ROW IS\nBEGIN\n\tDBMS_OUTPUT.PUT_LINE('Before each row: ' || var);\n\tvar := 'BEFORE EACH ROW';\nEND;", + "evnt_insert": true, + "evnt_update": true, + "evnt_delete": false, + "columns": ["id", "name"] + }, + "expected_sql_file": "create_for_insert_update_on_columns.sql" + }, { + "type": "delete", + "name": "Drop Compound Trigger", + "endpoint": "NODE-compound_trigger.delete_id", + "data": { + "name": "test_compound_trigger_$%{}[]()&*^!@\"'`\\/#" + } + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_add.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_add.py new file mode 100644 index 000000000..ba839aeef --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_add.py @@ -0,0 +1,134 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2019, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import json +import uuid + +from pgadmin.utils import server_utils as server_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tables.tests \ + import utils as tables_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils + + +class CompoundTriggersAddTestCase(BaseTestGenerator): + """This class will add new compound trigger under table node.""" + skip_on_database = ['gpdb'] + scenarios = [ + ('Create compound trigger for insert and delete', + dict( + url='/browser/compound_trigger/obj/', + data={ + "prosrc": "var varchar2(20) := 'Global_var';\n\n" + "BEFORE STATEMENT IS\nBEGIN\n " + "DBMS_OUTPUT.PUT_LINE('Before Statement: ' || var)" + ";\n var := 'BEFORE STATEMENT';\nEND;\n\nBEFORE " + "EACH ROW IS\nBEGIN\n DBMS_OUTPUT.PUT_LINE('" + "Before each row: ' || var);\n var := 'BEFORE " + "EACH ROW';\nEND;", + "evnt_insert": True, + "evnt_update": False, + "evnt_delete": True + } + )), + ('Create compound trigger for insert with when condition', + dict( + url='/browser/compound_trigger/obj/', + data={ + "prosrc": "var varchar2(20) := 'Global_var';\n\n" + "BEFORE STATEMENT IS\nBEGIN\n " + "DBMS_OUTPUT.PUT_LINE('Before Statement: ' || var)" + ";\n var := 'BEFORE STATEMENT';\nEND;\n\nBEFORE " + "EACH ROW IS\nBEGIN\n DBMS_OUTPUT.PUT_LINE('" + "Before each row: ' || var);\n var := 'BEFORE " + "EACH ROW';\nEND;", + "evnt_insert": True, + "evnt_update": False, + "evnt_delete": False, + "whenclause": "NEW.id < 100" + } + )), + ('Create compound trigger for insert or update on columns', + dict( + url='/browser/compound_trigger/obj/', + data={ + "prosrc": "var varchar2(20) := 'Global_var';\n\n" + "BEFORE STATEMENT IS\nBEGIN\n " + "DBMS_OUTPUT.PUT_LINE('Before Statement: ' || var)" + ";\n var := 'BEFORE STATEMENT';\nEND;\n\nBEFORE " + "EACH ROW IS\nBEGIN\n DBMS_OUTPUT.PUT_LINE('" + "Before each row: ' || var);\n var := 'BEFORE " + "EACH ROW';\nEND;", + "evnt_insert": True, + "evnt_update": True, + "columns": ["id", "name"] + } + )), + ] + + def setUp(self): + super(CompoundTriggersAddTestCase, self).setUp() + self.db_name = parent_node_dict["database"][-1]["db_name"] + schema_info = parent_node_dict["schema"][-1] + self.server_id = schema_info["server_id"] + self.db_id = schema_info["db_id"] + server_con = server_utils.connect_server(self, self.server_id) + if server_con: + if "type" in server_con["data"]: + if server_con["data"]["type"] == "pg": + message = "Compound Triggers are not supported by PG." + self.skipTest(message) + elif server_con["data"]["type"] == "ppas" \ + and server_con["data"]["version"] < 120000: + message = "Compound Triggers are not supported by " \ + "EPAS server less than 12" + self.skipTest(message) + + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception("Could not connect to database to add a trigger.") + self.schema_id = schema_info["schema_id"] + self.schema_name = schema_info["schema_name"] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + self.schema_name) + if not schema_response: + raise Exception( + "Could not find the schema to add a compound trigger.") + self.table_name = \ + "table_compound_trigger_%s" % (str(uuid.uuid4())[1:8]) + self.table_id = tables_utils.create_table(self.server, self.db_name, + self.schema_name, + self.table_name) + + def runTest(self): + """This function will create compound trigger under table node.""" + trigger_name = \ + "test_compound_trigger_add_%s" % (str(uuid.uuid4())[1:8]) + + self.data.update({"name": trigger_name}) + + response = self.tester.post( + "{0}{1}/{2}/{3}/{4}/{5}/".format(self.url, utils.SERVER_GROUP, + self.server_id, self.db_id, + self.schema_id, self.table_id), + data=json.dumps(self.data), + content_type='html/json' + ) + self.assertEquals(response.status_code, 200) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete.py new file mode 100644 index 000000000..e55698566 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete.py @@ -0,0 +1,98 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2019, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import uuid + +from pgadmin.utils import server_utils as server_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tables.tests \ + import utils as tables_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils +from . import utils as compound_triggers_utils + + +class CompoundTriggersDeleteTestCase(BaseTestGenerator): + """This class will delete compound trigger under table node.""" + skip_on_database = ['gpdb'] + scenarios = [ + ('Delete compound trigger', + dict(url='/browser/compound_trigger/obj/')) + ] + + def setUp(self): + super(CompoundTriggersDeleteTestCase, self).setUp() + self.db_name = parent_node_dict["database"][-1]["db_name"] + schema_info = parent_node_dict["schema"][-1] + self.server_id = schema_info["server_id"] + self.db_id = schema_info["db_id"] + server_con = server_utils.connect_server(self, self.server_id) + if server_con: + if "type" in server_con["data"]: + if server_con["data"]["type"] == "pg": + message = "Compound Triggers are not supported by PG." + self.skipTest(message) + elif server_con["data"]["type"] == "ppas" \ + and server_con["data"]["version"] < 120000: + message = "Compound Triggers are not supported by " \ + "EPAS server less than 12" + self.skipTest(message) + + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception( + "Could not connect to database to delete a compound trigger.") + self.schema_id = schema_info["schema_id"] + self.schema_name = schema_info["schema_name"] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + self.schema_name) + if not schema_response: + raise Exception( + "Could not find the schema to delete a compound trigger.") + self.table_name = \ + "table_compound_trigger_%s" % (str(uuid.uuid4())[1:8]) + self.table_id = tables_utils.create_table(self.server, self.db_name, + self.schema_name, + self.table_name) + + self.trigger_name = \ + "test_compound_trigger_delete_%s" % (str(uuid.uuid4())[1:8]) + self.trigger_id = \ + compound_triggers_utils.create_compound_trigger(self.server, + self.db_name, + self.schema_name, + self.table_name, + self.trigger_name) + + def runTest(self): + """This function will update trigger under table node.""" + trigger_response = \ + compound_triggers_utils.verify_compound_trigger(self.server, + self.db_name, + self.trigger_name) + if not trigger_response: + raise Exception("Could not find the compound trigger to delete.") + response = self.tester.delete( + "{0}{1}/{2}/{3}/{4}/{5}/{6}".format(self.url, utils.SERVER_GROUP, + self.server_id, self.db_id, + self.schema_id, self.table_id, + self.trigger_id), + follow_redirects=True + ) + self.assertEquals(response.status_code, 200) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete_multiple.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete_multiple.py new file mode 100644 index 000000000..d7019224b --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_delete_multiple.py @@ -0,0 +1,112 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2019, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import uuid +import json + +from pgadmin.utils import server_utils as server_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tables.tests \ + import utils as tables_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils +from . import utils as compound_triggers_utils + + +class CompoundTriggersDeleteMultipleTestCase(BaseTestGenerator): + """This class will delete multiple compound triggers under table node.""" + skip_on_database = ['gpdb'] + scenarios = [ + ('Delete multiple compound trigger', + dict(url='/browser/compound_trigger/obj/')) + ] + + def setUp(self): + super(CompoundTriggersDeleteMultipleTestCase, self).setUp() + self.db_name = parent_node_dict["database"][-1]["db_name"] + schema_info = parent_node_dict["schema"][-1] + self.server_id = schema_info["server_id"] + self.db_id = schema_info["db_id"] + server_con = server_utils.connect_server(self, self.server_id) + if server_con: + if "type" in server_con["data"]: + if server_con["data"]["type"] == "pg": + message = "Compound Triggers are not supported by PG." + self.skipTest(message) + elif server_con["data"]["type"] == "ppas" \ + and server_con["data"]["version"] < 120000: + message = "Compound Triggers are not supported by " \ + "EPAS server less than 12" + self.skipTest(message) + + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception( + "Could not connect to database to delete a compound trigger.") + self.schema_id = schema_info["schema_id"] + self.schema_name = schema_info["schema_name"] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + self.schema_name) + if not schema_response: + raise Exception( + "Could not find the schema to delete a compound trigger.") + self.table_name = \ + "table_compound_trigger_%s" % (str(uuid.uuid4())[1:8]) + self.table_id = tables_utils.create_table(self.server, self.db_name, + self.schema_name, + self.table_name) + + self.trigger_name = \ + "test_trigger_delete_%s" % (str(uuid.uuid4())[1:8]) + self.trigger_name_1 = \ + "test_trigger_delete_%s" % (str(uuid.uuid4())[1:8]) + self.trigger_ids = [compound_triggers_utils.create_compound_trigger( + self.server, self.db_name, self.schema_name, self.table_name, + self.trigger_name), + compound_triggers_utils.create_compound_trigger( + self.server, self.db_name, self.schema_name, self.table_name, + self.trigger_name_1) + ] + + def runTest(self): + """This function will delete multiple compound trigger under + table node.""" + trigger_response = \ + compound_triggers_utils.verify_compound_trigger( + self.server, self.db_name, self.trigger_name) + if not trigger_response: + raise Exception("Could not find the compound trigger to delete.") + + trigger_response = \ + compound_triggers_utils.verify_compound_trigger( + self.server, self.db_name, self.trigger_name_1) + if not trigger_response: + raise Exception("Could not find the compound trigger to delete.") + + data = {'ids': self.trigger_ids} + response = self.tester.delete( + "{0}{1}/{2}/{3}/{4}/{5}/".format(self.url, utils.SERVER_GROUP, + self.server_id, self.db_id, + self.schema_id, self.table_id + ), + follow_redirects=True, + data=json.dumps(data), + content_type='html/json' + ) + self.assertEquals(response.status_code, 200) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py new file mode 100644 index 000000000..526bd9840 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/test_compound_triggers_put.py @@ -0,0 +1,134 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2019, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +import json +import uuid + +from pgadmin.utils import server_utils as server_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tables.tests \ + import utils as tables_utils +from pgadmin.browser.server_groups.servers.databases.schemas.tests import \ + utils as schema_utils +from pgadmin.browser.server_groups.servers.databases.tests import utils as \ + database_utils +from pgadmin.utils.route import BaseTestGenerator +from regression import parent_node_dict +from regression.python_test_utils import test_utils as utils +from . import utils as compound_triggers_utils + + +class CompoundTriggersUpdateTestCase(BaseTestGenerator): + """This class will update compound trigger under table node.""" + skip_on_database = ['gpdb'] + scenarios = [ + ('Update comment', + dict(url='/browser/compound_trigger/obj/', + data={"description": "This is test comment."} + )), + ('Update event and code', + dict(url='/browser/compound_trigger/obj/', + data={ + "evnt_update": True, + "prosrc": "var varchar2(20) := 'Global_var';\n\n" + "AFTER STATEMENT IS\nBEGIN\n " + "DBMS_OUTPUT.PUT_LINE('After Statement: ' || var)" + ";\n var := 'AFTER STATEMENT';\nEND;\n\nAFTER " + "EACH ROW IS\nBEGIN\n DBMS_OUTPUT.PUT_LINE('" + "After each row: ' || var);\n var := 'AFTER " + "EACH ROW';\nEND;", + })), + ('Enable compound trigger', + dict(url='/browser/compound_trigger/obj/', + data={"is_enable_trigger": True}, + disable_trigger=True + )), + ('Disable compound trigger', + dict(url='/browser/compound_trigger/obj/', + data={"is_enable_trigger": False} + )), + ] + + def setUp(self): + super(CompoundTriggersUpdateTestCase, self).setUp() + self.db_name = parent_node_dict["database"][-1]["db_name"] + schema_info = parent_node_dict["schema"][-1] + self.server_id = schema_info["server_id"] + self.db_id = schema_info["db_id"] + server_con = server_utils.connect_server(self, self.server_id) + if server_con: + if "type" in server_con["data"]: + if server_con["data"]["type"] == "pg": + message = "Compound Triggers are not supported by PG." + self.skipTest(message) + elif server_con["data"]["type"] == "ppas" \ + and server_con["data"]["version"] < 120000: + message = "Compound Triggers are not supported by " \ + "EPAS server less than 12" + self.skipTest(message) + + db_con = database_utils.connect_database(self, utils.SERVER_GROUP, + self.server_id, self.db_id) + if not db_con['data']["connected"]: + raise Exception( + "Could not connect to database to update a compound trigger.") + self.schema_id = schema_info["schema_id"] + self.schema_name = schema_info["schema_name"] + schema_response = schema_utils.verify_schemas(self.server, + self.db_name, + self.schema_name) + if not schema_response: + raise Exception("Could not find the schema to update a trigger.") + self.table_name = \ + "table_compound_trigger_%s" % (str(uuid.uuid4())[1:8]) + self.table_id = tables_utils.create_table(self.server, self.db_name, + self.schema_name, + self.table_name) + + self.trigger_name = \ + "test_compound_trigger_update_%s" % (str(uuid.uuid4())[1:8]) + self.trigger_id = \ + compound_triggers_utils.create_compound_trigger(self.server, + self.db_name, + self.schema_name, + self.table_name, + self.trigger_name) + + def runTest(self): + """This function will update trigger under table node.""" + trigger_response = \ + compound_triggers_utils.verify_compound_trigger(self.server, + self.db_name, + self.trigger_name) + if not trigger_response: + raise Exception("Could not find the compound trigger to update.") + + if hasattr(self, 'disable_trigger') and self.disable_trigger: + compound_triggers_utils.enable_disable_compound_trigger( + self.server, + self.db_name, + self.schema_name, + self.table_name, + self.trigger_name, + False + ) + + self.data.update({"id": self.trigger_id}) + response = self.tester.put( + "{0}{1}/{2}/{3}/{4}/{5}/{6}".format(self.url, utils.SERVER_GROUP, + self.server_id, self.db_id, + self.schema_id, self.table_id, + self.trigger_id), + data=json.dumps(self.data), + follow_redirects=True + ) + self.assertEquals(response.status_code, 200) + + def tearDown(self): + # Disconnect the database + database_utils.disconnect_database(self, self.server_id, self.db_id) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py new file mode 100644 index 000000000..483d172d8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/tests/utils.py @@ -0,0 +1,137 @@ +########################################################################## +# +# pgAdmin 4 - PostgreSQL Tools +# +# Copyright (C) 2013 - 2019, The pgAdmin Development Team +# This software is released under the PostgreSQL Licence +# +########################################################################## + +from __future__ import print_function + +import sys +import traceback + +from regression.python_test_utils import test_utils as utils + + +def create_compound_trigger(server, db_name, schema_name, table_name, + trigger_name): + """ + This function creates a column under provided table. + :param server: server details + :type server: dict + :param db_name: database name + :type db_name: str + :param schema_name: schema name + :type schema_name: str + :param table_name: table name + :type table_name: str + :param trigger_name: trigger name + :type trigger_name: str + :param trigger_func_name: trigger function name + :type trigger_func_name: str + :return trigger_id: trigger id + :rtype: int + """ + code = "var varchar2(20) := 'Global_var';\n\n BEFORE STATEMENT IS" \ + "\nBEGIN\n DBMS_OUTPUT.PUT_LINE('Before Statement: ' || var);" \ + "\n var := 'BEFORE STATEMENT';\nEND;\n\nBEFORE EACH ROW IS" \ + "\nBEGIN\n DBMS_OUTPUT.PUT_LINE('Before each row: ' || var);\n" \ + " var := 'BEFORE EACH ROW';\nEND;" + + try: + connection = utils.get_db_connection(db_name, + server['username'], + server['db_password'], + server['host'], + server['port'], + server['sslmode']) + old_isolation_level = connection.isolation_level + connection.set_isolation_level(0) + pg_cursor = connection.cursor() + query = "CREATE OR REPLACE TRIGGER %s FOR INSERT ON %s.%s " \ + "COMPOUND TRIGGER %s END;" % (trigger_name, schema_name, + table_name, code) + pg_cursor.execute(query) + connection.set_isolation_level(old_isolation_level) + connection.commit() + pg_cursor.execute("SELECT oid FROM pg_trigger where tgname='%s'" % + trigger_name) + trigger = pg_cursor.fetchone() + trigger_id = '' + if trigger: + trigger_id = trigger[0] + connection.close() + return trigger_id + except Exception: + traceback.print_exc(file=sys.stderr) + raise + + +def verify_compound_trigger(server, db_name, trigger_name): + """ + This function verifies table exist in database or not. + :param server: server details + :type server: dict + :param db_name: database name + :type db_name: str + :param trigger_name: column name + :type trigger_name: str + :return table: table record from database + :rtype: tuple + """ + try: + connection = utils.get_db_connection(db_name, + server['username'], + server['db_password'], + server['host'], + server['port'], + server['sslmode']) + pg_cursor = connection.cursor() + pg_cursor.execute("SELECT oid FROM pg_trigger where tgname='%s'" % + trigger_name) + trigger = pg_cursor.fetchone() + connection.close() + return trigger + except Exception: + traceback.print_exc(file=sys.stderr) + raise + + +def enable_disable_compound_trigger(server, db_name, schema_name, table_name, + trigger_name, is_enable): + """ + This function is used to enable/disable trigger. + :param server: + :param db_name: + :param schema_name: + :param table_name: + :param trigger_name: + :param is_enable: + :return: + """ + try: + connection = utils.get_db_connection(db_name, + server['username'], + server['db_password'], + server['host'], + server['port'], + server['sslmode']) + pg_cursor = connection.cursor() + pg_cursor.execute("BEGIN") + if is_enable: + query = "ALTER TABLE %s.%s ENABLE TRIGGER %s;" % (schema_name, + table_name, + trigger_name) + else: + query = "ALTER TABLE %s.%s DISABLE TRIGGER %s;" % (schema_name, + table_name, + trigger_name) + + pg_cursor.execute(query) + pg_cursor.execute("COMMIT") + connection.close() + except Exception: + traceback.print_exc(file=sys.stderr) + raise diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/backend_support.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/backend_support.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/backend_support.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/backend_support.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql new file mode 100644 index 000000000..2f9b392ab --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/create.sql @@ -0,0 +1,26 @@ +{### Set a flag which allows us to put OR between events ###} +{% set or_flag = False %} +CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} + FOR {% if data.evnt_insert %}INSERT{% set or_flag = True %} +{% endif %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} +{% endif %}{% if data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} +{% endif %}{% if data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE{% if data.columns|length > 0 %} OF {% for c in data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} +{% endif %} + + ON {{ conn|qtIdent(data.schema, data.table) }} +{% if data.whenclause %} + WHEN {% if not data.oid %}({% endif %}{{ data.whenclause }}{% if not data.oid %}){% endif %} + +{% endif %} + COMPOUND TRIGGER +{% if data.prosrc is defined %}{{ data.prosrc }}{% endif%} + +END {{ conn|qtIdent(data.name) }}; + +{% if data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} + IS {{data.description|qtLiteral}}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/delete.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/delete.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/delete.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/delete.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/enable_disable_trigger.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/enable_disable_trigger.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/enable_disable_trigger.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/enable_disable_trigger.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_columns.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_columns.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_columns.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_oid.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_oid.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_oid.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_parent.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_parent.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_parent.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/get_parent.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/nodes.sql new file mode 100644 index 000000000..6b9b084bd --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/nodes.sql @@ -0,0 +1,10 @@ +SELECT t.oid, t.tgname as name, (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + + WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID + AND tgpackageoid != 0 +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} + ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/properties.sql new file mode 100644 index 000000000..dae839728 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/properties.sql @@ -0,0 +1,22 @@ +SELECT t.oid,t.tgname AS name, t.xmin, t.tgtype, t.tgattr, relname, + CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, + nspname, des.description, + regexp_replace(regexp_replace(pg_get_triggerdef(t.oid), + 'CREATE TRIGGER (.*) FOR (.*) ON (.*) \nCOMPOUND TRIGGER (.*)\n', ''), '[\n]?END$', '' + ) AS prosrc, + COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \nCOMPOUND'), NULL) AS whenclause, +{% if datlastsysoid %} + (CASE WHEN t.oid <= {{ datlastsysoid}}::oid THEN true ElSE false END) AS is_sys_trigger, +{% endif %} + (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + JOIN pg_class cl ON cl.oid=tgrelid + JOIN pg_namespace na ON na.oid=relnamespace + LEFT OUTER JOIN pg_description des ON (des.objoid=t.oid AND des.classoid='pg_trigger'::regclass) +WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID + AND tgpackageoid != 0 +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} +ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql new file mode 100644 index 000000000..12e83a531 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/compound_triggers/sql/ppas/12_plus/update.sql @@ -0,0 +1,40 @@ +{% if data.name and o_data.name != data.name %} +ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + RENAME TO {{ conn|qtIdent(data.name) }}; + +{% endif %} +{% if ((data.prosrc is defined or data.evnt_insert is defined or data.evnt_delete is defined or data.evnt_update is defined) and (o_data.prosrc != data.prosrc or data.evnt_insert != o_data.evnt_insert or data.evnt_delete != o_data.evnt_delete or data.evnt_update != o_data.evnt_update)) %} +{% set or_flag = False %} +CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} + FOR {% if data.evnt_insert is not defined %}{% if o_data.evnt_insert %}INSERT{% set or_flag = True %}{% endif %}{% if data.evnt_insert %}INSERT{% set or_flag = True %}{% endif %}{% endif %}{% if data.evnt_delete is not defined %}{% if o_data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} +{% endif %}{% else %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %}{%endif %}{% endif %}{% if data.evnt_update is not defined %}{% if o_data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE{% if o_data.columns|length > 0 %} OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} +{% endif %}{% else %}{% if data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE{% if o_data.columns|length > 0 %} OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %}{% endif %} +{% endif %} + + ON {{ conn|qtIdent(data.schema, data.table) }} +{% if o_data.whenclause %} + WHEN {{ o_data.whenclause }} + +{% endif %} + COMPOUND TRIGGER +{% if (data.prosrc is not defined) %}{{ o_data.prosrc }}{% else %}{{ data.prosrc }}{% endif %} + +END {{ conn|qtIdent(data.name) }}; + +{% if data.description is not defined and o_data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + IS {{o_data.description|qtLiteral}}; +{% endif %} +{% endif %} +{% if data.description is defined and o_data.description != data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + IS {{data.description|qtLiteral}}; +{% endif %} +{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %} +ALTER TABLE {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + {% if data.is_enable_trigger == True %}ENABLE{% else %}DISABLE{% endif %} TRIGGER {{ conn|qtIdent(data.name) }}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/9.1_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/9.1_plus/get_oid.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/9.1_plus/get_oid.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/9.1_plus/get_oid.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/9.1_plus/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/9.1_plus/nodes.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/9.1_plus/nodes.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/9.1_plus/nodes.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/9.1_plus/properties.sql similarity index 93% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/9.1_plus/properties.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/9.1_plus/properties.sql index 2d34accfb..6d17cb65e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/9.1_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/9.1_plus/properties.sql @@ -1,7 +1,7 @@ SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), - substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \\$trigger')) AS whenclause, + substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \$trigger')) AS whenclause, -- We need to convert tgargs column bytea datatype to array datatype (string_to_array(encode(tgargs, 'escape'), E'\\000')::text[])[1:tgnargs] AS custom_tgargs, {% if datlastsysoid %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/alter.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/alter.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/alter.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/backend_support.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/backend_support.sql new file mode 100644 index 000000000..bb5e8d803 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/backend_support.sql @@ -0,0 +1,9 @@ +{#=============Checks if it is materialized view========#} +{% if vid %} +SELECT + CASE WHEN c.relkind = 'm' THEN False ELSE True END As m_view +FROM + pg_class c +WHERE + c.oid = {{ vid }}::oid +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/create.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/create.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/create.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/delete.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/delete.sql new file mode 100644 index 000000000..4c6e82b28 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/delete.sql @@ -0,0 +1 @@ +DROP TRIGGER {{conn|qtIdent(data.name)}} ON {{conn|qtIdent(data.nspname, data.relname )}}{% if cascade %} CASCADE{% endif %}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/enable_disable_trigger.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/enable_disable_trigger.sql new file mode 100644 index 000000000..b7009272d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/enable_disable_trigger.sql @@ -0,0 +1,2 @@ +ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }} + {% if data.is_enable_trigger == True %}ENABLE{% else %}DISABLE{% endif %} TRIGGER {{ conn|qtIdent(data.name) }}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_columns.sql new file mode 100644 index 000000000..c74c68b6a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_columns.sql @@ -0,0 +1,6 @@ +SELECT att.attname as name +FROM pg_attribute att + WHERE att.attrelid = {{tid}}::oid + AND att.attnum IN ({{ clist }}) + AND att.attisdropped IS FALSE + ORDER BY att.attnum \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_oid.sql new file mode 100644 index 000000000..ff2638590 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_oid.sql @@ -0,0 +1,4 @@ +SELECT t.oid +FROM pg_trigger t + WHERE tgrelid = {{tid}}::OID + AND tgname = {{data.name|qtLiteral}}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_parent.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_parent.sql new file mode 100644 index 000000000..f595cdc81 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_parent.sql @@ -0,0 +1,5 @@ +SELECT nsp.nspname AS schema ,rel.relname AS table +FROM pg_class rel + JOIN pg_namespace nsp + ON rel.relnamespace = nsp.oid::oid + WHERE rel.oid = {{tid}}::oid \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_triggerfunctions.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_triggerfunctions.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/get_triggerfunctions.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/get_triggerfunctions.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/nodes.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/nodes.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/nodes.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/properties.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/properties.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/properties.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/update.sql similarity index 81% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/update.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/update.sql index e400cd6d8..05af50e27 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/gpdb/default/update.sql @@ -6,16 +6,16 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, {% 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) and o_data.lanname == 'edbspl' 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)) %} {% set or_flag = False %} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} - {% if data.fires is defined %} {{data.fires}} {% else %}{{o_data.fires}}{% endif %} {% if data.evnt_insert is not defined %} {% if o_data.evnt_insert %}INSERT{% set or_flag = True %} + {% if data.fires is defined %}{{data.fires}} {% else %}{{o_data.fires}} {% endif %}{% if data.evnt_insert is not defined %}{% if o_data.evnt_insert %}INSERT{% set or_flag = True %} {% endif %}{% else %}{% if data.evnt_insert %}INSERT{% set or_flag = True %}{% endif %}{% endif %}{% if data.evnt_delete is not defined %}{% if o_data.evnt_delete %} {% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} -{% endif %}{% else %} {% if data.evnt_delete %} -{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} {%endif %}{% endif %}{% if data.evnt_truncate is not defined %}{% if o_data.evnt_truncate %} +{% endif %}{% else %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %}{%endif %}{% endif %}{% if data.evnt_truncate is not defined %}{% if o_data.evnt_truncate %} {% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} -{% endif %}{% else %} {% if data.evnt_truncate %} -{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} {%endif %} {% endif %}{% if data.evnt_update is not defined %}{% if o_data.evnt_update %} +{% endif %}{% else %}{% if data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %}{%endif %}{% endif %}{% if data.evnt_update is not defined %}{% if o_data.evnt_update %} {% if or_flag %} OR {% endif %}UPDATE {% if o_data.columns|length > 0 %}OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} -{% endif %}{% else %} {% if data.evnt_update %} +{% endif %}{% else %}{% if data.evnt_update %} {% if or_flag %} OR {% endif %}UPDATE {% if o_data.columns|length > 0 %}OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %}{% endif %} {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/10_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/10_plus/create.sql similarity index 100% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/10_plus/create.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/10_plus/create.sql diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/10_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/10_plus/properties.sql similarity index 93% rename from web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/10_plus/properties.sql rename to web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/10_plus/properties.sql index 28d10ad1e..3be4c82cd 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/10_plus/properties.sql +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/10_plus/properties.sql @@ -1,7 +1,7 @@ SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), - substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \\$trigger')) AS whenclause, + substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \$trigger')) AS whenclause, -- We need to convert tgargs column bytea datatype to array datatype (string_to_array(encode(tgargs, 'escape'), E'\\000')::text[])[1:tgnargs] AS custom_tgargs, {% if datlastsysoid %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/get_oid.sql new file mode 100644 index 000000000..cf30257bb --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/get_oid.sql @@ -0,0 +1,5 @@ +SELECT t.oid +FROM pg_trigger t + WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID + AND tgname = {{data.name|qtLiteral}}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/nodes.sql new file mode 100644 index 000000000..59372cce3 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/nodes.sql @@ -0,0 +1,9 @@ +SELECT t.oid, t.tgname as name, (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + + WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} + ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/properties.sql new file mode 100644 index 000000000..6d17cb65e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/9.1_plus/properties.sql @@ -0,0 +1,23 @@ +SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, + nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, + COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), + substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \$trigger')) AS whenclause, + -- We need to convert tgargs column bytea datatype to array datatype + (string_to_array(encode(tgargs, 'escape'), E'\\000')::text[])[1:tgnargs] AS custom_tgargs, +{% if datlastsysoid %} + (CASE WHEN t.oid <= {{ datlastsysoid}}::oid THEN true ElSE false END) AS is_sys_trigger, +{% endif %} + (CASE WHEN tgconstraint != 0::OID THEN true ElSE false END) AS is_constraint_trigger, + (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + JOIN pg_class cl ON cl.oid=tgrelid + JOIN pg_namespace na ON na.oid=relnamespace + LEFT OUTER JOIN pg_description des ON (des.objoid=t.oid AND des.classoid='pg_trigger'::regclass) + LEFT OUTER JOIN pg_proc p ON p.oid=t.tgfoid + LEFT OUTER JOIN pg_language l ON l.oid=p.prolang +WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} +ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql new file mode 100644 index 000000000..93f323e1a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/alter.sql @@ -0,0 +1,9 @@ +{## Alter index to use cluster type ##} +{% if data.indisclustered %} +ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} + CLUSTER ON {{conn|qtIdent(data.name)}}; +{% endif %} +{## Changes description ##} +{% if data.description %} +COMMENT ON INDEX {{conn|qtIdent(data.name)}} + IS {{data.description|qtLiteral}};{% endif %} \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/backend_support.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/backend_support.sql new file mode 100644 index 000000000..bb5e8d803 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/backend_support.sql @@ -0,0 +1,9 @@ +{#=============Checks if it is materialized view========#} +{% if vid %} +SELECT + CASE WHEN c.relkind = 'm' THEN False ELSE True END As m_view +FROM + pg_class c +WHERE + c.oid = {{ vid }}::oid +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql new file mode 100644 index 000000000..4cffc920f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/create.sql @@ -0,0 +1,32 @@ +{### Set a flag which allows us to put OR between events ###} +{% set or_flag = False %} +{% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} +CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} +{% else %} +CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|qtIdent(data.name) }} +{% endif %} + {{data.fires}} {% if data.evnt_insert %}INSERT{% set or_flag = True %} +{% endif %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} +{% endif %}{% if data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} +{% endif %}{% if data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE {% if data.columns|length > 0 %}OF {% for c in data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} +{% endif %} + + ON {{ conn|qtIdent(data.schema, data.table) }} +{% if data.tgdeferrable %} + DEFERRABLE{% if data.tginitdeferred %} INITIALLY DEFERRED{% endif %} +{% endif %} + FOR EACH{% if data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} +{% if data.whenclause %} + + WHEN ({{ data.whenclause }}){% endif %} + + {% if data.prosrc is defined and + (data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL') %}{{ data.prosrc }}{% else %}EXECUTE PROCEDURE {{ data.tfunction }}{% if data.tgargs %}({{ data.tgargs }}){% else %}(){% endif%}{% endif%}; + +{% if data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} + IS {{data.description|qtLiteral}}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/delete.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/delete.sql new file mode 100644 index 000000000..4c6e82b28 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/delete.sql @@ -0,0 +1 @@ +DROP TRIGGER {{conn|qtIdent(data.name)}} ON {{conn|qtIdent(data.nspname, data.relname )}}{% if cascade %} CASCADE{% endif %}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/enable_disable_trigger.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/enable_disable_trigger.sql new file mode 100644 index 000000000..b7009272d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/enable_disable_trigger.sql @@ -0,0 +1,2 @@ +ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }} + {% if data.is_enable_trigger == True %}ENABLE{% else %}DISABLE{% endif %} TRIGGER {{ conn|qtIdent(data.name) }}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_columns.sql new file mode 100644 index 000000000..c74c68b6a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_columns.sql @@ -0,0 +1,6 @@ +SELECT att.attname as name +FROM pg_attribute att + WHERE att.attrelid = {{tid}}::oid + AND att.attnum IN ({{ clist }}) + AND att.attisdropped IS FALSE + ORDER BY att.attnum \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql new file mode 100644 index 000000000..ff2638590 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_oid.sql @@ -0,0 +1,4 @@ +SELECT t.oid +FROM pg_trigger t + WHERE tgrelid = {{tid}}::OID + AND tgname = {{data.name|qtLiteral}}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_parent.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_parent.sql new file mode 100644 index 000000000..f595cdc81 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_parent.sql @@ -0,0 +1,5 @@ +SELECT nsp.nspname AS schema ,rel.relname AS table +FROM pg_class rel + JOIN pg_namespace nsp + ON rel.relnamespace = nsp.oid::oid + WHERE rel.oid = {{tid}}::oid \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql new file mode 100644 index 000000000..403d5d91e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/get_triggerfunctions.sql @@ -0,0 +1,15 @@ +SELECT quote_ident(nspname) || '.' || quote_ident(proname) AS tfunctions +FROM pg_proc p, pg_namespace n, pg_language l + WHERE p.pronamespace = n.oid + AND p.prolang = l.oid + -- PGOID_TYPE_TRIGGER = 2279 + AND l.lanname != 'edbspl' AND prorettype = 2279 + -- If Show SystemObjects is not true + {% if not show_system_objects %} + AND (nspname NOT LIKE 'pg\_%' AND nspname NOT in ('information_schema')) + {% endif %} + -- Find function for specific OID + {% if tgfoid %} + AND p.oid = {{tgfoid}}::OID + {% endif %} + ORDER BY nspname ASC, proname ASC diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/nodes.sql new file mode 100644 index 000000000..2a10badf2 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/nodes.sql @@ -0,0 +1,7 @@ +SELECT t.oid, t.tgname as name, (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + WHERE tgrelid = {{tid}}::OID +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} + ORDER BY tgname; 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 new file mode 100644 index 000000000..9af811859 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/properties.sql @@ -0,0 +1 @@ +SELECT 1 WHERE 1 = 2; 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 new file mode 100644 index 000000000..05af50e27 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/pg/default/update.sql @@ -0,0 +1,50 @@ +{% if data.name and o_data.name != data.name %} +ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + 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) and o_data.lanname == 'edbspl' 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)) %} +{% set or_flag = False %} +CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} + {% if data.fires is defined %}{{data.fires}} {% else %}{{o_data.fires}} {% endif %}{% if data.evnt_insert is not defined %}{% if o_data.evnt_insert %}INSERT{% set or_flag = True %} +{% endif %}{% else %}{% if data.evnt_insert %}INSERT{% set or_flag = True %}{% endif %}{% endif %}{% if data.evnt_delete is not defined %}{% if o_data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} +{% endif %}{% else %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %}{%endif %}{% endif %}{% if data.evnt_truncate is not defined %}{% if o_data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} +{% endif %}{% else %}{% if data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %}{%endif %}{% endif %}{% if data.evnt_update is not defined %}{% if o_data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE {% if o_data.columns|length > 0 %}OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} +{% endif %}{% else %}{% if data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE {% if o_data.columns|length > 0 %}OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %}{% endif %} +{% endif %} + + ON {{ conn|qtIdent(data.schema, data.table) }} +{% if o_data.tgdeferrable %} + DEFERRABLE{% if o_data.tginitdeferred %} INITIALLY DEFERRED{% endif %} +{% endif %}{% if data.is_row_trigger is not defined %} + FOR EACH{% if o_data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} {% else %} + FOR EACH{% if data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} {% endif %} +{% if o_data.whenclause %} + WHEN {{ o_data.whenclause }} +{% endif %} + +{% if (data.prosrc is not defined) %} +{{ o_data.prosrc }}; +{% else %} +{{ data.prosrc }}; +{% endif %} + +{% if data.description is not defined and o_data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + IS {{o_data.description|qtLiteral}}; +{% endif %} +{% endif %} +{% if data.description is defined and o_data.description != data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + IS {{data.description|qtLiteral}}; +{% endif %} +{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %} +ALTER TABLE {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + {% if data.is_enable_trigger == True %}ENABLE{% else %}DISABLE{% endif %} TRIGGER {{ conn|qtIdent(data.name) }}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/create.sql new file mode 100644 index 000000000..807abe45c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/create.sql @@ -0,0 +1,36 @@ +{### Set a flag which allows us to put OR between events ###} +{% set or_flag = False %} +{% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} +CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} +{% else %} +CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|qtIdent(data.name) }} +{% endif %} + {{data.fires}} {% if data.evnt_insert %}INSERT{% set or_flag = True %} +{% endif %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} +{% endif %}{% if data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} +{% endif %}{% if data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE {% if data.columns|length > 0 %}OF {% for c in data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} +{% endif %} + + ON {{ conn|qtIdent(data.schema, data.table) }} +{% if data.tgdeferrable %} + DEFERRABLE{% if data.tginitdeferred %} INITIALLY DEFERRED{% endif %} +{% endif %} +{% if data.tgoldtable or data.tgnewtable %} + REFERENCING{% if data.tgnewtable %} NEW TABLE AS {{ conn|qtIdent(data.tgnewtable) }}{% endif %}{% if data.tgoldtable %} OLD TABLE AS {{ conn|qtIdent(data.tgoldtable) }}{% endif %} + +{% endif %} + FOR EACH{% if data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} +{% if data.whenclause %} + + WHEN {% if not data.oid %}({% endif %}{{ data.whenclause }}{% if not data.oid %}){% endif %}{% endif %} + + {% if data.prosrc is defined and + (data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL') %}{{ data.prosrc }}{% else %}EXECUTE PROCEDURE {{ data.tfunction }}{% if data.tgargs %}({{ data.tgargs }}){% else %}(){% endif%}{% endif%}; + +{% if data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} + IS {{data.description|qtLiteral}}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/properties.sql new file mode 100644 index 000000000..3be4c82cd --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/10_plus/properties.sql @@ -0,0 +1,25 @@ +SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, + nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, + COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), + substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \$trigger')) AS whenclause, + -- We need to convert tgargs column bytea datatype to array datatype + (string_to_array(encode(tgargs, 'escape'), E'\\000')::text[])[1:tgnargs] AS custom_tgargs, +{% if datlastsysoid %} + (CASE WHEN t.oid <= {{ datlastsysoid}}::oid THEN true ElSE false END) AS is_sys_trigger, +{% endif %} + (CASE WHEN tgconstraint != 0::OID THEN true ElSE false END) AS is_constraint_trigger, + (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger, + tgoldtable, + tgnewtable +FROM pg_trigger t + JOIN pg_class cl ON cl.oid=tgrelid + JOIN pg_namespace na ON na.oid=relnamespace + LEFT OUTER JOIN pg_description des ON (des.objoid=t.oid AND des.classoid='pg_trigger'::regclass) + LEFT OUTER JOIN pg_proc p ON p.oid=t.tgfoid + LEFT OUTER JOIN pg_language l ON l.oid=p.prolang +WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} +ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/nodes.sql new file mode 100644 index 000000000..b625ff433 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/nodes.sql @@ -0,0 +1,10 @@ +SELECT t.oid, t.tgname as name, (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + + WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID + AND tgpackageoid = 0 +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} + ORDER BY tgname; 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 new file mode 100644 index 000000000..8c61f5cf3 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/12_plus/properties.sql @@ -0,0 +1,26 @@ +SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, + nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, + COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), + substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \$trigger')) AS whenclause, + -- We need to convert tgargs column bytea datatype to array datatype + (string_to_array(encode(tgargs, 'escape'), E'\\000')::text[])[1:tgnargs] AS custom_tgargs, +{% if datlastsysoid %} + (CASE WHEN t.oid <= {{ datlastsysoid}}::oid THEN true ElSE false END) AS is_sys_trigger, +{% endif %} + (CASE WHEN tgconstraint != 0::OID THEN true ElSE false END) AS is_constraint_trigger, + (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger, + tgoldtable, + tgnewtable +FROM pg_trigger t + JOIN pg_class cl ON cl.oid=tgrelid + JOIN pg_namespace na ON na.oid=relnamespace + LEFT OUTER JOIN pg_description des ON (des.objoid=t.oid AND des.classoid='pg_trigger'::regclass) + LEFT OUTER JOIN pg_proc p ON p.oid=t.tgfoid + LEFT OUTER JOIN pg_language l ON l.oid=p.prolang +WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID + AND tgpackageoid = 0 +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} +ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/get_oid.sql new file mode 100644 index 000000000..cf30257bb --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/get_oid.sql @@ -0,0 +1,5 @@ +SELECT t.oid +FROM pg_trigger t + WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID + AND tgname = {{data.name|qtLiteral}}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/nodes.sql new file mode 100644 index 000000000..59372cce3 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/nodes.sql @@ -0,0 +1,9 @@ +SELECT t.oid, t.tgname as name, (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + + WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} + ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/properties.sql new file mode 100644 index 000000000..6d17cb65e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/9.1_plus/properties.sql @@ -0,0 +1,23 @@ +SELECT t.oid,t.tgname AS name, t.xmin, t.*, relname, CASE WHEN relkind = 'r' THEN TRUE ELSE FALSE END AS parentistable, + nspname, des.description, l.lanname, p.prosrc, p.proname AS tfunction, + COALESCE(substring(pg_get_triggerdef(t.oid), 'WHEN (.*) EXECUTE PROCEDURE'), + substring(pg_get_triggerdef(t.oid), 'WHEN (.*) \$trigger')) AS whenclause, + -- We need to convert tgargs column bytea datatype to array datatype + (string_to_array(encode(tgargs, 'escape'), E'\\000')::text[])[1:tgnargs] AS custom_tgargs, +{% if datlastsysoid %} + (CASE WHEN t.oid <= {{ datlastsysoid}}::oid THEN true ElSE false END) AS is_sys_trigger, +{% endif %} + (CASE WHEN tgconstraint != 0::OID THEN true ElSE false END) AS is_constraint_trigger, + (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + JOIN pg_class cl ON cl.oid=tgrelid + JOIN pg_namespace na ON na.oid=relnamespace + LEFT OUTER JOIN pg_description des ON (des.objoid=t.oid AND des.classoid='pg_trigger'::regclass) + LEFT OUTER JOIN pg_proc p ON p.oid=t.tgfoid + LEFT OUTER JOIN pg_language l ON l.oid=p.prolang +WHERE NOT tgisinternal + AND tgrelid = {{tid}}::OID +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} +ORDER BY tgname; diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql new file mode 100644 index 000000000..93f323e1a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/alter.sql @@ -0,0 +1,9 @@ +{## Alter index to use cluster type ##} +{% if data.indisclustered %} +ALTER TABLE {{conn|qtIdent(data.schema, data.table)}} + CLUSTER ON {{conn|qtIdent(data.name)}}; +{% endif %} +{## Changes description ##} +{% if data.description %} +COMMENT ON INDEX {{conn|qtIdent(data.name)}} + IS {{data.description|qtLiteral}};{% endif %} \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/backend_support.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/backend_support.sql new file mode 100644 index 000000000..bb5e8d803 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/backend_support.sql @@ -0,0 +1,9 @@ +{#=============Checks if it is materialized view========#} +{% if vid %} +SELECT + CASE WHEN c.relkind = 'm' THEN False ELSE True END As m_view +FROM + pg_class c +WHERE + c.oid = {{ vid }}::oid +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql new file mode 100644 index 000000000..4cffc920f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/create.sql @@ -0,0 +1,32 @@ +{### Set a flag which allows us to put OR between events ###} +{% set or_flag = False %} +{% if data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL' %} +CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} +{% else %} +CREATE{% if data.is_constraint_trigger %} CONSTRAINT{% endif %} TRIGGER {{ conn|qtIdent(data.name) }} +{% endif %} + {{data.fires}} {% if data.evnt_insert %}INSERT{% set or_flag = True %} +{% endif %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} +{% endif %}{% if data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} +{% endif %}{% if data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE {% if data.columns|length > 0 %}OF {% for c in data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} +{% endif %} + + ON {{ conn|qtIdent(data.schema, data.table) }} +{% if data.tgdeferrable %} + DEFERRABLE{% if data.tginitdeferred %} INITIALLY DEFERRED{% endif %} +{% endif %} + FOR EACH{% if data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} +{% if data.whenclause %} + + WHEN ({{ data.whenclause }}){% endif %} + + {% if data.prosrc is defined and + (data.lanname == 'edbspl' or data.tfunction == 'Inline EDB-SPL') %}{{ data.prosrc }}{% else %}EXECUTE PROCEDURE {{ data.tfunction }}{% if data.tgargs %}({{ data.tgargs }}){% else %}(){% endif%}{% endif%}; + +{% if data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(data.schema, data.table) }} + IS {{data.description|qtLiteral}}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/delete.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/delete.sql new file mode 100644 index 000000000..4c6e82b28 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/delete.sql @@ -0,0 +1 @@ +DROP TRIGGER {{conn|qtIdent(data.name)}} ON {{conn|qtIdent(data.nspname, data.relname )}}{% if cascade %} CASCADE{% endif %}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/enable_disable_trigger.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/enable_disable_trigger.sql new file mode 100644 index 000000000..b7009272d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/enable_disable_trigger.sql @@ -0,0 +1,2 @@ +ALTER TABLE {{ conn|qtIdent(data.schema, data.table) }} + {% if data.is_enable_trigger == True %}ENABLE{% else %}DISABLE{% endif %} TRIGGER {{ conn|qtIdent(data.name) }}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_columns.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_columns.sql new file mode 100644 index 000000000..c74c68b6a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_columns.sql @@ -0,0 +1,6 @@ +SELECT att.attname as name +FROM pg_attribute att + WHERE att.attrelid = {{tid}}::oid + AND att.attnum IN ({{ clist }}) + AND att.attisdropped IS FALSE + ORDER BY att.attnum \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql new file mode 100644 index 000000000..ff2638590 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_oid.sql @@ -0,0 +1,4 @@ +SELECT t.oid +FROM pg_trigger t + WHERE tgrelid = {{tid}}::OID + AND tgname = {{data.name|qtLiteral}}; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_parent.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_parent.sql new file mode 100644 index 000000000..f595cdc81 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_parent.sql @@ -0,0 +1,5 @@ +SELECT nsp.nspname AS schema ,rel.relname AS table +FROM pg_class rel + JOIN pg_namespace nsp + ON rel.relnamespace = nsp.oid::oid + WHERE rel.oid = {{tid}}::oid \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql new file mode 100644 index 000000000..403d5d91e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/get_triggerfunctions.sql @@ -0,0 +1,15 @@ +SELECT quote_ident(nspname) || '.' || quote_ident(proname) AS tfunctions +FROM pg_proc p, pg_namespace n, pg_language l + WHERE p.pronamespace = n.oid + AND p.prolang = l.oid + -- PGOID_TYPE_TRIGGER = 2279 + AND l.lanname != 'edbspl' AND prorettype = 2279 + -- If Show SystemObjects is not true + {% if not show_system_objects %} + AND (nspname NOT LIKE 'pg\_%' AND nspname NOT in ('information_schema')) + {% endif %} + -- Find function for specific OID + {% if tgfoid %} + AND p.oid = {{tgfoid}}::OID + {% endif %} + ORDER BY nspname ASC, proname ASC diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/nodes.sql b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/nodes.sql new file mode 100644 index 000000000..2a10badf2 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/nodes.sql @@ -0,0 +1,7 @@ +SELECT t.oid, t.tgname as name, (CASE WHEN tgenabled = 'O' THEN true ElSE false END) AS is_enable_trigger +FROM pg_trigger t + WHERE tgrelid = {{tid}}::OID +{% if trid %} + AND t.oid = {{trid}}::OID +{% endif %} + ORDER BY tgname; 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 new file mode 100644 index 000000000..9af811859 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/properties.sql @@ -0,0 +1 @@ +SELECT 1 WHERE 1 = 2; 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 new file mode 100644 index 000000000..05af50e27 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/templates/triggers/sql/ppas/default/update.sql @@ -0,0 +1,50 @@ +{% if data.name and o_data.name != data.name %} +ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + 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) and o_data.lanname == 'edbspl' 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)) %} +{% set or_flag = False %} +CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} + {% if data.fires is defined %}{{data.fires}} {% else %}{{o_data.fires}} {% endif %}{% if data.evnt_insert is not defined %}{% if o_data.evnt_insert %}INSERT{% set or_flag = True %} +{% endif %}{% else %}{% if data.evnt_insert %}INSERT{% set or_flag = True %}{% endif %}{% endif %}{% if data.evnt_delete is not defined %}{% if o_data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %} +{% endif %}{% else %}{% if data.evnt_delete %} +{% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %}{%endif %}{% endif %}{% if data.evnt_truncate is not defined %}{% if o_data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %} +{% endif %}{% else %}{% if data.evnt_truncate %} +{% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %}{%endif %}{% endif %}{% if data.evnt_update is not defined %}{% if o_data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE {% if o_data.columns|length > 0 %}OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %} +{% endif %}{% else %}{% if data.evnt_update %} +{% if or_flag %} OR {% endif %}UPDATE {% if o_data.columns|length > 0 %}OF {% for c in o_data.columns %}{% if loop.index != 1 %}, {% endif %}{{ conn|qtIdent(c) }}{% endfor %}{% endif %}{% endif %} +{% endif %} + + ON {{ conn|qtIdent(data.schema, data.table) }} +{% if o_data.tgdeferrable %} + DEFERRABLE{% if o_data.tginitdeferred %} INITIALLY DEFERRED{% endif %} +{% endif %}{% if data.is_row_trigger is not defined %} + FOR EACH{% if o_data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} {% else %} + FOR EACH{% if data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} {% endif %} +{% if o_data.whenclause %} + WHEN {{ o_data.whenclause }} +{% endif %} + +{% if (data.prosrc is not defined) %} +{{ o_data.prosrc }}; +{% else %} +{{ data.prosrc }}; +{% endif %} + +{% if data.description is not defined and o_data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + IS {{o_data.description|qtLiteral}}; +{% endif %} +{% endif %} +{% if data.description is defined and o_data.description != data.description %} +COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + IS {{data.description|qtLiteral}}; +{% endif %} +{% if data.is_enable_trigger is defined and o_data.is_enable_trigger != data.is_enable_trigger %} +ALTER TABLE {{ conn|qtIdent(o_data.nspname, o_data.relname) }} + {% if data.is_enable_trigger == True %}ENABLE{% else %}DISABLE{% endif %} TRIGGER {{ conn|qtIdent(data.name) }}; +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py index 1f29fad85..083acef74 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_get_oid_sql.py @@ -37,6 +37,10 @@ class TestTriggerGetOidSql(SQLTemplateTestBase): def generate_sql(self, version): file_path = os.path.join(os.path.dirname(__file__), "..", "templates", "triggers", "sql") + if 'type' in self.server: + file_path = os.path.join(os.path.dirname(__file__), "..", + "templates", + "triggers", "sql", self.server['type']) template_file = self.get_template_file(version, file_path, "get_oid.sql") jinja2.filters.FILTERS['qtLiteral'] = lambda value: "NULL" diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py index 92e80dc93..fef6e667b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_trigger_nodes_sql.py @@ -32,6 +32,10 @@ class TestTriggerNodesSql(SQLTemplateTestBase): def generate_sql(self, version): file_path = os.path.join(os.path.dirname(__file__), "..", "templates", "triggers", "sql") + if 'type' in self.server: + file_path = os.path.join(os.path.dirname(__file__), "..", + "templates", + "triggers", "sql", self.server['type']) template_file = self.get_template_file(version, file_path, "nodes.sql") template = file_as_template(template_file) diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_utils.py index 169cdf1d6..f84ec3d14 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/tests/test_utils.py @@ -69,4 +69,4 @@ class TestUtils(BaseTestGenerator): 'indexes/sql/#gpdb#10#') self.assertEqual( subject.trigger_template_path, - 'triggers/sql/#gpdb#10#') + 'triggers/sql/gpdb/#10#') diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py index c64b3c482..191bc3820 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/__init__.py @@ -78,7 +78,8 @@ class TriggerModule(CollectionNodeModule): if 'vid' not in kwargs: return True - template_path = 'triggers/sql/#{0}#'.format(manager.version) + template_path = 'triggers/sql/{0}/#{1}#'.format( + manager.server_type, manager.version) SQL = render_template("/".join( [template_path, 'backend_support.sql']), vid=kwargs['vid'] ) @@ -272,8 +273,8 @@ class TriggerView(PGChildNodeView): kwargs['did'] in self.manager.db_info else 0 # we will set template path for sql scripts - self.template_path = 'triggers/sql/#{0}#'.format( - self.manager.version) + self.template_path = 'triggers/sql/{0}/#{1}#'.format( + self.manager.server_type, self.manager.version) # Store server type self.server_type = self.manager.server_type # We need parent's name eg table name and schema name diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_delete_multiple.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_delete_multiple.py index 01c1086c2..17232862b 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_delete_multiple.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_delete_multiple.py @@ -24,15 +24,15 @@ from regression.python_test_utils import test_utils as utils from . import utils as triggers_utils -class TriggersDeleteTestCase(BaseTestGenerator): +class TriggersDeleteMultipleTestCase(BaseTestGenerator): """This class will delete trigger under table node.""" skip_on_database = ['gpdb'] scenarios = [ - ('Delete trigger Node URL', dict(url='/browser/trigger/obj/')) + ('Delete multiple triggers', dict(url='/browser/trigger/obj/')) ] def setUp(self): - super(TriggersDeleteTestCase, self).setUp() + super(TriggersDeleteMultipleTestCase, self).setUp() self.db_name = parent_node_dict["database"][-1]["db_name"] schema_info = parent_node_dict["schema"][-1] self.server_id = schema_info["server_id"] diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_put.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_put.py index 6030a8cfd..ed0d0c352 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_put.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/triggers/tests/test_triggers_put.py @@ -57,7 +57,7 @@ class TriggersUpdateTestCase(BaseTestGenerator): self.function_info = \ trigger_funcs_utils.create_trigger_function_with_trigger( self.server, self.db_name, self.schema_name, self.func_name) - self.trigger_name = "test_trigger_delete_%s" % (str(uuid.uuid4())[1:8]) + self.trigger_name = "test_trigger_update_%s" % (str(uuid.uuid4())[1:8]) self.trigger_id = triggers_utils.create_trigger(self.server, self.db_name, self.schema_name, @@ -71,7 +71,7 @@ class TriggersUpdateTestCase(BaseTestGenerator): self.db_name, self.trigger_name) if not trigger_response: - raise Exception("Could not find the trigger to delete.") + raise Exception("Could not find the trigger to update.") data = {"id": self.trigger_id, "description": "This is test comment." } diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py index 429729200..775f9e22e 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/tables/utils.py @@ -139,8 +139,12 @@ class BaseTableView(PGChildNodeView, BasePartitionTable): 'indexes/sql', server_type, ver) # Template for trigger node - self.trigger_template_path = compile_template_path( - 'triggers/sql', server_type, ver) + self.trigger_template_path = \ + 'triggers/sql/{0}/#{1}#'.format(server_type, ver) + + # Template for compound trigger node + self.compound_trigger_template_path = \ + 'compound_triggers/sql/{0}/#{1}#'.format(server_type, ver) # Template for rules node self.rules_template_path = 'rules/sql' @@ -1014,8 +1018,6 @@ class BaseTableView(PGChildNodeView, BasePartitionTable): return internal_server_error(errormsg=rset) for row in rset['rows']: - trigger_sql = '' - SQL = render_template("/".join([self.trigger_template_path, 'properties.sql']), tid=tid, trid=row['oid'], @@ -1084,9 +1086,90 @@ class BaseTableView(PGChildNodeView, BasePartitionTable): trigger_sql = re.sub('\n{2,}', '\n\n', trigger_sql) main_sql.append(trigger_sql) + """ + ################################################# + # 4) Reverse engineered sql for COMPOUND TRIGGERS + ################################################# + """ + + if self.manager.server_type == 'ppas' \ + and self.manager.version >= 120000: + SQL = render_template("/".join( + [self.compound_trigger_template_path, 'nodes.sql']), tid=tid) + + status, rset = self.conn.execute_2darray(SQL) + if not status: + return internal_server_error(errormsg=rset) + + for row in rset['rows']: + SQL = render_template("/".join( + [self.compound_trigger_template_path, 'properties.sql']), + tid=tid, trid=row['oid'], + datlastsysoid=self.datlastsysoid) + + status, res = self.conn.execute_dict(SQL) + if not status: + return internal_server_error(errormsg=res) + + if len(res['rows']) == 0: + continue + data = dict(res['rows'][0]) + # Adding parent into data dict, will be using it while + # creating sql + data['schema'] = schema + data['table'] = table + + if len(data['tgattr']) >= 1: + columns = ', '.join(data['tgattr'].split(' ')) + + SQL = render_template("/".join( + [self.compound_trigger_template_path, + 'get_columns.sql']), tid=tid, clist=columns) + + status, rset = self.conn.execute_2darray(SQL) + if not status: + return internal_server_error(errormsg=rset) + # 'tgattr' contains list of columns from table + # used in trigger + columns = [] + + for col_row in rset['rows']: + columns.append(col_row['name']) + + data['columns'] = columns + + data = trigger_definition(data) + sql_header = \ + u"\n-- Compound Trigger: {0}\n\n-- ".format(data['name']) + + sql_header += render_template("/".join( + [self.compound_trigger_template_path, 'delete.sql']), + data=data, conn=self.conn) + + # If the request for new object which do not have did + compound_trigger_sql = render_template("/".join( + [self.compound_trigger_template_path, 'create.sql']), + data=data, conn=self.conn) + + compound_trigger_sql = \ + sql_header + '\n\n' + compound_trigger_sql.strip('\n') + + # If trigger is disabled then add sql code for the same + if not data['is_enable_trigger']: + compound_trigger_sql += '\n\n' + compound_trigger_sql += render_template("/".join( + [self.compound_trigger_template_path, + 'enable_disable_trigger.sql']), + data=data, conn=self.conn) + + # Add into main sql + compound_trigger_sql = \ + re.sub('\n{2,}', '\n\n', compound_trigger_sql) + main_sql.append(compound_trigger_sql) + """ ##################################### - # 4) Reverse engineered sql for RULES + # 5) Reverse engineered sql for RULES ##################################### """ @@ -1118,7 +1201,7 @@ class BaseTableView(PGChildNodeView, BasePartitionTable): """ ########################################## - # 5) Reverse engineered sql for PARTITIONS + # 6) Reverse engineered sql for PARTITIONS ########################################## """ if is_partitioned: diff --git a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py index 670a7f36e..12442a26c 100644 --- a/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/databases/schemas/views/__init__.py @@ -892,7 +892,8 @@ class ViewNode(PGChildNodeView, VacuumSettings): SQL_data = '' SQL = render_template("/".join( [self.trigger_temp_path, - 'sql/#{0}#/properties.sql'.format(self.manager.version)]), + 'sql/{0}/#{1}#/properties.sql'.format( + self.manager.server_type, self.manager.version)]), tid=vid) status, data = self.conn.execute_dict(SQL) @@ -902,7 +903,8 @@ class ViewNode(PGChildNodeView, VacuumSettings): for trigger in data['rows']: SQL = render_template("/".join( [self.trigger_temp_path, - 'sql/#{0}#/properties.sql'.format(self.manager.version)]), + 'sql/{0}/#{1}#/properties.sql'.format( + self.manager.server_type, self.manager.version)]), tid=vid, trid=trigger['oid'] ) @@ -932,8 +934,8 @@ class ViewNode(PGChildNodeView, VacuumSettings): # Get trigger function with its schema name SQL = render_template("/".join([ self.trigger_temp_path, - 'sql/#{0}#/get_triggerfunctions.sql'.format( - self.manager.version)]), + 'sql/{0}/#{1}#/get_triggerfunctions.sql'.format( + self.manager.server_type, self.manager.version)]), tgfoid=res_rows['tgfoid'], show_system_objects=self.blueprint.show_system_objects) @@ -956,7 +958,8 @@ class ViewNode(PGChildNodeView, VacuumSettings): SQL = render_template("/".join( [self.trigger_temp_path, - 'sql/#{0}#/create.sql'.format(self.manager.version)]), + 'sql/{0}/#{1}#/create.sql'.format( + self.manager.server_type, self.manager.version)]), data=res_rows, display_comments=True) SQL_data += '\n' SQL_data += SQL diff --git a/web/pgadmin/browser/static/js/menu.js b/web/pgadmin/browser/static/js/menu.js index 3bcba0220..e76c9ed20 100644 --- a/web/pgadmin/browser/static/js/menu.js +++ b/web/pgadmin/browser/static/js/menu.js @@ -78,12 +78,7 @@ define([ data: this.data, }).addClass('dropdown-item'); - if(this.context !== undefined) { - this.is_disabled = this.context.disabled; - } else { - this.is_disabled = this.disabled(node, item); - } - + this.is_disabled = this.disabled(node, item); if (this.icon) { url.append($('', { 'class': this.icon, diff --git a/web/webpack.config.js b/web/webpack.config.js index 5ca3c88a1..254d5b699 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.js @@ -241,7 +241,8 @@ module.exports = { ',pgadmin.node.view' + ',pgadmin.node.mview' + ',pgadmin.node.table' + - ',pgadmin.node.partition', + ',pgadmin.node.partition' + + ',pgadmin.node.compound_trigger', }, }, { test: require.resolve('./node_modules/acitree/js/jquery.aciTree.min'), diff --git a/web/webpack.shim.js b/web/webpack.shim.js index 8f43b2a3d..ca5f72c9d 100644 --- a/web/webpack.shim.js +++ b/web/webpack.shim.js @@ -220,6 +220,7 @@ var webpackShimConfig = { 'pgadmin.node.check_constraint': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/check_constraint/static/js/check_constraint'), 'pgadmin.node.collation': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/schemas/collations/static/js/collation'), 'pgadmin.node.column': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/schemas/tables/columns/static/js/column'), + 'pgadmin.node.compound_trigger': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/schemas/tables/compound_triggers/static/js/compound_trigger'), 'pgadmin.node.constraints': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/schemas/tables/constraints/static/js/constraints'), 'pgadmin.node.database': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/static/js/database'), 'pgadmin.node.domain': path.join(__dirname, './pgadmin/browser/server_groups/servers/databases/schemas/domains/static/js/domain'),