]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/version-upgrade/2.4.1-2.4.2-upgrade-db.sql
Push the 2.4.2 inter-version upgrade script forward
[working/Evergreen.git] / Open-ILS / src / sql / Pg / version-upgrade / 2.4.1-2.4.2-upgrade-db.sql
1 --Upgrade Script for 2.4.1 to 2.4.2
2 \set eg_version '''2.4.2'''
3 BEGIN;
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.4.2', :eg_version);
5
6 SELECT evergreen.upgrade_deps_block_check('0818', :eg_version);
7
8 INSERT INTO config.org_unit_setting_type ( name, grp, label, description, datatype ) VALUES (
9     'circ.patron_edit.duplicate_patron_check_depth', 'circ',
10     oils_i18n_gettext(
11         'circ.patron_edit.duplicate_patron_check_depth',
12         'Specify search depth for the duplicate patron check in the patron editor',
13         'coust',
14         'label'),
15     oils_i18n_gettext(
16         'circ.patron_edit.duplicate_patron_check_depth',
17         'When using the patron registration page, the duplicate patron check will use the configured depth to scope the search for duplicate patrons.',
18         'coust',
19         'description'),
20     'integer')
21 ;
22
23
24
25 -- Evergreen DB patch 0819.schema.acn_dewey_normalizer.sql
26 --
27 -- Fixes Dewey call number sorting (per LP# 1150939)
28 --
29
30 -- check whether patch can be applied
31 SELECT evergreen.upgrade_deps_block_check('0819', :eg_version);
32
33 CREATE OR REPLACE FUNCTION asset.label_normalizer_dewey(TEXT) RETURNS TEXT AS $func$
34     # Derived from the Koha C4::ClassSortRoutine::Dewey module
35     # Copyright (C) 2007 LibLime
36     # Licensed under the GPL v2 or later
37
38     use strict;
39     use warnings;
40
41     my $init = uc(shift);
42     $init =~ s/^\s+//;
43     $init =~ s/\s+$//;
44     $init =~ s!/!!g;
45     $init =~ s/^([\p{IsAlpha}]+)/$1 /;
46     my @tokens = split /\.|\s+/, $init;
47     my $digit_group_count = 0;
48     my $first_digit_group_idx;
49     for (my $i = 0; $i <= $#tokens; $i++) {
50         if ($tokens[$i] =~ /^\d+$/) {
51             $digit_group_count++;
52             if ($digit_group_count == 1) {
53                 $first_digit_group_idx = $i;
54             }
55             if (2 == $digit_group_count) {
56                 $tokens[$i] = sprintf("%-15.15s", $tokens[$i]);
57                 $tokens[$i] =~ tr/ /0/;
58             }
59         }
60     }
61     # Pad the first digit_group if there was only one
62     if (1 == $digit_group_count) {
63         $tokens[$first_digit_group_idx] .= '_000000000000000'
64     }
65     my $key = join("_", @tokens);
66     $key =~ s/[^\p{IsAlnum}_]//g;
67
68     return $key;
69
70 $func$ LANGUAGE PLPERLU;
71
72 -- regenerate sort keys for any dewey call numbers
73 UPDATE asset.call_number SET id = id WHERE label_class = 2;
74
75
76 -- Remove [ and ] characters from seriestitle.
77 -- Those characters don't play well when searching.
78
79 SELECT evergreen.upgrade_deps_block_check('0820', :eg_version); -- Callender
80
81 INSERT INTO config.metabib_field_index_norm_map (field,norm,params, pos)
82      SELECT  m.id,
83              i.id,
84              $$["]",""]$$,
85              '-1'
86        FROM  config.metabib_field m,
87              config.index_normalizer i
88        WHERE i.func IN ('replace')
89              AND m.id IN (1);
90              
91 INSERT INTO config.metabib_field_index_norm_map (field,norm,params, pos)
92      SELECT  m.id,
93              i.id,
94              $$["[",""]$$,
95              '-1'
96        FROM  config.metabib_field m,
97              config.index_normalizer i
98        WHERE i.func IN ('replace')
99              AND m.id IN (1);
100
101
102 SELECT evergreen.upgrade_deps_block_check('0821', :eg_version);
103
104 CREATE OR REPLACE FUNCTION metabib.reingest_metabib_field_entries( bib_id BIGINT, skip_facet BOOL DEFAULT FALSE, skip_browse BOOL DEFAULT FALSE, skip_search BOOL DEFAULT FALSE ) RETURNS VOID AS $func$
105 DECLARE
106     fclass          RECORD;
107     ind_data        metabib.field_entry_template%ROWTYPE;
108     mbe_row         metabib.browse_entry%ROWTYPE;
109     mbe_id          BIGINT;
110     mbe_txt         TEXT;
111     b_skip_facet    BOOL;
112     b_skip_browse   BOOL;
113     b_skip_search   BOOL;
114 BEGIN
115
116     SELECT COALESCE(NULLIF(skip_facet, FALSE), EXISTS (SELECT enabled FROM config.internal_flag WHERE name =  'ingest.skip_facet_indexing' AND enabled)) INTO b_skip_facet;
117     SELECT COALESCE(NULLIF(skip_browse, FALSE), EXISTS (SELECT enabled FROM config.internal_flag WHERE name =  'ingest.skip_browse_indexing' AND enabled)) INTO b_skip_browse;
118     SELECT COALESCE(NULLIF(skip_search, FALSE), EXISTS (SELECT enabled FROM config.internal_flag WHERE name =  'ingest.skip_search_indexing' AND enabled)) INTO b_skip_search;
119
120     PERFORM * FROM config.internal_flag WHERE name = 'ingest.assume_inserts_only' AND enabled;
121     IF NOT FOUND THEN
122         IF NOT b_skip_search THEN
123             FOR fclass IN SELECT * FROM config.metabib_class LOOP
124                 -- RAISE NOTICE 'Emptying out %', fclass.name;
125                 EXECUTE $$DELETE FROM metabib.$$ || fclass.name || $$_field_entry WHERE source = $$ || bib_id;
126             END LOOP;
127         END IF;
128         IF NOT b_skip_facet THEN
129             DELETE FROM metabib.facet_entry WHERE source = bib_id;
130         END IF;
131         IF NOT b_skip_browse THEN
132             DELETE FROM metabib.browse_entry_def_map WHERE source = bib_id;
133         END IF;
134     END IF;
135
136     FOR ind_data IN SELECT * FROM biblio.extract_metabib_field_entry( bib_id ) LOOP
137         IF ind_data.field < 0 THEN
138             ind_data.field = -1 * ind_data.field;
139         END IF;
140
141         IF ind_data.facet_field AND NOT b_skip_facet THEN
142             INSERT INTO metabib.facet_entry (field, source, value)
143                 VALUES (ind_data.field, ind_data.source, ind_data.value);
144         END IF;
145
146         IF ind_data.browse_field AND NOT b_skip_browse THEN
147             -- A caveat about this SELECT: this should take care of replacing
148             -- old mbe rows when data changes, but not if normalization (by
149             -- which I mean specifically the output of
150             -- evergreen.oils_tsearch2()) changes.  It may or may not be
151             -- expensive to add a comparison of index_vector to index_vector
152             -- to the WHERE clause below.
153             mbe_txt := metabib.browse_normalize(ind_data.value, ind_data.field);
154             SELECT INTO mbe_row * FROM metabib.browse_entry WHERE value = mbe_txt;
155             IF FOUND THEN
156                 mbe_id := mbe_row.id;
157             ELSE
158                 INSERT INTO metabib.browse_entry (value) VALUES (mbe_txt);
159                 mbe_id := CURRVAL('metabib.browse_entry_id_seq'::REGCLASS);
160             END IF;
161
162             INSERT INTO metabib.browse_entry_def_map (entry, def, source)
163                 VALUES (mbe_id, ind_data.field, ind_data.source);
164         END IF;
165
166         -- Avoid inserting duplicate rows, but retain granularity of being
167         -- able to search browse fields with "starts with" type operators
168         -- (for example, for titles of songs in music albums)
169         IF (ind_data.search_field OR ind_data.browse_field) AND NOT b_skip_search THEN
170             EXECUTE 'SELECT 1 FROM metabib.' || ind_data.field_class ||
171                 '_field_entry WHERE field = $1 AND source = $2 AND value = $3'
172                 INTO mbe_id USING ind_data.field, ind_data.source, ind_data.value;
173                 -- RAISE NOTICE 'Search for an already matching row returned %', mbe_id;
174             IF mbe_id IS NULL THEN
175                 EXECUTE $$
176                 INSERT INTO metabib.$$ || ind_data.field_class || $$_field_entry (field, source, value)
177                     VALUES ($$ ||
178                         quote_literal(ind_data.field) || $$, $$ ||
179                         quote_literal(ind_data.source) || $$, $$ ||
180                         quote_literal(ind_data.value) ||
181                     $$);$$;
182             END IF;
183         END IF;
184
185     END LOOP;
186
187     IF NOT b_skip_search THEN
188         PERFORM metabib.update_combined_index_vectors(bib_id);
189     END IF;
190
191     RETURN;
192 END;
193 $func$ LANGUAGE PLPGSQL;
194
195
196 COMMIT;