From ee4f88446273567cb7ae839bd99a3cce8bd39ede Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Mon, 11 Jul 2011 20:05:46 +0000 Subject: [PATCH] [LMS-2368] fixed incomplete migration (functions+triggers were missing in test DB) & fixed a test SVN: 22079 --- .../dataaccess/db/ExperimentDAOTest.java | 11 +- .../075/017=database_version_logs.tsv | 4 +- .../sql/postgresql/075/finish-075.sql | 7 + .../sql/postgresql/075/schema-075.sql | 123 ++++++++++++++++++ 4 files changed, 140 insertions(+), 5 deletions(-) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java index e78269fc3e7..80574a7c42e 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAOTest.java @@ -300,13 +300,18 @@ public class ExperimentDAOTest extends AbstractDAOTest public final void testDeleteFailWithDataSets() { final IExperimentDAO experimentDAO = daoFactory.getExperimentDAO(); - final ExperimentPE deletedExperiment = findExperiment("/CISD/DEFAULT/EXP-X"); // Deleted experiment should have data sets which prevent it from deletion. - // Other connections which also prevent sample deletion should be empty in this test. + // Other connections which also prevent experiment deletion should be empty in this test. - // Currently there is no such experiment in test DB so we first add a data set + // Currently there is no such experiment in test DB so we first create an experiment + // with no connections and then connect a data set to it. // to an empty experiment (with no connections). + ExperimentPE experiment = + createExperiment("CISD", "CISD", "DEFAULT", "EXP-13", "SIRNA_HCS"); + daoFactory.getExperimentDAO().createOrUpdateExperiment(experiment); + + final ExperimentPE deletedExperiment = findExperiment("/CISD/DEFAULT/EXP-13"); final ExternalDataPE dataSet = findExternalData("20081105092158673-1"); dataSet.setExperiment(deletedExperiment); daoFactory.getDataDAO().validateAndSaveUpdatedEntity(dataSet); diff --git a/openbis/sourceTest/sql/postgresql/075/017=database_version_logs.tsv b/openbis/sourceTest/sql/postgresql/075/017=database_version_logs.tsv index 9fa11be7e59..e94ab69777b 100644 --- a/openbis/sourceTest/sql/postgresql/075/017=database_version_logs.tsv +++ b/openbis/sourceTest/sql/postgresql/075/017=database_version_logs.tsv @@ -47,5 +47,5 @@ 071 source/sql/postgresql/migration/migration-070-071.sql SUCCESS 2011-05-09 08:58:24.327 \\x2d2d204d6967726174696f6e2066726f6d2030373020746f203037310a414c544552205441424c4520434f4e54524f4c4c45445f564f434142554c4152595f5445524d532041444420434f4c554d4e2049535f4f4646494349414c20424f4f4c45414e5f43484152204e4f54204e554c4c2044454641554c54202754273b0a0a2d2d200a2d2d205669727475616c2064617461207365742072656c61746564206368616e6765730a2d2d0a414c544552205441424c4520444154415f5345545f54595045532041444420434f4c554d4e2049535f434f4e5441494e455220424f4f4c45414e5f434841522044454641554c542066616c73653b0a414c544552205441424c4520444154412041444420434f4c554d4e2043544e525f4f5244455220494e54454745523b0a414c544552205441424c4520444154412041444420434f4c554d4e2043544e525f504152454e545f494420544543485f49442044454641554c54204e554c4c3b0a414c544552205441424c4520444154412041444420434f4e53545241494e5420444154415f43544e525f504152454e545f464b20464f524549474e204b4559202843544e525f504152454e545f494429205245464552454e4345532044415441284944293b0a0a \N 072 source/sql/postgresql/migration/migration-071-072.sql SUCCESS 2011-06-07 09:33:19.303 \\x2d2d204d6967726174696f6e2066726f6d2030373120746f203037320a5550444154452045585445524e414c5f44415441205345542053504545445f48494e543d2d35302077686572652053504545445f48494e54204953204e554c4c3b0a414c544552205441424c452045585445524e414c5f4441544120414c54455220434f4c554d4e2053504545445f48494e54205345542044454641554c54202d35303b0a414c544552205441424c452045585445524e414c5f4441544120414c54455220434f4c554d4e2053504545445f48494e5420534554204e4f54204e554c4c3b0a \N 073 source/sql/postgresql/migration/migration-072-073.sql SUCCESS 2011-06-20 16:13:32.686 \\x2d2d204d6967726174696f6e2066726f6d2030373220746f203037330a0a414c544552205441424c4520444154412041444420434f4c554d4e20494e56415f494420544543485f49443b0a414c544552205441424c4520444154412041444420434f4e53545241494e5420444154415f494e56415f464b20464f524549474e204b45592028494e56415f494429205245464552454e43455320494e56414c49444154494f4e53284944293b0a43524541544520494e44455820444154415f494e56415f464b5f49204f4e20444154412028494e56415f4944293b0a \N -074 source/sql/postgresql/migration/migration-073-074.sql SUCCESS 2011-07-08 11:09:48.889 \\x2d2d20446f6573206e6f7468696e6720627574206d6967726174696f6e20686173206265656e20726571756573746564206279207375622070726f6a6563742073637265656e696e670a \N -075 source/sql/postgresql/migration/migration-074-075.sql SUCCESS 2011-07-08 11:18:51.764 \\x2d2d204d6967726174696f6e2066726f6d2030373420746f203037350a0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d2052656e616d6520696e76616c69646174696f6e20746f2064656c6574696f6e202d2d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d2072656e616d696e67733a0a2d2d207461626c6520494e56414c49444154494f4e53202d3e2044454c4554494f4e5320200a414c544552205441424c4520696e76616c69646174696f6e732052454e414d4520544f2064656c6574696f6e733b0a2d2d2073657175656e636520494e56414c49444154494f4e5f49445f534551202d3e2044454c4554494f4e5f49445f5345510a53454c4543542052454e414d455f53455155454e43452827494e56414c49444154494f4e5f49445f534551272c202744454c4554494f4e5f49445f53455127293b0a2d2d20636f6c756d6e7320494e56415f4944202d3e2044454c5f49440a414c544552205441424c4520646174612052454e414d4520696e76615f696420544f2064656c5f69643b0a414c544552205441424c452073616d706c65732052454e414d4520696e76615f696420544f2064656c5f69643b0a414c544552205441424c45206578706572696d656e74732052454e414d4520696e76615f696420544f2064656c5f69643b0a2d2d20696e64657865730a414c54455220494e44455820646174615f696e76615f666b5f692052454e414d4520544f20646174615f64656c5f666b5f693b0a414c54455220494e44455820657870655f696e76615f666b5f692052454e414d4520544f20657870655f64656c5f666b5f693b0a414c54455220494e44455820696e76615f706572735f666b5f692052454e414d4520544f2064656c5f706572735f666b5f693b0a414c54455220494e4445582073616d705f696e76615f666b5f692052454e414d4520544f2073616d705f64656c5f666b5f693b0a2d2d0a2d2d20726563726561746520636f6e73747261696e74732077697468206e6577206e616d6573202872656e616d696e67206973206e6f7420706f737369626c65290a2d2d0a414c544552205441424c452064617461200a202044524f5020434f4e53545241494e5420646174615f696e76615f666b3b0a414c544552205441424c45206578706572696d656e74730a202044524f5020434f4e53545241494e5420657870655f696e76615f666b3b0a414c544552205441424c452073616d706c65730a202044524f5020434f4e53545241494e542073616d705f696e76615f666b3b0a414c544552205441424c452064656c6574696f6e73200a202044524f5020434f4e53545241494e5420696e76615f706b3b0a20200a414c544552205441424c452064656c6574696f6e73200a202041444420434f4e53545241494e542064656c5f706b205052494d415259204b4559286964293b0a414c544552205441424c452064617461200a202041444420434f4e53545241494e5420646174615f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a414c544552205441424c45206578706572696d656e7473200a202041444420434f4e53545241494e5420657870655f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a414c544552205441424c452073616d706c6573200a202041444420434f4e53545241494e542073616d705f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a20200a414c544552205441424c452064656c6574696f6e73200a202044524f5020434f4e53545241494e5420696e76615f706572735f666b3b0a414c544552205441424c452064656c6574696f6e73200a202041444420434f4e53545241494e542064656c5f706572735f666b20464f524549474e204b45592028706572735f69645f7265676973746572657229205245464552454e43455320706572736f6e73286964293b0a2d2d0a2d2d2072656d6f76652027494e56414c49444154494f4e272066726f6d204556454e545f5459504520646f6d61696e2028776520646f6e27742073746f7265206f722068616e646c652073756368206576656e7473290a2d2d0a44454c4554452046524f4d206576656e7473205748455245206576656e745f74797065203d2027494e56414c49444154494f4e273b0a414c54455220444f4d41494e206576656e745f747970652044524f5020434f4e53545241494e54206576656e745f747970655f636865636b3b0a414c54455220444f4d41494e206576656e745f747970652041444420434f4e53545241494e54206576656e745f747970655f636865636b20434845434b202856414c554520494e20282744454c4554494f4e272c20274d4f56454d454e542729293b0a \N +074 source/sql/postgresql/migration/migration-073-074.sql SUCCESS 2011-06-30 15:21:41.123 \\x2d2d20446f6573206e6f7468696e6720627574206d6967726174696f6e20686173206265656e20726571756573746564206279207375622070726f6a6563742073637265656e696e670a \N +075 source/sql/postgresql/migration/migration-074-075.sql SUCCESS 2011-07-11 16:43:22.807 \\x2d2d204d6967726174696f6e2066726f6d2030373420746f203037350a0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d20507572706f73653a2052656e616d6520696e76616c69646174696f6e20746f2064656c6574696f6e202d2d0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d2072656e616d696e67733a0a2d2d207461626c6520494e56414c49444154494f4e53202d3e2044454c4554494f4e5320200a414c544552205441424c4520696e76616c69646174696f6e732052454e414d4520544f2064656c6574696f6e733b0a2d2d2073657175656e636520494e56414c49444154494f4e5f49445f534551202d3e2044454c4554494f4e5f49445f5345510a53454c4543542052454e414d455f53455155454e43452827494e56414c49444154494f4e5f49445f534551272c202744454c4554494f4e5f49445f53455127293b0a2d2d20636f6c756d6e7320494e56415f4944202d3e2044454c5f49440a414c544552205441424c4520646174612052454e414d4520696e76615f696420544f2064656c5f69643b0a414c544552205441424c452073616d706c65732052454e414d4520696e76615f696420544f2064656c5f69643b0a414c544552205441424c45206578706572696d656e74732052454e414d4520696e76615f696420544f2064656c5f69643b0a2d2d20696e64657865730a414c54455220494e44455820646174615f696e76615f666b5f692052454e414d4520544f20646174615f64656c5f666b5f693b0a414c54455220494e44455820657870655f696e76615f666b5f692052454e414d4520544f20657870655f64656c5f666b5f693b0a414c54455220494e44455820696e76615f706572735f666b5f692052454e414d4520544f2064656c5f706572735f666b5f693b0a414c54455220494e4445582073616d705f696e76615f666b5f692052454e414d4520544f2073616d705f64656c5f666b5f693b0a2d2d0a2d2d20726563726561746520636f6e73747261696e74732077697468206e6577206e616d6573202872656e616d696e67206973206e6f7420706f737369626c65290a2d2d0a414c544552205441424c452064617461200a202044524f5020434f4e53545241494e5420646174615f696e76615f666b3b0a414c544552205441424c45206578706572696d656e74730a202044524f5020434f4e53545241494e5420657870655f696e76615f666b3b0a414c544552205441424c452073616d706c65730a202044524f5020434f4e53545241494e542073616d705f696e76615f666b3b0a414c544552205441424c452064656c6574696f6e73200a202044524f5020434f4e53545241494e5420696e76615f706b3b0a20200a414c544552205441424c452064656c6574696f6e73200a202041444420434f4e53545241494e542064656c5f706b205052494d415259204b4559286964293b0a414c544552205441424c452064617461200a202041444420434f4e53545241494e5420646174615f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a414c544552205441424c45206578706572696d656e7473200a202041444420434f4e53545241494e5420657870655f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a414c544552205441424c452073616d706c6573200a202041444420434f4e53545241494e542073616d705f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a20200a414c544552205441424c452064656c6574696f6e73200a202044524f5020434f4e53545241494e5420696e76615f706572735f666b3b0a414c544552205441424c452064656c6574696f6e73200a202041444420434f4e53545241494e542064656c5f706572735f666b20464f524549474e204b45592028706572735f69645f7265676973746572657229205245464552454e43455320706572736f6e73286964293b0a2d2d0a2d2d2072656d6f76652027494e56414c49444154494f4e272066726f6d204556454e545f5459504520646f6d61696e2028776520646f6e27742073746f7265206f722068616e646c652073756368206576656e7473290a2d2d0a44454c4554452046524f4d206576656e7473205748455245206576656e745f74797065203d2027494e56414c49444154494f4e273b0a414c54455220444f4d41494e206576656e745f747970652044524f5020434f4e53545241494e54206576656e745f747970655f636865636b3b0a414c54455220444f4d41494e206576656e745f747970652041444420434f4e53545241494e54206576656e745f747970655f636865636b20434845434b202856414c554520494e20282744454c4554494f4e272c20274d4f56454d454e542729293b0a0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d2020507572706f73653a202043726561746520444546455252454420747269676765727320666f7220636865636b696e6720636f6e73697374656e6379206f662064656c6574696f6e2073746174652e0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d20312e20666f72626964206d6f64696669636174696f6e73206f662064656c6574656420656e746974696573200a2d2d204e4f54453a20776520646f6e277420636865636b20666f72206372656174696f6e206f662064656c6574656420656e746974696573206173206974206973206e6f7420706f737369626c652066726f6d2074686520636c69656e7420736964650a2d2d20616e6420776f756c642072656475636520706572666f726d616e6365206f662062756c6b20696e736572742e200a0a2d2d2074657374202d2064616f2c20686561646c65737320656469740a0a435245415445204f52205245504c4143452046554e4354494f4e20656e746974795f6e616d6528656e746974795f7461626c655f6e616d65204e414d45292052455455524e5320766172636861722041532024240a424547494e0a094341534520656e746974795f7461626c655f6e616d650a09095748454e20276461746127205448454e2052455455524e20274461746120536574273b0a09095748454e202773616d706c657327205448454e2052455455524e202753616d706c65273b0a09095748454e20276578706572696d656e747327205448454e2052455455524e20274578706572696d656e74273b0a09095748454e20276d6174657269616c7327205448454e2052455455524e20274d6174657269616c273b0a0909454c534520524149534520455843455054494f4e2027222522206973206e6f7420616e20656e74697479207461626c65272c20656e746974795f7461626c655f6e616d653b0a09454e4420434153453b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a0a435245415445204f52205245504c4143452046554e4354494f4e20666f726269645f64656c657465645f656e746974795f6d6f64696669636174696f6e28292052455455524e5320747269676765722041532024240a424547494e0a20205241495345204e4f544943452027436865636b20252028436f64653a20252920272c20656e746974795f6e616d652854475f5441424c455f4e414d45292c204e45572e636f64653b0a09494620284f4c442e64656c5f6964204953204e4f54204e554c4c20414e44204e45572e64656c5f6964204953204e4f54204e554c4c29205448454e0a0909524149534520455843455054494f4e2027557064617465206f6620612064656c6574656420252028436f64653a202529206661696c656420626563617573652064656c6574656420656e7469746965732063616e272774206265206d6f6469666965642e272c20656e746974795f6e616d652854475f5441424c455f4e414d45292c204e45572e636f64653b0a09454e442049463b0a202052455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a0a435245415445205452494747455220666f726269645f64656c657465645f656e746974795f6d6f64696669636174696f6e200a094245464f524520555044415445204f4e2064617461200a09464f52204541434820524f5720455845435554452050524f43454455524520666f726269645f64656c657465645f656e746974795f6d6f64696669636174696f6e28293b0a0a435245415445205452494747455220666f726269645f64656c657465645f656e746974795f6d6f64696669636174696f6e200a094245464f524520555044415445204f4e2073616d706c6573200a09464f52204541434820524f5720455845435554452050524f43454455524520666f726269645f64656c657465645f656e746974795f6d6f64696669636174696f6e28293b0a0a435245415445205452494747455220666f726269645f64656c657465645f656e746974795f6d6f64696669636174696f6e200a094245464f524520555044415445204f4e206578706572696d656e7473200a09464f52204541434820524f5720455845435554452050524f43454455524520666f726269645f64656c657465645f656e746974795f6d6f64696669636174696f6e28293b0a090a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d20322e2064617461207365740a2d2d2d206f6e20696e736572742f757064617465202d206578706572696d656e742c2073616d706c652063616e27742062652064656c6574656420756e6c657373207468652064617461207365742069732064656c6574650a2d2d2d2020202020202020202020202020202020202d20706172656e74732f6368696c6472656e2072656c6174696f6e7368697020737461797320756e6368616e676564200a0a2d2d2074657374202d20686561646c65737320656469742f6372656174652c200a0a435245415445204f52205245504c4143452046554e4354494f4e20636865636b5f637265617465645f6f725f6d6f6469666965645f646174615f7365745f6f776e65725f69735f616c69766528292052455455524e5320747269676765722041532024240a4445434c4152450a096f776e65725f636f646509434f44453b0a096f776e65725f64656c5f696409544543485f49443b0a424547494e0a20202d2d20636865636b2073616d706c650a2020494620284e45572e73616d705f6964204953204e4f54204e554c4c29205448454e0a20200953454c4543542064656c5f69642c20636f646520494e544f206f776e65725f64656c5f69642c206f776e65725f636f64650a202009202046524f4d2073616d706c6573200a20200920205748455245206964203d204e45572e73616d705f69643b0a202009494620286f776e65725f64656c5f6964204953204e4f54204e554c4c29205448454e200a090909524149534520455843455054494f4e2027496e736572742f557064617465206f662044617461205365742028436f64653a202529206661696c656420626563617573652069742063616e6e6f7420626520636f6e6e656374656420746f20612064656c657465642053616d706c652028436f64653a2025292e272c204e45572e636f64652c206f776e65725f636f64653b0a0909454e442049463b0a09454e442049463b0a092d2d20636865636b206578706572696d656e740a0953454c4543542064656c5f69642c20636f646520494e544f206f776e65725f64656c5f69642c206f776e65725f636f64650a2020202046524f4d206578706572696d656e7473200a202020205748455245206964203d204e45572e657870655f69643b0a2020494620286f776e65725f64656c5f6964204953204e4f54204e554c4c29205448454e200a0909524149534520455843455054494f4e2027496e736572742f557064617465206f662044617461205365742028436f64653a202529206661696c656420626563617573652069742063616e6e6f7420626520636f6e6e656374656420746f20612064656c65746564204578706572696d656e742028436f64653a2025292e272c204e45572e636f64652c206f776e65725f636f64653b0a09454e442049463b090a0952455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a20200a43524541544520434f4e53545241494e54205452494747455220636865636b5f637265617465645f6f725f6d6f6469666965645f646174615f7365745f6f776e65725f69735f616c697665200a09414654455220494e53455254204f5220555044415445204f4e20646174610a0944454645525241424c4520494e495449414c4c592044454645525245440a09464f52204541434820524f57205748454e20284e45572e64656c5f6964204953204e554c4c290a09455845435554452050524f43454455524520636865636b5f637265617465645f6f725f6d6f6469666965645f646174615f7365745f6f776e65725f69735f616c69766528293b0a090a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d20332e2073616d706c650a2d2d2d206f6e20696e736572742f757064617465202d3e206578706572696d656e742063616e27742062652064656c6574656420756e6c657373207468652073616d706c652069732064656c657465640a2d2d2d2064656c6574696f6e200a2d2d2d2d3e20616c6c206469726563746c7920636f6e6e656374656420646174612073657473206e65656420746f2062652064656c657465640a2d2d2d2d3e20616c6c20636f6d706f6e656e747320616e64206368696c6472656e206e65656420746f2062652064656c657465640a0a435245415445204f52205245504c4143452046554e4354494f4e20636865636b5f637265617465645f6f725f6d6f6469666965645f73616d706c655f6f776e65725f69735f616c69766528292052455455524e5320747269676765722041532024240a4445434c4152450a096f776e65725f636f646509434f44453b0a096f776e65725f64656c5f696409544543485f49443b0a424547494e0a20202d2d20636865636b206578706572696d656e74202863616e27742062652064656c65746564290a2020494620284e45572e657870655f6964204953204e4f54204e554c4c29205448454e0a20200953454c4543542064656c5f69642c20636f646520494e544f206f776e65725f64656c5f69642c206f776e65725f636f64650a202009202046524f4d206578706572696d656e7473200a20200920205748455245206964203d204e45572e73616d705f69643b0a202009494620286f776e65725f64656c5f6964204953204e4f54204e554c4c29205448454e200a090909524149534520455843455054494f4e2027496e736572742f557064617465206f662053616d706c652028436f64653a202529206661696c656420626563617573652069742063616e6e6f7420626520636f6e6e656374656420746f20612064656c65746564204578706572696d656e742028436f64653a2025292e272c204e45572e636f64652c206f776e65725f636f64653b0a0909454e442049463b0a09454e442049463b0a0952455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a20200a43524541544520434f4e53545241494e54205452494747455220636865636b5f637265617465645f6f725f6d6f6469666965645f73616d706c655f6f776e65725f69735f616c697665200a2020414654455220494e53455254204f5220555044415445204f4e2073616d706c65730a0944454645525241424c4520494e495449414c4c592044454645525245440a09464f52204541434820524f57205748454e20284e45572e64656c5f6964204953204e554c4c290a09455845435554452050524f43454455524520636865636b5f637265617465645f6f725f6d6f6469666965645f73616d706c655f6f776e65725f69735f616c69766528293b0a090a435245415445204f52205245504c4143452046554e4354494f4e20636865636b5f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f73616d706c655f64656c6574696f6e28292052455455524e5320747269676765722041532024240a4445434c4152450a2020636f756e7465722020494e54454745523b0a424547494e0a20202d2d20616c6c206469726563746c7920636f6e6e656374656420646174612073657473206e65656420746f2062652064656c657465640a20202d2d20636865636b2064617461736574730a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a09202046524f4d20646174610a092020574845524520646174612e73616d705f6964203d204e45572e696420414e4420646174612e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a092020524149534520455843455054494f4e202753616d706c652028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f662069747320646174612073657473206973206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a20202d2d20616c6c20636f6d706f6e656e7473206e65656420746f2062652064656c657465640a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a09202046524f4d2073616d706c6573200a09202057484552452073616d706c65732e73616d705f69645f706172745f6f66203d204e45572e696420414e442073616d706c65732e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a092020524149534520455843455054494f4e202753616d706c652028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f662069747320636f6d706f6e656e742073616d706c6573206973206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a092d2d20616c6c206368696c6472656e206e65656420746f2062652064656c657465640a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a090946524f4d2073616d706c655f72656c6174696f6e73686970732073722c2073616d706c65732073630a090957484552452073616d706c655f69645f706172656e74203d204e45572e696420414e442073632e6964203d2073722e73616d706c655f69645f6368696c6420414e442073632e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a0909524149534520455843455054494f4e202753616d706c652028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f6620697473206368696c642073616d706c6573206973206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a0952455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a20200a43524541544520434f4e53545241494e54205452494747455220636865636b5f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f73616d706c655f64656c6574696f6e200a2020414654455220555044415445204f4e2073616d706c65730a0944454645525241424c4520494e495449414c4c592044454645525245440a09464f52204541434820524f57200a095748454e20284f4c442e64656c5f6964204953204e554c4c20414e44204e45572e64656c5f6964204953204e4f54204e554c4c290a09455845435554452050524f43454455524520636865636b5f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f73616d706c655f64656c6574696f6e28293b090a090a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d20342e206578706572696d656e740a2d2d2d2064656c6574696f6e202d3e20616c6c206469726563746c7920636f6e6e65637465642073616d706c657320616e6420646174612073657473206e65656420746f2062652064656c657465640a0a435245415445204f52205245504c4143452046554e4354494f4e20636865636b5f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f6578706572696d656e745f64656c6574696f6e28292052455455524e5320747269676765722041532024240a4445434c4152450a2020636f756e7465722020494e54454745523b0a424547494e0a20202d2d20636865636b2064617461736574730a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a09202046524f4d20646174610a092020574845524520646174612e657870655f6964203d204e45572e696420414e4420646174612e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a092020524149534520455843455054494f4e20274578706572696d656e742028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f662069747320646174612073657473206973206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a092d2d20636865636b2073616d706c65730a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a09202046524f4d2073616d706c6573200a09202057484552452073616d706c65732e657870655f6964203d204e45572e696420414e442073616d706c65732e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a092020524149534520455843455054494f4e20274578706572696d656e742028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f66206974732073616d706c6573206973206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a0952455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a20200a43524541544520434f4e53545241494e54205452494747455220636865636b5f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f6578706572696d656e745f64656c6574696f6e200a2020414654455220555044415445204f4e206578706572696d656e74730a0944454645525241424c4520494e495449414c4c592044454645525245440a09464f52204541434820524f57200a095748454e20284f4c442e64656c5f6964204953204e554c4c20414e44204e45572e64656c5f6964204953204e4f54204e554c4c290a09455845435554452050524f43454455524520636865636b5f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f6578706572696d656e745f64656c6574696f6e28293b0a \N diff --git a/openbis/sourceTest/sql/postgresql/075/finish-075.sql b/openbis/sourceTest/sql/postgresql/075/finish-075.sql index 203623dea27..2550b8a23e0 100644 --- a/openbis/sourceTest/sql/postgresql/075/finish-075.sql +++ b/openbis/sourceTest/sql/postgresql/075/finish-075.sql @@ -269,10 +269,17 @@ CREATE INDEX space_pers_registered_by_fk_i ON spaces USING btree (pers_id_regist CREATE INDEX stpt_pers_fk_i ON sample_type_property_types USING btree (pers_id_registerer); CREATE INDEX stpt_prty_fk_i ON sample_type_property_types USING btree (prty_id); CREATE INDEX stpt_saty_fk_i ON sample_type_property_types USING btree (saty_id); +CREATE CONSTRAINT TRIGGER check_created_or_modified_data_set_owner_is_alive AFTER INSERT OR UPDATE ON data DEFERRABLE INITIALLY DEFERRED FOR EACH ROW WHEN ((new.del_id IS NULL)) EXECUTE PROCEDURE check_created_or_modified_data_set_owner_is_alive(); +CREATE CONSTRAINT TRIGGER check_created_or_modified_sample_owner_is_alive AFTER INSERT OR UPDATE ON samples DEFERRABLE INITIALLY DEFERRED FOR EACH ROW WHEN ((new.del_id IS NULL)) EXECUTE PROCEDURE check_created_or_modified_sample_owner_is_alive(); +CREATE CONSTRAINT TRIGGER check_deletion_consistency_on_experiment_deletion AFTER UPDATE ON experiments DEFERRABLE INITIALLY DEFERRED FOR EACH ROW WHEN (((old.del_id IS NULL) AND (new.del_id IS NOT NULL))) EXECUTE PROCEDURE check_deletion_consistency_on_experiment_deletion(); +CREATE CONSTRAINT TRIGGER check_deletion_consistency_on_sample_deletion AFTER UPDATE ON samples DEFERRABLE INITIALLY DEFERRED FOR EACH ROW WHEN (((old.del_id IS NULL) AND (new.del_id IS NOT NULL))) EXECUTE PROCEDURE check_deletion_consistency_on_sample_deletion(); CREATE TRIGGER controlled_vocabulary_check BEFORE INSERT OR UPDATE ON property_types FOR EACH ROW EXECUTE PROCEDURE controlled_vocabulary_check(); CREATE TRIGGER data_set_property_with_material_data_type_check BEFORE INSERT OR UPDATE ON data_set_properties FOR EACH ROW EXECUTE PROCEDURE data_set_property_with_material_data_type_check(); CREATE TRIGGER experiment_property_with_material_data_type_check BEFORE INSERT OR UPDATE ON experiment_properties FOR EACH ROW EXECUTE PROCEDURE experiment_property_with_material_data_type_check(); CREATE TRIGGER external_data_storage_format_check BEFORE INSERT OR UPDATE ON external_data FOR EACH ROW EXECUTE PROCEDURE external_data_storage_format_check(); +CREATE TRIGGER forbid_deleted_entity_modification BEFORE UPDATE ON data FOR EACH ROW EXECUTE PROCEDURE forbid_deleted_entity_modification(); +CREATE TRIGGER forbid_deleted_entity_modification BEFORE UPDATE ON samples FOR EACH ROW EXECUTE PROCEDURE forbid_deleted_entity_modification(); +CREATE TRIGGER forbid_deleted_entity_modification BEFORE UPDATE ON experiments FOR EACH ROW EXECUTE PROCEDURE forbid_deleted_entity_modification(); CREATE TRIGGER material_property_with_material_data_type_check BEFORE INSERT OR UPDATE ON material_properties FOR EACH ROW EXECUTE PROCEDURE material_property_with_material_data_type_check(); CREATE TRIGGER sample_code_uniqueness_check BEFORE INSERT OR UPDATE ON samples FOR EACH ROW EXECUTE PROCEDURE sample_code_uniqueness_check(); CREATE TRIGGER sample_property_with_material_data_type_check BEFORE INSERT OR UPDATE ON sample_properties FOR EACH ROW EXECUTE PROCEDURE sample_property_with_material_data_type_check(); diff --git a/openbis/sourceTest/sql/postgresql/075/schema-075.sql b/openbis/sourceTest/sql/postgresql/075/schema-075.sql index c0d8178f51b..e1b5e1a1dbd 100644 --- a/openbis/sourceTest/sql/postgresql/075/schema-075.sql +++ b/openbis/sourceTest/sql/postgresql/075/schema-075.sql @@ -40,6 +40,105 @@ CREATE DOMAIN time_stamp AS timestamp with time zone; CREATE DOMAIN time_stamp_dfl AS timestamp with time zone NOT NULL DEFAULT now(); CREATE DOMAIN title_100 AS character varying(100); CREATE DOMAIN user_id AS character varying(50); +CREATE FUNCTION check_created_or_modified_data_set_owner_is_alive() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + owner_code CODE; + owner_del_id TECH_ID; +BEGIN + -- check sample + IF (NEW.samp_id IS NOT NULL) THEN + SELECT del_id, code INTO owner_del_id, owner_code + FROM samples + WHERE id = NEW.samp_id; + IF (owner_del_id IS NOT NULL) THEN + RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected to a deleted Sample (Code: %).', NEW.code, owner_code; + END IF; + END IF; + -- check experiment + SELECT del_id, code INTO owner_del_id, owner_code + FROM experiments + WHERE id = NEW.expe_id; + IF (owner_del_id IS NOT NULL) THEN + RAISE EXCEPTION 'Insert/Update of Data Set (Code: %) failed because it cannot be connected to a deleted Experiment (Code: %).', NEW.code, owner_code; + END IF; + RETURN NEW; +END; +$$; +CREATE FUNCTION check_created_or_modified_sample_owner_is_alive() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + owner_code CODE; + owner_del_id TECH_ID; +BEGIN + -- check experiment (can't be deleted) + IF (NEW.expe_id IS NOT NULL) THEN + SELECT del_id, code INTO owner_del_id, owner_code + FROM experiments + WHERE id = NEW.samp_id; + IF (owner_del_id IS NOT NULL) THEN + RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because it cannot be connected to a deleted Experiment (Code: %).', NEW.code, owner_code; + END IF; + END IF; + RETURN NEW; +END; +$$; +CREATE FUNCTION check_deletion_consistency_on_experiment_deletion() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + counter INTEGER; +BEGIN + -- check datasets + SELECT count(*) INTO counter + FROM data + WHERE data.expe_id = NEW.id AND data.del_id IS NULL; + IF (counter > 0) THEN + RAISE EXCEPTION 'Experiment (Code: %) deletion failed because at least one of its data sets is not deleted.', NEW.code; + END IF; + -- check samples + SELECT count(*) INTO counter + FROM samples + WHERE samples.expe_id = NEW.id AND samples.del_id IS NULL; + IF (counter > 0) THEN + RAISE EXCEPTION 'Experiment (Code: %) deletion failed because at least one of its samples is not deleted.', NEW.code; + END IF; + RETURN NEW; +END; +$$; +CREATE FUNCTION check_deletion_consistency_on_sample_deletion() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + counter INTEGER; +BEGIN + -- all directly connected data sets need to be deleted + -- check datasets + SELECT count(*) INTO counter + FROM data + WHERE data.samp_id = NEW.id AND data.del_id IS NULL; + IF (counter > 0) THEN + RAISE EXCEPTION 'Sample (Code: %) deletion failed because at least one of its data sets is not deleted.', NEW.code; + END IF; + -- all components need to be deleted + SELECT count(*) INTO counter + FROM samples + WHERE samples.samp_id_part_of = NEW.id AND samples.del_id IS NULL; + IF (counter > 0) THEN + RAISE EXCEPTION 'Sample (Code: %) deletion failed because at least one of its component samples is not deleted.', NEW.code; + END IF; + -- all children need to be deleted + SELECT count(*) INTO counter + FROM sample_relationships sr, samples sc + WHERE sample_id_parent = NEW.id AND sc.id = sr.sample_id_child AND sc.del_id IS NULL; + IF (counter > 0) THEN + RAISE EXCEPTION 'Sample (Code: %) deletion failed because at least one of its child samples is not deleted.', NEW.code; + END IF; + RETURN NEW; +END; +$$; CREATE FUNCTION controlled_vocabulary_check() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -83,6 +182,19 @@ BEGIN RETURN NEW; END; $$; +CREATE FUNCTION entity_name(entity_table_name name) RETURNS character varying + LANGUAGE plpgsql + AS $$ +BEGIN + CASE entity_table_name + WHEN 'data' THEN RETURN 'Data Set'; + WHEN 'samples' THEN RETURN 'Sample'; + WHEN 'experiments' THEN RETURN 'Experiment'; + WHEN 'materials' THEN RETURN 'Material'; + ELSE RAISE EXCEPTION '"%" is not an entity table', entity_table_name; + END CASE; +END; +$$; CREATE FUNCTION experiment_property_with_material_data_type_check() RETURNS trigger LANGUAGE plpgsql AS $$ @@ -128,6 +240,17 @@ BEGIN RETURN NEW; END; $$; +CREATE FUNCTION forbid_deleted_entity_modification() RETURNS trigger + LANGUAGE plpgsql + AS $$ +BEGIN + RAISE NOTICE 'Check % (Code: %) ', entity_name(TG_TABLE_NAME), NEW.code; + IF (OLD.del_id IS NOT NULL AND NEW.del_id IS NOT NULL) THEN + RAISE EXCEPTION 'Update of a deleted % (Code: %) failed because deleted entities can''t be modified.', entity_name(TG_TABLE_NAME), NEW.code; + END IF; + RETURN NEW; +END; +$$; CREATE FUNCTION material_property_with_material_data_type_check() RETURNS trigger LANGUAGE plpgsql AS $$ -- GitLab