LP#2004055: Simpler Display Field highlighting
[evergreen-equinox.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.function.safer_highlight.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
4
5 CREATE OR REPLACE FUNCTION search.highlight_display_fields(
6     rid         BIGINT,
7     tsq_map     TEXT, -- '(a | b) & c' => '1,2,3,4', ...
8     css_class   TEXT DEFAULT 'oils_SH',
9     hl_all      BOOL DEFAULT TRUE,
10     minwords    INT DEFAULT 5,
11     maxwords    INT DEFAULT 25,
12     shortwords  INT DEFAULT 0,
13     maxfrags    INT DEFAULT 0,
14     delimiter   TEXT DEFAULT ' ... '
15 ) RETURNS SETOF search.highlight_result AS $f$
16 DECLARE
17     tsq         TEXT;
18     fields      TEXT;
19     afields     INT[];
20     seen        INT[];
21 BEGIN
22
23     FOR tsq, fields IN SELECT key, value FROM each(tsq_map::HSTORE) LOOP
24         SELECT  ARRAY_AGG(unnest::INT) INTO afields
25           FROM  unnest(regexp_split_to_array(fields,','));
26         seen := seen || afields;
27
28         RETURN QUERY
29             SELECT * FROM search.highlight_display_fields_impl(
30                 rid, tsq, afields, css_class, hl_all,minwords,
31                 maxwords, shortwords, maxfrags, delimiter
32             );
33     END LOOP;
34
35     RETURN QUERY
36         SELECT  id,
37                 source,
38                 field,
39                 evergreen.escape_for_html(value) AS value,
40                 evergreen.escape_for_html(value) AS highlight
41           FROM  metabib.display_entry
42           WHERE source = rid
43                 AND NOT (field = ANY (seen));
44 END;
45 $f$ LANGUAGE PLPGSQL ROWS 10;
46
47 COMMIT;
48