1 --Upgrade Script for 2.3.11 to 2.3.12
2 \set eg_version '''2.3.12'''
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.3.12', :eg_version);
6 -- check whether patch can be applied
7 SELECT evergreen.upgrade_deps_block_check('0838', :eg_version);
9 DELETE FROM config.metabib_field_index_norm_map
10 WHERE field = 25 AND norm IN (
12 FROM config.index_normalizer
13 WHERE func IN ('search_normalize','split_date_range')
16 \qecho If your site's bibcn searches are affected by this issue, you may wish
17 \qecho to reingest your bib records now. It's probably not worth it for many
21 SELECT evergreen.upgrade_deps_block_check('0840', :eg_version);
23 INSERT INTO config.usr_setting_type (name,grp,opac_visible,label,description,datatype) VALUES (
24 'ui.grid_columns.conify.config.circ_matrix_matchpoint',
28 'ui.grid_columns.conify.config.circ_matrix_matchpoint',
29 'Circulation Policy Configuration',
34 'ui.grid_columns.conify.config.circ_matrix_matchpoint',
35 'Circulation Policy Configuration Column Settings',
43 -- check whether patch can be applied
44 SELECT evergreen.upgrade_deps_block_check('0841', :eg_version);
46 ALTER TABLE config.metabib_search_alias DROP CONSTRAINT metabib_search_alias_field_fkey;
47 ALTER TABLE metabib.browse_entry_def_map DROP CONSTRAINT browse_entry_def_map_def_fkey;
49 ALTER TABLE config.metabib_search_alias ADD CONSTRAINT metabib_search_alias_field_fkey FOREIGN KEY (field) REFERENCES config.metabib_field(id) ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
50 ALTER TABLE metabib.browse_entry_def_map ADD CONSTRAINT browse_entry_def_map_def_fkey FOREIGN KEY (def) REFERENCES config.metabib_field(id) ON UPDATE CASCADE DEFERRABLE INITIALLY DEFERRED;
53 DROP FUNCTION IF EXISTS config.modify_metabib_field(source INT, target INT);
54 CREATE FUNCTION config.modify_metabib_field(v_source INT, target INT) RETURNS INT AS $func$
60 SELECT field_class INTO f_class FROM config.metabib_field WHERE id = v_source;
64 IF target IS NULL THEN
65 target_id = v_source + 1000;
69 SELECT id FROM config.metabib_field INTO check_id WHERE id = target_id;
71 RAISE NOTICE 'Cannot bump config.metabib_field.id from % to %; the target ID already exists.', v_source, target_id;
74 UPDATE config.metabib_field SET id = target_id WHERE id = v_source;
75 EXECUTE ' UPDATE metabib.' || f_class || '_field_entry SET field = ' || target_id || ' WHERE field = ' || v_source;
76 UPDATE config.metabib_field_index_norm_map SET field = target_id WHERE field = v_source;
77 UPDATE search.relevance_adjustment SET field = target_id WHERE field = v_source;
78 UPDATE config.metabib_search_alias SET field = target_id WHERE field = v_source;
79 UPDATE metabib.browse_entry_def_map SET def = target_id WHERE def = v_source;
82 $func$ LANGUAGE PLPGSQL;
84 SELECT config.modify_metabib_field(id, NULL)
85 FROM config.metabib_field
88 SELECT SETVAL('config.metabib_field_id_seq', GREATEST(1000, (SELECT MAX(id) FROM config.metabib_field)));
91 SELECT evergreen.upgrade_deps_block_check('0846', :eg_version);
93 CREATE OR REPLACE FUNCTION vandelay.add_field ( target_xml TEXT, source_xml TEXT, field TEXT, force_add INT ) RETURNS TEXT AS $_$
96 use MARC::File::XML (BinaryEncoding => 'UTF-8');
100 MARC::Charset->assume_unicode(1);
102 my $target_xml = shift;
103 my $source_xml = shift;
104 my $field_spec = shift;
105 my $force_add = shift || 0;
107 my $target_r = MARC::Record->new_from_xml( $target_xml );
108 my $source_r = MARC::Record->new_from_xml( $source_xml );
110 return $target_xml unless ($target_r && $source_r);
112 my @field_list = split(',', $field_spec);
115 for my $f (@field_list) {
116 $f =~ s/^\s*//; $f =~ s/\s*$//;
117 if ($f =~ /^(.{3})(\w*)(?:\[([^]]*)\])?$/) {
123 $match =~ s/^\s*//; $match =~ s/\s*$//;
124 $fields{$field} = { sf => [ split('', $sf) ] };
126 my ($msf,$mre) = split('~', $match);
127 if (length($msf) > 0 and length($mre) > 0) {
128 $msf =~ s/^\s*//; $msf =~ s/\s*$//;
129 $mre =~ s/^\s*//; $mre =~ s/\s*$//;
130 $fields{$field}{match} = { sf => $msf, re => qr/$mre/ };
136 for my $f ( keys %fields) {
137 if ( @{$fields{$f}{sf}} ) {
138 for my $from_field ($source_r->field( $f )) {
139 my @tos = $target_r->field( $f );
141 next if (exists($fields{$f}{match}) and !$force_add);
142 my @new_fields = map { $_->clone } $source_r->field( $f );
143 $target_r->insert_fields_ordered( @new_fields );
145 for my $to_field (@tos) {
146 if (exists($fields{$f}{match})) {
147 next unless (grep { $_ =~ $fields{$f}{match}{re} } $to_field->subfield($fields{$f}{match}{sf}));
149 for my $old_sf ($from_field->subfields) {
150 $to_field->add_subfields( @$old_sf ) if grep(/$$old_sf[0]/,@{$fields{$f}{sf}});
156 my @new_fields = map { $_->clone } $source_r->field( $f );
157 $target_r->insert_fields_ordered( @new_fields );
161 $target_xml = $target_r->as_xml_record;
162 $target_xml =~ s/^<\?.+?\?>$//mo;
163 $target_xml =~ s/\n//sgo;
164 $target_xml =~ s/>\s+</></sgo;
168 $_$ LANGUAGE PLPERLU;