INSERT INTO config.internal_flag (name) VALUES ('ingest.assume_inserts_only');
INSERT INTO config.internal_flag (name) VALUES ('serial.rematerialize_on_same_holding_code');
+CREATE OR REPLACE FUNCTION evergreen.override_internal_flag_status(flag TEXT, enabled BOOLEAN) RETURNS VOID AS $$
+ my ($flag, $enabled) = @_;
+ $_SHARED{"internal_flag_$flag"} = $enabled;
+$$ LANGUAGE PLPERLU;
+COMMENT ON FUNCTION evergreen.override_internal_flag_status(TEXT, BOOLEAN) IS $$
+Set a per-session override of the enabled column of the specified config.internal_flag row.
+$$;
+
+CREATE OR REPLACE FUNCTION evergreen.clear_internal_flag_override(flag TEXT) RETURNS VOID AS $$
+ my ($flag) = @_;
+ delete $_SHARED{"internal_flag_$flag"};
+$$ LANGUAGE PLPERLU;
+COMMENT ON FUNCTION evergreen.clear_internal_flag_override(TEXT) IS $$
+Clear the per-session override of the enabled value of the specified internal flag.
+$$;
+
+CREATE OR REPLACE FUNCTION evergreen.internal_flag_enabled(flag TEXT) RETURNS BOOLEAN AS $$
+ my $flag = shift;
+ return $_SHARED{"internal_flag_$flag"} if exists $_SHARED{"internal_flag_$flag"};
+ my $rv = spi_exec_query("SELECT enabled FROM config.internal_flag WHERE name = '$flag'");
+ if ($rv->{processed} && $rv->{rows}[0]->{enabled} eq 't') {
+ return 1;
+ } else {
+ return 0;
+ }
+$$ LANGUAGE PLPERLU STABLE;
+COMMENT ON FUNCTION evergreen.internal_flag_enabled(TEXT) IS $$
+Returns true if the specified internal flag exists and is set.
+$$;
+
CREATE TABLE config.global_flag (
label TEXT NOT NULL
) INHERITS (config.internal_flag);
moved_objects := moved_objects + 1;
END LOOP;
- -- 2. Grab the current value of reingest on same MARC flag
- SELECT enabled INTO ingest_same
- FROM config.internal_flag
- WHERE name = 'ingest.reingest.force_on_same_marc'
- ;
-
- -- 3. Temporarily set reingest on same to TRUE
- UPDATE config.internal_flag
- SET enabled = TRUE
- WHERE name = 'ingest.reingest.force_on_same_marc'
- ;
-
- -- 4. Make a harmless update to target_record to trigger auto-update
+ -- 2. Temporarily set reingest on same to TRUE
+ SELECT evergreen.override_internal_flag_status('ingest.reingest.force_on_same_marc', TRUE);
+
+ -- 3. Make a harmless update to target_record to trigger auto-update
-- in linked bibliographic records
UPDATE authority.record_entry
SET deleted = FALSE
WHERE id = target_record;
- -- 5. "Delete" source_record
+ -- 4. "Delete" source_record
DELETE FROM authority.record_entry WHERE id = source_record;
- -- 6. Set "reingest on same MARC" flag back to initial value
- UPDATE config.internal_flag
- SET enabled = ingest_same
- WHERE name = 'ingest.reingest.force_on_same_marc'
- ;
+ -- 5. Remove the override of the "reingest on same MARC" flag
+ SELECT evergreen.clear_internal_flag_override('ingest.reingest.force_on_same_marc');
RETURN moved_objects;
END;
mbe_row metabib.browse_entry%ROWTYPE;
mbe_id BIGINT;
BEGIN
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.assume_inserts_only' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.assume_inserts_only') THEN
IF NOT skip_search THEN
FOR fclass IN SELECT * FROM config.metabib_class LOOP
-- RAISE NOTICE 'Emptying out %', fclass.name;
CREATE OR REPLACE FUNCTION metabib.reingest_metabib_full_rec( bib_id BIGINT ) RETURNS VOID AS $func$
BEGIN
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.assume_inserts_only' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.assume_inserts_only') THEN
DELETE FROM metabib.real_full_rec WHERE record = bib_id;
END IF;
INSERT INTO metabib.real_full_rec (record, tag, ind1, ind2, subfield, value)
END IF;
IF TG_OP = 'UPDATE' THEN -- re-ingest?
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc' AND enabled;
-
- IF NOT FOUND AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change
+ IF NOT evergreen.internal_flag_set('ingest.reingest.force_on_same_marc')
+ AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change
RETURN NEW;
END IF;
END IF;
-- Record authority linking
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_linking' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.disable_authority_linking') THEN
PERFORM biblio.map_authority_linking( NEW.id, NEW.marc );
END IF;
-- Flatten and insert the mfr data
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_metabib_full_rec' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.disable_metabib_full_rec') THEN
PERFORM metabib.reingest_metabib_full_rec(NEW.id);
-- Now we pull out attribute data, which is dependent on the mfr for all but XPath-based fields
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_metabib_rec_descriptor' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.disable_metabib_rec_descriptor') THEN
FOR attr_def IN SELECT * FROM config.record_attr_definition ORDER BY format LOOP
IF attr_def.tag IS NOT NULL THEN -- tag (and optional subfield list) selection
-- Located URI magic
IF TG_OP = 'INSERT' THEN
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_located_uri' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.disable_located_uri') THEN
PERFORM biblio.extract_located_uris( NEW.id, NEW.marc, NEW.editor );
END IF;
ELSE
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_located_uri' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.disable_located_uri') THEN
PERFORM biblio.extract_located_uris( NEW.id, NEW.marc, NEW.editor );
END IF;
END IF;
-- (re)map metarecord-bib linking
IF TG_OP = 'INSERT' THEN -- if not deleted and performing an insert, check for the flag
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.metarecord_mapping.skip_on_insert' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.metarecord_mapping.skip_on_insert') THEN
PERFORM metabib.remap_metarecord_for_bib( NEW.id, NEW.fingerprint );
END IF;
ELSE -- we're doing an update, and we're not deleted, remap
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.metarecord_mapping.skip_on_update' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.metarecord_mapping.skip_on_update') THEN
PERFORM metabib.remap_metarecord_for_bib( NEW.id, NEW.fingerprint );
END IF;
END IF;
SELECT INTO my_item_age age(coalesce(item_object.active_date, now()));
+ -- Grab the closest set circ weight setting.
-- The item's owner should probably be the one determining if the item is holdable
-- How to decide that is debatable. Decided to default to the circ library (where the item lives)
- -- This flag will allow for setting it to the owning library (where the call number "lives")
- PERFORM * FROM config.internal_flag WHERE name = 'circ.holds.weight_owner_not_circ' AND enabled;
-
- -- Grab the closest set circ weight setting.
- IF NOT FOUND THEN
+ -- This circ.holds.weight_owner_not_circx flag will allow for setting it to the owning library
+ -- (where the call number "lives")
+ IF NOT evergreen.internal_flag_set('circ.holds.weight_owner_not_circ') THEN
-- Default to circ library
SELECT INTO weights hw.*
FROM config.weight_assoc wa
-- This may be better implemented as part of the upgrade script?
-- Set usr_grp = requestor_grp, requestor_grp = 1 or something when this flag is already set
-- Then remove this flag, of course.
- PERFORM * FROM config.internal_flag WHERE name = 'circ.holds.usr_not_requestor' AND enabled;
-
- IF FOUND THEN
+ IF evergreen.internal_flag_set('circ.holds.usr_not_requestor') THEN
-- Note: This, to me, is REALLY hacky. I put it in anyway.
-- If you can't tell, this is a single call swap on two variables.
SELECT INTO user_object.profile, requestor_object.profile
# ... unless the following internal flag is set.
my $flag_rv = spi_exec_query(q{
- SELECT * FROM config.internal_flag
- WHERE name = 'serial.rematerialize_on_same_holding_code' AND enabled
+ SELECT evergreen.internal_flag_set('serial.rematerialize_on_same_holding_code')
}, 1);
- return unless $flag_rv->{processed};
+ return unless $flag_rv->{processed} and $flag_rv->{rows}[0]->{internal_flag_set} eq 't';
}
END IF;
IF TG_OP = 'UPDATE' THEN -- re-ingest?
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.reingest.force_on_same_marc' AND enabled;
-
- IF NOT FOUND AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change
+ IF NOT evergreen.internal_flag_set('ingest.reingest.force_on_same_marc')
+ AND OLD.marc = NEW.marc THEN -- don't do anything if the MARC didn't change
RETURN NEW;
END IF;
SELECT record, atag, value, sort_value FROM authority.simple_heading_set(NEW.marc);
-- Flatten and insert the afr data
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_full_rec' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.disable_authority_full_rec') THEN
PERFORM authority.reingest_authority_full_rec(NEW.id);
- PERFORM * FROM config.internal_flag WHERE name = 'ingest.disable_authority_rec_descriptor' AND enabled;
- IF NOT FOUND THEN
+ IF NOT evergreen.internal_flag_set('ingest.disable_authority_rec_descriptor') THEN
PERFORM authority.reingest_authority_rec_descriptor(NEW.id);
END IF;
END IF;