ddd8e535314bf40aafd9ab2635428c4dd1e7c232
[evergreen-equinox.git] / Open-ILS / src / sql / Pg / upgrade / XXXX.schema.mark-tag-for-match-highlights.sql
1 BEGIN;
2
3 SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version);
4
5 CREATE OR REPLACE FUNCTION search.highlight_display_fields_impl(
6     rid         BIGINT,
7     tsq         TEXT,
8     field_list  INT[] DEFAULT '{}'::INT[],
9     css_class   TEXT DEFAULT 'oils_SH',
10     hl_all      BOOL DEFAULT TRUE,
11     minwords    INT DEFAULT 5,
12     maxwords    INT DEFAULT 25,
13     shortwords  INT DEFAULT 0,
14     maxfrags    INT DEFAULT 0,
15     delimiter   TEXT DEFAULT ' ... '
16 ) RETURNS SETOF search.highlight_result AS $f$
17 DECLARE
18     opts            TEXT := '';
19     v_css_class     TEXT := css_class;
20     v_delimiter     TEXT := delimiter;
21     v_field_list    INT[] := field_list;
22     hl_query        TEXT;
23 BEGIN
24     IF v_delimiter LIKE $$%'%$$ OR v_delimiter LIKE '%"%' THEN --"
25         v_delimiter := ' ... ';
26     END IF;
27
28     IF NOT hl_all THEN
29         opts := opts || 'MinWords=' || minwords;
30         opts := opts || ', MaxWords=' || maxwords;
31         opts := opts || ', ShortWords=' || shortwords;
32         opts := opts || ', MaxFragments=' || maxfrags;
33         opts := opts || ', FragmentDelimiter="' || delimiter || '"';
34     ELSE
35         opts := opts || 'HighlightAll=TRUE';
36     END IF;
37
38     IF v_css_class LIKE $$%'%$$ OR v_css_class LIKE '%"%' THEN -- "
39         v_css_class := 'oils_SH';
40     END IF;
41
42     opts := opts || $$, StopSel=</mark>, StartSel="<mark class='$$ || v_css_class; -- "
43
44     IF v_field_list = '{}'::INT[] THEN
45         SELECT ARRAY_AGG(id) INTO v_field_list FROM config.metabib_field WHERE display_field;
46     END IF;
47
48     hl_query := $$
49         SELECT  de.id,
50                 de.source,
51                 de.field,
52                 evergreen.escape_for_html(de.value) AS value,
53                 ts_headline(
54                     ts_config::REGCONFIG,
55                     evergreen.escape_for_html(de.value),
56                     $$ || quote_literal(tsq) || $$,
57                     $1 || ' ' || mf.field_class || ' ' || mf.name || $xx$'>"$xx$ -- "'
58                 ) AS highlight
59           FROM  metabib.display_entry de
60                 JOIN config.metabib_field mf ON (mf.id = de.field)
61                 JOIN search.best_tsconfig t ON (t.id = de.field)
62           WHERE de.source = $2
63                 AND field = ANY ($3)
64           ORDER BY de.id;$$;
65
66     RETURN QUERY EXECUTE hl_query USING opts, rid, v_field_list;
67 END;
68 $f$ LANGUAGE PLPGSQL;
69
70 COMMIT;