From fe050bfc4d4f5be359a4a667cce21899003ed36c Mon Sep 17 00:00:00 2001 From: alaskowski <alaskowski@ethz.ch> Date: Tue, 18 Jun 2024 16:45:55 +0200 Subject: [PATCH] BIS-745: Added missing insert and update sql function changes --- .../sql/postgresql/198/function-198.sql | 18 +- .../migration/migration-197-198.sql | 159 +++++++++++++++++- .../asapi/v3/CreateExperimentTest.java | 6 +- .../systemtest/asapi/v3/CreateSampleTest.java | 2 +- .../asapi/v3/UpdateExperimentTest.java | 17 +- .../sql/postgresql/198/finish-198.sql | 12 +- 6 files changed, 192 insertions(+), 22 deletions(-) diff --git a/server-application-server/source/sql/postgresql/198/function-198.sql b/server-application-server/source/sql/postgresql/198/function-198.sql index 568c3c6da95..88717f13db4 100644 --- a/server-application-server/source/sql/postgresql/198/function-198.sql +++ b/server-application-server/source/sql/postgresql/198/function-198.sql @@ -613,7 +613,8 @@ CREATE OR REPLACE RULE sample_insert AS space_id, space_frozen, version, - meta_data + meta_data, + immutable_data ) VALUES ( NEW.id, NEW.frozen, @@ -639,7 +640,8 @@ CREATE OR REPLACE RULE sample_insert AS NEW.space_id, NEW.space_frozen, NEW.version, - NEW.meta_data + NEW.meta_data, + NEW.immutable_data ); CREATE OR REPLACE RULE sample_update AS @@ -668,7 +670,8 @@ CREATE OR REPLACE RULE sample_update AS space_id = NEW.space_id, space_frozen = NEW.space_frozen, version = NEW.version, - meta_data = NEW.meta_data + meta_data = NEW.meta_data, + immutable_data = NEW.immutable_data WHERE id = NEW.id; CREATE OR REPLACE RULE sample_delete AS @@ -714,7 +717,8 @@ CREATE OR REPLACE RULE experiment_insert AS proj_frozen, registration_timestamp, version, - meta_data + meta_data, + immutable_data ) VALUES ( NEW.id, NEW.frozen, @@ -733,7 +737,8 @@ CREATE OR REPLACE RULE experiment_insert AS NEW.proj_frozen, NEW.registration_timestamp, NEW.version, - NEW.meta_data + NEW.meta_data, + NEW.immutable_data ); CREATE OR REPLACE RULE experiment_update AS @@ -755,7 +760,8 @@ CREATE OR REPLACE RULE experiment_update AS proj_frozen = NEW.proj_frozen, registration_timestamp = NEW.registration_timestamp, version = NEW.version, - meta_data = NEW.meta_data + meta_data = NEW.meta_data, + immutable_data = NEW.immutable_data WHERE id = NEW.id; CREATE OR REPLACE RULE experiment_delete AS diff --git a/server-application-server/source/sql/postgresql/migration/migration-197-198.sql b/server-application-server/source/sql/postgresql/migration/migration-197-198.sql index acd92e0bb78..c4ba1be30d4 100644 --- a/server-application-server/source/sql/postgresql/migration/migration-197-198.sql +++ b/server-application-server/source/sql/postgresql/migration/migration-197-198.sql @@ -15,4 +15,161 @@ CREATE OR REPLACE VIEW experiments AS SELECT id, perm_id, code, exty_id, pers_id_registerer, pers_id_modifier, registration_timestamp, modification_timestamp, proj_id, proj_frozen, del_id, orig_del, is_public, version, frozen, frozen_for_samp, frozen_for_data, tsvector_document, meta_data, immutable_data FROM experiments_all - WHERE del_id IS NULL; \ No newline at end of file + WHERE del_id IS NULL; + + +CREATE OR REPLACE RULE sample_insert AS + ON INSERT TO samples DO INSTEAD + INSERT INTO samples_all ( + id, + frozen, + frozen_for_comp, + frozen_for_children, + frozen_for_parents, + frozen_for_data, + code, + del_id, + orig_del, + expe_id, + expe_frozen, + proj_id, + proj_frozen, + modification_timestamp, + perm_id, + pers_id_registerer, + pers_id_modifier, + registration_timestamp, + samp_id_part_of, + cont_frozen, + saty_id, + space_id, + space_frozen, + version, + meta_data, + immutable_data + ) VALUES ( + NEW.id, + NEW.frozen, + NEW.frozen_for_comp, + NEW.frozen_for_children, + NEW.frozen_for_parents, + NEW.frozen_for_data, + NEW.code, + NEW.del_id, + NEW.orig_del, + NEW.expe_id, + NEW.expe_frozen, + NEW.proj_id, + NEW.proj_frozen, + NEW.modification_timestamp, + NEW.perm_id, + NEW.pers_id_registerer, + NEW.pers_id_modifier, + NEW.registration_timestamp, + NEW.samp_id_part_of, + NEW.cont_frozen, + NEW.saty_id, + NEW.space_id, + NEW.space_frozen, + NEW.version, + NEW.meta_data, + NEW.immutable_data + ); + +CREATE OR REPLACE RULE sample_update AS + ON UPDATE TO samples DO INSTEAD + UPDATE samples_all + SET code = NEW.code, + frozen = NEW.frozen, + frozen_for_comp = NEW.frozen_for_comp, + frozen_for_children = NEW.frozen_for_children, + frozen_for_parents = NEW.frozen_for_parents, + frozen_for_data = NEW.frozen_for_data, + del_id = NEW.del_id, + orig_del = NEW.orig_del, + expe_id = NEW.expe_id, + expe_frozen = NEW.expe_frozen, + proj_id = NEW.proj_id, + proj_frozen = NEW.proj_frozen, + modification_timestamp = NEW.modification_timestamp, + perm_id = NEW.perm_id, + pers_id_registerer = NEW.pers_id_registerer, + pers_id_modifier = NEW.pers_id_modifier, + registration_timestamp = NEW.registration_timestamp, + samp_id_part_of = NEW.samp_id_part_of, + cont_frozen = NEW.cont_frozen, + saty_id = NEW.saty_id, + space_id = NEW.space_id, + space_frozen = NEW.space_frozen, + version = NEW.version, + meta_data = NEW.meta_data, + immutable_data = NEW.immutable_data + WHERE id = NEW.id; + + +CREATE OR REPLACE RULE experiment_insert AS + ON INSERT TO experiments DO INSTEAD + INSERT INTO experiments_all ( + id, + frozen, + frozen_for_samp, + frozen_for_data, + code, + del_id, + orig_del, + exty_id, + is_public, + modification_timestamp, + perm_id, + pers_id_registerer, + pers_id_modifier, + proj_id, + proj_frozen, + registration_timestamp, + version, + meta_data, + immutable_data + ) VALUES ( + NEW.id, + NEW.frozen, + NEW.frozen_for_samp, + NEW.frozen_for_data, + NEW.code, + NEW.del_id, + NEW.orig_del, + NEW.exty_id, + NEW.is_public, + NEW.modification_timestamp, + NEW.perm_id, + NEW.pers_id_registerer, + NEW.pers_id_modifier, + NEW.proj_id, + NEW.proj_frozen, + NEW.registration_timestamp, + NEW.version, + NEW.meta_data, + NEW.immutable_data + ); + +CREATE OR REPLACE RULE experiment_update AS + ON UPDATE TO experiments DO INSTEAD + UPDATE experiments_all + SET code = NEW.code, + frozen = NEW.frozen, + frozen_for_samp = NEW.frozen_for_samp, + frozen_for_data = NEW.frozen_for_data, + del_id = NEW.del_id, + orig_del = NEW.orig_del, + exty_id = NEW.exty_id, + is_public = NEW.is_public, + modification_timestamp = NEW.modification_timestamp, + perm_id = NEW.perm_id, + pers_id_registerer = NEW.pers_id_registerer, + pers_id_modifier = NEW.pers_id_modifier, + proj_id = NEW.proj_id, + proj_frozen = NEW.proj_frozen, + registration_timestamp = NEW.registration_timestamp, + version = NEW.version, + meta_data = NEW.meta_data, + immutable_data = NEW.immutable_data + WHERE id = NEW.id; \ No newline at end of file diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java index fdc684d1b6b..3705b200c9b 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateExperimentTest.java @@ -273,14 +273,14 @@ public class CreateExperimentTest extends AbstractExperimentTest final String sessionToken = v3api.login(TEST_USER, PASSWORD); final ExperimentCreation creation = new ExperimentCreation(); - creation.setCode("TEST_EXPERIMENT1"); + creation.setCode("TEST_IMMUTABLE_EXPERIMENT1"); creation.setTypeId(new EntityTypePermId("SIRNA_HCS")); creation.setProjectId(new ProjectIdentifier("/TESTGROUP/TESTPROJ")); creation.setProperty("DESCRIPTION", "a description"); creation.setImmutableData(true); ExperimentFetchOptions fetchOptions = new ExperimentFetchOptions(); - fetchOptions.withTags(); + fetchOptions.withProperties(); List<ExperimentPermId> permIds = v3api.createExperiments(sessionToken, Arrays.asList(creation)); Map<IExperimentId, Experiment> map = v3api.getExperiments(sessionToken, permIds, fetchOptions); @@ -290,7 +290,7 @@ public class CreateExperimentTest extends AbstractExperimentTest Experiment experiment = experiments.get(0); - assertEquals(experiment.getIdentifier().getIdentifier(), "/TESTGROUP/TESTPROJ/TEST_EXPERIMENT1"); + assertEquals(experiment.getIdentifier().getIdentifier(), "/TESTGROUP/TESTPROJ/TEST_IMMUTABLE_EXPERIMENT1"); assertEquals(experiment.isImmutableData(), true); assertEquals(experiment.isFrozen(), false); assertEquals(experiment.getProperty("DESCRIPTION"), "a description"); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java index b232335ed00..6e661f05523 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/CreateSampleTest.java @@ -1228,7 +1228,7 @@ public class CreateSampleTest extends AbstractSampleTest SampleCreation samp1 = new SampleCreation(); - samp1.setCode("SAMPLE_WITH_SYS_PROPERTY"); + samp1.setCode("IMMUTABLE_SAMPLE_WITH_SYS_PROPERTY"); samp1.setTypeId(new EntityTypePermId("MASTER_PLATE")); samp1.setSpaceId(new SpacePermId("CISD")); samp1.setProperty(systemPropertyName, systemPropertyValue); diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java index d3e87b6d5e9..b4b7e6d8f34 100644 --- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java +++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/systemtest/asapi/v3/UpdateExperimentTest.java @@ -784,9 +784,16 @@ public class UpdateExperimentTest extends AbstractExperimentTest { // Given String sessionToken = v3api.login(TEST_USER, PASSWORD); - ExperimentIdentifier expId1 = new ExperimentIdentifier("/CISD/NEMO/EXP10"); + + ExperimentCreation creation = new ExperimentCreation(); + creation.setCode("EXPERIMENT_WITH_SAMPLE_PROPERTY"); + creation.setTypeId(new EntityTypePermId("DELETION_TEST")); + creation.setProjectId(new ProjectIdentifier("/TEST-SPACE/TEST-PROJECT")); + ExperimentPermId experimentPermId = + v3api.createExperiments(sessionToken, Arrays.asList(creation)).get(0); + ExperimentUpdate update1 = new ExperimentUpdate(); - update1.setExperimentId(expId1); + update1.setExperimentId(experimentPermId); update1.makeDataImmutable(); // When @@ -794,10 +801,10 @@ public class UpdateExperimentTest extends AbstractExperimentTest // Then Map<IExperimentId, Experiment> experiments = - v3api.getExperiments(sessionToken, Arrays.asList(expId1), + v3api.getExperiments(sessionToken, Arrays.asList(experimentPermId), new ExperimentFetchOptions()); - Experiment experiment1 = experiments.get(expId1); - assertEquals(experiment1.getIdentifier().getIdentifier(), expId1.getIdentifier()); + Experiment experiment1 = experiments.get(experimentPermId); + assertEquals(experiment1.getPermId().getPermId(), experimentPermId.getPermId()); assertEquals(experiment1.isFrozen(), false); assertEquals(experiment1.isImmutableData(), true); assertEquals(experiment1.isFrozenForDataSets(), false); diff --git a/server-application-server/sourceTest/sql/postgresql/198/finish-198.sql b/server-application-server/sourceTest/sql/postgresql/198/finish-198.sql index 4c787180d57..dcc51bf23b3 100644 --- a/server-application-server/sourceTest/sql/postgresql/198/finish-198.sql +++ b/server-application-server/sourceTest/sql/postgresql/198/finish-198.sql @@ -692,8 +692,8 @@ CREATE RULE experiment_delete AS ON DELETE TO experiments DO INSTEAD DELETE FROM experiments_all WHERE ((experiments_all.id)::bigint = (old.id)::bigint); CREATE RULE experiment_insert AS - ON INSERT TO experiments DO INSTEAD INSERT INTO experiments_all (id, frozen, frozen_for_samp, frozen_for_data, code, del_id, orig_del, exty_id, is_public, modification_timestamp, perm_id, pers_id_registerer, pers_id_modifier, proj_id, proj_frozen, registration_timestamp, version, meta_data) - VALUES (new.id, new.frozen, new.frozen_for_samp, new.frozen_for_data, new.code, new.del_id, new.orig_del, new.exty_id, new.is_public, new.modification_timestamp, new.perm_id, new.pers_id_registerer, new.pers_id_modifier, new.proj_id, new.proj_frozen, new.registration_timestamp, new.version, new.meta_data); + ON INSERT TO experiments DO INSTEAD INSERT INTO experiments_all (id, frozen, frozen_for_samp, frozen_for_data, code, del_id, orig_del, exty_id, is_public, modification_timestamp, perm_id, pers_id_registerer, pers_id_modifier, proj_id, proj_frozen, registration_timestamp, version, meta_data, immutable_data) + VALUES (new.id, new.frozen, new.frozen_for_samp, new.frozen_for_data, new.code, new.del_id, new.orig_del, new.exty_id, new.is_public, new.modification_timestamp, new.perm_id, new.pers_id_registerer, new.pers_id_modifier, new.proj_id, new.proj_frozen, new.registration_timestamp, new.version, new.meta_data, new.immutable_data); CREATE RULE experiment_project_delete AS ON DELETE TO experiments_all WHERE (old.proj_id IS NOT NULL) DO UPDATE project_relationships_history SET valid_until_timestamp = CURRENT_TIMESTAMP @@ -770,7 +770,7 @@ CREATE RULE experiment_properties_update AS FROM samples_all WHERE ((samples_all.id)::bigint = (old.samp_prop_id)::bigint)), old.pers_id_author, old.modification_timestamp, new.modification_timestamp, old.integer_array_value, old.real_array_value, old.string_array_value, old.timestamp_array_value, old.json_value); CREATE RULE experiment_update AS - ON UPDATE TO experiments DO INSTEAD UPDATE experiments_all SET code = new.code, frozen = new.frozen, frozen_for_samp = new.frozen_for_samp, frozen_for_data = new.frozen_for_data, del_id = new.del_id, orig_del = new.orig_del, exty_id = new.exty_id, is_public = new.is_public, modification_timestamp = new.modification_timestamp, perm_id = new.perm_id, pers_id_registerer = new.pers_id_registerer, pers_id_modifier = new.pers_id_modifier, proj_id = new.proj_id, proj_frozen = new.proj_frozen, registration_timestamp = new.registration_timestamp, version = new.version, meta_data = new.meta_data + ON UPDATE TO experiments DO INSTEAD UPDATE experiments_all SET code = new.code, frozen = new.frozen, frozen_for_samp = new.frozen_for_samp, frozen_for_data = new.frozen_for_data, del_id = new.del_id, orig_del = new.orig_del, exty_id = new.exty_id, is_public = new.is_public, modification_timestamp = new.modification_timestamp, perm_id = new.perm_id, pers_id_registerer = new.pers_id_registerer, pers_id_modifier = new.pers_id_modifier, proj_id = new.proj_id, proj_frozen = new.proj_frozen, registration_timestamp = new.registration_timestamp, version = new.version, meta_data = new.meta_data, immutable_data = new.immutable_data WHERE ((experiments_all.id)::bigint = (new.id)::bigint); CREATE RULE material_properties_delete AS ON DELETE TO material_properties @@ -891,8 +891,8 @@ CREATE RULE sample_experiment_update AS WHERE ((experiments_all.id)::bigint = (new.expe_id)::bigint)), new.pers_id_modifier, new.modification_timestamp); ); CREATE RULE sample_insert AS - ON INSERT TO samples DO INSTEAD INSERT INTO samples_all (id, frozen, frozen_for_comp, frozen_for_children, frozen_for_parents, frozen_for_data, code, del_id, orig_del, expe_id, expe_frozen, proj_id, proj_frozen, modification_timestamp, perm_id, pers_id_registerer, pers_id_modifier, registration_timestamp, samp_id_part_of, cont_frozen, saty_id, space_id, space_frozen, version, meta_data) - VALUES (new.id, new.frozen, new.frozen_for_comp, new.frozen_for_children, new.frozen_for_parents, new.frozen_for_data, new.code, new.del_id, new.orig_del, new.expe_id, new.expe_frozen, new.proj_id, new.proj_frozen, new.modification_timestamp, new.perm_id, new.pers_id_registerer, new.pers_id_modifier, new.registration_timestamp, new.samp_id_part_of, new.cont_frozen, new.saty_id, new.space_id, new.space_frozen, new.version, new.meta_data); + ON INSERT TO samples DO INSTEAD INSERT INTO samples_all (id, frozen, frozen_for_comp, frozen_for_children, frozen_for_parents, frozen_for_data, code, del_id, orig_del, expe_id, expe_frozen, proj_id, proj_frozen, modification_timestamp, perm_id, pers_id_registerer, pers_id_modifier, registration_timestamp, samp_id_part_of, cont_frozen, saty_id, space_id, space_frozen, version, meta_data, immutable_data) + VALUES (new.id, new.frozen, new.frozen_for_comp, new.frozen_for_children, new.frozen_for_parents, new.frozen_for_data, new.code, new.del_id, new.orig_del, new.expe_id, new.expe_frozen, new.proj_id, new.proj_frozen, new.modification_timestamp, new.perm_id, new.pers_id_registerer, new.pers_id_modifier, new.registration_timestamp, new.samp_id_part_of, new.cont_frozen, new.saty_id, new.space_id, new.space_frozen, new.version, new.meta_data, new.immutable_data); CREATE RULE sample_parent_annotations_update AS ON UPDATE TO sample_relationships_all WHERE ((old.del_id IS NULL) AND (new.del_id IS NULL) AND ((old.sample_id_child)::bigint = (new.sample_id_child)::bigint) AND ((old.sample_id_parent)::bigint = (new.sample_id_parent)::bigint) AND (old.parent_annotations <> new.parent_annotations)) DO INSERT INTO sample_relationships_history (id, main_samp_id, relation_type, samp_id, entity_kind, entity_perm_id, annotations, pers_id_author, valid_from_timestamp) @@ -1047,7 +1047,7 @@ CREATE RULE sample_space_update AS WHERE ((spaces.id)::bigint = (new.space_id)::bigint)), new.pers_id_modifier, new.modification_timestamp); ); CREATE RULE sample_update AS - ON UPDATE TO samples DO INSTEAD UPDATE samples_all SET code = new.code, frozen = new.frozen, frozen_for_comp = new.frozen_for_comp, frozen_for_children = new.frozen_for_children, frozen_for_parents = new.frozen_for_parents, frozen_for_data = new.frozen_for_data, del_id = new.del_id, orig_del = new.orig_del, expe_id = new.expe_id, expe_frozen = new.expe_frozen, proj_id = new.proj_id, proj_frozen = new.proj_frozen, modification_timestamp = new.modification_timestamp, perm_id = new.perm_id, pers_id_registerer = new.pers_id_registerer, pers_id_modifier = new.pers_id_modifier, registration_timestamp = new.registration_timestamp, samp_id_part_of = new.samp_id_part_of, cont_frozen = new.cont_frozen, saty_id = new.saty_id, space_id = new.space_id, space_frozen = new.space_frozen, version = new.version, meta_data = new.meta_data + ON UPDATE TO samples DO INSTEAD UPDATE samples_all SET code = new.code, frozen = new.frozen, frozen_for_comp = new.frozen_for_comp, frozen_for_children = new.frozen_for_children, frozen_for_parents = new.frozen_for_parents, frozen_for_data = new.frozen_for_data, del_id = new.del_id, orig_del = new.orig_del, expe_id = new.expe_id, expe_frozen = new.expe_frozen, proj_id = new.proj_id, proj_frozen = new.proj_frozen, modification_timestamp = new.modification_timestamp, perm_id = new.perm_id, pers_id_registerer = new.pers_id_registerer, pers_id_modifier = new.pers_id_modifier, registration_timestamp = new.registration_timestamp, samp_id_part_of = new.samp_id_part_of, cont_frozen = new.cont_frozen, saty_id = new.saty_id, space_id = new.space_id, space_frozen = new.space_frozen, version = new.version, meta_data = new.meta_data, immutable_data = new.immutable_data WHERE ((samples_all.id)::bigint = (new.id)::bigint); CREATE TRIGGER add_data_set_to_experiment_check AFTER INSERT ON data_all FOR EACH ROW WHEN (new.expe_frozen) EXECUTE PROCEDURE raise_exception_frozen_experiment_relationship('data set'); CREATE TRIGGER add_data_set_to_sample_check AFTER INSERT ON data_all FOR EACH ROW WHEN (new.samp_frozen) EXECUTE PROCEDURE raise_exception_frozen_data_set_sample_relationship(); -- GitLab