From 0779826735fa791b9c9fb2845bded4859aafcc02 Mon Sep 17 00:00:00 2001 From: brinn <brinn> Date: Tue, 6 Dec 2011 16:56:53 +0000 Subject: [PATCH] Add an additional check to the property history update and delete rules that ensures that something changed in the property value and suppress the addition otherwise. SVN: 23899 --- .../sql/postgresql/091/function-091.sql | 24 +++++++++++++++++++ .../migration/migration-090-091.sql | 24 +++++++++++++++++++ .../sql/postgresql/091/finish-091.sql | 24 +++++++++++++++++++ 3 files changed, 72 insertions(+) diff --git a/openbis/source/sql/postgresql/091/function-091.sql b/openbis/source/sql/postgresql/091/function-091.sql index a6c4f33ac29..cf5a9e79a37 100644 --- a/openbis/source/sql/postgresql/091/function-091.sql +++ b/openbis/source/sql/postgresql/091/function-091.sql @@ -668,6 +668,9 @@ CREATE OR REPLACE RULE data_deleted_delete AS CREATE OR REPLACE RULE material_properties_update AS ON UPDATE TO material_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO material_properties_history ( ID, @@ -694,6 +697,9 @@ CREATE OR REPLACE RULE material_properties_update AS CREATE OR REPLACE RULE material_properties_delete AS ON DELETE TO material_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO material_properties_history ( ID, @@ -722,6 +728,9 @@ CREATE OR REPLACE RULE material_properties_delete AS CREATE OR REPLACE RULE experiment_properties_update AS ON UPDATE TO experiment_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO experiment_properties_history ( ID, @@ -748,6 +757,9 @@ CREATE OR REPLACE RULE experiment_properties_update AS CREATE OR REPLACE RULE experiment_properties_delete AS ON DELETE TO experiment_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO experiment_properties_history ( ID, @@ -776,6 +788,9 @@ CREATE OR REPLACE RULE experiment_properties_delete AS CREATE OR REPLACE RULE sample_properties_update AS ON UPDATE TO sample_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO sample_properties_history ( ID, @@ -802,6 +817,9 @@ CREATE OR REPLACE RULE sample_properties_update AS CREATE OR REPLACE RULE sample_properties_delete AS ON DELETE TO sample_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO sample_properties_history ( ID, @@ -830,6 +848,9 @@ CREATE OR REPLACE RULE sample_properties_delete AS CREATE OR REPLACE RULE data_set_properties_update AS ON UPDATE TO data_set_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO data_set_properties_history ( ID, @@ -856,6 +877,9 @@ CREATE OR REPLACE RULE data_set_properties_update AS CREATE OR REPLACE RULE data_set_properties_delete AS ON DELETE TO data_set_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO data_set_properties_history ( ID, diff --git a/openbis/source/sql/postgresql/migration/migration-090-091.sql b/openbis/source/sql/postgresql/migration/migration-090-091.sql index 3d20724483e..f635c26ec70 100644 --- a/openbis/source/sql/postgresql/migration/migration-090-091.sql +++ b/openbis/source/sql/postgresql/migration/migration-090-091.sql @@ -75,6 +75,9 @@ ALTER TABLE material_properties_history ALTER COLUMN valid_from_timestamp SET NO CREATE OR REPLACE RULE material_properties_update AS ON UPDATE TO material_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO material_properties_history ( ID, @@ -101,6 +104,9 @@ CREATE OR REPLACE RULE material_properties_update AS CREATE OR REPLACE RULE material_properties_delete AS ON DELETE TO material_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO material_properties_history ( ID, @@ -129,6 +135,9 @@ CREATE OR REPLACE RULE material_properties_delete AS CREATE OR REPLACE RULE experiment_properties_update AS ON UPDATE TO experiment_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO experiment_properties_history ( ID, @@ -155,6 +164,9 @@ CREATE OR REPLACE RULE experiment_properties_update AS CREATE OR REPLACE RULE experiment_properties_delete AS ON DELETE TO experiment_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO experiment_properties_history ( ID, @@ -183,6 +195,9 @@ CREATE OR REPLACE RULE experiment_properties_delete AS CREATE OR REPLACE RULE sample_properties_update AS ON UPDATE TO sample_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO sample_properties_history ( ID, @@ -209,6 +224,9 @@ CREATE OR REPLACE RULE sample_properties_update AS CREATE OR REPLACE RULE sample_properties_delete AS ON DELETE TO sample_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO sample_properties_history ( ID, @@ -237,6 +255,9 @@ CREATE OR REPLACE RULE sample_properties_delete AS CREATE OR REPLACE RULE data_set_properties_update AS ON UPDATE TO data_set_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO data_set_properties_history ( ID, @@ -263,6 +284,9 @@ CREATE OR REPLACE RULE data_set_properties_update AS CREATE OR REPLACE RULE data_set_properties_delete AS ON DELETE TO data_set_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO data_set_properties_history ( ID, diff --git a/openbis/sourceTest/sql/postgresql/091/finish-091.sql b/openbis/sourceTest/sql/postgresql/091/finish-091.sql index 2b3e88e648f..59fc8e3589c 100644 --- a/openbis/sourceTest/sql/postgresql/091/finish-091.sql +++ b/openbis/sourceTest/sql/postgresql/091/finish-091.sql @@ -306,6 +306,9 @@ CREATE RULE data_insert AS ON INSERT TO data DO INSTEAD INSERT INTO data_all (id CREATE RULE data_set_properties_update AS ON UPDATE TO data_set_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO data_set_properties_history ( ID, @@ -331,6 +334,9 @@ CREATE RULE data_set_properties_update AS CREATE RULE data_set_properties_delete AS ON DELETE TO data_set_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO data_set_properties_history ( ID, @@ -361,6 +367,9 @@ CREATE RULE experiment_insert AS ON INSERT TO experiments DO INSTEAD INSERT INTO CREATE RULE experiment_properties_update AS ON UPDATE TO experiment_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO experiment_properties_history ( ID, @@ -386,6 +395,9 @@ CREATE RULE experiment_properties_update AS CREATE RULE experiment_properties_delete AS ON DELETE TO experiment_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO experiment_properties_history ( ID, @@ -414,6 +426,9 @@ CREATE RULE experiments_deleted_update AS ON UPDATE TO experiments_deleted DO IN CREATE RULE material_properties_update AS ON UPDATE TO material_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO material_properties_history ( ID, @@ -439,6 +454,9 @@ CREATE RULE material_properties_update AS CREATE RULE material_properties_delete AS ON DELETE TO material_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO material_properties_history ( ID, @@ -468,6 +486,9 @@ CREATE RULE sample_insert AS ON INSERT TO samples DO INSTEAD INSERT INTO samples CREATE RULE sample_properties_update AS ON UPDATE TO sample_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND ((OLD.VALUE IS NOT NULL AND OLD.VALUE != NEW.VALUE) + OR (OLD.CVTE_ID IS NOT NULL AND OLD.CVTE_ID != NEW.CVTE_ID) + OR (OLD.MATE_PROP_ID IS NOT NULL AND OLD.MATE_PROP_ID != NEW.MATE_PROP_ID)) DO ALSO INSERT INTO sample_properties_history ( ID, @@ -493,6 +514,9 @@ CREATE RULE sample_properties_update AS CREATE RULE sample_properties_delete AS ON DELETE TO sample_properties WHERE decode(substring(OLD.value from 1 for 1), 'escape') != E'\\xefbfbd' + AND (OLD.VALUE IS NOT NULL + OR OLD.CVTE_ID IS NOT NULL + OR OLD.MATE_PROP_ID IS NOT NULL) DO ALSO INSERT INTO sample_properties_history ( ID, -- GitLab