]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/src/sql/Pg/version-upgrade/3.5.4-3.5.5-upgrade-db.sql
LP1615805 No inputs after submit in patron search (AngularJS)
[working/Evergreen.git] / Open-ILS / src / sql / Pg / version-upgrade / 3.5.4-3.5.5-upgrade-db.sql
1 --Upgrade Script for 3.5.4 to 3.5.5
2 \set eg_version '''3.5.5'''
3 BEGIN;
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.5.5', :eg_version);
5
6 SELECT evergreen.upgrade_deps_block_check('1262', :eg_version);
7
8 CREATE OR REPLACE FUNCTION search.highlight_display_fields_impl(
9     rid         BIGINT,
10     tsq         TEXT,
11     field_list  INT[] DEFAULT '{}'::INT[],
12     css_class   TEXT DEFAULT 'oils_SH',
13     hl_all      BOOL DEFAULT TRUE,
14     minwords    INT DEFAULT 5,
15     maxwords    INT DEFAULT 25,
16     shortwords  INT DEFAULT 0,
17     maxfrags    INT DEFAULT 0,
18     delimiter   TEXT DEFAULT ' ... '
19 ) RETURNS SETOF search.highlight_result AS $f$
20 DECLARE
21     opts            TEXT := '';
22     v_css_class     TEXT := css_class;
23     v_delimiter     TEXT := delimiter;
24     v_field_list    INT[] := field_list;
25     hl_query        TEXT;
26 BEGIN
27     IF v_delimiter LIKE $$%'%$$ OR v_delimiter LIKE '%"%' THEN --"
28         v_delimiter := ' ... ';
29     END IF;
30
31     IF NOT hl_all THEN
32         opts := opts || 'MinWords=' || minwords;
33         opts := opts || ', MaxWords=' || maxwords;
34         opts := opts || ', ShortWords=' || shortwords;
35         opts := opts || ', MaxFragments=' || maxfrags;
36         opts := opts || ', FragmentDelimiter="' || delimiter || '"';
37     ELSE
38         opts := opts || 'HighlightAll=TRUE';
39     END IF;
40
41     IF v_css_class LIKE $$%'%$$ OR v_css_class LIKE '%"%' THEN -- "
42         v_css_class := 'oils_SH';
43     END IF;
44
45     opts := opts || $$, StopSel=</b>, StartSel="<b class='$$ || v_css_class; -- "
46
47     IF v_field_list = '{}'::INT[] THEN
48         SELECT ARRAY_AGG(id) INTO v_field_list FROM config.metabib_field WHERE display_field;
49     END IF;
50
51     hl_query := $$
52         SELECT  de.id,
53                 de.source,
54                 de.field,
55                 evergreen.escape_for_html(de.value) AS value,
56                 ts_headline(
57                     ts_config::REGCONFIG,
58                     evergreen.escape_for_html(de.value),
59                     $$ || quote_literal(tsq) || $$,
60                     $1 || ' ' || mf.field_class || ' ' || mf.name || $xx$'>"$xx$ -- "'
61                 ) AS highlight
62           FROM  metabib.display_entry de
63                 JOIN config.metabib_field mf ON (mf.id = de.field)
64                 JOIN search.best_tsconfig t ON (t.id = de.field)
65           WHERE de.source = $2
66                 AND field = ANY ($3)
67           ORDER BY de.id;$$;
68
69     RETURN QUERY EXECUTE hl_query USING opts, rid, v_field_list;
70 END;
71 $f$ LANGUAGE PLPGSQL;
72
73 CREATE OR REPLACE FUNCTION search.highlight_display_fields(
74     rid         BIGINT,
75     tsq_map     TEXT, -- { '(a | b) & c' => '1,2,3,4', ...}
76     css_class   TEXT DEFAULT 'oils_SH',
77     hl_all      BOOL DEFAULT TRUE,
78     minwords    INT DEFAULT 5,
79     maxwords    INT DEFAULT 25,
80     shortwords  INT DEFAULT 0,
81     maxfrags    INT DEFAULT 0,
82     delimiter   TEXT DEFAULT ' ... '
83 ) RETURNS SETOF search.highlight_result AS $f$
84 DECLARE
85     tsq_hstore  TEXT;
86     tsq         TEXT;
87     fields      TEXT;
88     afields     INT[];
89     seen        INT[];
90 BEGIN
91     IF (tsq_map ILIKE 'hstore%') THEN
92         EXECUTE 'SELECT ' || tsq_map INTO tsq_hstore;
93     ELSE
94         tsq_hstore := tsq_map::HSTORE;
95     END IF;
96
97     FOR tsq, fields IN SELECT key, value FROM each(tsq_hstore::HSTORE) LOOP
98         SELECT  ARRAY_AGG(unnest::INT) INTO afields
99           FROM  unnest(regexp_split_to_array(fields,','));
100         seen := seen || afields;
101
102         RETURN QUERY
103             SELECT * FROM search.highlight_display_fields_impl(
104                 rid, tsq, afields, css_class, hl_all,minwords,
105                 maxwords, shortwords, maxfrags, delimiter
106             );
107     END LOOP;
108
109     RETURN QUERY
110         SELECT  id,
111                 source,
112                 field,
113                 evergreen.escape_for_html(value) AS value,
114                 evergreen.escape_for_html(value) AS highlight
115           FROM  metabib.display_entry
116           WHERE source = rid
117                 AND NOT (field = ANY (seen));
118 END;
119 $f$ LANGUAGE PLPGSQL ROWS 10;
120
121 COMMIT;
122
123 -- Update auditor tables to catch changes to source tables.
124 --   Can be removed/skipped if there were no schema changes.
125 SELECT auditor.update_auditors();