diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java index 75a166640abfbc220a9d2132cae35f62db23caf7..9fde8bca53f38472a2ead8a2de7760f58801d8e9 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java @@ -44,6 +44,7 @@ import ch.systemsx.cisd.openbis.generic.server.dataaccess.PersistencyResources; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IFullTextIndexUpdateScheduler; import ch.systemsx.cisd.openbis.generic.server.dataaccess.db.search.IndexUpdateOperation; import ch.systemsx.cisd.openbis.generic.shared.basic.TechId; +import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetRelationshipPE; import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE; import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE; import ch.systemsx.cisd.openbis.generic.shared.dto.IDeletablePE; @@ -318,7 +319,7 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements return updatedRows; } - public int trashSampleRelationships(final List<TechId> samplesIds, final DeletionPE deletion) + private int trashSampleRelationships(final List<TechId> samplesIds, final DeletionPE deletion) throws DataAccessException { if (samplesIds.isEmpty()) @@ -356,7 +357,7 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements return updatedRows; } - public int trashDataSetRelationships(final List<TechId> dataSetIds, final DeletionPE deletion) + private int trashDataSetRelationships(final List<TechId> dataSetIds, final DeletionPE deletion) throws DataAccessException { if (dataSetIds.isEmpty()) @@ -376,7 +377,7 @@ final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements return session .createQuery( "UPDATE " - + SampleRelationshipPE.class.getSimpleName() + + DataSetRelationshipPE.class.getSimpleName() + " SET deletion = :deletion" + " WHERE deletion IS NULL" + " AND (parentDataSet.id IN (:ids) OR childDataSet.id in (:ids))") diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetRelationshipId.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetRelationshipId.java new file mode 100644 index 0000000000000000000000000000000000000000..45dd017b50cdd34d577b787d808bcfd5a0a13e70 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetRelationshipId.java @@ -0,0 +1,94 @@ +/* + * Copyright 2012 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.shared.dto; + +import java.io.Serializable; + +import javax.persistence.FetchType; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; + +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.hibernate.validator.NotNull; + +/** + * @author Pawel Glyzewski + */ +public class DataSetRelationshipId implements Serializable +{ + private static final long serialVersionUID = -3819640534421748352L; + + private DataPE parentDataSet; + + @NotNull(message = ValidationMessages.PARENT_NOT_NULL_MESSAGE) + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = ColumnNames.DATA_PARENT_COLUMN) + public DataPE getParentDataSet() + { + return parentDataSet; + } + + public void setParentDataSet(DataPE parentDataSet) + { + this.parentDataSet = parentDataSet; + } + + @NotNull(message = ValidationMessages.CHILD_NOT_NULL_MESSAGE) + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = ColumnNames.DATA_CHILD_COLUMN) + public DataPE getChildDataSet() + { + return childDataSet; + } + + public void setChildDataSet(DataPE childDataSet) + { + this.childDataSet = childDataSet; + } + + private DataPE childDataSet; + + @Deprecated + public DataSetRelationshipId() + { + } + + public DataSetRelationshipId(DataPE parentDataSet, DataPE childDataSet) + { + this.parentDataSet = parentDataSet; + this.childDataSet = childDataSet; + } + + @Override + public boolean equals(Object other) + { + if (other == null || !(other instanceof DataSetRelationshipId)) + return false; + DataSetRelationshipId castOther = (DataSetRelationshipId) other; + return new EqualsBuilder() + .append(this.parentDataSet.getId(), castOther.parentDataSet.getId()) + .append(this.childDataSet.getId(), castOther.childDataSet.getId()).isEquals(); + } + + @Override + public int hashCode() + { + return new HashCodeBuilder().append(parentDataSet.getId()).append(childDataSet.getId()) + .toHashCode(); + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetRelationshipPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetRelationshipPE.java index 76f1d092d13a03005a2460a6a347b20471fe53d1..525596d81d77acfe4ad687b05201676cbf171cda 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetRelationshipPE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DataSetRelationshipPE.java @@ -21,6 +21,7 @@ import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; +import javax.persistence.IdClass; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; @@ -38,6 +39,7 @@ import ch.systemsx.cisd.openbis.generic.shared.IServer; @Entity @Table(name = TableNames.DATA_SET_RELATIONSHIPS_VIEW, uniqueConstraints = @UniqueConstraint(columnNames = { ColumnNames.DATA_PARENT_COLUMN, ColumnNames.DATA_CHILD_COLUMN })) +@IdClass(DataSetRelationshipId.class) public class DataSetRelationshipPE implements Serializable { private static final long serialVersionUID = IServer.VERSION; diff --git a/openbis/source/sql/postgresql/098/function-098.sql b/openbis/source/sql/postgresql/098/function-098.sql index a35703e4408b3f5341634e27b29483441f7406b1..5ac3d760c1fc69e3b9a818313185c0368a66b893 100644 --- a/openbis/source/sql/postgresql/098/function-098.sql +++ b/openbis/source/sql/postgresql/098/function-098.sql @@ -395,7 +395,7 @@ BEGIN END IF; -- all children need to be deleted SELECT count(*) INTO counter - FROM sample_relationships sr, samples sc + FROM sample_relationships_all 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 was not deleted.', NEW.code; @@ -409,6 +409,65 @@ CREATE CONSTRAINT TRIGGER check_deletion_consistency_on_sample_deletion DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE PROCEDURE check_deletion_consistency_on_sample_deletion(); + +----------------------------------------- +-- update sample relationships on revert +----------------------------------------- + +CREATE OR REPLACE FUNCTION preserve_deletion_consistency_on_sample_relationships() RETURNS trigger AS $$ +DECLARE + delid TECH_ID; +BEGIN + IF (NEW.del_id IS NOT NULL OR OLD.del_id IS NULL) THEN + RETURN NEW; + END IF; + SELECT del_id INTO delid + FROM SAMPLES_ALL where id = NEW.sample_id_parent; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + SELECT del_id INTO delid + FROM SAMPLES_ALL where id = NEW.sample_id_child; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + RETURN NEW; +END; +$$ LANGUAGE 'plpgsql'; + +CREATE TRIGGER preserve_deletion_consistency_on_sample_relationships + BEFORE UPDATE ON sample_relationships_all + FOR EACH ROW + EXECUTE PROCEDURE preserve_deletion_consistency_on_sample_relationships(); + +----------------------------------------- +-- update dataset relationships on revert +----------------------------------------- +CREATE OR REPLACE FUNCTION preserve_deletion_consistency_on_data_set_relationships() RETURNS trigger AS $$ +DECLARE + delid TECH_ID; +BEGIN + IF (NEW.del_id IS NOT NULL OR OLD.del_id IS NULL) THEN + RETURN NEW; + END IF; + SELECT del_id INTO delid + FROM DATA_ALL where id = NEW.data_id_parent; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + SELECT del_id INTO delid + FROM DATA_ALL where id = NEW.data_id_child; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + RETURN NEW; +END; +$$ LANGUAGE 'plpgsql'; + +CREATE TRIGGER preserve_deletion_consistency_on_data_set_relationships + BEFORE UPDATE ON data_set_relationships_all + FOR EACH ROW + EXECUTE PROCEDURE preserve_deletion_consistency_on_data_set_relationships(); ---------------------------------------------------------------------------------------------------- -- 3. experiment diff --git a/openbis/source/sql/postgresql/migration/migration-097-098.sql b/openbis/source/sql/postgresql/migration/migration-097-098.sql index 9df6281d36325d1dc7a1c6c62ec6250e3d795529..a34fbacc1f4d9da4731726994a3c156b1d84234f 100644 --- a/openbis/source/sql/postgresql/migration/migration-097-098.sql +++ b/openbis/source/sql/postgresql/migration/migration-097-098.sql @@ -104,3 +104,90 @@ CREATE OR REPLACE RULE sample_relationships_delete AS ON DELETE TO sample_relationships DO INSTEAD DELETE FROM sample_relationships_all WHERE id = OLD.id; + +CREATE OR REPLACE FUNCTION preserve_deletion_consistency_on_data_set_relationships() RETURNS trigger AS $$ +DECLARE + delid TECH_ID; +BEGIN + IF (NEW.del_id IS NOT NULL OR OLD.del_id IS NULL) THEN + RETURN NEW; + END IF; + SELECT del_id INTO delid + FROM DATA_ALL where id = NEW.data_id_parent; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + SELECT del_id INTO delid + FROM DATA_ALL where id = NEW.data_id_child; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + RETURN NEW; +END; +$$ LANGUAGE 'plpgsql'; + +CREATE TRIGGER preserve_deletion_consistency_on_data_set_relationships + BEFORE UPDATE ON data_set_relationships_all + FOR EACH ROW + EXECUTE PROCEDURE preserve_deletion_consistency_on_data_set_relationships(); + +CREATE OR REPLACE FUNCTION preserve_deletion_consistency_on_sample_relationships() RETURNS trigger AS $$ +DECLARE + delid TECH_ID; +BEGIN + IF (NEW.del_id IS NOT NULL OR OLD.del_id IS NULL) THEN + RETURN NEW; + END IF; + SELECT del_id INTO delid + FROM SAMPLES_ALL where id = NEW.sample_id_parent; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + SELECT del_id INTO delid + FROM SAMPLES_ALL where id = NEW.sample_id_child; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + RETURN NEW; +END; +$$ LANGUAGE 'plpgsql'; + +CREATE TRIGGER preserve_deletion_consistency_on_sample_relationships + BEFORE UPDATE ON sample_relationships_all + FOR EACH ROW + EXECUTE PROCEDURE preserve_deletion_consistency_on_sample_relationships(); + + +CREATE OR REPLACE FUNCTION check_deletion_consistency_on_sample_deletion() RETURNS trigger AS $$ +DECLARE + counter INTEGER; +BEGIN + IF (OLD.del_id IS NOT NULL OR NEW.del_id IS NULL) THEN + RETURN NEW; + END IF; + + -- 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 was 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 was not deleted.', NEW.code; + END IF; + -- all children need to be deleted + SELECT count(*) INTO counter + FROM sample_relationships_all 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 was not deleted.', NEW.code; + END IF; + RETURN NEW; +END; +$$ LANGUAGE 'plpgsql'; \ No newline at end of file diff --git a/openbis/sourceTest/sql/postgresql/098/019=database_version_logs.tsv b/openbis/sourceTest/sql/postgresql/098/019=database_version_logs.tsv index 51c49f3742f8548c8d32ad49e23aa8cc52c4cae3..14a8d699f84ec41872a0c57111a8394cf138272c 100644 --- a/openbis/sourceTest/sql/postgresql/098/019=database_version_logs.tsv +++ b/openbis/sourceTest/sql/postgresql/098/019=database_version_logs.tsv @@ -71,4 +71,4 @@ 095 source/sql/postgresql/migration/migration-094-095.sql SUCCESS 2012-01-16 13:47:32.07 \\x414c544552205441424c452045585445524e414c5f444154412041444420434f4c554d4e2053544f524147455f434f4e4649524d4154494f4e20424f4f4c45414e5f43484152204e4f54204e554c4c2044454641554c54202746273b0a5550444154452045585445524e414c5f44415441205345542053544f524147455f434f4e4649524d4154494f4e203d202754273b0a \N 096 source/sql/postgresql/migration/migration-095-096.sql SUCCESS 2012-01-26 15:27:45.343 \\x43524541544520444f4d41494e204944454e544946494552204153205641524348415228323030293b0a0a616c746572207461626c65206d6174657269616c5f70726f706572746965735f686973746f72792061646420636f6c756d6e20766f636162756c6172795f7465726d206964656e7469666965723b0a616c746572207461626c65206d6174657269616c5f70726f706572746965735f686973746f72792061646420636f6c756d6e206d6174657269616c206964656e7469666965723b0a757064617465206d6174657269616c5f70726f706572746965735f686973746f72792073657420766f636162756c6172795f7465726d203d202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d20637674655f69642920776865726520637674655f6964206973206e6f74206e756c6c3b0a757064617465206d6174657269616c5f70726f706572746965735f686973746f727920736574206d6174657269616c203d202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d206d6174655f70726f705f696429207768657265206d6174655f70726f705f6964206973206e6f74206e756c6c3b0a616c746572207461626c65206d6174657269616c5f70726f706572746965735f686973746f72792064726f7020636f6c756d6e20637674655f69643b0a616c746572207461626c65206d6174657269616c5f70726f706572746965735f686973746f72792064726f7020636f6c756d6e206d6174655f70726f705f69643b0a414c544552205441424c45204d4154455249414c5f50524f504552544945535f484953544f52592041444420434f4e53545241494e54204d415052485f434b20434845434b200a09282856414c5545204953204e4f54204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e554c4c29204f52200a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e4f54204e554c4c20414e44204d4154455249414c204953204e554c4c29204f520a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e4f54204e554c4c290a09293b0a0a616c746572207461626c65206578706572696d656e745f70726f706572746965735f686973746f72792061646420636f6c756d6e20766f636162756c6172795f7465726d206964656e7469666965723b0a616c746572207461626c65206578706572696d656e745f70726f706572746965735f686973746f72792061646420636f6c756d6e206d6174657269616c206964656e7469666965723b0a757064617465206578706572696d656e745f70726f706572746965735f686973746f72792073657420766f636162756c6172795f7465726d203d202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d20637674655f69642920776865726520637674655f6964206973206e6f74206e756c6c3b0a757064617465206578706572696d656e745f70726f706572746965735f686973746f727920736574206d6174657269616c203d202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d206d6174655f70726f705f696429207768657265206d6174655f70726f705f6964206973206e6f74206e756c6c3b0a616c746572207461626c65206578706572696d656e745f70726f706572746965735f686973746f72792064726f7020636f6c756d6e20637674655f69643b0a616c746572207461626c65206578706572696d656e745f70726f706572746965735f686973746f72792064726f7020636f6c756d6e206d6174655f70726f705f69643b0a414c544552205441424c45204558504552494d454e545f50524f504552544945535f484953544f52592041444420434f4e53545241494e542045585052485f434b20434845434b200a09282856414c5545204953204e4f54204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e554c4c29204f52200a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e4f54204e554c4c20414e44204d4154455249414c204953204e554c4c29204f520a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e4f54204e554c4c290a09293b0a0a616c746572207461626c652073616d706c655f70726f706572746965735f686973746f72792061646420636f6c756d6e20766f636162756c6172795f7465726d206964656e7469666965723b0a616c746572207461626c652073616d706c655f70726f706572746965735f686973746f72792061646420636f6c756d6e206d6174657269616c206964656e7469666965723b0a7570646174652073616d706c655f70726f706572746965735f686973746f72792073657420766f636162756c6172795f7465726d203d202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d20637674655f69642920776865726520637674655f6964206973206e6f74206e756c6c3b0a7570646174652073616d706c655f70726f706572746965735f686973746f727920736574206d6174657269616c203d202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d206d6174655f70726f705f696429207768657265206d6174655f70726f705f6964206973206e6f74206e756c6c3b0a616c746572207461626c652073616d706c655f70726f706572746965735f686973746f72792064726f7020636f6c756d6e20637674655f69643b0a616c746572207461626c652073616d706c655f70726f706572746965735f686973746f72792064726f7020636f6c756d6e206d6174655f70726f705f69643b0a414c544552205441424c452053414d504c455f50524f504552544945535f484953544f52592041444420434f4e53545241494e542053415052485f434b20434845434b200a09282856414c5545204953204e4f54204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e554c4c29204f52200a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e4f54204e554c4c20414e44204d4154455249414c204953204e554c4c29204f520a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e4f54204e554c4c290a09293b0a0a616c746572207461626c6520646174615f7365745f70726f706572746965735f686973746f72792061646420636f6c756d6e20766f636162756c6172795f7465726d206964656e7469666965723b0a616c746572207461626c6520646174615f7365745f70726f706572746965735f686973746f72792061646420636f6c756d6e206d6174657269616c206964656e7469666965723b0a75706461746520646174615f7365745f70726f706572746965735f686973746f72792073657420766f636162756c6172795f7465726d203d202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d20637674655f69642920776865726520637674655f6964206973206e6f74206e756c6c3b0a75706461746520646174615f7365745f70726f706572746965735f686973746f727920736574206d6174657269616c203d202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d206d6174655f70726f705f696429207768657265206d6174655f70726f705f6964206973206e6f74206e756c6c3b0a616c746572207461626c6520646174615f7365745f70726f706572746965735f686973746f72792064726f7020636f6c756d6e20637674655f69643b0a616c746572207461626c6520646174615f7365745f70726f706572746965735f686973746f72792064726f7020636f6c756d6e206d6174655f70726f705f69643b0a414c544552205441424c4520444154415f5345545f50524f504552544945535f484953544f52592041444420434f4e53545241494e542044535052485f434b20434845434b200a09282856414c5545204953204e4f54204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e554c4c29204f52200a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e4f54204e554c4c20414e44204d4154455249414c204953204e554c4c29204f520a09202856414c5545204953204e554c4c20414e4420564f434142554c4152595f5445524d204953204e554c4c20414e44204d4154455249414c204953204e4f54204e554c4c290a09293b0a0a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a2d2d2052756c657320666f722070726f7065727469657320686973746f72790a2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d0a0a2d2d204d6174657269616c2050726f70657274696573202d2d0a0a435245415445204f52205245504c4143452052554c45206d6174657269616c5f70726f706572746965735f7570646174652041530a202020204f4e2055504441544520544f206d6174657269616c5f70726f70657274696573200a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c786566626662642720414e44204f4c442e56414c554520213d204e45572e56414c554529200a20202020202020204f5220284f4c442e435654455f4944204953204e4f54204e554c4c20414e44204f4c442e435654455f494420213d204e45572e435654455f494429200a20202020202020204f5220284f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c20414e44204f4c442e4d4154455f50524f505f494420213d204e45572e4d4154455f50524f505f4944290a20202020444f20414c534f200a20202020202020494e5345525420494e544f206d6174657269616c5f70726f706572746965735f686973746f727920280a20202020202020202049442c200a2020202020202020204d4154455f49442c200a2020202020202020204d5450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c28274d4154455249414c5f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e4d4154455f49442c200a2020202020202020204f4c442e4d5450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a202020202020200a435245415445204f52205245504c4143452052554c45206d6174657269616c5f70726f706572746965735f64656c6574652041530a202020204f4e2044454c45544520544f206d6174657269616c5f70726f70657274696573200a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c7865666266626427290a20202020202020204f52204f4c442e435654455f4944204953204e4f54204e554c4c200a20202020202020204f52204f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c0a20202020444f20414c534f200a20202020202020494e5345525420494e544f206d6174657269616c5f70726f706572746965735f686973746f727920280a20202020202020202049442c200a2020202020202020204d4154455f49442c200a2020202020202020204d5450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c28274d4154455249414c5f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e4d4154455f49442c200a2020202020202020204f4c442e4d5450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a202020202020200a2d2d204578706572696d656e742050726f70657274696573202d2d0a0a435245415445204f52205245504c4143452052554c45206578706572696d656e745f70726f706572746965735f7570646174652041530a202020204f4e2055504441544520544f206578706572696d656e745f70726f70657274696573200a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c786566626662642720414e44204f4c442e56414c554520213d204e45572e56414c554529200a20202020202020204f5220284f4c442e435654455f4944204953204e4f54204e554c4c20414e44204f4c442e435654455f494420213d204e45572e435654455f494429200a20202020202020204f5220284f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c20414e44204f4c442e4d4154455f50524f505f494420213d204e45572e4d4154455f50524f505f4944290a20202020444f20414c534f200a20202020202020494e5345525420494e544f206578706572696d656e745f70726f706572746965735f686973746f727920280a20202020202020202049442c200a202020202020202020455850455f49442c0a202020202020202020455450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c28274558504552494d454e545f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e455850455f49442c200a2020202020202020204f4c442e455450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a202020202020200a435245415445204f52205245504c4143452052554c45206578706572696d656e745f70726f706572746965735f64656c6574652041530a202020204f4e2044454c45544520544f206578706572696d656e745f70726f70657274696573200a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c7865666266626427290a20202020202020204f52204f4c442e435654455f4944204953204e4f54204e554c4c200a20202020202020204f52204f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c0a20202020444f20414c534f200a20202020202020494e5345525420494e544f206578706572696d656e745f70726f706572746965735f686973746f727920280a20202020202020202049442c200a202020202020202020455850455f49442c0a202020202020202020455450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c28274558504552494d454e545f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e455850455f49442c200a2020202020202020204f4c442e455450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a202020202020200a2d2d2053616d706c652050726f70657274696573202d2d0a0a435245415445204f52205245504c4143452052554c452073616d706c655f70726f706572746965735f7570646174652041530a202020204f4e2055504441544520544f2073616d706c655f70726f706572746965730a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c786566626662642720414e44204f4c442e56414c554520213d204e45572e56414c554529200a20202020202020204f5220284f4c442e435654455f4944204953204e4f54204e554c4c20414e44204f4c442e435654455f494420213d204e45572e435654455f494429200a20202020202020204f5220284f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c20414e44204f4c442e4d4154455f50524f505f494420213d204e45572e4d4154455f50524f505f4944290a20202020444f20414c534f0a20202020202020494e5345525420494e544f2073616d706c655f70726f706572746965735f686973746f727920280a20202020202020202049442c200a20202020202020202053414d505f49442c0a202020202020202020535450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c282753414d504c455f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e53414d505f49442c200a2020202020202020204f4c442e535450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a20202020202020202020202020200a435245415445204f52205245504c4143452052554c452073616d706c655f70726f706572746965735f64656c6574652041530a202020204f4e2044454c45544520544f2073616d706c655f70726f70657274696573200a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c7865666266626427290a20202020202020204f52204f4c442e435654455f4944204953204e4f54204e554c4c200a20202020202020204f52204f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c0a20202020444f20414c534f0a20202020202020494e5345525420494e544f2073616d706c655f70726f706572746965735f686973746f727920280a20202020202020202049442c200a20202020202020202053414d505f49442c0a202020202020202020535450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c282753414d504c455f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e53414d505f49442c200a2020202020202020204f4c442e535450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a202020202020200a2d2d2044617461205365742050726f70657274696573202d2d0a0a435245415445204f52205245504c4143452052554c4520646174615f7365745f70726f706572746965735f7570646174652041530a202020204f4e2055504441544520544f20646174615f7365745f70726f70657274696573200a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c786566626662642720414e44204f4c442e56414c554520213d204e45572e56414c554529200a20202020202020204f5220284f4c442e435654455f4944204953204e4f54204e554c4c20414e44204f4c442e435654455f494420213d204e45572e435654455f494429200a20202020202020204f5220284f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c20414e44204f4c442e4d4154455f50524f505f494420213d204e45572e4d4154455f50524f505f4944290a20202020444f20414c534f0a20202020202020494e5345525420494e544f20646174615f7365745f70726f706572746965735f686973746f727920280a20202020202020202049442c200a20202020202020202044535f49442c0a20202020202020202044535450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c282753414d504c455f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e44535f49442c200a2020202020202020204f4c442e44535450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a0a435245415445204f52205245504c4143452052554c4520646174615f7365745f70726f706572746965735f64656c6574652041530a202020204f4e2044454c45544520544f20646174615f7365745f70726f70657274696573200a20202020574845524520284f4c442e56414c5545204953204e4f54204e554c4c20414e44206465636f646528737562737472696e67284f4c442e76616c75652066726f6d203120666f722031292c2027657363617065272920213d2045275c5c7865666266626427290a20202020202020204f52204f4c442e435654455f4944204953204e4f54204e554c4c200a20202020202020204f52204f4c442e4d4154455f50524f505f4944204953204e4f54204e554c4c0a20202020444f20414c534f0a20202020202020494e5345525420494e544f20646174615f7365745f70726f706572746965735f686973746f727920280a20202020202020202049442c200a20202020202020202044535f49442c0a20202020202020202044535450545f49442c200a20202020202020202056414c55452c200a202020202020202020564f434142554c4152595f5445524d2c0a2020202020202020204d4154455249414c2c200a202020202020202020504552535f49445f415554484f522c0a20202020202020202056414c49445f46524f4d5f54494d455354414d502c0a20202020202020202056414c49445f554e54494c5f54494d455354414d50200a20202020202020292056414c55455320280a2020202020202020206e65787476616c282753414d504c455f50524f50455254595f49445f53455127292c200a2020202020202020204f4c442e44535f49442c200a2020202020202020204f4c442e44535450545f49442c200a2020202020202020204f4c442e56414c55452c200a2020202020202020202873656c6563742028742e636f6465207c7c2027205b27207c7c20762e636f6465207c7c20275d27292066726f6d20636f6e74726f6c6c65645f766f636162756c6172795f7465726d732061732074206a6f696e20636f6e74726f6c6c65645f766f636162756c61726965732061732076206f6e20742e636f766f5f6964203d20762e696420776865726520742e6964203d204f4c442e435654455f4944292c0a2020202020202020202873656c65637420286d2e636f6465207c7c2027205b27207c7c206d742e636f6465207c7c20275d27292066726f6d206d6174657269616c73206173206d206a6f696e206d6174657269616c5f7479706573206173206d74206f6e206d2e6d6174795f6964203d206d742e6964207768657265206d2e6964203d204f4c442e4d4154455f50524f505f4944292c0a2020202020202020204f4c442e504552535f49445f415554484f522c0a2020202020202020204f4c442e4d4f44494649434154494f4e5f54494d455354414d502c0a20202020202020202063757272656e745f74696d657374616d700a20202020202020293b0a \N 097 source/sql/postgresql/migration/migration-096-097.sql SUCCESS 2012-02-10 13:58:24.493 \\x2d2d204d6967726174696f6e2066726f6d2030393620746f203039370a0a2d2d0a2d2d204164642061206e65772022504f53545f524547495354524154494f4e5f444154415345545f515545554522207461626c65207769746820636f6e7461696e74730a2d2d0a4352454154452053455155454e434520504f53545f524547495354524154494f4e5f444154415345545f51554555455f49445f5345513b0a0a435245415445205441424c4520504f53545f524547495354524154494f4e5f444154415345545f515545554520280a20202020494420544543485f4944204e4f54204e554c4c2c0a2020202044535f494420544543485f4944204e4f54204e554c4c200a293b202020200a202020200a414c544552205441424c4520504f53545f524547495354524154494f4e5f444154415345545f51554555452041444420434f4e53545241494e5420505244515f504b205052494d415259204b4559284944293b0a202020200a414c544552205441424c45204f4e4c5920504f53545f524547495354524154494f4e5f444154415345545f51554555450a2020202041444420434f4e53545241494e5420707264715f64735f666b20464f524549474e204b4559202864735f696429205245464552454e43455320646174615f616c6c286964293b0a0a4752414e542053454c454354204f4e2053455155454e434520504f53545f524547495354524154494f4e5f444154415345545f51554555455f49445f53455120544f2047524f5550204f50454e4249535f524541444f4e4c593b0a4752414e542053454c454354204f4e205441424c4520504f53545f524547495354524154494f4e5f444154415345545f515545554520544f2047524f5550204f50454e4249535f524541444f4e4c593b0a0a \N -098 source/sql/postgresql/migration/migration-097-098.sql SUCCESS 2012-02-14 11:11:05.774 \\x2d2d204d6967726174696f6e2066726f6d2030393720746f203039380a0a414c544552205441424c4520444154415f5345545f52454c4154494f4e53484950535f414c4c2041444420434f4c554d4e2044454c5f494420544543485f49443b0a414c544552205441424c4520444154415f5345545f52454c4154494f4e53484950535f414c4c2041444420434f4e53545241494e5420445352455f44454c5f464b20464f524549474e204b4559202844454c5f494429205245464552454e4345532044454c4554494f4e53284944293b0a43524541544520494e44455820445352455f44454c5f464b5f49204f4e20444154415f5345545f52454c4154494f4e53484950535f414c4c202844454c5f4944293b0a0a55504441544520646174615f7365745f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642046524f4d20646174615f616c6c205748455245204944203d20646174615f69645f706172656e74290a20202057484552452028646174615f69645f706172656e742c20646174615f69645f6368696c642920494e202853454c45435420646174615f69645f706172656e742c20646174615f69645f6368696c640a20202046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e20646174615f616c6c20706172656e74204f4e20646174615f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e20646174615f616c6c206368696c64204f4e20646174615f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203c3d206368696c642e64656c5f696429293b0a0a55504441544520646174615f7365745f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642046524f4d20646174615f616c6c205748455245204944203d20646174615f69645f6368696c64290a20202057484552452028646174615f69645f706172656e742c20646174615f69645f6368696c642920494e202853454c45435420646174615f69645f706172656e742c20646174615f69645f6368696c640a20202046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e20646174615f616c6c20706172656e74204f4e20646174615f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e20646174615f616c6c206368696c64204f4e20646174615f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203e206368696c642e64656c5f696429293b0a20202020200a414c544552205441424c452073616d706c655f72656c6174696f6e73686970735f616c6c2041444420434f4c554d4e2044454c5f494420544543485f49443b0a414c544552205441424c452073616d706c655f72656c6174696f6e73686970735f616c6c2041444420434f4e53545241494e5420736172655f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a43524541544520494e44455820736172655f64656c5f666b5f69204f4e2073616d706c655f72656c6174696f6e73686970735f616c6c202864656c5f6964293b0a0a5550444154452073616d706c655f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642066726f6d2073616d706c65735f616c6c207768657265204944203d2073616d706c655f69645f706172656e74290a2020205748455245202873616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69642920494e202853454c4543542073616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69640a20202046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e2073616d706c65735f616c6c20706172656e74204f4e2073616d706c655f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e2073616d706c65735f616c6c206368696c64204f4e2073616d706c655f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203c3d206368696c642e64656c5f696429293b0a0a5550444154452073616d706c655f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642066726f6d2073616d706c65735f616c6c207768657265204944203d2073616d706c655f69645f6368696c64290a2020205748455245202873616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69642920494e202853454c4543542073616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69640a20202046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e2073616d706c65735f616c6c20706172656e74204f4e2073616d706c655f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e2073616d706c65735f616c6c206368696c64204f4e2073616d706c655f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203e206368696c642e64656c5f696429293b0a20202020200a44524f50205649455720646174615f7365745f72656c6174696f6e73686970733b0a435245415445205649455720646174615f7365745f72656c6174696f6e73686970732041530a20202053454c45435420646174615f69645f706172656e742c20646174615f69645f6368696c642c2064656c5f69640a20202046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c200a20202057484552452064656c5f6964204953204e554c4c3b0a0a435245415445204f52205245504c4143452052554c4520646174615f7365745f72656c6174696f6e73686970735f696e736572742041530a202020204f4e20494e5345525420544f20646174615f7365745f72656c6174696f6e736869707320444f20494e5354454144200a20202020202020494e5345525420494e544f20646174615f7365745f72656c6174696f6e73686970735f616c6c20280a202020202020202020646174615f69645f706172656e742c200a202020202020202020646174615f69645f6368696c64200a20202020202020292056414c55455320280a2020202020202020204e45572e646174615f69645f706172656e742c200a2020202020202020204e45572e646174615f69645f6368696c64200a20202020202020293b0a0a435245415445204f52205245504c4143452052554c4520646174615f7365745f72656c6174696f6e73686970735f7570646174652041530a202020204f4e2055504441544520544f20646174615f7365745f72656c6174696f6e736869707320444f20494e5354454144200a2020202020202055504441544520646174615f7365745f72656c6174696f6e73686970735f616c6c0a20202020202020202020534554200a090909202020202020646174615f69645f706172656e74203d204e45572e646174615f69645f706172656e742c200a090909202020202020646174615f69645f6368696c64203d204e45572e646174615f69645f6368696c642c200a09090920202020202064656c5f6964203d204e45572e64656c5f69640a2020202020202020202057484552452020646174615f69645f706172656e74203d204e45572e646174615f69645f706172656e7420616e6420646174615f69645f6368696c64203d204e45572e646174615f69645f6368696c643b0a202020202020202020200a435245415445204f52205245504c4143452052554c4520646174615f7365745f72656c6174696f6e73686970735f64656c6574652041530a202020204f4e2044454c45544520544f20646174615f7365745f72656c6174696f6e736869707320444f20494e53544541440a2020202020202044454c4554452046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c0a2020202020202020202020202020574845524520646174615f69645f706172656e74203d204f4c442e646174615f69645f706172656e7420616e6420646174615f69645f6368696c64203d204f4c442e646174615f69645f6368696c643b0a0a44524f5020564945572073616d706c655f72656c6174696f6e73686970733b0a43524541544520564945572073616d706c655f72656c6174696f6e73686970732041530a20202053454c45435420732e69642061732069642c2073616d706c655f69645f706172656e742c2072656c6174696f6e736869705f69642c2073616d706c655f69645f6368696c642c2064656c5f69640a20202046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c20730a20202057484552452064656c5f6964204953204e554c4c3b0a0a435245415445204f52205245504c4143452052554c452073616d706c655f72656c6174696f6e73686970735f696e736572742041530a202020204f4e20494e5345525420544f2073616d706c655f72656c6174696f6e736869707320444f20494e5354454144200a20202020202020494e5345525420494e544f2073616d706c655f72656c6174696f6e73686970735f616c6c20280a20202020202020202069642c200a20202020202020202073616d706c655f69645f706172656e742c200a20202020202020202072656c6174696f6e736869705f69642c200a20202020202020202073616d706c655f69645f6368696c640a20202020202020292056414c55455320280a2020202020202020204e45572e69642c200a2020202020202020204e45572e73616d706c655f69645f706172656e742c200a2020202020202020204e45572e72656c6174696f6e736869705f69642c200a2020202020202020204e45572e73616d706c655f69645f6368696c640a20202020202020293b0a202020202020200a435245415445204f52205245504c4143452052554c452073616d706c655f72656c6174696f6e73686970735f7570646174652041530a202020204f4e2055504441544520544f2073616d706c655f72656c6174696f6e736869707320444f20494e5354454144200a202020202020205550444154452073616d706c655f72656c6174696f6e73686970735f616c6c0a20202020202020202020534554200a09090920202020202073616d706c655f69645f706172656e74203d204e45572e73616d706c655f69645f706172656e742c200a09090920202020202072656c6174696f6e736869705f6964203d204e45572e72656c6174696f6e736869705f69642c200a09090920202020202073616d706c655f69645f6368696c64203d204e45572e73616d706c655f69645f6368696c642c0a09090920202020202064656c5f6964203d204e45572e64656c5f69640a202020202020202020205748455245206964203d204e45572e69643b0a20202020200a435245415445204f52205245504c4143452052554c452073616d706c655f72656c6174696f6e73686970735f64656c6574652041530a202020204f4e2044454c45544520544f2073616d706c655f72656c6174696f6e736869707320444f20494e53544541440a2020202020202044454c4554452046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c0a20202020202020202020202020205748455245206964203d204f4c442e69643b0a \N +098 source/sql/postgresql/migration/migration-097-098.sql SUCCESS 2012-02-15 16:53:06.27 \\x2d2d204d6967726174696f6e2066726f6d2030393720746f203039380a0a414c544552205441424c4520444154415f5345545f52454c4154494f4e53484950535f414c4c2041444420434f4c554d4e2044454c5f494420544543485f49443b0a414c544552205441424c4520444154415f5345545f52454c4154494f4e53484950535f414c4c2041444420434f4e53545241494e5420445352455f44454c5f464b20464f524549474e204b4559202844454c5f494429205245464552454e4345532044454c4554494f4e53284944293b0a43524541544520494e44455820445352455f44454c5f464b5f49204f4e20444154415f5345545f52454c4154494f4e53484950535f414c4c202844454c5f4944293b0a0a55504441544520646174615f7365745f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642046524f4d20646174615f616c6c205748455245204944203d20646174615f69645f706172656e74290a20202057484552452028646174615f69645f706172656e742c20646174615f69645f6368696c642920494e202853454c45435420646174615f69645f706172656e742c20646174615f69645f6368696c640a20202046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e20646174615f616c6c20706172656e74204f4e20646174615f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e20646174615f616c6c206368696c64204f4e20646174615f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203c3d206368696c642e64656c5f696429293b0a0a55504441544520646174615f7365745f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642046524f4d20646174615f616c6c205748455245204944203d20646174615f69645f6368696c64290a20202057484552452028646174615f69645f706172656e742c20646174615f69645f6368696c642920494e202853454c45435420646174615f69645f706172656e742c20646174615f69645f6368696c640a20202046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e20646174615f616c6c20706172656e74204f4e20646174615f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e20646174615f616c6c206368696c64204f4e20646174615f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203e206368696c642e64656c5f696429293b0a20202020200a414c544552205441424c452073616d706c655f72656c6174696f6e73686970735f616c6c2041444420434f4c554d4e2044454c5f494420544543485f49443b0a414c544552205441424c452073616d706c655f72656c6174696f6e73686970735f616c6c2041444420434f4e53545241494e5420736172655f64656c5f666b20464f524549474e204b4559202864656c5f696429205245464552454e4345532064656c6574696f6e73286964293b0a43524541544520494e44455820736172655f64656c5f666b5f69204f4e2073616d706c655f72656c6174696f6e73686970735f616c6c202864656c5f6964293b0a0a5550444154452073616d706c655f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642066726f6d2073616d706c65735f616c6c207768657265204944203d2073616d706c655f69645f706172656e74290a2020205748455245202873616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69642920494e202853454c4543542073616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69640a20202046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e2073616d706c65735f616c6c20706172656e74204f4e2073616d706c655f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e2073616d706c65735f616c6c206368696c64204f4e2073616d706c655f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203c3d206368696c642e64656c5f696429293b0a0a5550444154452073616d706c655f72656c6174696f6e73686970735f616c6c207365742064656c5f6964203d202853454c4543542064656c5f69642066726f6d2073616d706c65735f616c6c207768657265204944203d2073616d706c655f69645f6368696c64290a2020205748455245202873616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69642920494e202853454c4543542073616d706c655f69645f706172656e742c2073616d706c655f69645f6368696c642c2072656c6174696f6e736869705f69640a20202046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c200a20202020204a4f494e2073616d706c65735f616c6c20706172656e74204f4e2073616d706c655f69645f706172656e74203d20706172656e742e696420200a20202020204a4f494e2073616d706c65735f616c6c206368696c64204f4e2073616d706c655f69645f6368696c64203d206368696c642e6964200a20202057484552452028706172656e742e64656c5f6964204953204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c290a20202020204f522028706172656e742e64656c5f6964204953204e4f54204e554c4c20616e64206368696c642e64656c5f6964206973204e4f54204e554c4c20414e4420706172656e742e64656c5f6964203e206368696c642e64656c5f696429293b0a20202020200a44524f50205649455720646174615f7365745f72656c6174696f6e73686970733b0a435245415445205649455720646174615f7365745f72656c6174696f6e73686970732041530a20202053454c45435420646174615f69645f706172656e742c20646174615f69645f6368696c642c2064656c5f69640a20202046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c200a20202057484552452064656c5f6964204953204e554c4c3b0a0a435245415445204f52205245504c4143452052554c4520646174615f7365745f72656c6174696f6e73686970735f696e736572742041530a202020204f4e20494e5345525420544f20646174615f7365745f72656c6174696f6e736869707320444f20494e5354454144200a20202020202020494e5345525420494e544f20646174615f7365745f72656c6174696f6e73686970735f616c6c20280a202020202020202020646174615f69645f706172656e742c200a202020202020202020646174615f69645f6368696c64200a20202020202020292056414c55455320280a2020202020202020204e45572e646174615f69645f706172656e742c200a2020202020202020204e45572e646174615f69645f6368696c64200a20202020202020293b0a0a435245415445204f52205245504c4143452052554c4520646174615f7365745f72656c6174696f6e73686970735f7570646174652041530a202020204f4e2055504441544520544f20646174615f7365745f72656c6174696f6e736869707320444f20494e5354454144200a2020202020202055504441544520646174615f7365745f72656c6174696f6e73686970735f616c6c0a20202020202020202020534554200a090909202020202020646174615f69645f706172656e74203d204e45572e646174615f69645f706172656e742c200a090909202020202020646174615f69645f6368696c64203d204e45572e646174615f69645f6368696c642c200a09090920202020202064656c5f6964203d204e45572e64656c5f69640a2020202020202020202057484552452020646174615f69645f706172656e74203d204e45572e646174615f69645f706172656e7420616e6420646174615f69645f6368696c64203d204e45572e646174615f69645f6368696c643b0a202020202020202020200a435245415445204f52205245504c4143452052554c4520646174615f7365745f72656c6174696f6e73686970735f64656c6574652041530a202020204f4e2044454c45544520544f20646174615f7365745f72656c6174696f6e736869707320444f20494e53544541440a2020202020202044454c4554452046524f4d20646174615f7365745f72656c6174696f6e73686970735f616c6c0a2020202020202020202020202020574845524520646174615f69645f706172656e74203d204f4c442e646174615f69645f706172656e7420616e6420646174615f69645f6368696c64203d204f4c442e646174615f69645f6368696c643b0a0a44524f5020564945572073616d706c655f72656c6174696f6e73686970733b0a43524541544520564945572073616d706c655f72656c6174696f6e73686970732041530a20202053454c45435420732e69642061732069642c2073616d706c655f69645f706172656e742c2072656c6174696f6e736869705f69642c2073616d706c655f69645f6368696c642c2064656c5f69640a20202046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c20730a20202057484552452064656c5f6964204953204e554c4c3b0a0a435245415445204f52205245504c4143452052554c452073616d706c655f72656c6174696f6e73686970735f696e736572742041530a202020204f4e20494e5345525420544f2073616d706c655f72656c6174696f6e736869707320444f20494e5354454144200a20202020202020494e5345525420494e544f2073616d706c655f72656c6174696f6e73686970735f616c6c20280a20202020202020202069642c200a20202020202020202073616d706c655f69645f706172656e742c200a20202020202020202072656c6174696f6e736869705f69642c200a20202020202020202073616d706c655f69645f6368696c640a20202020202020292056414c55455320280a2020202020202020204e45572e69642c200a2020202020202020204e45572e73616d706c655f69645f706172656e742c200a2020202020202020204e45572e72656c6174696f6e736869705f69642c200a2020202020202020204e45572e73616d706c655f69645f6368696c640a20202020202020293b0a202020202020200a435245415445204f52205245504c4143452052554c452073616d706c655f72656c6174696f6e73686970735f7570646174652041530a202020204f4e2055504441544520544f2073616d706c655f72656c6174696f6e736869707320444f20494e5354454144200a202020202020205550444154452073616d706c655f72656c6174696f6e73686970735f616c6c0a20202020202020202020534554200a09090920202020202073616d706c655f69645f706172656e74203d204e45572e73616d706c655f69645f706172656e742c200a09090920202020202072656c6174696f6e736869705f6964203d204e45572e72656c6174696f6e736869705f69642c200a09090920202020202073616d706c655f69645f6368696c64203d204e45572e73616d706c655f69645f6368696c642c0a09090920202020202064656c5f6964203d204e45572e64656c5f69640a202020202020202020205748455245206964203d204e45572e69643b0a20202020200a435245415445204f52205245504c4143452052554c452073616d706c655f72656c6174696f6e73686970735f64656c6574652041530a202020204f4e2044454c45544520544f2073616d706c655f72656c6174696f6e736869707320444f20494e53544541440a2020202020202044454c4554452046524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c0a20202020202020202020202020205748455245206964203d204f4c442e69643b0a0a435245415445204f52205245504c4143452046554e4354494f4e2070726573657276655f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f646174615f7365745f72656c6174696f6e736869707328292052455455524e5320747269676765722041532024240a4445434c4152450a202064656c69642020544543485f49443b0a424547494e0a09494620284e45572e64656c5f6964204953204e4f54204e554c4c204f52204f4c442e64656c5f6964204953204e554c4c29205448454e0a090952455455524e204e45573b0a09454e442049463b0a0953454c4543542064656c5f696420494e544f2064656c69640a090946524f4d20444154415f414c4c207768657265206964203d204e45572e646174615f69645f706172656e743b0a094946202864656c6964204953204e4f54204e554c4c29205448454e0a09094e45572e64656c5f6964203d2064656c69643b0a09454e442049463b0a0953454c4543542064656c5f696420494e544f2064656c69640a090946524f4d20444154415f414c4c207768657265206964203d204e45572e646174615f69645f6368696c643b0a094946202864656c6964204953204e4f54204e554c4c29205448454e0a09094e45572e64656c5f6964203d2064656c69643b0a09454e442049463b0a0952455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a0a43524541544520545249474745522070726573657276655f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f646174615f7365745f72656c6174696f6e7368697073200a20204245464f524520555044415445204f4e20646174615f7365745f72656c6174696f6e73686970735f616c6c0a09464f52204541434820524f57200a09455845435554452050524f4345445552452070726573657276655f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f646174615f7365745f72656c6174696f6e736869707328293b0a0a435245415445204f52205245504c4143452046554e4354494f4e2070726573657276655f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f73616d706c655f72656c6174696f6e736869707328292052455455524e5320747269676765722041532024240a4445434c4152450a202064656c69642020544543485f49443b0a424547494e0a09494620284e45572e64656c5f6964204953204e4f54204e554c4c204f52204f4c442e64656c5f6964204953204e554c4c29205448454e0a090952455455524e204e45573b0a09454e442049463b0a0953454c4543542064656c5f696420494e544f2064656c69640a090946524f4d2053414d504c45535f414c4c207768657265206964203d204e45572e73616d706c655f69645f706172656e743b0a094946202864656c6964204953204e4f54204e554c4c29205448454e0a09094e45572e64656c5f6964203d2064656c69643b0a09454e442049463b0a0953454c4543542064656c5f696420494e544f2064656c69640a090946524f4d2053414d504c45535f414c4c207768657265206964203d204e45572e73616d706c655f69645f6368696c643b0a094946202864656c6964204953204e4f54204e554c4c29205448454e0a09094e45572e64656c5f6964203d2064656c69643b0a09454e442049463b0a0952455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a0a43524541544520545249474745522070726573657276655f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f73616d706c655f72656c6174696f6e7368697073200a20204245464f524520555044415445204f4e2073616d706c655f72656c6174696f6e73686970735f616c6c0a09464f52204541434820524f57200a09455845435554452050524f4345445552452070726573657276655f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f73616d706c655f72656c6174696f6e736869707328293b0a090a0a435245415445204f52205245504c4143452046554e4354494f4e20636865636b5f64656c6574696f6e5f636f6e73697374656e63795f6f6e5f73616d706c655f64656c6574696f6e28292052455455524e5320747269676765722041532024240a4445434c4152450a2020636f756e7465722020494e54454745523b0a424547494e0a09494620284f4c442e64656c5f6964204953204e4f54204e554c4c204f52204e45572e64656c5f6964204953204e554c4c29205448454e0a090952455455524e204e45573b0a09454e442049463b0a0a20202d2d20616c6c206469726563746c7920636f6e6e656374656420646174612073657473206e65656420746f2062652064656c657465640a20202d2d20636865636b2064617461736574730a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a09202046524f4d20646174610a092020574845524520646174612e73616d705f6964203d204e45572e696420414e4420646174612e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a092020524149534520455843455054494f4e202753616d706c652028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f66206974732064617461207365747320776173206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a20202d2d20616c6c20636f6d706f6e656e7473206e65656420746f2062652064656c657465640a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a09202046524f4d2073616d706c6573200a09202057484552452073616d706c65732e73616d705f69645f706172745f6f66203d204e45572e696420414e442073616d706c65732e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a092020524149534520455843455054494f4e202753616d706c652028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f662069747320636f6d706f6e656e742073616d706c657320776173206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a092d2d20616c6c206368696c6472656e206e65656420746f2062652064656c657465640a0953454c45435420636f756e74282a2920494e544f20636f756e746572200a090946524f4d2073616d706c655f72656c6174696f6e73686970735f616c6c2073722c2073616d706c65732073630a090957484552452073616d706c655f69645f706172656e74203d204e45572e696420414e442073632e6964203d2073722e73616d706c655f69645f6368696c6420414e442073632e64656c5f6964204953204e554c4c3b0a0949462028636f756e746572203e203029205448454e0a0909524149534520455843455054494f4e202753616d706c652028436f64653a2025292064656c6574696f6e206661696c65642062656361757365206174206c65617374206f6e65206f6620697473206368696c642073616d706c657320776173206e6f742064656c657465642e272c204e45572e636f64653b0a09454e442049463b0a0952455455524e204e45573b0a454e443b0a2424204c414e47554147452027706c706773716c273b0a \N diff --git a/openbis/sourceTest/sql/postgresql/098/finish-098.sql b/openbis/sourceTest/sql/postgresql/098/finish-098.sql index a51d0773e984cfe76776de2bf8e12b7f65c7e766..c965544b3bd708dcd12a2d0c3a3a07d602915345 100644 --- a/openbis/sourceTest/sql/postgresql/098/finish-098.sql +++ b/openbis/sourceTest/sql/postgresql/098/finish-098.sql @@ -333,6 +333,8 @@ CREATE TRIGGER data_set_property_with_material_data_type_check BEFORE INSERT OR 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 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 preserve_deletion_consistency_on_data_set_relationships BEFORE UPDATE ON data_set_relationships_all FOR EACH ROW EXECUTE PROCEDURE preserve_deletion_consistency_on_data_set_relationships(); +CREATE TRIGGER preserve_deletion_consistency_on_sample_relationships BEFORE UPDATE ON sample_relationships_all FOR EACH ROW EXECUTE PROCEDURE preserve_deletion_consistency_on_sample_relationships(); CREATE TRIGGER sample_code_uniqueness_check BEFORE INSERT OR UPDATE ON samples_all 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(); CREATE TRIGGER sample_subcode_uniqueness_check BEFORE INSERT OR UPDATE ON samples_all FOR EACH ROW EXECUTE PROCEDURE sample_subcode_uniqueness_check(); diff --git a/openbis/sourceTest/sql/postgresql/098/schema-098.sql b/openbis/sourceTest/sql/postgresql/098/schema-098.sql index 0eb7c2bc996136225ee0a092816b1c0436f654f1..a65bb650bf050467af9ca08f5e6d82cbbec5455c 100644 --- a/openbis/sourceTest/sql/postgresql/098/schema-098.sql +++ b/openbis/sourceTest/sql/postgresql/098/schema-098.sql @@ -148,7 +148,7 @@ BEGIN END IF; -- all children need to be deleted SELECT count(*) INTO counter - FROM sample_relationships sr, samples sc + FROM sample_relationships_all 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 was not deleted.', NEW.code; @@ -286,6 +286,50 @@ BEGIN RETURN NEW; END; $$; +CREATE FUNCTION preserve_deletion_consistency_on_data_set_relationships() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + delid TECH_ID; +BEGIN + IF (NEW.del_id IS NOT NULL OR OLD.del_id IS NULL) THEN + RETURN NEW; + END IF; + SELECT del_id INTO delid + FROM DATA_ALL where id = NEW.data_id_parent; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + SELECT del_id INTO delid + FROM DATA_ALL where id = NEW.data_id_child; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + RETURN NEW; +END; +$$; +CREATE FUNCTION preserve_deletion_consistency_on_sample_relationships() RETURNS trigger + LANGUAGE plpgsql + AS $$ +DECLARE + delid TECH_ID; +BEGIN + IF (NEW.del_id IS NOT NULL OR OLD.del_id IS NULL) THEN + RETURN NEW; + END IF; + SELECT del_id INTO delid + FROM SAMPLES_ALL where id = NEW.sample_id_parent; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + SELECT del_id INTO delid + FROM SAMPLES_ALL where id = NEW.sample_id_child; + IF (delid IS NOT NULL) THEN + NEW.del_id = delid; + END IF; + RETURN NEW; +END; +$$; CREATE FUNCTION rename_sequence(old_name character varying, new_name character varying) RETURNS integer LANGUAGE plpgsql AS $$