]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/upgrade/0309.schema.pre-index_vector-normalizers.sql
LP#1661688: Add a link and other tweaks to alternate hold pickup feature
[working/Evergreen.git] / Open-ILS / src / sql / Pg / upgrade / 0309.schema.pre-index_vector-normalizers.sql
1 BEGIN;
2
3 INSERT INTO config.upgrade_log (version) VALUES ('0309'); --miker
4
5 CREATE OR REPLACE FUNCTION oils_tsearch2 () RETURNS TRIGGER AS $$
6 DECLARE
7     normalizer      RECORD;
8     value           TEXT := '';
9 BEGIN
10
11     value := NEW.value;
12
13     IF TG_TABLE_NAME::TEXT ~ 'field_entry$' THEN
14         FOR normalizer IN
15             SELECT  n.func AS func,
16                     n.param_count AS param_count,
17                     m.params AS params
18               FROM  config.index_normalizer n
19                     JOIN config.metabib_field_index_norm_map m ON (m.norm = n.id)
20               WHERE field = NEW.field AND m.pos < 0
21               ORDER BY m.pos LOOP
22                 EXECUTE 'SELECT ' || normalizer.func || '(' ||
23                     quote_literal( value ) ||
24                     CASE
25                         WHEN normalizer.param_count > 0
26                             THEN ',' || REPLACE(REPLACE(BTRIM(normalizer.params,'[]'),E'\'',E'\\\''),E'"',E'\'')
27                             ELSE ''
28                         END ||
29                     ')' INTO value;
30
31         END LOOP;
32
33         NEW.value := value;
34     END IF;
35
36     IF NEW.index_vector = ''::tsvector THEN
37         RETURN NEW;
38     END IF;
39
40     IF TG_TABLE_NAME::TEXT ~ 'field_entry$' THEN
41         FOR normalizer IN
42             SELECT  n.func AS func,
43                     n.param_count AS param_count,
44                     m.params AS params
45               FROM  config.index_normalizer n
46                     JOIN config.metabib_field_index_norm_map m ON (m.norm = n.id)
47               WHERE field = NEW.field AND m.pos >= 0
48               ORDER BY m.pos LOOP
49                 EXECUTE 'SELECT ' || normalizer.func || '(' ||
50                     quote_literal( value ) ||
51                     CASE
52                         WHEN normalizer.param_count > 0
53                             THEN ',' || REPLACE(REPLACE(BTRIM(normalizer.params,'[]'),E'\'',E'\\\''),E'"',E'\'')
54                             ELSE ''
55                         END ||
56                     ')' INTO value;
57
58         END LOOP;
59     END IF;
60
61     IF REGEXP_REPLACE(VERSION(),E'^.+?(\\d+\\.\\d+).*?$',E'\\1')::FLOAT > 8.2 THEN
62         NEW.index_vector = to_tsvector((TG_ARGV[0])::regconfig, value);
63     ELSE
64         NEW.index_vector = to_tsvector(TG_ARGV[0], value);
65     END IF;
66
67     RETURN NEW;
68 END;
69 $$ LANGUAGE PLPGSQL;
70
71 COMMIT;
72