a quality of life function to make it easier to modify the fixed fields in a biblio...
[migration-tools.git] / sql / base / 21-fixed-fields.sql
index 6b42ce1..b771c05 100644 (file)
@@ -64,7 +64,7 @@ BEGIN
         );
     END IF;
     IF rmarc IS NULL THEN
-        SELECT marc INTO rmarc FROM biblio_record_entry_legacy WHERE id = rid;
+        SELECT marc INTO rmarc FROM m_biblio_record_entry_legacy WHERE id = rid;
     END IF;
 
     FOR attr_def IN SELECT * FROM config.record_attr_definition WHERE NOT composite AND name = ANY( attr_list ) ORDER BY format LOOP
@@ -249,7 +249,7 @@ DECLARE
     icon    TEXT[];
     vlist   INTEGER[];
 BEGIN
-    SELECT reingest_staged_record_attributes(rid) INTO vlist;
+    SELECT migration_tools.reingest_staged_record_attributes(rid) INTO vlist;
 
     RETURN QUERY SELECT ctype, code, value FROM config.coded_value_map WHERE id IN (SELECT UNNEST(vlist));
 END;
@@ -260,12 +260,12 @@ DECLARE
        search  TEXT[];
        vlist   INTEGER[];
 BEGIN
-       SELECT reingest_staged_record_attributes(rid) INTO vlist;
+       SELECT migration_tools.reingest_staged_record_attributes(rid) INTO vlist;
 
        SELECT ARRAY_AGG(code) FROM config.coded_value_map WHERE id IN (SELECT UNNEST(vlist)) 
                AND ctype = 'search_format' INTO search;
 
-       UPDATE biblio_record_entry_legacy SET x_search_format = search  WHERE id = rid;
+       UPDATE m_biblio_record_entry_legacy SET x_search_format = search  WHERE id = rid;
 END;
 $func$ LANGUAGE PLPGSQL;
 
@@ -274,7 +274,7 @@ DECLARE
     search  TEXT[];
     vlist   INTEGER[];
 BEGIN
-    SELECT reingest_staged_record_attributes(rid) INTO vlist;
+    SELECT migration_tools.reingest_staged_record_attributes(rid) INTO vlist;
 
     SELECT ARRAY_AGG(code) FROM config.coded_value_map WHERE id IN (SELECT UNNEST(vlist))
         AND ctype = 'search_format' INTO search;
@@ -289,12 +289,12 @@ DECLARE
     search  TEXT[];
     vlist   INTEGER[];
 BEGIN
-    SELECT reingest_staged_record_attributes(rid) INTO vlist;
+    SELECT migration_tools.reingest_staged_record_attributes(rid) INTO vlist;
 
     SELECT ARRAY_AGG(code) FROM config.coded_value_map WHERE id IN (SELECT UNNEST(vlist))
         AND ctype = 'search_format' INTO search;
 
-    UPDATE biblio_record_entry_legacy SET x_after_search_format = search WHERE id = rid;
+    UPDATE m_biblio_record_entry_legacy SET x_after_search_format = search WHERE id = rid;
 END;
 $func$ LANGUAGE PLPGSQL;
 
@@ -305,89 +305,18 @@ DECLARE
     y   TEXT;
     w   TEXT[];
 BEGIN
-       SELECT circ_mods FROM biblio_record_entry_legacy WHERE id = rid INTO cms;
+       SELECT circ_mods FROM m_biblio_record_entry_legacy WHERE id = rid INTO cms;
     IF cms IS NOT NULL THEN
        FOREACH y IN ARRAY cms LOOP
                w := w || (SELECT sf1 FROM circ_mod_to_sf_map WHERE circ_mod = y);
             w := w || (SELECT sf2 FROM circ_mod_to_sf_map WHERE circ_mod = y);
             w := w || (SELECT sf3 FROM circ_mod_to_sf_map WHERE circ_mod = y);
         END LOOP;
-       UPDATE biblio_record_entry_legacy SET expected_sfs = w WHERE id = rid;
+       UPDATE m_biblio_record_entry_legacy SET expected_sfs = w WHERE id = rid;
     END IF;
 END;
 $func$ LANGUAGE PLPGSQL;
 
-DROP AGGREGATE IF EXISTS anyarray_agg(anyarray);
-CREATE AGGREGATE anyarray_agg(anyarray) (
-        SFUNC = anyarray_agg_statefunc,
-        STYPE = anyarray
-);
-COMMENT ON AGGREGATE anyarray_agg(anyarray) IS
-'Concatenates arrays into a single array when aggregating.';
-
-DROP FUNCTION IF EXISTS migration_tools.anyarray_agg_statefunc(anyarray, anyarray);
-CREATE FUNCTION anyarray_agg_statefunc(state anyarray, value anyarray)
-        RETURNS anyarray AS
-$BODY$
-        SELECT array_cat($1, $2)
-$BODY$
-        LANGUAGE sql IMMUTABLE;
-COMMENT ON FUNCTION anyarray_agg_statefunc(anyarray, anyarray) IS
-'Used internally by aggregate anyarray_agg(anyarray).';
-
-DROP FUNCTION IF EXISTS migration_tools.anyarray_sort(anyarray);
-CREATE OR REPLACE FUNCTION migration_tools.anyarray_sort(with_array anyarray)
-    RETURNS anyarray AS
-$BODY$
-    DECLARE
-        return_array with_array%TYPE := '{}';
-    BEGIN
-        SELECT ARRAY_AGG(sorted_vals.val) AS array_value
-        FROM
-            (   SELECT UNNEST(with_array) AS val
-                ORDER BY val
-            ) AS sorted_vals INTO return_array;
-        RETURN return_array;
-    END;
-$BODY$ LANGUAGE plpgsql;
-
-DROP FUNCTION IF EXISTS migration_tools.anyarray_uniq(anyarray);
-CREATE OR REPLACE FUNCTION migration_tools.anyarray_uniq(with_array anyarray)
-    RETURNS anyarray AS
-$BODY$
-    DECLARE
-        -- The variable used to track iteration over "with_array".
-        loop_offset integer;
-
-        -- The array to be returned by this function.
-        return_array with_array%TYPE := '{}';
-    BEGIN
-        IF with_array IS NULL THEN
-            return NULL;
-        END IF;
-
-        IF with_array = '{}' THEN
-            return return_array;
-        END IF;
-
-        -- Iterate over each element in "concat_array".
-        FOR loop_offset IN ARRAY_LOWER(with_array, 1)..ARRAY_UPPER(with_array, 1) LOOP
-            IF with_array[loop_offset] IS NULL THEN
-                IF NOT EXISTS
-                    ( SELECT 1 FROM UNNEST(return_array) AS s(a)
-                    WHERE a IS NULL )
-                THEN return_array = ARRAY_APPEND(return_array, with_array[loop_offset]);
-                END IF;
-            -- When an array contains a NULL value, ANY() returns NULL instead of FALSE...
-            ELSEIF NOT(with_array[loop_offset] = ANY(return_array)) OR NOT(NULL IS DISTINCT FROM (with_array[loop_offset] = ANY(return_array))) THEN
-                return_array = ARRAY_APPEND(return_array, with_array[loop_offset]);
-            END IF;
-        END LOOP;
-
-    RETURN return_array;
- END;
-$BODY$ LANGUAGE plpgsql;
-
 DROP FUNCTION IF EXISTS migration_tools.modify_staged_fixed_fields (BIGINT,TEXT);
 CREATE OR REPLACE FUNCTION migration_tools.modify_staged_fixed_fields (bib_id BIGINT, xcode TEXT)
  RETURNS BOOLEAN
@@ -418,8 +347,8 @@ BEGIN
        ELSE
                ysrform_exclude := '';
        END IF;
-    SELECT modify_fixed_fields(marc,xcode,xitype,xiform,xphy,xphyv,xphyp,xbiblevel,yiform_exclude,ysrform_exclude) FROM biblio_record_entry_legacy WHERE id = bib_id INTO r;
-    UPDATE biblio_record_entry_legacy SET marc = r WHERE id = bib_id;
+    SELECT migration_tools.modify_fixed_fields(marc,xcode,xitype,xiform,xphy,xphyv,xphyp,xbiblevel,yiform_exclude,ysrform_exclude) FROM m_biblio_record_entry_legacy WHERE id = bib_id INTO r;
+    UPDATE m_biblio_record_entry_legacy SET marc = r WHERE id = bib_id;
     RETURN TRUE;
 END;
 $function$;
@@ -544,3 +473,38 @@ my $zzs_str;
 return $marc->as_xml_record;
 $function$;
 
+DROP FUNCTION IF EXISTS migration_tools.modify_biblio_fixed_fields (BIGINT,TEXT);
+CREATE OR REPLACE FUNCTION migration_tools.modify_biblio_fixed_fields (bib_id BIGINT, xcode TEXT)
+ RETURNS BOOLEAN
+ LANGUAGE plpgsql
+AS $function$
+DECLARE
+    r           TEXT;
+    xitype      CHAR(1);
+    xiform      CHAR(1);
+    xphy        CHAR(1);
+    xphyv       CHAR(1);
+    xphyp       SMALLINT;
+    xbiblevel   CHAR(1);
+    xiform_exclude      CHAR(1)[];
+    xsrform_exclude     CHAR(1)[];
+    yiform_exclude      TEXT;
+    ysrform_exclude     TEXT;
+BEGIN
+    SELECT itype, iform, phy, phyv, phyp, biblevel, iform_exclude, srform_exclude FROM migration_tools.search_format_map WHERE code = xcode
+        INTO xitype, xiform, xphy, xphyv, xphyp, xbiblevel, xiform_exclude, xsrform_exclude;
+    IF xiform_exclude IS NOT NULL THEN
+        yiform_exclude := ARRAY_TO_STRING(xiform_exclude,',');
+    ELSE
+        yiform_exclude := '';
+    END IF;
+    IF xsrform_exclude IS NOT NULL THEN
+        ysrform_exclude := ARRAY_TO_STRING(ysrform_exclude,',');
+    ELSE
+        ysrform_exclude := '';
+    END IF;
+    SELECT migration_tools.modify_fixed_fields(marc,xcode,xitype,xiform,xphy,xphyv,xphyp,xbiblevel,yiform_exclude,ysrform_exclude) FROM biblio.record_entry WHERE id = bib_id INTO r;
+    UPDATE biblio.record_entry SET marc = r WHERE id = bib_id;
+    RETURN TRUE;
+END;
+$function$;