diff --git a/openbis/source/sql/generic/064/schema-064.sql b/openbis/source/sql/generic/064/schema-064.sql index 610d111822f9cb6730ccf2987ea162219d73f3ca..5482971322a55334d71f5911913db303c63b4eb8 100644 --- a/openbis/source/sql/generic/064/schema-064.sql +++ b/openbis/source/sql/generic/064/schema-064.sql @@ -48,7 +48,7 @@ CREATE TABLE QUERIES (ID TECH_ID NOT NULL, DBIN_ID TECH_ID NOT NULL, NAME VARCHA CREATE TABLE relationship_types (id TECH_ID NOT NULL, code CODE NOT NULL, label COLUMN_LABEL, parent_label COLUMN_LABEL, child_label COLUMN_LABEL, description DESCRIPTION_2000, registration_timestamp TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP, pers_id_registerer TECH_ID NOT NULL, is_managed_internally BOOLEAN_CHAR NOT NULL DEFAULT 'F', is_internal_namespace BOOLEAN_CHAR NOT NULL DEFAULT 'F', dbin_id TECH_ID NOT NULL); CREATE TABLE sample_relationships (id TECH_ID NOT NULL, sample_id_parent TECH_ID NOT NULL, relationship_id TECH_ID NOT NULL, sample_id_child TECH_ID NOT NULL); -CREATE TABLE scripts (ID TECH_ID NOT NULL,DBIN_ID TECH_ID NOT NULL,NAME VARCHAR(200) NOT NULL, SCRIPT_TYPE SCRIPT_TYPE NOT NULL, DESCRIPTION DESCRIPTION_2000,SCRIPT TEXT_VALUE NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,ENTITY_KIND ENTITY_KIND); +CREATE TABLE scripts (ID TECH_ID NOT NULL,DBIN_ID TECH_ID NOT NULL,NAME VARCHAR(200) NOT NULL, SCRIPT_TYPE SCRIPT_TYPE NOT NULL DEFAULT 'DYNAMIC_PROPERTY', DESCRIPTION DESCRIPTION_2000,SCRIPT TEXT_VALUE NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL,ENTITY_KIND ENTITY_KIND); -- Creating sequences diff --git a/openbis/source/sql/postgresql/migration/migration-063-064.sql b/openbis/source/sql/postgresql/migration/migration-063-064.sql index e8b65942a5679fa8cf86686c6f12a0183ba106f4..64be02184509361a6ed2d2cb1c9fafe5e027388c 100644 --- a/openbis/source/sql/postgresql/migration/migration-063-064.sql +++ b/openbis/source/sql/postgresql/migration/migration-063-064.sql @@ -1,8 +1,8 @@ -- Migration from 063 to 064 -- Add SCRIPT_TYPE column to SCRIPTS -CREATE DOMAIN SCRIPT_TYPE AS VARCHAR(40) CHECK (VALUE IN ('DYNAMIC_PROPERTY', 'MANAGED_PROPERTY')); -ALTER TABLE SCRIPTS ADD COLUMN SCRIPT_TYPE SCRIPT_TYPE; -UPDATE SCRIPTS SET SCRIPT_TYPE = 'DYNAMIC_PROPERTY'; +CREATE DOMAIN script_type AS VARCHAR(40) CHECK (VALUE IN ('DYNAMIC_PROPERTY', 'MANAGED_PROPERTY')); +ALTER TABLE scripts ADD COLUMN script_type script_type DEFAULT 'DYNAMIC_PROPERTY'; -- temporary default +UPDATE scripts SET script_type = 'DYNAMIC_PROPERTY'; ALTER TABLE SCRIPTS ALTER COLUMN SCRIPT_TYPE SET NOT NULL; diff --git a/openbis/sourceTest/sql/postgresql/064/017=database_version_logs.tsv b/openbis/sourceTest/sql/postgresql/064/017=database_version_logs.tsv index 9052d32bfeb6eed448f6f6895adccbc54532469b..b42b846ecbf7c8d4f4d871bb218b4a0db41f2cb2 100644 --- a/openbis/sourceTest/sql/postgresql/064/017=database_version_logs.tsv +++ b/openbis/sourceTest/sql/postgresql/064/017=database_version_logs.tsv @@ -36,5 +36,5 @@ 060 source/sql/postgresql/migration/migration-059-060.sql SUCCESS 2010-10-13 17:34:57.267 -- Migration from 059 to 060\\012\\012------------------------------------------------------------------------------------\\012-- Drop trigger on queries.entity_type_code column to enable storing a regexp there.\\012------------------------------------------------------------------------------------\\012\\012DROP TRIGGER query_entity_type_code_check ON queries;\\012DROP FUNCTION query_entity_type_code_check();\\012\\012------------------------------------------------------------------------------------\\012-- Dynamic properties\\012------------------------------------------------------------------------------------\\012\\012-- Create SCRIPTS table\\012\\012CREATE TABLE SCRIPTS (ID TECH_ID NOT NULL,DBIN_ID TECH_ID NOT NULL,NAME VARCHAR(200) NOT NULL,DESCRIPTION DESCRIPTION_2000,SCRIPT TEXT_VALUE NOT NULL,REGISTRATION_TIMESTAMP TIME_STAMP_DFL NOT NULL DEFAULT CURRENT_TIMESTAMP,PERS_ID_REGISTERER TECH_ID NOT NULL);\\012CREATE SEQUENCE SCRIPT_ID_SEQ;\\012ALTER TABLE SCRIPTS ADD CONSTRAINT SCRI_PK PRIMARY KEY(ID);\\012ALTER TABLE SCRIPTS ADD CONSTRAINT SCRI_UK UNIQUE(NAME,DBIN_ID);\\012ALTER TABLE SCRIPTS ADD CONSTRAINT SCRI_DBIN_FK FOREIGN KEY (DBIN_ID) REFERENCES DATABASE_INSTANCES(ID);\\012ALTER TABLE SCRIPTS ADD CONSTRAINT SCRI_PERS_FK FOREIGN KEY (PERS_ID_REGISTERER) REFERENCES PERSONS(ID);\\012CREATE INDEX SCRIPT_PERS_FK_I ON SCRIPTS (PERS_ID_REGISTERER);\\012CREATE INDEX SCRIPT_DBIN_FK_I ON SCRIPTS (DBIN_ID);\\012\\012-- Add IS_DYNAMIC column to *_PROPERTY_TYPES tables \\012\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD COLUMN IS_DYNAMIC BOOLEAN NOT NULL DEFAULT FALSE;\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD COLUMN IS_DYNAMIC BOOLEAN NOT NULL DEFAULT FALSE;\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD COLUMN IS_DYNAMIC BOOLEAN NOT NULL DEFAULT FALSE;\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD COLUMN IS_DYNAMIC BOOLEAN NOT NULL DEFAULT FALSE;\\012\\012-- Add SCRIPT_ID column to *_PROPERTY_TYPES tables \\012\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD COLUMN SCRIPT_ID TECH_ID;\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD COLUMN SCRIPT_ID TECH_ID;\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD COLUMN SCRIPT_ID TECH_ID;\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD COLUMN SCRIPT_ID TECH_ID;\\012\\012-- Make SCRIPT_ID reference SCRIPTS\\012\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_SCRIPT_FK FOREIGN KEY (SCRIPT_ID) REFERENCES SCRIPTS(ID);\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_SCRIPT_FK FOREIGN KEY (SCRIPT_ID) REFERENCES SCRIPTS(ID);\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_SCRIPT_FK FOREIGN KEY (SCRIPT_ID) REFERENCES SCRIPTS(ID);\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_SCRIPT_FK FOREIGN KEY (SCRIPT_ID) REFERENCES SCRIPTS(ID);\\012\\012-- Check SCRIPT_ID is filled when IS_DYNAMIC is TRUE\\012\\012ALTER TABLE MATERIAL_TYPE_PROPERTY_TYPES ADD CONSTRAINT MTPT_CK CHECK ((IS_DYNAMIC IS TRUE AND SCRIPT_ID IS NOT NULL) OR (IS_DYNAMIC IS FALSE AND SCRIPT_ID IS NULL));\\012ALTER TABLE SAMPLE_TYPE_PROPERTY_TYPES ADD CONSTRAINT STPT_CK CHECK ((IS_DYNAMIC IS TRUE AND SCRIPT_ID IS NOT NULL) OR (IS_DYNAMIC IS FALSE AND SCRIPT_ID IS NULL));\\012ALTER TABLE EXPERIMENT_TYPE_PROPERTY_TYPES ADD CONSTRAINT ETPT_CK CHECK ((IS_DYNAMIC IS TRUE AND SCRIPT_ID IS NOT NULL) OR (IS_DYNAMIC IS FALSE AND SCRIPT_ID IS NULL));\\012ALTER TABLE DATA_SET_TYPE_PROPERTY_TYPES ADD CONSTRAINT DSTPT_CK CHECK ((IS_DYNAMIC IS TRUE AND SCRIPT_ID IS NOT NULL) OR (IS_DYNAMIC IS FALSE AND SCRIPT_ID IS NULL));\\012\\012 \N 061 source/sql/postgresql/migration/migration-060-061.sql SUCCESS 2010-11-09 10:19:06.864 -- Migration from 060 to 061\\012\\012CREATE DOMAIN ENTITY_KIND AS VARCHAR(40) CHECK (VALUE IN ('SAMPLE', 'EXPERIMENT', 'DATA_SET', 'MATERIAL'));\\012\\012ALTER TABLE SCRIPTS ADD COLUMN ENTITY_KIND ENTITY_KIND;\\012 \N 062 source/sql/postgresql/migration/migration-061-062.sql SUCCESS 2010-11-25 16:02:07.224 \\012CREATE OR REPLACE FUNCTION sample_code_uniqueness_check() RETURNS trigger\\012 LANGUAGE plpgsql\\012 AS $$\\012DECLARE\\012 counter INTEGER;\\012BEGIN\\012 LOCK TABLE samples IN EXCLUSIVE MODE;\\012 \\012\\011 IF (NEW.samp_id_part_of is NULL) THEN\\012\\011\\011 IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011 SELECT count(*) into counter FROM samples \\012\\011\\011 where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and dbin_id = NEW.dbin_id;\\012 IF (counter > 0) THEN\\012\\011\\011\\011\\011 RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code already exists.', NEW.code;\\012 END IF;\\012\\011\\011 ELSIF (NEW.space_id is not NULL) THEN\\012\\011\\011\\011 SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011 where id != NEW.id and code = NEW.code and samp_id_part_of is NULL and space_id = NEW.grou_id;\\012\\011\\011\\011 IF (counter > 0) THEN\\012\\011\\011\\011\\011 RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample with the same code already exists.', NEW.code;\\012\\011\\011\\011 END IF;\\012 END IF;\\012 ELSE\\012\\011\\011 IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011 SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011 where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and dbin_id = NEW.dbin_id;\\012\\011\\011\\011 IF (counter > 0) THEN\\012\\011\\011\\011\\011 RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample with the same code and being the part of the same container already exists.', NEW.code;\\012\\011\\011\\011 END IF;\\012\\011\\011 ELSIF (NEW.space_id is not NULL) THEN\\012\\011\\011\\011 SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011 where id != NEW.id and code = NEW.code and samp_id_part_of = NEW.samp_id_part_of and space_id = NEW.space_id;\\012\\011\\011\\011 IF (counter > 0) THEN\\012\\011\\011\\011\\011 RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample with the same code and being the part of the same container already exists.', NEW.code;\\012\\011\\011\\011 END IF;\\012\\011\\011 END IF;\\012 END IF; \\012 \\012 RETURN NEW;\\012END;\\012$$;\\012\\012\\012CREATE OR REPLACE FUNCTION sample_subcode_uniqueness_check() RETURNS trigger\\012 LANGUAGE plpgsql\\012 AS $$\\012DECLARE\\012 counter INTEGER;\\012 unique_subcode BOOLEAN_CHAR;\\012BEGIN\\012 LOCK TABLE samples IN EXCLUSIVE MODE;\\012 \\012 SELECT is_subcode_unique into unique_subcode FROM sample_types WHERE id = NEW.saty_id;\\012 \\012 IF (unique_subcode) THEN\\012 IF (NEW.dbin_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and saty_id = NEW.saty_id and dbin_id = NEW.dbin_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because database instance sample of the same type with the same subcode already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011ELSIF (NEW.space_id is not NULL) THEN\\012\\011\\011\\011SELECT count(*) into counter FROM samples \\012\\011\\011\\011\\011where id != NEW.id and code = NEW.code and saty_id = NEW.saty_id and space_id = NEW.space_id;\\012\\011\\011\\011IF (counter > 0) THEN\\012\\011\\011\\011\\011RAISE EXCEPTION 'Insert/Update of Sample (Code: %) failed because space sample of the same type with the same subcode already exists.', NEW.code;\\012\\011\\011\\011END IF;\\012\\011\\011END IF;\\012 END IF;\\012 \\012 RETURN NEW;\\012END;\\012$$;\\012\\012ALTER TABLE groups RENAME TO spaces;\\012\\012ALTER SEQUENCE group_id_seq RENAME TO space_id_seq;\\012\\012ALTER TABLE persons\\011RENAME grou_id TO space_id;\\012ALTER TABLE projects RENAME grou_id TO space_id;\\012ALTER TABLE role_assignments RENAME grou_id TO space_id;\\012ALTER TABLE samples\\011RENAME grou_id TO space_id;\\012\\012-- migrate EVENTS table\\012\\012ALTER TABLE events\\012\\011DROP CONSTRAINT evnt_et_enum_ck;\\012\\012update events set entity_type = 'SPACE' where entity_type = 'GROUP';\\012\\012ALTER TABLE events ADD CONSTRAINT evnt_et_enum_ck CHECK \\012\\011(entity_type IN ('ATTACHMENT', 'DATASET', 'EXPERIMENT', 'SPACE', 'MATERIAL', 'PROJECT', 'PROPERTY_TYPE', 'SAMPLE', 'VOCABULARY', 'AUTHORIZATION_GROUP')); \\012\\012ALTER TABLE persons\\012\\011DROP CONSTRAINT pers_grou_fk;\\012\\012ALTER TABLE persons\\012\\011ADD CONSTRAINT pers_space_fk FOREIGN KEY (space_id) REFERENCES spaces(id);\\012\\012ALTER TABLE projects\\012\\011DROP CONSTRAINT proj_bk_uk;\\012\\012ALTER TABLE projects\\012\\011DROP CONSTRAINT proj_grou_fk;\\012\\012ALTER TABLE projects\\012\\011ADD CONSTRAINT proj_bk_uk UNIQUE (code, space_id);\\012\\012ALTER TABLE projects\\012\\011ADD CONSTRAINT proj_space_fk FOREIGN KEY (space_id) REFERENCES spaces(id);\\012\\012ALTER TABLE role_assignments\\012\\011DROP CONSTRAINT roas_dbin_grou_arc_ck;\\012\\012ALTER TABLE role_assignments\\012\\011DROP CONSTRAINT roas_ag_group_bk_uk;\\012\\012ALTER TABLE role_assignments\\012\\011DROP CONSTRAINT roas_pe_group_bk_uk;\\012\\012ALTER TABLE role_assignments\\012\\011DROP CONSTRAINT roas_grou_fk;\\012\\012ALTER TABLE role_assignments\\012\\011ADD CONSTRAINT roas_dbin_space_arc_ck CHECK ((((dbin_id IS NOT NULL) AND (space_id IS NULL)) OR ((dbin_id IS NULL) AND (space_id IS NOT NULL))));\\012\\012ALTER TABLE role_assignments\\012\\011ADD CONSTRAINT roas_ag_space_bk_uk UNIQUE (ag_id_grantee, role_code, space_id);\\012\\012ALTER TABLE role_assignments\\012\\011ADD CONSTRAINT roas_pe_space_bk_uk UNIQUE (pers_id_grantee, role_code, space_id);\\012\\012ALTER TABLE role_assignments\\012\\011ADD CONSTRAINT roas_space_fk FOREIGN KEY (space_id) REFERENCES spaces(id);\\012\\012ALTER TABLE samples\\012\\011DROP CONSTRAINT samp_dbin_grou_arc_ck;\\012\\012ALTER TABLE samples\\012\\011DROP CONSTRAINT samp_grou_fk;\\012\\012ALTER TABLE samples\\012\\011ADD CONSTRAINT samp_dbin_space_arc_ck CHECK ((((dbin_id IS NOT NULL) AND (space_id IS NULL)) OR ((dbin_id IS NULL) AND (space_id IS NOT NULL))));\\012\\012ALTER TABLE samples\\012\\011ADD CONSTRAINT samp_space_fk FOREIGN KEY (space_id) REFERENCES spaces(id);\\012\\012ALTER TABLE spaces\\012 DROP CONSTRAINT grou_bk_uk,\\012 ADD CONSTRAINT space_bk_uk UNIQUE (code, dbin_id);\\012\\012ALTER TABLE spaces\\012 DROP CONSTRAINT grou_dbin_fk,\\012 ADD CONSTRAINT space_dbin_fk FOREIGN KEY (dbin_id) REFERENCES database_instances(id);\\012\\012ALTER TABLE spaces\\012 DROP CONSTRAINT grou_pers_fk_registerer,\\012 ADD CONSTRAINT space_pers_fk_registerer FOREIGN KEY (pers_id_registerer) REFERENCES persons(id);\\012\\012ALTER INDEX pers_grou_fk_i RENAME TO pers_space_fk_i;\\012\\012ALTER INDEX proj_grou_fk_i RENAME TO proj_space_fk_i;\\012\\012ALTER INDEX roas_grou_fk_i RENAME TO roas_space_fk_i;\\012\\012ALTER INDEX grou_pk RENAME TO space_pk;\\012\\012ALTER INDEX grou_dbin_fk_i RENAME TO space_dbin_fk_i;\\012\\012ALTER INDEX grou_pers_registered_by_fk_i RENAME TO space_pers_registered_by_fk_i;\\012\\012 \N -063 source/sql/postgresql/migration/migration-062-063.sql SUCCESS 2010-12-10 13:20:59.268 -- Migration from 062 to 063\\012\\012-- connect wells to experiments of their plates (screening specific) \\012UPDATE samples \\012\\011SET expe_id = sc.expe_id\\012\\011FROM samples sc, sample_types sct\\012\\011WHERE sc.id = samples.samp_id_part_of\\012\\011AND sct.id = sc.saty_id AND sct.code = 'PLATE'\\012\\012-- for testing:\\012-- SELECT s.id, s.expe_id, sc.expe_id FROM samples s, samples sc, sample_types sct\\012--\\011WHERE sc.id = s.samp_id_part_of\\012--\\011AND sct.id = sc.saty_id AND sct.code = 'PLATE'\\012 \N -064 source/sql/postgresql/migration/migration-063-064.sql SUCCESS 2011-01-07 15:26:24.634 -- Migration from 063 to 064\\012\\012-- Add SCRIPT_TYPE column to SCRIPTS\\012CREATE DOMAIN SCRIPT_TYPE AS VARCHAR(40) CHECK (VALUE IN ('DYNAMIC_PROPERTY', 'MANAGED_PROPERTY'));\\012ALTER TABLE SCRIPTS ADD COLUMN SCRIPT_TYPE SCRIPT_TYPE;\\012UPDATE SCRIPTS SET SCRIPT_TYPE = 'DYNAMIC_PROPERTY';\\012ALTER TABLE SCRIPTS ALTER COLUMN SCRIPT_TYPE SET NOT NULL; \\012\\012 \N +063 source/sql/postgresql/migration/migration-062-063.sql SUCCESS 2011-01-09 22:04:03.542 -- Migration from 062 to 063\\012\\012--------------------------------------------------------------------------------------\\012--------------------------------------------------------------------------------------\\012-- Screening specific migration. Nothing will be performed on openBIS databases \\012-- which are not screening specific.\\012--------------------------------------------------------------------------------------\\012--------------------------------------------------------------------------------------\\012\\012-- connect wells to experiments of their plates\\012UPDATE samples \\012\\011SET expe_id = sc.expe_id\\012\\011FROM samples sc, sample_types sct\\012\\011WHERE samples.expe_id IS NULL\\012\\011AND sc.id = samples.samp_id_part_of\\012\\011AND sct.id = sc.saty_id AND sct.code = 'PLATE';\\012\\012 \N +064 source/sql/postgresql/migration/migration-063-064.sql SUCCESS 2011-01-09 22:04:52.874 -- Migration from 063 to 064\\012\\012-- Add SCRIPT_TYPE column to SCRIPTS\\012CREATE DOMAIN script_type AS VARCHAR(40) CHECK (VALUE IN ('DYNAMIC_PROPERTY', 'MANAGED_PROPERTY'));\\012ALTER TABLE scripts ADD COLUMN script_type script_type DEFAULT 'DYNAMIC_PROPERTY'; -- temporary default\\012UPDATE scripts SET script_type = 'DYNAMIC_PROPERTY';\\012ALTER TABLE SCRIPTS ALTER COLUMN SCRIPT_TYPE SET NOT NULL; \\012\\012 \N diff --git a/openbis/sourceTest/sql/postgresql/064/schema-064.sql b/openbis/sourceTest/sql/postgresql/064/schema-064.sql index 830638fec6706c1a9e589f44d0747c95543a9099..f31fddcdfe2620cd5d7f0bfb486ffc0be361a0c7 100644 --- a/openbis/sourceTest/sql/postgresql/064/schema-064.sql +++ b/openbis/sourceTest/sql/postgresql/064/schema-064.sql @@ -1005,7 +1005,7 @@ CREATE TABLE scripts ( registration_timestamp time_stamp_dfl DEFAULT now() NOT NULL, pers_id_registerer tech_id NOT NULL, entity_kind entity_kind, - script_type script_type NOT NULL + script_type script_type DEFAULT 'DYNAMIC_PROPERTY'::character varying NOT NULL ); CREATE SEQUENCE space_id_seq START WITH 1