]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0571.schema.facet_normalizer.sql
LP1894131 Sticky catalog holdings org select
[Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0571.schema.facet_normalizer.sql
1 -- Evergreen DB patch 0571.schema.facet_normalizer.sql
2 --
3 -- Alternate implementation of a regression fix for facet normalization
4 --
5 BEGIN;
6
7
8 -- check whether patch can be applied
9 SELECT evergreen.upgrade_deps_block_check('0571', :eg_version);
10
11 -- FIXME: add/check SQL statements to perform the upgrade
12 CREATE OR REPLACE FUNCTION metabib.facet_normalize_trigger () RETURNS TRIGGER AS $$
13 DECLARE
14     normalizer  RECORD;
15     facet_text  TEXT;
16 BEGIN
17     facet_text := NEW.value;
18
19     FOR normalizer IN
20         SELECT  n.func AS func,
21                 n.param_count AS param_count,
22                 m.params AS params
23           FROM  config.index_normalizer n
24                 JOIN config.metabib_field_index_norm_map m ON (m.norm = n.id)
25           WHERE m.field = NEW.field AND m.pos < 0
26           ORDER BY m.pos LOOP
27
28             EXECUTE 'SELECT ' || normalizer.func || '(' ||
29                 quote_literal( facet_text ) ||
30                 CASE
31                     WHEN normalizer.param_count > 0
32                         THEN ',' || REPLACE(REPLACE(BTRIM(normalizer.params,'[]'),E'\'',E'\\\''),E'"',E'\'')
33                         ELSE ''
34                     END ||
35                 ')' INTO facet_text;
36
37     END LOOP;
38
39     NEW.value = facet_text;
40
41     RETURN NEW;
42 END;
43 $$ LANGUAGE PLPGSQL;
44
45 CREATE TRIGGER facet_normalize_tgr
46     BEFORE UPDATE OR INSERT ON metabib.facet_entry
47     FOR EACH ROW EXECUTE PROCEDURE metabib.facet_normalize_trigger();
48
49
50
51 COMMIT;