From: miker Date: Wed, 9 Jan 2008 21:47:30 +0000 (+0000) Subject: adding cleanup trigger and cascading delete X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d69e7612c61ee6928dde4b76ff39f7f7c118f0d8;p=Evergreen.git adding cleanup trigger and cascading delete git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@8376 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/sql/Pg/200.schema.acq.sql b/Open-ILS/src/sql/Pg/200.schema.acq.sql index bdae085730..c8ef47dd0d 100644 --- a/Open-ILS/src/sql/Pg/200.schema.acq.sql +++ b/Open-ILS/src/sql/Pg/200.schema.acq.sql @@ -82,7 +82,7 @@ CREATE TABLE acq.picklist ( CREATE TABLE acq.picklist_entry ( id BIGSERIAL PRIMARY KEY, - picklist INT NOT NULL REFERENCES acq.picklist (id), + picklist INT NOT NULL REFERENCES acq.picklist (id) ON DELETE CASCADE, provider INT REFERENCES acq.provider (id), create_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), edit_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), @@ -93,7 +93,7 @@ CREATE TABLE acq.picklist_entry ( CREATE TABLE acq.picklist_entry_attr ( id BIGSERIAL PRIMARY KEY, - picklist_entry BIGINT NOT NULL REFERENCES acq.picklist_entry (id), + picklist_entry BIGINT NOT NULL REFERENCES acq.picklist_entry (id) ON DELETE CASCADE, attr_type TEXT NOT NULL, attr_name TEXT NOT NULL, attr_value TEXT NOT NULL @@ -146,7 +146,7 @@ INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUE INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('pagination','Pagination','//*[@tag="300"]/*[@code="a"][1]'); INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('isbn','ISBN','//*[@tag="020"]/*[@code="a"]'); INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('issn','ISSN','//*[@tag="022"]/*[@code="a"]'); -INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('price','Price','//*[@tag="020" or @tag="022"]/*[@code="a"][1]'); +INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('price','Price','//*[@tag="020" or @tag="022"]/*[@code="c"][1]'); INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('identifier','Identifier','//*[@tag="001"]'); INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('publisher','Publisher','//*[@tag="260"]/*[@code="b"][1]'); INSERT INTO acq.picklist_marc_attr_definition ( code, description, xpath ) VALUES ('pubdate','Publication Date','//*[@tag="260"]/*[@code="c"][1]'); @@ -189,6 +189,21 @@ BEGIN END; $$ LANGUAGE PLPGSQL; +CREATE OR REPLACE FUNCTION public.cleanup_acq_marc ( ) RETURNS TRIGGER AS $$ +BEGIN + DELETE FROM acq.picklist_entry_attr WHERE picklist_entry = OLD.id; + IF TG_OP = 'UPDATE' THEN + RETURN NEW; + ELSE + RETURN OLD; + END IF; +END; +$$ LANGUAGE PLPGSQL; + +CREATE TRIGGER cleanup_picklist_entry_trigger + BEFORE UPDATE OR DELETE ON acq.picklist_entry + FOR EACH ROW EXECUTE PROCEDURE public.cleanup_acq_marc(); + CREATE TRIGGER ingest_picklist_entry_trigger AFTER INSERT OR UPDATE ON acq.picklist_entry FOR EACH ROW EXECUTE PROCEDURE public.ingest_acq_marc();