JBAS-1929 Catalog browse mattype sql repairs
authorBill Erickson <berickxx@gmail.com>
Thu, 28 Dec 2017 17:24:16 +0000 (12:24 -0500)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
Remove errant mattype filter on authority simple heading sub-filter in
the browse query.  Authority records don't have mattypes.

Improve speed of mattype filter by referencing
metabib.record_attr_vector_list directly instead of using the nested
record_attr view.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
KCLS/sql/schema/deploy/browse-mattype-filter.sql

index 45ca480..29cc151 100644 (file)
@@ -32,7 +32,6 @@ DECLARE
     forward_limit           INT;
     forward_to_pivot        INT;
     mbedm_mattype_filter  TEXT DEFAULT '';
-    mbeshm_mattype_filter TEXT DEFAULT '';
 BEGIN
     --ver1.1 updated with kmain-806
     -- Get search field int list with search_class
@@ -129,18 +128,16 @@ BEGIN
     IF item_type IS NOT NULL THEN
         mbedm_mattype_filter := $x$
             AND mbedm.source IN (
-                SELECT id FROM metabib.record_attr 
-                WHERE attrs-> 'mattype' = '$x$ || item_type || $x$'
+                -- NOTE joining directly to metabib.record_attr_vector_list
+                -- is considerably faster than using the record_attr view
+                -- for expansive queries like this.
+                SELECT vec.source
+                FROM metabib.record_attr_vector_list vec
+                JOIN config.coded_value_map ccvm
+                    ON (ccvm.ctype = 'mattype' AND ccvm.id = ANY (vec.vlist))
+                WHERE ccvm.code = '$x$ || item_type || $x$'
             )
         $x$;
-
-        mbeshm_mattype_filter := $x$
-            AND mbeshm.entry IN (
-                SELECT id FROM metabib.record_attr 
-                WHERE attrs-> 'mattype' = '$x$ || item_type || $x$'
-            )
-        $x$;
-
     END IF;
 
 create temporary table tmp_metabib_browse 
@@ -188,7 +185,7 @@ SELECT  mbe.id,
                             ash.atag = map.authority_field
                             AND map.metabib_field = ANY(' || quote_literal(search_field) || ')
                         )
-                  WHERE mbeshm.entry = mbe.id ' || mbeshm_mattype_filter || '
+                  WHERE mbeshm.entry = mbe.id
             )';
 
     END IF;