Resolve various trigger issues. Fixes #2015

- Allow changing of row/statement flag
- When user update any of the parameter - trigger gets disappear from browser tree. To make it visible user  has to do refresh.
- Edit Mode - 'Row level' trigger was not allowed to edit for "inline edb-spl" trigger function, even though "Row Trigger" is enabled.
- SQL was not generated properly when user change 'Row Trigger', Fires and events.
- Edit Mode - Fires and Events should be allowed to edit for "inline edb-spl" function mentioned with Code in description.
- Edit Mode - For trigger, if user edit parameters like Fires, Events, Code, Row trigger etc. then new OID is getting generated so we should fetch and return new OID in response rather then old trigger OID.
This commit is contained in:
Murtuza Zabuawala 2017-01-30 13:05:15 +00:00 committed by Dave Page
parent 19be3529f8
commit e8f0cf6d94
3 changed files with 46 additions and 9 deletions

View File

@ -3,28 +3,37 @@ ALTER TRIGGER {{ conn|qtIdent(o_data.name) }} ON {{ conn|qtIdent(o_data.nspname,
RENAME TO {{ conn|qtIdent(data.name) }}; RENAME TO {{ conn|qtIdent(data.name) }};
{% endif %} {% endif %}
{% if data.prosrc is defined and o_data.lanname == 'edbspl' and o_data.prosrc != data.prosrc %} {% 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 %} {% set or_flag = False %}
CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }} CREATE OR REPLACE TRIGGER {{ conn|qtIdent(data.name) }}
{{o_data.fires}} {% 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 %}{% if o_data.evnt_delete %} {% 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 %} {% if or_flag %} OR {% endif %}DELETE{% set or_flag = True %}
{% endif %}{% 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 %} {% if or_flag %} OR {% endif %}TRUNCATE{% set or_flag = True %}
{% endif %}{% 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.column) }}{% endfor %}{% endif %} {% 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.column) }}{% 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.column) }}{% endfor %}{% endif %}{% endif %}
{% endif %} {% endif %}
ON {{ conn|qtIdent(data.schema, data.table) }} ON {{ conn|qtIdent(data.schema, data.table) }}
{% if o_data.tgdeferrable %} {% if o_data.tgdeferrable %}
DEFERRABLE{% if o_data.tginitdeferred %} INITIALLY DEFERRED{% endif %} DEFERRABLE{% if o_data.tginitdeferred %} INITIALLY DEFERRED{% endif %}
{% endif %} {% endif %}{% if data.is_row_trigger is not defined %}
FOR EACH{% if o_data.is_row_trigger %} ROW{% else %} STATEMENT{% endif %} 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 %} {% if o_data.whenclause %}
WHEN {{ o_data.whenclause }} WHEN {{ o_data.whenclause }}
{% endif %} {% endif %}
{% if (data.prosrc is not defined) %}
{{ o_data.prosrc }};
{% else %}
{{ data.prosrc }}; {{ data.prosrc }};
{% endif %}
{% if data.description is not defined and o_data.description %} {% 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) }} COMMENT ON TRIGGER {{ conn|qtIdent(data.name) }} ON {{ conn|qtIdent(o_data.nspname, o_data.relname) }}

View File

@ -739,10 +739,19 @@ class TriggerView(PGChildNodeView):
if not status: if not status:
return internal_server_error(errormsg=res) return internal_server_error(errormsg=res)
# We need oid to add object in browser tree and if user
# update the trigger then new OID is getting generated
# so we need to return new OID of 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)
return jsonify( return jsonify(
node=self.blueprint.generate_browser_node( node=self.blueprint.generate_browser_node(
trid, new_trid,
scid, tid,
name, name,
icon="icon-%s" % self.node_type icon="icon-%s" % self.node_type
) )

View File

@ -216,6 +216,11 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
return false; return false;
} }
} else { } else {
// Check if it is row trigger then enabled it.
var is_row_trigger = m.get('is_row_trigger');
if (!_.isUndefined(is_row_trigger) && m.node_info['server']['server_type'] == 'ppas') {
return false;
}
// Disable it // Disable it
return true; return true;
} }
@ -335,6 +340,11 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
return false; return false;
} }
} else { } else {
// Check if it is row trigger then enabled it.
var fires_ = m.get('fires');
if (!_.isUndefined(fires_) && m.node_info['server']['server_type'] == 'ppas') {
return false;
}
// Disable it // Disable it
return true; return true;
} }
@ -348,6 +358,9 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
group: '{{ _('Events') }}', group: '{{ _('Events') }}',
control: Backform.CustomSwitchControl, control: Backform.CustomSwitchControl,
disabled: function(m) { 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]); return m.inSchemaWithModelCheck.apply(this, [m]);
} }
},{ },{
@ -356,6 +369,9 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
group: '{{ _('Events') }}', group: '{{ _('Events') }}',
control: Backform.CustomSwitchControl, control: Backform.CustomSwitchControl,
disabled: function(m) { 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]); return m.inSchemaWithModelCheck.apply(this, [m]);
} }
},{ },{
@ -364,6 +380,9 @@ function($, _, S, pgAdmin, pgBrowser, Backform, alertify) {
group: '{{ _('Events') }}', group: '{{ _('Events') }}',
control: Backform.CustomSwitchControl, control: Backform.CustomSwitchControl,
disabled: function(m) { 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]); return m.inSchemaWithModelCheck.apply(this, [m]);
} }
},{ },{