adding upgrade script user/rogan/lp1387722_set_leader_delete_status
authorRogan Hamby <rogan.hamby@gmail.com>
Thu, 22 Mar 2018 19:12:26 +0000 (15:12 -0400)
committerRogan Hamby <rogan.hamby@gmail.com>
Thu, 22 Mar 2018 19:12:26 +0000 (15:12 -0400)
Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql [new file with mode: 0644]

diff --git a/Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql b/Open-ILS/src/sql/Pg/upgrade/xxxx.schema.set_record_status_in_leader_trigger.sql
new file mode 100644 (file)
index 0000000..c002297
--- /dev/null
@@ -0,0 +1,35 @@
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('xxxx', :eg_version);
+
+CREATE OR REPLACE FUNCTION biblio.set_record_status_in_leader() RETURNS TRIGGER AS $func$
+use strict;
+use MARC::Record;
+use MARC::Field;
+use MARC::File::XML (BinaryEncoding => 'utf8');
+use Unicode::Normalize;
+
+my $c;
+
+if ($_TD->{event} eq 'INSERT') {$c = 'n';}
+elsif ($_TD->{event} eq 'UPDATE' && $_TD->{new}{deleted} eq 't') {$c = 'd';}
+elsif ($_TD->{event} eq 'UPDATE' && $_TD->{new}{deleted} eq 'f') {$c = 'c';}
+
+my $marc = MARC::Record->new_from_xml($_TD->{new}{marc});
+my $leader = $marc->leader();
+substr($leader,5,1) = $c;
+$marc->leader($leader);
+
+my $marc_xml = $marc->as_xml_record();
+
+$marc_xml = NFC($marc_xml);
+
+$_TD->{new}{marc} = $marc_xml;
+
+return "MODIFY";
+
+$func$ LANGUAGE PLPERLU;
+
+CREATE TRIGGER set_record_status_in_leader BEFORE INSERT OR UPDATE ON biblio.record_entry FOR EACH ROW EXECUTE PROCEDURE biblio.set_record_status_in_leader();
+
+COMMIT;