From 6ced9eb7439af4124a1310265e26c0b1f1093cc7 Mon Sep 17 00:00:00 2001 From: tpylak <tpylak> Date: Fri, 3 Apr 2009 14:00:48 +0000 Subject: [PATCH] LMS-826 add to db schema the modification timestamp to the project table SVN: 10558 --- openbis/source/sql/generic/031/schema-031.sql | 2 +- .../source/sql/postgresql/migration/migration-030-031.sql | 7 +++++++ .../sql/postgresql/031/013=database_version_logs.tsv | 2 +- openbis/sourceTest/sql/postgresql/031/032=projects.tsv | 8 ++++---- openbis/sourceTest/sql/postgresql/031/schema-031.sql | 3 ++- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/openbis/source/sql/generic/031/schema-031.sql b/openbis/source/sql/generic/031/schema-031.sql index 1aa4b86b8ed..54bea84ffdf 100644 --- a/openbis/source/sql/generic/031/schema-031.sql +++ b/openbis/source/sql/generic/031/schema-031.sql @@ -83,7 +83,7 @@ CREATE TABLE DATA_SET_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION CREATE TABLE PERSONS (ID TECH_ID NOT NULL,FIRST_NAME VARCHAR(30),LAST_NAME VARCHAR(30),USER_ID USER_ID NOT NULL,EMAIL OBJECT_NAME,DBIN_ID TECH_ID NOT NULL,GROU_ID TECH_ID,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID); CREATE TABLE PROCEDURES (ID TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,EXPE_ID TECH_ID NOT NULL,PCTY_ID TECH_ID NOT NULL); CREATE TABLE PROCEDURE_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_80 NOT NULL,IS_DATA_ACQUISITION BOOLEAN_CHAR NOT NULL DEFAULT 'F',DBIN_ID TECH_ID NOT NULL); -CREATE TABLE PROJECTS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,GROU_ID TECH_ID NOT NULL,PERS_ID_LEADER TECH_ID,DESCRIPTION DESCRIPTION_1000,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,DAST_ID TECH_ID); +CREATE TABLE PROJECTS (ID TECH_ID NOT NULL,CODE CODE NOT NULL,GROU_ID TECH_ID NOT NULL,PERS_ID_LEADER TECH_ID,DESCRIPTION DESCRIPTION_1000,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP,DAST_ID TECH_ID); CREATE TABLE PROPERTY_TYPES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,DESCRIPTION DESCRIPTION_80 NOT NULL,LABEL COLUMN_LABEL NOT NULL,DATY_ID TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,COVO_ID TECH_ID,IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_INTERNAL_NAMESPACE BOOLEAN_CHAR NOT NULL DEFAULT 'F',DBIN_ID TECH_ID NOT NULL, MATY_PROP_ID TECH_ID); CREATE TABLE ROLE_ASSIGNMENTS (ID TECH_ID NOT NULL,ROLE_CODE AUTHORIZATION_ROLE NOT NULL,GROU_ID TECH_ID,DBIN_ID TECH_ID,PERS_ID_GRANTEE TECH_ID NOT NULL,PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP); CREATE TABLE SAMPLES (ID TECH_ID NOT NULL,CODE CODE NOT NULL,SAMP_ID_TOP TECH_ID,SAMP_ID_GENERATED_FROM TECH_ID,SATY_ID TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,INVA_ID TECH_ID,SAMP_ID_CONTROL_LAYOUT TECH_ID,DBIN_ID TECH_ID,GROU_ID TECH_ID,SAMP_ID_PART_OF TECH_ID); diff --git a/openbis/source/sql/postgresql/migration/migration-030-031.sql b/openbis/source/sql/postgresql/migration/migration-030-031.sql index 950ebdb1a55..ae2b8984769 100644 --- a/openbis/source/sql/postgresql/migration/migration-030-031.sql +++ b/openbis/source/sql/postgresql/migration/migration-030-031.sql @@ -68,6 +68,13 @@ ALTER TABLE attachments CREATE INDEX ATTA_SAMP_FK_I ON ATTACHMENTS (SAMP_ID); CREATE INDEX ATTA_PROJ_FK_I ON ATTACHMENTS (PROJ_ID); +-- ------- +-- Add modification timestamp to project table to allow edition +-- ------- + +ALTER TABLE projects + ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP; + -- ------- -- Add new datatypes -- ------- diff --git a/openbis/sourceTest/sql/postgresql/031/013=database_version_logs.tsv b/openbis/sourceTest/sql/postgresql/031/013=database_version_logs.tsv index 3dd9b959813..236bc8a1c85 100644 --- a/openbis/sourceTest/sql/postgresql/031/013=database_version_logs.tsv +++ b/openbis/sourceTest/sql/postgresql/031/013=database_version_logs.tsv @@ -4,4 +4,4 @@ 028 source/sql/postgresql/migration/migration-027-028.sql SUCCESS 2008-11-18 13:24:17.508 -- Create EXPERIMENT_ATTACHMENT_CONTENTS.\\012CREATE TABLE EXPERIMENT_ATTACHMENT_CONTENTS (ID TECH_ID NOT NULL,VALUE FILE NOT NULL);\\012CREATE SEQUENCE EXPERIMENT_ATTACHMENT_CONTENT_ID_SEQ;\\012ALTER TABLE EXPERIMENT_ATTACHMENT_CONTENTS ADD CONSTRAINT EXAC_PK PRIMARY KEY(ID);\\012\\012-- Alter EXPERIMENT_ATTACHMENTS by adding the new column which has a NULL constraint.\\012-- The NOT NULL constraint is added later on.\\012ALTER TABLE EXPERIMENT_ATTACHMENTS ADD COLUMN EXAC_ID TECH_ID;\\012\\012-- Does the VALUE migration between EXPERIMENT_ATTACHMENTS to EXPERIMENT_ATTACHMENT_CONTENTS.\\012CREATE OR REPLACE FUNCTION move_exp_att_content() RETURNS integer AS $$\\012DECLARE\\012 rec RECORD;\\012 seq BIGINT;\\012BEGIN\\012 FOR rec IN SELECT id, value FROM EXPERIMENT_ATTACHMENTS LOOP\\012 \\011seq := nextval('EXPERIMENT_ATTACHMENT_CONTENT_ID_SEQ');\\012 INSERT INTO EXPERIMENT_ATTACHMENT_CONTENTS (id, value) VALUES (seq, rec.value);\\012 UPDATE EXPERIMENT_ATTACHMENTS SET exac_id = seq WHERE id = rec.id;\\012 END LOOP;\\012 RETURN 1;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012-- Call the function.\\012SELECT move_exp_att_content();\\012DROP FUNCTION move_exp_att_content();\\012\\012\\012-- Finish EXPERIMENT_ATTACHMENTS changes.\\012ALTER TABLE EXPERIMENT_ATTACHMENTS ADD CONSTRAINT EXAT_CONT_FK FOREIGN KEY (EXAC_ID) REFERENCES EXPERIMENT_ATTACHMENT_CONTENTS(ID);\\012ALTER TABLE EXPERIMENT_ATTACHMENTS DROP COLUMN VALUE;\\012ALTER TABLE EXPERIMENT_ATTACHMENTS ALTER COLUMN EXAC_ID SET NOT NULL;\\012 \N 029 source/sql/postgresql/migration/migration-028-029.sql SUCCESS 2009-03-18 10:50:20.105 -- -------\\012-- add modification_timestamp field to allow edition with Hibernate\\012-- -------\\012\\012ALTER TABLE samples\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012\\012ALTER TABLE experiments\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012\\012ALTER TABLE materials\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012\\012ALTER TABLE experiment_properties\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012\\012ALTER TABLE material_properties\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012\\012ALTER TABLE sample_properties\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012\\012-- -------\\012-- add property data type which references materials\\012-- -------\\012\\012ALTER TABLE property_types\\012\\011ADD COLUMN maty_prop_id tech_id;\\012\\012ALTER TABLE property_types\\012\\011ADD CONSTRAINT prty_maty_fk FOREIGN KEY (maty_prop_id) REFERENCES material_types(id);\\012\\012ALTER TABLE experiment_properties\\012\\011ADD COLUMN mate_prop_id tech_id;\\012\\012ALTER TABLE material_properties\\012\\011ADD COLUMN mate_prop_id tech_id;\\012\\012ALTER TABLE sample_properties\\012\\011ADD COLUMN mate_prop_id tech_id;\\012\\012ALTER TABLE experiment_properties\\012\\011ADD CONSTRAINT expr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);\\012\\012ALTER TABLE material_properties\\012\\011ADD CONSTRAINT mapr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);\\012\\012ALTER TABLE sample_properties\\012\\011ADD CONSTRAINT sapr_mapr_fk FOREIGN KEY (mate_prop_id) REFERENCES materials(id);\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'MATERIAL'\\012 ,'Reference to a material'\\012);\\012\\012ALTER TABLE MATERIAL_PROPERTIES DROP CONSTRAINT MAPR_CK;\\012ALTER TABLE MATERIAL_PROPERTIES ADD CONSTRAINT MAPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012\\012ALTER TABLE EXPERIMENT_PROPERTIES DROP CONSTRAINT EXPR_CK;\\012ALTER TABLE EXPERIMENT_PROPERTIES ADD CONSTRAINT EXPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012\\012ALTER TABLE SAMPLE_PROPERTIES DROP CONSTRAINT SAPR_CK;\\012ALTER TABLE SAMPLE_PROPERTIES ADD CONSTRAINT SAPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012\\012------------------------------------------------------------------------------------\\012-- Purpose: Create trigger MATERIAL/SAMPLE/EXPERIMENT _PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK\\012-- It checks that if material property value is assigned to the entity,\\012--\\011\\011\\011\\011\\011\\011then the material type is equal to the one described by property type.\\012------------------------------------------------------------------------------------\\012\\012CREATE OR REPLACE FUNCTION MATERIAL_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012 v_type_id CODE;\\012 v_type_id_prop CODE;\\012BEGIN\\012 if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011 from material_type_property_types etpt, property_types pt \\012\\011\\011\\011 where NEW.mtpt_id = etpt.id AND etpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011 from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012 end if;\\012 RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER MATERIAL_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON material_properties\\012 FOR EACH ROW EXECUTE PROCEDURE MATERIAL_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK();\\012 \\012CREATE OR REPLACE FUNCTION SAMPLE_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012 v_type_id CODE;\\012 v_type_id_prop CODE;\\012BEGIN\\012 if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011 from sample_type_property_types etpt, property_types pt \\012\\011\\011\\011 where NEW.stpt_id = etpt.id AND etpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011 from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012 end if;\\012 RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER SAMPLE_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON sample_properties\\012 FOR EACH ROW EXECUTE PROCEDURE SAMPLE_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK();\\012 \\012CREATE OR REPLACE FUNCTION EXPERIMENT_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012 v_type_id CODE;\\012 v_type_id_prop CODE;\\012BEGIN\\012 if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011 from experiment_type_property_types etpt, property_types pt \\012\\011\\011\\011 where NEW.etpt_id = etpt.id AND etpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011 from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012 end if;\\012 RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER EXPERIMENT_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON experiment_properties\\012 FOR EACH ROW EXECUTE PROCEDURE EXPERIMENT_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK();\\012 \\012-- -------\\012-- remove the reminescents of the OBSERVABLE_TYPE\\012-- -------\\012\\012ALTER TABLE data\\012\\011DROP CONSTRAINT data_obty_fk;\\012\\012ALTER TABLE data_set_types\\012\\011DROP CONSTRAINT obty_pk;\\012\\012ALTER TABLE data_set_types\\012\\011ADD CONSTRAINT dsty_pk PRIMARY KEY (id);\\012\\012ALTER TABLE data\\012\\011ADD CONSTRAINT data_dsty_fk FOREIGN KEY (dsty_id) REFERENCES data_set_types(id);\\012\\012ALTER TABLE data_set_types\\012\\011DROP CONSTRAINT obty_bk_uk;\\012\\012ALTER TABLE data_set_types\\012\\011DROP CONSTRAINT obty_dbin_fk;\\012\\012ALTER TABLE data_set_types\\012\\011ADD CONSTRAINT dsty_bk_uk UNIQUE (code, dbin_id);\\012\\012ALTER TABLE data_set_types\\012\\011ADD CONSTRAINT dsty_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);\\012\\012DROP INDEX data_obty_fk_i;\\012\\012CREATE INDEX data_dsty_fk_i ON data(dsty_id);\\012 \N 030 source/sql/postgresql/migration/migration-029-030.sql SUCCESS 2009-03-23 15:34:44.72 -- -------\\012-- add modification_timestamp field to allow edition with Hibernate\\012-- -------\\012ALTER TABLE data\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012ALTER TABLE experiment_types\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012ALTER TABLE sample_types\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012ALTER TABLE material_types\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012ALTER TABLE data_set_types\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012ALTER TABLE controlled_vocabularies\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012-- -------\\012-- add properties to data sets\\012-- -------\\012CREATE TABLE DATA_SET_PROPERTIES (ID TECH_ID NOT NULL,DS_ID TECH_ID NOT NULL,DSTPT_ID TECH_ID NOT NULL,VALUE GENERIC_VALUE,CVTE_ID TECH_ID, MATE_PROP_ID TECH_ID, PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, MODIFICATION_TIMESTAMP TIME_STAMP DEFAULT CURRENT_TIMESTAMP);\\012CREATE TABLE DATA_SET_TYPE_PROPERTY_TYPES (ID TECH_ID NOT NULL,DSTY_ID TECH_ID NOT NULL,PRTY_ID TECH_ID NOT NULL,IS_MANDATORY BOOLEAN_CHAR NOT NULL DEFAULT 'F',IS_MANAGED_INTERNALLY BOOLEAN_CHAR NOT NULL DEFAULT 'F',PERS_ID_REGISTERER TECH_ID NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP);\\012\\012CREATE SEQUENCE DATA_SET_PROPERTY_ID_SEQ;\\012CREATE SEQUENCE DSTPT_ID_SEQ;\\012\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_PK PRIMARY KEY(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_PK PRIMARY KEY(ID);\\012\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_BK_UK UNIQUE(DSTY_ID,PRTY_ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_BK_UK UNIQUE(DS_ID,DSTPT_ID);\\012\\012\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_DSTY_FK FOREIGN KEY (DSTY_ID) REFERENCES DATA_SET_TYPES(ID);\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_PRTY_FK FOREIGN KEY (PRTY_ID) REFERENCES PROPERTY_TYPES(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_CVTE_FK FOREIGN KEY (CVTE_ID) REFERENCES CONTROLLED_VOCABULARY_TERMS(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_DSTPT_FK FOREIGN KEY (DSTPT_ID) REFERENCES DATA_SET_TYPE_PROPERTY_TYPES(ID) ON DELETE CASCADE;\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_DS_FK FOREIGN KEY (DS_ID) REFERENCES DATA(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_MAPR_FK FOREIGN KEY (MATE_PROP_ID) REFERENCES MATERIALS(ID);\\012\\012ALTER TABLE DATA_SET_PROPERTIES ADD CONSTRAINT DSPR_CK CHECK \\012\\011((VALUE IS NOT NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NULL) OR \\012\\011 (VALUE IS NULL AND CVTE_ID IS NOT NULL AND MATE_PROP_ID IS NULL) OR\\012\\011 (VALUE IS NULL AND CVTE_ID IS NULL AND MATE_PROP_ID IS NOT NULL)\\012\\011);\\012\\012CREATE INDEX DSPR_CVTE_FK_I ON DATA_SET_PROPERTIES (CVTE_ID);\\012CREATE INDEX DSPR_DSTPT_FK_I ON DATA_SET_PROPERTIES (DSTPT_ID);\\012CREATE INDEX DSPR_DS_FK_I ON DATA_SET_PROPERTIES (DS_ID);\\012CREATE INDEX DSPR_PERS_FK_I ON DATA_SET_PROPERTIES (PERS_ID_REGISTERER);\\012CREATE INDEX DSTPT_DSTY_FK_I ON DATA_SET_TYPE_PROPERTY_TYPES (DSTY_ID);\\012CREATE INDEX DSTPT_PERS_FK_I ON DATA_SET_TYPE_PROPERTY_TYPES (PERS_ID_REGISTERER);\\012CREATE INDEX DSTPT_PRTY_FK_I ON DATA_SET_TYPE_PROPERTY_TYPES (PRTY_ID);\\012\\012CREATE OR REPLACE FUNCTION DATA_SET_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK() RETURNS trigger AS $$\\012DECLARE\\012 v_type_id CODE;\\012 v_type_id_prop CODE;\\012BEGIN\\012 if NEW.mate_prop_id IS NOT NULL then\\012\\011\\011\\011-- find material type id of the property type \\012\\011\\011\\011select pt.maty_prop_id into v_type_id_prop \\012\\011\\011\\011 from data_set_type_property_types dstpt, property_types pt \\012\\011\\011\\011 where NEW.dstpt_id = dstpt.id AND dstpt.prty_id = pt.id;\\012\\011\\011\\012\\011\\011\\011if v_type_id_prop IS NOT NULL then\\012\\011\\011\\011\\011-- find material type id of the material which consists the entity's property value\\012\\011\\011\\011\\011select entity.maty_id into v_type_id \\012\\011\\011\\011\\011 from materials entity\\012\\011\\011\\011\\011 where NEW.mate_prop_id = entity.id;\\012\\011\\011\\011\\011if v_type_id != v_type_id_prop then\\012\\011\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of property value referencing material (id: %) failed, as referenced material type is different than expected (id %, expected id: %).', \\012\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011\\011 NEW.mate_prop_id, v_type_id, v_type_id_prop;\\012\\011\\011\\011\\011end if;\\012\\011\\011\\011end if;\\012 end if;\\012 RETURN NEW;\\012END;\\012$$ LANGUAGE 'plpgsql';\\012\\012CREATE TRIGGER DATA_SET_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK BEFORE INSERT OR UPDATE ON data_set_properties\\012 FOR EACH ROW EXECUTE PROCEDURE DATA_SET_PROPERTY_WITH_MATERIAL_DATA_TYPE_CHECK(); \\012 \N -031 source/sql/postgresql/migration/migration-030-031.sql SUCCESS 2009-04-03 15:21:39.061 -- -------\\012-- Change attachment table names, they should no longer mention the experiment\\012-- -------\\012\\012ALTER TABLE experiment_attachment_contents RENAME TO attachment_contents;\\012ALTER TABLE experiment_attachments RENAME TO attachments;\\012\\012ALTER TABLE EXPERIMENT_ATTACHMENT_ID_SEQ RENAME TO ATTACHMENT_ID_SEQ;\\012ALTER TABLE EXPERIMENT_ATTACHMENT_CONTENT_ID_SEQ RENAME TO ATTACHMENT_CONTENT_ID_SEQ;\\012\\012ALTER INDEX EXAT_EXPE_FK_I RENAME TO ATTA_EXPE_FK_I;\\012ALTER INDEX EXAT_PERS_FK_I RENAME TO ATTA_PERS_FK_I;\\012ALTER INDEX EXAT_EXAC_FK_I RENAME TO ATTA_EXAC_FK_I;\\012\\012-- it's not possible to rename constraints, we drop and create them with different names\\012\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_cont_fk;\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_expe_fk;\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_pers_fk;\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_pk;\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_pk PRIMARY KEY (id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_cont_fk FOREIGN KEY (exac_id) REFERENCES attachment_contents(id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);\\012\\012-- -------\\012-- Add an arc connection from attachment to project and sample tables\\012-- -------\\012\\012ALTER TABLE attachments\\012\\011ADD COLUMN samp_id tech_id,\\012\\011ADD COLUMN proj_id tech_id,\\012\\011ALTER COLUMN expe_id DROP NOT NULL;\\012\\011\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_bk_uk;\\012\\011\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_arc_ck CHECK ((((((expe_id IS NOT NULL) AND (proj_id IS NULL)) AND (samp_id IS NULL)) OR (((expe_id IS NULL) AND (proj_id IS NOT NULL)) AND (samp_id IS NULL))) OR (((expe_id IS NULL) AND (proj_id IS NULL)) AND (samp_id IS NOT NULL))));\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_expe_bk_uk UNIQUE (expe_id, file_name, version);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_proj_bk_uk UNIQUE (proj_id, file_name, version);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_samp_bk_uk UNIQUE (samp_id, file_name, version);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_proj_fk FOREIGN KEY (proj_id) REFERENCES projects(id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);\\012\\012CREATE INDEX ATTA_SAMP_FK_I ON ATTACHMENTS (SAMP_ID);\\012CREATE INDEX ATTA_PROJ_FK_I ON ATTACHMENTS (PROJ_ID);\\012\\012-- -------\\012-- Add new datatypes\\012-- -------\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'HYPERLINK'\\012 ,'Address of a web page'\\012);\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'MULTILINE_VARCHAR'\\012 ,'Long text'\\012);\\012 \N +031 source/sql/postgresql/migration/migration-030-031.sql SUCCESS 2009-04-03 15:56:37.795 -- -------\\012-- Change attachment table names, they should no longer mention the experiment\\012-- -------\\012\\012ALTER TABLE experiment_attachment_contents RENAME TO attachment_contents;\\012ALTER TABLE experiment_attachments RENAME TO attachments;\\012\\012ALTER TABLE EXPERIMENT_ATTACHMENT_ID_SEQ RENAME TO ATTACHMENT_ID_SEQ;\\012ALTER TABLE EXPERIMENT_ATTACHMENT_CONTENT_ID_SEQ RENAME TO ATTACHMENT_CONTENT_ID_SEQ;\\012\\012ALTER INDEX EXAT_EXPE_FK_I RENAME TO ATTA_EXPE_FK_I;\\012ALTER INDEX EXAT_PERS_FK_I RENAME TO ATTA_PERS_FK_I;\\012ALTER INDEX EXAT_EXAC_FK_I RENAME TO ATTA_EXAC_FK_I;\\012\\012-- it's not possible to rename constraints, we drop and create them with different names\\012\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_cont_fk;\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_expe_fk;\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_pers_fk;\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_pk;\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_pk PRIMARY KEY (id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_cont_fk FOREIGN KEY (exac_id) REFERENCES attachment_contents(id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_expe_fk FOREIGN KEY (expe_id) REFERENCES experiments(id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_pers_fk FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);\\012\\012-- -------\\012-- Add an arc connection from attachment to project and sample tables\\012-- -------\\012\\012ALTER TABLE attachments\\012\\011ADD COLUMN samp_id tech_id,\\012\\011ADD COLUMN proj_id tech_id,\\012\\011ALTER COLUMN expe_id DROP NOT NULL;\\012\\011\\012ALTER TABLE attachments\\012\\011DROP CONSTRAINT exat_bk_uk;\\012\\011\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_arc_ck CHECK ((((((expe_id IS NOT NULL) AND (proj_id IS NULL)) AND (samp_id IS NULL)) OR (((expe_id IS NULL) AND (proj_id IS NOT NULL)) AND (samp_id IS NULL))) OR (((expe_id IS NULL) AND (proj_id IS NULL)) AND (samp_id IS NOT NULL))));\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_expe_bk_uk UNIQUE (expe_id, file_name, version);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_proj_bk_uk UNIQUE (proj_id, file_name, version);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_samp_bk_uk UNIQUE (samp_id, file_name, version);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_proj_fk FOREIGN KEY (proj_id) REFERENCES projects(id);\\012\\012ALTER TABLE attachments\\012\\011ADD CONSTRAINT atta_samp_fk FOREIGN KEY (samp_id) REFERENCES samples(id);\\012\\012CREATE INDEX ATTA_SAMP_FK_I ON ATTACHMENTS (SAMP_ID);\\012CREATE INDEX ATTA_PROJ_FK_I ON ATTACHMENTS (PROJ_ID);\\012\\012-- -------\\012-- Add modification timestamp to project table to allow edition\\012-- -------\\012\\012ALTER TABLE projects\\012\\011ADD COLUMN modification_timestamp TIME_STAMP DEFAULT CURRENT_TIMESTAMP;\\012\\011\\012-- -------\\012-- Add new datatypes\\012-- -------\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'HYPERLINK'\\012 ,'Address of a web page'\\012);\\012\\012insert into data_types\\012(id\\012 ,code\\012 ,description)\\012 values \\012 (nextval('DATA_TYPE_ID_SEQ')\\012 ,'MULTILINE_VARCHAR'\\012 ,'Long text'\\012);\\012 \N diff --git a/openbis/sourceTest/sql/postgresql/031/032=projects.tsv b/openbis/sourceTest/sql/postgresql/031/032=projects.tsv index dbb6642d7e1..34537ddaeb5 100644 --- a/openbis/sourceTest/sql/postgresql/031/032=projects.tsv +++ b/openbis/sourceTest/sql/postgresql/031/032=projects.tsv @@ -1,4 +1,4 @@ -1 DEFAULT 1 \N \N 2 2008-11-05 09:18:13.344+01 \N -2 TESTPROJ 2 \N \N 2 2008-11-05 09:18:14.967+01 \N -3 NEMO 1 \N \N 2 2008-11-05 09:21:43.172+01 \N -4 NOE 1 \N \N 2 2008-11-05 09:21:43.312+01 \N +1 DEFAULT 1 \N \N 2 2008-11-05 09:18:13.344+01 \N 2009-04-03 15:56:37.675094+02 +2 TESTPROJ 2 \N \N 2 2008-11-05 09:18:14.967+01 \N 2009-04-03 15:56:37.675094+02 +3 NEMO 1 \N \N 2 2008-11-05 09:21:43.172+01 \N 2009-04-03 15:56:37.675094+02 +4 NOE 1 \N \N 2 2008-11-05 09:21:43.312+01 \N 2009-04-03 15:56:37.675094+02 diff --git a/openbis/sourceTest/sql/postgresql/031/schema-031.sql b/openbis/sourceTest/sql/postgresql/031/schema-031.sql index 6393da93ff5..5d94da36178 100644 --- a/openbis/sourceTest/sql/postgresql/031/schema-031.sql +++ b/openbis/sourceTest/sql/postgresql/031/schema-031.sql @@ -678,7 +678,8 @@ CREATE TABLE projects ( description description_1000, pers_id_registerer tech_id NOT NULL, registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL, - dast_id tech_id + dast_id tech_id, + modification_timestamp time_stamp DEFAULT now() ); CREATE SEQUENCE property_type_id_seq INCREMENT BY 1 -- GitLab