1 --Upgrade Script for 3.4.0 to 3.4.1
2 \set eg_version '''3.4.1'''
4 INSERT INTO config.upgrade_log (version, applied_to) VALUES ('3.4.1', :eg_version);
6 SELECT evergreen.upgrade_deps_block_check('1193', :eg_version);
8 INSERT INTO config.workstation_setting_type
9 (name, grp, datatype, label)
11 'eg.grid.circ.patron.xact_details_details_bills', 'gui', 'object',
13 'eg.grid.circ.patron.xact_details_details_bills',
14 'Grid Config: circ.patron.xact_details_details_bills',
17 'eg.grid.circ.patron.xact_details_details_payments', 'gui', 'object',
19 'eg.grid.circ.patron.xact_details_details_payments',
20 'Grid Config: circ.patron.xact_details_details_payments',
25 SELECT evergreen.upgrade_deps_block_check('1195', :eg_version);
27 CREATE OR REPLACE FUNCTION metabib.suggest_browse_entries(raw_query_text text, search_class text, headline_opts text, visibility_org integer, query_limit integer, normalization integer)
28 RETURNS TABLE(value text, field integer, buoyant_and_class_match boolean, field_match boolean, field_weight integer, rank real, buoyant boolean, match text)
31 prepared_query_texts TEXT[];
34 opac_visibility_join TEXT;
35 search_class_join TEXT;
39 prepared_query_texts := metabib.autosuggest_prepare_tsquery(raw_query_text);
41 query := TO_TSQUERY('keyword', prepared_query_texts[1]);
42 plain_query := TO_TSQUERY('keyword', prepared_query_texts[2]);
44 visibility_org := NULLIF(visibility_org,-1);
45 IF visibility_org IS NOT NULL THEN
46 PERFORM FROM actor.org_unit WHERE id = visibility_org AND parent_ou IS NULL;
48 opac_visibility_join := '';
50 PERFORM 1 FROM config.internal_flag WHERE enabled AND name = 'opac.located_uri.act_as_copy';
52 b_tests := search.calculate_visibility_attribute_test(
54 (SELECT ARRAY_AGG(id) FROM actor.org_unit_full_path(visibility_org))
57 b_tests := search.calculate_visibility_attribute_test(
59 (SELECT ARRAY_AGG(id) FROM actor.org_unit_ancestors(visibility_org))
62 opac_visibility_join := '
63 LEFT JOIN asset.copy_vis_attr_cache acvac ON (acvac.record = x.source)
64 LEFT JOIN biblio.record_entry b ON (b.id = x.source)
65 JOIN vm ON (acvac.vis_attr_vector @@
66 (vm.c_attrs || $$&$$ ||
67 search.calculate_visibility_attribute_test(
69 (SELECT ARRAY_AGG(id) FROM actor.org_unit_descendants($4))
72 ) OR (b.vis_attr_vector @@ $$' || b_tests || '$$::query_int)
76 opac_visibility_join := '';
79 -- The following determines whether we only provide suggestsons matching
80 -- the user's selected search_class, or whether we show other suggestions
81 -- too. The reason for MIN() is that for search_classes like
82 -- 'title|proper|uniform' you would otherwise get multiple rows. The
83 -- implication is that if title as a class doesn't have restrict,
84 -- nor does the proper field, but the uniform field does, you're going
85 -- to get 'false' for your overall evaluation of 'should we restrict?'
86 -- To invert that, change from MIN() to MAX().
90 MIN(cmc.restrict::INT) AS restrict_class,
91 MIN(cmf.restrict::INT) AS restrict_field
92 FROM metabib.search_class_to_registered_components(search_class)
93 AS _registered (field_class TEXT, field INT)
95 config.metabib_class cmc ON (cmc.name = _registered.field_class)
97 config.metabib_field cmf ON (cmf.id = _registered.field);
99 -- evaluate 'should we restrict?'
100 IF r_fields.restrict_field::BOOL OR r_fields.restrict_class::BOOL THEN
101 search_class_join := '
103 metabib.search_class_to_registered_components($2)
104 AS _registered (field_class TEXT, field INT) ON (
105 (_registered.field IS NULL AND
106 _registered.field_class = cmf.field_class) OR
107 (_registered.field = cmf.id)
111 search_class_join := '
113 metabib.search_class_to_registered_components($2)
114 AS _registered (field_class TEXT, field INT) ON (
115 _registered.field_class = cmc.name
120 RETURN QUERY EXECUTE '
121 WITH vm AS ( SELECT * FROM asset.patron_default_visibility_mask() ),
122 mbe AS (SELECT * FROM metabib.browse_entry WHERE index_vector @@ $1 LIMIT 10000)
131 TS_HEADLINE(value, $7, $3)
132 FROM (SELECT DISTINCT
135 cmc.buoyant AND _registered.field_class IS NOT NULL AS push,
136 _registered.field = cmf.id AS restrict,
138 TS_RANK_CD(mbe.index_vector, $1, $6),
141 FROM metabib.browse_entry_def_map mbedm
142 JOIN mbe ON (mbe.id = mbedm.entry)
143 JOIN config.metabib_field cmf ON (cmf.id = mbedm.def)
144 JOIN config.metabib_class cmc ON (cmf.field_class = cmc.name)
145 ' || search_class_join || '
146 ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC
148 ' || opac_visibility_join || '
149 ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC
151 ' -- sic, repeat the order by clause in the outer select too
153 query, search_class, headline_opts,
154 visibility_org, query_limit, normalization, plain_query
158 -- buoyant AND chosen class = match class
159 -- chosen field = match field
166 $f$ LANGUAGE plpgsql ROWS 10;