adding bib_level filter support
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 4 Apr 2008 03:56:23 +0000 (03:56 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 4 Apr 2008 03:56:23 +0000 (03:56 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@9217 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/OpenILS/Application/Storage/Publisher/metabib.pm
Open-ILS/src/sql/Pg/300.schema.staged_search.sql

index 9e06dc1..f244644 100644 (file)
@@ -2324,7 +2324,7 @@ sub staged_fts {
                die "No search arguments were passed to ".$self->api_name;
        }
 
-       my (@statuses,@types,@forms,@lang,@aud,@lit_form,@vformats);
+       my (@statuses,@types,@forms,@lang,@aud,@lit_form,@vformats,@bib_level);
 
        if ($args{available}) {
                @statuses = (0,7);
@@ -2360,6 +2360,11 @@ sub staged_fts {
                @types = @$t;
        }
 
+       if (my $b = $args{bib_level}) {
+               $b = [$b] if (!ref($b));
+               @bib_level = @$b;
+       }
+
        if (my $v = $args{vr_format}) {
                $v = [$v] if (!ref($v));
                @vformats = @$v;
@@ -2423,6 +2428,7 @@ sub staged_fts {
     my $param_types = '$${' . join(',', map { s/\$//go; $_ } @types) . '}$$';
     my $param_forms = '$${' . join(',', map { s/\$//go; $_ } @forms) . '}$$';
     my $param_vformats = '$${' . join(',', map { s/\$//go; $_ } @vformats) . '}$$';
+    my $param_bib_level = '$${' . join(',', map { s/\$//go; $_ } @bib_level) . '}$$';
        my $param_pref_lang = $args{preferred_language}; $param_pref_lang =~ s/\$//go; $param_pref_lang = '$$'.$param_pref_lang.'$$';
        my $param_pref_lang_multiplier = $args{preferred_language_weight}; $param_pref_lang_multiplier ||= 'NULL';
        my $param_sort = $args{'sort'}; $param_sort =~ s/\$//go; $param_sort = '$$'.$param_sort.'$$';
@@ -2446,6 +2452,7 @@ sub staged_fts {
                     $param_types,
                     $param_forms,
                     $param_vformats,
+                    $param_bib_level,
                     $param_pref_lang,
                     $param_pref_lang_multiplier,
                     $param_sort,
index 049a8dc..847a243 100644 (file)
@@ -59,6 +59,7 @@ CREATE OR REPLACE FUNCTION search.staged_fts (
     param_types     TEXT[],
     param_forms     TEXT[],
     param_vformats  TEXT[],
+    param_bib_level TEXT[],
     param_pref_lang TEXT,
     param_pref_lang_multiplier REAL,
     param_sort      TEXT,
@@ -333,6 +334,10 @@ BEGIN
         where_clause = where_clause || $$ AND mrd.vr_format IN ('$$ || array_to_string(param_vformats, $$','$$) || $$') $$;
     END IF;
 
+    IF param_bib_level IS NOT NULL AND array_upper(param_bib_level, 1) > 0 THEN
+        where_clause = where_clause || $$ AND mrd.bib_level IN ('$$ || array_to_string(param_bib_level, $$','$$) || $$') $$;
+    END IF;
+
     core_rel_query := select_clause || from_clause || where_clause ||
                         ' GROUP BY 1 ORDER BY 4' || CASE WHEN sort_desc THEN ' DESC' ELSE ' ASC' END || ';';
     --RAISE NOTICE 'Base Query:  %', core_rel_query;