3 SELECT evergreen.upgrade_deps_block_check('1262', :eg_version);
5 CREATE OR REPLACE FUNCTION search.highlight_display_fields_impl(
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$
19 v_css_class TEXT := css_class;
20 v_delimiter TEXT := delimiter;
21 v_field_list INT[] := field_list;
24 IF v_delimiter LIKE $$%'%$$ OR v_delimiter LIKE '%"%' THEN --"
25 v_delimiter := ' ... ';
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 || '"';
35 opts := opts || 'HighlightAll=TRUE';
38 IF v_css_class LIKE $$%'%$$ OR v_css_class LIKE '%"%' THEN -- "
39 v_css_class := 'oils_SH';
42 opts := opts || $$, StopSel=</b>, StartSel="<b class='$$ || v_css_class; -- "
44 IF v_field_list = '{}'::INT[] THEN
45 SELECT ARRAY_AGG(id) INTO v_field_list FROM config.metabib_field WHERE display_field;
52 evergreen.escape_for_html(de.value) AS value,
55 evergreen.escape_for_html(de.value),
56 $$ || quote_literal(tsq) || $$,
57 $1 || ' ' || mf.field_class || ' ' || mf.name || $xx$'>"$xx$ -- "'
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)
66 RETURN QUERY EXECUTE hl_query USING opts, rid, v_field_list;
70 CREATE OR REPLACE FUNCTION search.highlight_display_fields(
72 tsq_map TEXT, -- { '(a | b) & c' => '1,2,3,4', ...}
73 css_class TEXT DEFAULT 'oils_SH',
74 hl_all BOOL DEFAULT TRUE,
75 minwords INT DEFAULT 5,
76 maxwords INT DEFAULT 25,
77 shortwords INT DEFAULT 0,
78 maxfrags INT DEFAULT 0,
79 delimiter TEXT DEFAULT ' ... '
80 ) RETURNS SETOF search.highlight_result AS $f$
88 IF (tsq_map ILIKE 'hstore%') THEN
89 EXECUTE 'SELECT ' || tsq_map INTO tsq_hstore;
91 tsq_hstore := tsq_map::HSTORE;
94 FOR tsq, fields IN SELECT key, value FROM each(tsq_hstore::HSTORE) LOOP
95 SELECT ARRAY_AGG(unnest::INT) INTO afields
96 FROM unnest(regexp_split_to_array(fields,','));
97 seen := seen || afields;
100 SELECT * FROM search.highlight_display_fields_impl(
101 rid, tsq, afields, css_class, hl_all,minwords,
102 maxwords, shortwords, maxfrags, delimiter
110 evergreen.escape_for_html(value) AS value,
111 evergreen.escape_for_html(value) AS highlight
112 FROM metabib.display_entry
114 AND NOT (field = ANY (seen));
116 $f$ LANGUAGE PLPGSQL ROWS 10;