Skip to content

Commit

Permalink
fix: add trigger to form_result table
Browse files Browse the repository at this point in the history
fix: syntax errors

fix: clean up function
  • Loading branch information
dleard authored and matthieu-foucault committed Dec 7, 2020
1 parent bfde612 commit 3eb2a1b
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 0 deletions.
13 changes: 13 additions & 0 deletions schema/deploy/tables/form_result_001.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
-- Deploy ggircs-portal:tables/form_result_001 to pg
-- requires: tables/form_result
-- requires: trigger_functions/immutable_form_result

begin;

create trigger _immutable_form_result
before insert or update of form_result
on ggircs_portal.form_result
for each row
execute procedure ggircs_portal_private.immutable_form_result();

commit;
28 changes: 28 additions & 0 deletions schema/deploy/trigger_functions/immutable_form_result.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
-- Deploy ggircs-portal:trigger_functions/immutable-form-result to pg
-- requires: schema_ggircs_portal_private

begin;
create or replace function ggircs_portal_private.immutable_form_result()
returns trigger as $$
declare
app_status text;
begin

select ars.application_revision_status::text into app_status
from ggircs_portal.application_revision_status ars
where ars.application_id = new.application_id
and ars.version_number = new.version_number
and ars.version_number != 0
order by created_at desc limit 1;

if (app_status='submitted') then
raise exception 'Form_result is immutable after application has been submitted';
end if;

return new;
end;
$$ language plpgsql volatile;

comment on function ggircs_portal_private.immutable_form_result is 'Trigger function ensures form result is immutable if application has been submitted';

commit;
7 changes: 7 additions & 0 deletions schema/revert/tables/form_result_001.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Revert ggircs-portal:tables/form_result_001 from pg

begin;

drop trigger _immutable_form_result on ggircs_portal.form_result;

commit;
7 changes: 7 additions & 0 deletions schema/revert/trigger_functions/immutable_form_result.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Revert ggircs-portal:trigger_functions/immutable-form-result from pg

begin;

drop function ggircs_portal_private.immutable_form_result;

commit;
1 change: 1 addition & 0 deletions schema/sqitch.plan
Original file line number Diff line number Diff line change
Expand Up @@ -203,3 +203,4 @@ tables/reporting_year_001 [tables/reporting_year trigger_functions/protect_date_
@v1.13.0 2020-11-30T22:27:39Z Dylan Leard <dylan@button.is> # release v1.13.0

trigger_functions/immutable_form_result [schema_ggircs_portal_private] 2020-12-04T20:34:19Z Dylan Leard <dylan@button.is> # Trigger makes form_result immutable if submitted
tables/form_result_001 [tables/form_result trigger_functions/immutable_form_result] 2020-12-04T20:46:48Z Dylan Leard <dylan@button.is> # Migration: add immutable_form_result trigger to table
11 changes: 11 additions & 0 deletions schema/verify/tables/form_result_001.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
-- Verify ggircs-portal:tables/form_result_001 on pg

begin;

select exists (select tgname
from pg_trigger
where not tgisinternal
and tgrelid = 'ggircs_portal.form_result'::regclass
and tgname = '_immutable_form_result');

rollback;
7 changes: 7 additions & 0 deletions schema/verify/trigger_functions/immutable_form_result.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
-- Verify ggircs-portal:trigger_functions/immutable-form-result on pg

begin;

select pg_get_functiondef('ggircs_portal_private.immutable_form_result()'::regprocedure);

rollback;

0 comments on commit 3eb2a1b

Please sign in to comment.