adjust auto-import to deal with new attr layout
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 23 Jul 2008 16:17:35 +0000 (16:17 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 23 Jul 2008 16:17:35 +0000 (16:17 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/branches/acq-experiment@10095 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/sql/Pg/200.schema.acq.sql

index c14f851..722da72 100644 (file)
@@ -255,20 +255,32 @@ Suggested vendor fields:
 
 CREATE OR REPLACE FUNCTION public.ingest_acq_marc ( ) RETURNS TRIGGER AS $$
 DECLARE
-       value   TEXT;
-       atype   TEXT;
-       prov    INT;
-       adef    RECORD;
+       value           TEXT;
+       atype           TEXT;
+       prov            INT;
+       adef            RECORD;
+       xpath_string    TEXT;
 BEGIN
        FOR adef IN SELECT *,tableoid FROM acq.lineitem_attr_definition LOOP
 
                SELECT relname::TEXT INTO atype FROM pg_class WHERE oid = adef.tableoid;
-               IF (atype = 'lineitem_provider_attr_definition') THEN
-                       SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
-                       CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider;
-               ELSIF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN
+
+               IF (atype NOT IN ('lineitem_usr_attr_definition','lineitem_local_attr_definition')) THEN
+                       IF (atype = 'lineitem_provider_attr_definition') THEN
+                               SELECT provider INTO prov FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
+                               CONTINUE WHEN NEW.provider IS NULL OR prov <> NEW.provider;
+                       END IF;
                        
-                       SELECT extract_acq_marc_field(id, adef.xpath, adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+                       IF (atype = 'lineitem_provider_attr_definition') THEN
+                               SELECT xpath INTO xpath_string FROM acq.lineitem_provider_attr_definition WHERE id = adef.id;
+                       ELSIF (atype = 'lineitem_marc_attr_definition') THEN
+                               SELECT xpath INTO xpath_string FROM acq.lineitem_marc_attr_definition WHERE id = adef.id;
+                       ELSIF (atype = 'lineitem_generated_attr_definition') THEN
+                               SELECT xpath INTO xpath_string FROM acq.lineitem_generated_attr_definition WHERE id = adef.id;
+                       END IF;
+
+                       SELECT extract_acq_marc_field(id, xpath_string, adef.remove) INTO value FROM acq.lineitem WHERE id = NEW.id;
+
                        IF (value IS NOT NULL AND value <> '') THEN
                                INSERT INTO acq.lineitem_attr (lineitem, attr_type, attr_name, attr_value) VALUES (NEW.id, atype, adef.code, value);
                        END IF;
@@ -284,10 +296,11 @@ $$ LANGUAGE PLPGSQL;
 CREATE OR REPLACE FUNCTION public.cleanup_acq_marc ( ) RETURNS TRIGGER AS $$
 BEGIN
        IF TG_OP = 'UPDATE' THEN
-           DELETE FROM acq.lineitem_attr WHERE lineitem = OLD.id AND attr_type IN ('lineitem_provider_attr_definition', 'lineitem_marc_attr_definition');
+               DELETE FROM acq.lineitem_attr
+                       WHERE lineitem = OLD.id AND attr_type IN ('lineitem_provider_attr_definition', 'lineitem_marc_attr_definition','lineitem_generated_attr_definition');
                RETURN NEW;
        ELSE
-           DELETE FROM acq.lineitem_attr WHERE lineitem = OLD.id;
+               DELETE FROM acq.lineitem_attr WHERE lineitem = OLD.id;
                RETURN OLD;
        END IF;
 END;