diff --git a/deployment/hasura/migrations/AerieMerlin/18_constraint_run/down.sql b/deployment/hasura/migrations/AerieMerlin/20_constraint_run/down.sql similarity index 80% rename from deployment/hasura/migrations/AerieMerlin/18_constraint_run/down.sql rename to deployment/hasura/migrations/AerieMerlin/20_constraint_run/down.sql index 357d5820df..9bc2d8e8ff 100644 --- a/deployment/hasura/migrations/AerieMerlin/18_constraint_run/down.sql +++ b/deployment/hasura/migrations/AerieMerlin/20_constraint_run/down.sql @@ -1,6 +1,7 @@ comment on column constraint_run.constraint_id is null; comment on column constraint_run.constraint_definition is null; -comment on column constraint_run.dataset_id is null; +comment on column constraint_run.plan_id is null; +comment on column constraint_run.simulation_dataset_id is null; comment on column constraint_run.status is null; comment on column constraint_run.violations is null; comment on column constraint_run.requested_by is null; @@ -15,4 +16,4 @@ drop function constraint_check_constraint_run(); drop trigger simulation_dataset_check_constraint_run_trigger on simulation_dataset; drop function simulation_dataset_check_constraint_run(); -call migrations.mark_migration_rolled_back('18'); +call migrations.mark_migration_rolled_back('20'); diff --git a/deployment/hasura/migrations/AerieMerlin/18_constraint_run/up.sql b/deployment/hasura/migrations/AerieMerlin/20_constraint_run/up.sql similarity index 76% rename from deployment/hasura/migrations/AerieMerlin/18_constraint_run/up.sql rename to deployment/hasura/migrations/AerieMerlin/20_constraint_run/up.sql index ce2ac47e88..3a4ec0a758 100644 --- a/deployment/hasura/migrations/AerieMerlin/18_constraint_run/up.sql +++ b/deployment/hasura/migrations/AerieMerlin/20_constraint_run/up.sql @@ -3,13 +3,14 @@ create type constraint_status as enum('resolved', 'constraint-outdated', 'simula create table constraint_run ( constraint_id integer not null, constraint_definition text not null, - dataset_id integer not null, + plan_id integer not null, + simulation_dataset_id integer not null, status constraint_status not null default 'resolved', violations jsonb null, -- Additional Metadata - requested_by text not null default '', + requested_by text, requested_at timestamptz not null default now(), constraint constraint_run_to_constraint @@ -17,9 +18,14 @@ create table constraint_run ( references "constraint" on delete cascade, constraint constraint_run_to_simulation_dataset - foreign key (dataset_id) + foreign key (simulation_dataset_id) references simulation_dataset - on delete cascade + on delete cascade, + constraint constraint_run_requested_by + foreign key (requested_by) + references metadata.users + on update cascade + on delete set null ); comment on table constraint_run is e'' @@ -29,7 +35,9 @@ comment on column constraint_run.constraint_id is e'' 'The constraint that we are evaluating during the run.'; comment on column constraint_run.constraint_definition is e'' 'The definition of the constraint that is being checked, used to determine staleness.'; -comment on column constraint_run.dataset_id is e'' +comment on column constraint_run.plan_id is e'' + 'The plan that the constraint run is associated with.'; +comment on column constraint_run.simulation_dataset_id is e'' 'The simulation dataset id from when the constraint was checked, used to determine staleness.'; comment on column constraint_run.status is e'' 'The current status of the constraint run.'; @@ -59,12 +67,12 @@ create or replace function simulation_dataset_check_constraint_run() returns trigger security definer language plpgsql as $$begin - if new.simulation_id = old.simulation_id - then - update constraint_run - set status = 'simulation-outdated' - where old.dataset_id = dataset_id; - end if; + update constraint_run cr + set status = 'simulation-outdated' + from simulation s + where cr.status = 'resolved' + and s.plan_id = cr.plan_id + and s.id = new.simulation_id; return new; end$$; @@ -73,4 +81,4 @@ create trigger simulation_dataset_check_constraint_run_trigger for each row execute function simulation_dataset_check_constraint_run(); -call migrations.mark_migration_applied('18'); +call migrations.mark_migration_applied('20'); diff --git a/merlin-server/sql/merlin/applied_migrations.sql b/merlin-server/sql/merlin/applied_migrations.sql index f132449a60..4110f3f0ac 100644 --- a/merlin-server/sql/merlin/applied_migrations.sql +++ b/merlin-server/sql/merlin/applied_migrations.sql @@ -22,3 +22,4 @@ call migrations.mark_migration_applied('16'); call migrations.mark_migration_applied('17'); call migrations.mark_migration_applied('18'); call migrations.mark_migration_applied('19'); +call migrations.mark_migration_applied('20'); diff --git a/merlin-server/sql/merlin/tables/constraint_run.sql b/merlin-server/sql/merlin/tables/constraint_run.sql index c9d8872325..52e13424d1 100644 --- a/merlin-server/sql/merlin/tables/constraint_run.sql +++ b/merlin-server/sql/merlin/tables/constraint_run.sql @@ -10,7 +10,7 @@ create table constraint_run ( violations jsonb null, -- Additional Metadata - requested_by text not null default '', + requested_by text, requested_at timestamptz not null default now(), constraint constraint_run_to_constraint @@ -20,7 +20,12 @@ create table constraint_run ( constraint constraint_run_to_simulation_dataset foreign key (simulation_dataset_id) references simulation_dataset - on delete cascade + on delete cascade, + constraint constraint_run_requested_by + foreign key (requested_by) + references metadata.users + on update cascade + on delete set null ); comment on table constraint_run is e''