From: Chris Sharp Date: Tue, 24 Jan 2017 01:29:34 +0000 (-0500) Subject: we already have 0740 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=d0226833bf040e6887111366e7cc93a28e6d7434;p=evergreen%2Fpines.git we already have 0740 --- diff --git a/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql b/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql index ecccf41409..8f3f907354 100644 --- a/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql +++ b/Open-ILS/src/sql/Pg/version-upgrade/2.3.0-2.3.1-upgrade-db.sql @@ -3,136 +3,136 @@ BEGIN; INSERT INTO config.upgrade_log (version, applied_to) VALUES ('2.3.1', :eg_version); -SELECT evergreen.upgrade_deps_block_check('0740', :eg_version); - -CREATE OR REPLACE - FUNCTION metabib.suggest_browse_entries( - raw_query_text TEXT, -- actually typed by humans at the UI level - search_class TEXT, -- 'alias' or 'class' or 'class|field..', etc - headline_opts TEXT, -- markup options for ts_headline() - visibility_org INTEGER,-- null if you don't want opac visibility test - query_limit INTEGER,-- use in LIMIT clause of interal query - normalization INTEGER -- argument to TS_RANK_CD() - ) RETURNS TABLE ( - value TEXT, -- plain - field INTEGER, - buoyant_and_class_match BOOL, - field_match BOOL, - field_weight INTEGER, - rank REAL, - buoyant BOOL, - match TEXT -- marked up - ) AS $func$ -DECLARE - prepared_query_texts TEXT[]; - query TSQUERY; - plain_query TSQUERY; - opac_visibility_join TEXT; - search_class_join TEXT; - r_fields RECORD; -BEGIN - prepared_query_texts := metabib.autosuggest_prepare_tsquery(raw_query_text); - - query := TO_TSQUERY('keyword', prepared_query_texts[1]); - plain_query := TO_TSQUERY('keyword', prepared_query_texts[2]); - - visibility_org := NULLIF(visibility_org,-1); - IF visibility_org IS NOT NULL THEN - opac_visibility_join := ' - JOIN asset.opac_visible_copies aovc ON ( - aovc.record = x.source AND - aovc.circ_lib IN (SELECT id FROM actor.org_unit_descendants($4)) - )'; - ELSE - opac_visibility_join := ''; - END IF; - - -- The following determines whether we only provide suggestsons matching - -- the user's selected search_class, or whether we show other suggestions - -- too. The reason for MIN() is that for search_classes like - -- 'title|proper|uniform' you would otherwise get multiple rows. The - -- implication is that if title as a class doesn't have restrict, - -- nor does the proper field, but the uniform field does, you're going - -- to get 'false' for your overall evaluation of 'should we restrict?' - -- To invert that, change from MIN() to MAX(). - - SELECT - INTO r_fields - MIN(cmc.restrict::INT) AS restrict_class, - MIN(cmf.restrict::INT) AS restrict_field - FROM metabib.search_class_to_registered_components(search_class) - AS _registered (field_class TEXT, field INT) - JOIN - config.metabib_class cmc ON (cmc.name = _registered.field_class) - LEFT JOIN - config.metabib_field cmf ON (cmf.id = _registered.field); - - -- evaluate 'should we restrict?' - IF r_fields.restrict_field::BOOL OR r_fields.restrict_class::BOOL THEN - search_class_join := ' - JOIN - metabib.search_class_to_registered_components($2) - AS _registered (field_class TEXT, field INT) ON ( - (_registered.field IS NULL AND - _registered.field_class = cmf.field_class) OR - (_registered.field = cmf.id) - ) - '; - ELSE - search_class_join := ' - LEFT JOIN - metabib.search_class_to_registered_components($2) - AS _registered (field_class TEXT, field INT) ON ( - _registered.field_class = cmc.name - ) - '; - END IF; - - RETURN QUERY EXECUTE ' -SELECT DISTINCT - x.value, - x.id, - x.push, - x.restrict, - x.weight, - x.ts_rank_cd, - x.buoyant, - TS_HEADLINE(value, $7, $3) - FROM (SELECT DISTINCT - mbe.value, - cmf.id, - cmc.buoyant AND _registered.field_class IS NOT NULL AS push, - _registered.field = cmf.id AS restrict, - cmf.weight, - TS_RANK_CD(mbe.index_vector, $1, $6), - cmc.buoyant, - mbedm.source - FROM metabib.browse_entry_def_map mbedm - JOIN (SELECT * FROM metabib.browse_entry WHERE index_vector @@ $1 LIMIT 10000) mbe ON (mbe.id = mbedm.entry) - JOIN config.metabib_field cmf ON (cmf.id = mbedm.def) - JOIN config.metabib_class cmc ON (cmf.field_class = cmc.name) - ' || search_class_join || ' - ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC - LIMIT 1000) AS x - ' || opac_visibility_join || ' - ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC - LIMIT $5 -' -- sic, repeat the order by clause in the outer select too - USING - query, search_class, headline_opts, - visibility_org, query_limit, normalization, plain_query - ; - - -- sort order: - -- buoyant AND chosen class = match class - -- chosen field = match field - -- field weight - -- rank - -- buoyancy - -- value itself - -END; -$func$ LANGUAGE PLPGSQL; +-- SELECT evergreen.upgrade_deps_block_check('0740', :eg_version); +-- +-- CREATE OR REPLACE +-- FUNCTION metabib.suggest_browse_entries( +-- raw_query_text TEXT, -- actually typed by humans at the UI level +-- search_class TEXT, -- 'alias' or 'class' or 'class|field..', etc +-- headline_opts TEXT, -- markup options for ts_headline() +-- visibility_org INTEGER,-- null if you don't want opac visibility test +-- query_limit INTEGER,-- use in LIMIT clause of interal query +-- normalization INTEGER -- argument to TS_RANK_CD() +-- ) RETURNS TABLE ( +-- value TEXT, -- plain +-- field INTEGER, +-- buoyant_and_class_match BOOL, +-- field_match BOOL, +-- field_weight INTEGER, +-- rank REAL, +-- buoyant BOOL, +-- match TEXT -- marked up +-- ) AS $func$ +-- DECLARE +-- prepared_query_texts TEXT[]; +-- query TSQUERY; +-- plain_query TSQUERY; +-- opac_visibility_join TEXT; +-- search_class_join TEXT; +-- r_fields RECORD; +-- BEGIN +-- prepared_query_texts := metabib.autosuggest_prepare_tsquery(raw_query_text); +-- +-- query := TO_TSQUERY('keyword', prepared_query_texts[1]); +-- plain_query := TO_TSQUERY('keyword', prepared_query_texts[2]); +-- +-- visibility_org := NULLIF(visibility_org,-1); +-- IF visibility_org IS NOT NULL THEN +-- opac_visibility_join := ' +-- JOIN asset.opac_visible_copies aovc ON ( +-- aovc.record = x.source AND +-- aovc.circ_lib IN (SELECT id FROM actor.org_unit_descendants($4)) +-- )'; +-- ELSE +-- opac_visibility_join := ''; +-- END IF; +-- +-- -- The following determines whether we only provide suggestsons matching +-- -- the user's selected search_class, or whether we show other suggestions +-- -- too. The reason for MIN() is that for search_classes like +-- -- 'title|proper|uniform' you would otherwise get multiple rows. The +-- -- implication is that if title as a class doesn't have restrict, +-- -- nor does the proper field, but the uniform field does, you're going +-- -- to get 'false' for your overall evaluation of 'should we restrict?' +-- -- To invert that, change from MIN() to MAX(). +-- +-- SELECT +-- INTO r_fields +-- MIN(cmc.restrict::INT) AS restrict_class, +-- MIN(cmf.restrict::INT) AS restrict_field +-- FROM metabib.search_class_to_registered_components(search_class) +-- AS _registered (field_class TEXT, field INT) +-- JOIN +-- config.metabib_class cmc ON (cmc.name = _registered.field_class) +-- LEFT JOIN +-- config.metabib_field cmf ON (cmf.id = _registered.field); +-- +-- -- evaluate 'should we restrict?' +-- IF r_fields.restrict_field::BOOL OR r_fields.restrict_class::BOOL THEN +-- search_class_join := ' +-- JOIN +-- metabib.search_class_to_registered_components($2) +-- AS _registered (field_class TEXT, field INT) ON ( +-- (_registered.field IS NULL AND +-- _registered.field_class = cmf.field_class) OR +-- (_registered.field = cmf.id) +-- ) +-- '; +-- ELSE +-- search_class_join := ' +-- LEFT JOIN +-- metabib.search_class_to_registered_components($2) +-- AS _registered (field_class TEXT, field INT) ON ( +-- _registered.field_class = cmc.name +-- ) +-- '; +-- END IF; +-- +-- RETURN QUERY EXECUTE ' +-- SELECT DISTINCT +-- x.value, +-- x.id, +-- x.push, +-- x.restrict, +-- x.weight, +-- x.ts_rank_cd, +-- x.buoyant, +-- TS_HEADLINE(value, $7, $3) +-- FROM (SELECT DISTINCT +-- mbe.value, +-- cmf.id, +-- cmc.buoyant AND _registered.field_class IS NOT NULL AS push, +-- _registered.field = cmf.id AS restrict, +-- cmf.weight, +-- TS_RANK_CD(mbe.index_vector, $1, $6), +-- cmc.buoyant, +-- mbedm.source +-- FROM metabib.browse_entry_def_map mbedm +-- JOIN (SELECT * FROM metabib.browse_entry WHERE index_vector @@ $1 LIMIT 10000) mbe ON (mbe.id = mbedm.entry) +-- JOIN config.metabib_field cmf ON (cmf.id = mbedm.def) +-- JOIN config.metabib_class cmc ON (cmf.field_class = cmc.name) +-- ' || search_class_join || ' +-- ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC +-- LIMIT 1000) AS x +-- ' || opac_visibility_join || ' +-- ORDER BY 3 DESC, 4 DESC NULLS LAST, 5 DESC, 6 DESC, 7 DESC, 1 ASC +-- LIMIT $5 +-- ' -- sic, repeat the order by clause in the outer select too +-- USING +-- query, search_class, headline_opts, +-- visibility_org, query_limit, normalization, plain_query +-- ; +-- +-- -- sort order: +-- -- buoyant AND chosen class = match class +-- -- chosen field = match field +-- -- field weight +-- -- rank +-- -- buoyancy +-- -- value itself +-- +-- END; +-- $func$ LANGUAGE PLPGSQL; SELECT evergreen.upgrade_deps_block_check('0742', :eg_version);